From 0f5d89e82340278ed3d7d50029f37cab2c41a57e Mon Sep 17 00:00:00 2001 From: Apple Date: Thu, 4 Oct 2018 22:52:30 +0000 Subject: [PATCH] ICU-62107.0.1.tar.gz --- ICU.plist | 6 +- LICENSE | 35 +- cldrFiles/plurals.xml | 10 +- cldrFiles/supplementalData.xml | 663 +- crosshostpatchconfig.txt | 4 +- emojiData/charClasses.txt | 6 +- emojiData/lineClasses.txt | 2 +- icuSources/Doxyfile.in | 2 +- icuSources/Makefile.in | 8 +- icuSources/acinclude.m4 | 6 +- .../Build.Windows.ProjectConfiguration.props | 129 + ...ild.Windows.UWP.ProjectConfiguration.props | 41 + .../Windows.CopyUnicodeHeaderFiles.targets | 27 + icuSources/allinone/allinone.sln | 132 +- icuSources/common/Makefile.in | 7 +- icuSources/common/Makefile.local | 8 +- icuSources/common/aaplbfct.cpp | 2 +- icuSources/common/bmpset.cpp | 112 +- icuSources/common/bmpset.h | 15 +- icuSources/common/brkeng.cpp | 86 +- icuSources/common/brkeng.h | 46 +- icuSources/common/brkiter.cpp | 49 +- icuSources/common/bytesinkutil.cpp | 123 + icuSources/common/bytesinkutil.h | 61 + icuSources/common/bytestream.cpp | 6 + icuSources/common/caniter.cpp | 2 +- icuSources/common/charstr.cpp | 12 + icuSources/common/charstr.h | 12 + icuSources/common/cmemory.cpp | 24 - icuSources/common/cmemory.h | 78 +- icuSources/common/common.vcxproj | 1616 +- icuSources/common/common.vcxproj.filters | 23 +- icuSources/common/common_uwp.vcxproj | 584 +- icuSources/common/cstring.h | 18 - icuSources/common/dictbe.cpp | 84 +- icuSources/common/dictbe.h | 53 +- icuSources/common/edits.cpp | 629 +- icuSources/common/filteredbrk.cpp | 7 +- icuSources/common/filterednormalizer2.cpp | 73 + icuSources/common/hash.h | 18 +- icuSources/common/listformatter.cpp | 2 +- icuSources/common/loadednormalizer2impl.cpp | 4 +- icuSources/common/localsvc.cpp | 2 +- icuSources/common/locavailable.cpp | 6 +- icuSources/common/locdispnames.cpp | 8 +- icuSources/common/locdspnm.cpp | 5 +- icuSources/common/loclikely.cpp | 4 +- icuSources/common/locmap.cpp | 72 +- icuSources/common/norm2_nfc_data.h | 2051 +- icuSources/common/norm2allmodes.h | 54 +- icuSources/common/normalizer2.cpp | 66 +- icuSources/common/normalizer2impl.cpp | 1676 +- icuSources/common/normalizer2impl.h | 304 +- icuSources/common/propname_data.h | 1744 +- icuSources/common/putil.cpp | 159 +- icuSources/common/putilimp.h | 59 +- icuSources/common/rbbi.cpp | 1398 +- icuSources/common/rbbi57.cpp | 1886 + icuSources/common/rbbi57.h | 762 + icuSources/common/rbbi_cache.cpp | 658 + icuSources/common/rbbi_cache.h | 203 + icuSources/common/rbbidata.cpp | 105 +- icuSources/common/rbbidata.h | 39 +- icuSources/common/rbbidata57.cpp | 305 + icuSources/common/rbbidata57.h | 158 + icuSources/common/rbbirb.cpp | 171 +- icuSources/common/rbbirb.h | 38 +- icuSources/common/rbbirb57.cpp | 314 + icuSources/common/rbbirb57.h | 171 + icuSources/common/rbbiscan.cpp | 54 +- icuSources/common/rbbiscan57.cpp | 1280 + icuSources/common/rbbiscan57.h | 168 + icuSources/common/rbbisetb.cpp | 141 +- icuSources/common/rbbisetb.h | 25 +- icuSources/common/rbbisetb57.cpp | 695 + icuSources/common/rbbisetb57.h | 138 + icuSources/common/rbbistbl57.cpp | 255 + icuSources/common/rbbitblb.cpp | 453 +- icuSources/common/rbbitblb.h | 92 +- icuSources/common/rbbitblb57.cpp | 1259 + icuSources/common/rbbitblb57.h | 109 + icuSources/common/rbtok.cpp | 22 +- icuSources/common/rbtok.h | 28 +- icuSources/common/serv.cpp | 3 +- icuSources/common/sharedobject.cpp | 69 +- icuSources/common/sharedobject.h | 116 +- icuSources/common/sprpimpl.h | 1 - icuSources/common/static_unicode_sets.cpp | 222 + icuSources/common/static_unicode_sets.h | 119 + icuSources/common/ualoc.cpp | 16 +- icuSources/common/ubidi.cpp | 7 +- icuSources/common/ubidi_props.cpp | 105 +- icuSources/common/ubidi_props.h | 28 +- icuSources/common/ubidi_props_data.h | 1419 +- icuSources/common/ubidiimp.h | 2 - icuSources/common/ubrk.cpp | 10 + icuSources/common/ucase.cpp | 221 +- icuSources/common/ucase.h | 65 +- icuSources/common/ucase_props_data.h | 1820 +- icuSources/common/ucasemap.cpp | 749 +- icuSources/common/ucasemap_imp.h | 95 +- .../common/ucasemap_titlecase_brkiter.cpp | 49 +- icuSources/common/uchar.cpp | 13 +- icuSources/common/uchar_props_data.h | 11205 +-- icuSources/common/ucharstriebuilder.cpp | 2 +- icuSources/common/ucln_cmn.h | 4 +- icuSources/common/ucmndata.cpp | 6 +- icuSources/common/ucmndata.h | 6 +- icuSources/common/ucnv2022.cpp | 4 +- icuSources/common/ucnv_bld.cpp | 11 +- icuSources/common/ucnv_bld.h | 3 + icuSources/common/ucnv_ct.cpp | 3 +- icuSources/common/ucnv_err.cpp | 32 +- icuSources/common/ucnv_lmb.cpp | 8 +- icuSources/common/ucnv_u16.cpp | 14 +- icuSources/common/ucnv_u32.cpp | 8 +- icuSources/common/ucnv_u8.cpp | 330 +- icuSources/common/ucnvlat1.cpp | 13 +- icuSources/common/ucnvmbcs.cpp | 181 +- icuSources/common/ucurr.cpp | 399 +- icuSources/common/ucurrimp.h | 17 + icuSources/common/udata.cpp | 8 +- icuSources/common/uhash.cpp | 31 +- icuSources/common/uhash.h | 92 +- icuSources/common/uinvchar.cpp | 4 +- icuSources/common/ulist.cpp | 2 +- icuSources/common/uloc.cpp | 16 +- icuSources/common/uloc_tag.cpp | 6 +- icuSources/common/umapfile.cpp | 10 +- icuSources/common/umutex.cpp | 2 +- icuSources/common/unicode/brkiter.h | 59 +- icuSources/common/unicode/bytestream.h | 33 +- icuSources/common/unicode/bytestriebuilder.h | 3 +- icuSources/common/unicode/caniter.h | 4 +- icuSources/common/unicode/casemap.h | 201 +- icuSources/common/unicode/char16ptr.h | 96 +- icuSources/common/unicode/chariter.h | 2 +- icuSources/common/unicode/docmain.h | 4 +- icuSources/common/unicode/dtintrv.h | 2 +- icuSources/common/unicode/edits.h | 391 +- icuSources/common/unicode/filteredbrk.h | 38 +- icuSources/common/unicode/localpointer.h | 37 - icuSources/common/unicode/locid.h | 6 +- icuSources/common/unicode/normalizer2.h | 140 +- icuSources/common/unicode/parseerr.h | 4 +- icuSources/common/unicode/platform.h | 67 +- icuSources/common/unicode/putil.h | 6 +- icuSources/common/unicode/rbbi.h | 307 +- icuSources/common/unicode/resbund.h | 2 +- icuSources/common/unicode/schriter.h | 2 +- icuSources/common/unicode/simpleformatter.h | 10 + icuSources/common/unicode/stringoptions.h | 198 + icuSources/common/unicode/stringtriebuilder.h | 18 +- icuSources/common/unicode/ubidi.h | 2 +- icuSources/common/unicode/ubiditransform.h | 31 +- icuSources/common/unicode/ubrk.h | 54 +- icuSources/common/unicode/ucasemap.h | 53 +- icuSources/common/unicode/uchar.h | 74 +- icuSources/common/unicode/uclean.h | 18 +- icuSources/common/unicode/ucnv.h | 20 +- icuSources/common/unicode/ucnv_err.h | 12 +- icuSources/common/unicode/uconfig.h | 9 +- icuSources/common/unicode/ucurr.h | 13 + icuSources/common/unicode/udisplaycontext.h | 10 +- icuSources/common/unicode/umachine.h | 6 +- icuSources/common/unicode/uniset.h | 2 + icuSources/common/unicode/unistr.h | 83 +- icuSources/common/unicode/unorm.h | 16 +- icuSources/common/unicode/unorm2.h | 25 +- icuSources/common/unicode/urbtok.h | 142 +- icuSources/common/unicode/urename.h | 19 +- icuSources/common/unicode/ures.h | 16 +- icuSources/common/unicode/uscript.h | 19 +- icuSources/common/unicode/ushape.h | 2 +- icuSources/common/unicode/usprep.h | 10 +- icuSources/common/unicode/ustring.h | 46 +- icuSources/common/unicode/utext.h | 28 +- icuSources/common/unicode/utf.h | 34 +- icuSources/common/unicode/utf16.h | 132 +- icuSources/common/unicode/utf8.h | 276 +- icuSources/common/unicode/utf_old.h | 20 +- icuSources/common/unicode/utrace.h | 4 +- icuSources/common/unicode/utypes.h | 20 +- icuSources/common/unicode/uvernum.h | 28 +- icuSources/common/unicode/uversion.h | 10 +- icuSources/common/unifiedcache.cpp | 322 +- icuSources/common/unifiedcache.h | 212 +- icuSources/common/uniset_closure.cpp | 2 +- icuSources/common/uniset_props.cpp | 49 +- icuSources/common/unisetspan.cpp | 21 +- icuSources/common/unistr.cpp | 2 - icuSources/common/unistr_case.cpp | 22 +- .../common/unistr_titlecase_brkiter.cpp | 36 +- icuSources/common/uprops.cpp | 24 +- icuSources/common/uprops.h | 6 +- icuSources/common/urbtok.cpp | 182 +- icuSources/common/uresbund.cpp | 1 + icuSources/common/uscript_props.cpp | 9 +- icuSources/common/ushape.cpp | 6 +- icuSources/common/usprep.cpp | 6 +- icuSources/common/ustr_cnv.cpp | 3 +- icuSources/common/ustr_imp.h | 72 + icuSources/common/ustr_titlecase_brkiter.cpp | 199 +- icuSources/common/ustr_wcs.cpp | 2 +- icuSources/common/ustrcase.cpp | 369 +- icuSources/common/ustring.cpp | 158 + icuSources/common/ustrtrns.cpp | 669 +- icuSources/common/utext.cpp | 16 +- icuSources/common/utf_impl.cpp | 280 +- icuSources/common/util.h | 7 + icuSources/common/utrie.h | 2 +- icuSources/common/utrie2.cpp | 4 +- icuSources/common/utrie2.h | 38 +- icuSources/common/uts46.cpp | 19 +- icuSources/common/utypes.cpp | 4 +- icuSources/common/wintz.cpp | 28 +- icuSources/config.guess | 417 +- icuSources/config.sub | 134 +- icuSources/config/dist.mk | 30 +- icuSources/config/mh-mingw | 4 + icuSources/config/mh-mingw64 | 4 + icuSources/config/mh-solaris | 2 +- icuSources/configure | 69 +- icuSources/configure.ac | 26 +- icuSources/data/Makefile.in | 52 +- icuSources/data/brkitr/brkfiles.mk | 2 +- icuSources/data/brkitr/root.txt | 2 +- icuSources/data/brkitr/rules/char.txt | 76 +- icuSources/data/brkitr/rules/line.txt | 291 +- icuSources/data/brkitr/rules/line_fi.txt | 291 +- icuSources/data/brkitr/rules/line_loose.txt | 292 +- .../data/brkitr/rules/line_loose_cj.txt | 297 +- .../data/brkitr/rules/line_loose_fi.txt | 294 +- icuSources/data/brkitr/rules/line_normal.txt | 288 +- .../data/brkitr/rules/line_normal_cj.txt | 290 +- .../data/brkitr/rules/line_normal_fi.txt | 291 +- icuSources/data/brkitr/rules/sent.txt | 45 +- icuSources/data/brkitr/rules/sent_el.txt | 44 +- icuSources/data/brkitr/rules/title.txt | 34 +- icuSources/data/brkitr/rules/word.txt | 166 +- icuSources/data/brkitr/rules/word_POSIX.txt | 174 +- icuSources/data/brkitr/rules/word_fi_sv.txt | 165 +- icuSources/data/brkitr/zh_Hant.txt | 2 +- icuSources/data/build.xml | 1 + icuSources/data/cldr-icu-readme.txt | 23 +- icuSources/data/coll/af.txt | 2 +- icuSources/data/coll/am.txt | 2 +- icuSources/data/coll/ar.txt | 4 +- icuSources/data/coll/as.txt | 2 +- icuSources/data/coll/az.txt | 4 +- icuSources/data/coll/be.txt | 2 +- icuSources/data/coll/bg.txt | 2 +- icuSources/data/coll/bn.txt | 4 +- icuSources/data/coll/bs.txt | 4 +- icuSources/data/coll/bs_Cyrl.txt | 2 +- icuSources/data/coll/ca.txt | 2 +- icuSources/data/coll/chr.txt | 2 +- icuSources/data/coll/colfiles.mk | 13 +- icuSources/data/coll/collocal.mk | 4 +- icuSources/data/coll/cs.txt | 2 +- icuSources/data/coll/cy.txt | 2 +- icuSources/data/coll/da.txt | 13 +- icuSources/data/coll/de.txt | 4 +- icuSources/data/coll/de_AT.txt | 2 +- icuSources/data/coll/dsb.txt | 2 +- icuSources/data/coll/ee.txt | 2 +- icuSources/data/coll/el.txt | 2 +- icuSources/data/coll/en_US_POSIX.txt | 2 +- icuSources/data/coll/eo.txt | 2 +- icuSources/data/coll/es.txt | 6 +- icuSources/data/coll/et.txt | 2 +- icuSources/data/coll/fa.txt | 2 +- icuSources/data/coll/fa_AF.txt | 2 +- icuSources/data/coll/fi.txt | 6 +- icuSources/data/coll/fil.txt | 2 +- icuSources/data/coll/fo.txt | 4 +- icuSources/data/coll/fr_CA.txt | 2 +- icuSources/data/coll/gl.txt | 4 +- icuSources/data/coll/gu.txt | 2 +- icuSources/data/coll/ha.txt | 2 +- icuSources/data/coll/haw.txt | 2 +- icuSources/data/coll/he.txt | 4 +- icuSources/data/coll/hi.txt | 2 +- icuSources/data/coll/hr.txt | 4 +- icuSources/data/coll/hsb.txt | 2 +- icuSources/data/coll/hu.txt | 2 +- icuSources/data/coll/hy.txt | 2 +- icuSources/data/coll/ig.txt | 2 +- icuSources/data/coll/is.txt | 4 +- icuSources/data/coll/ja.txt | 6 +- icuSources/data/coll/ka.txt | 2 +- icuSources/data/coll/kk.txt | 2 +- icuSources/data/coll/kl.txt | 4 +- icuSources/data/coll/km.txt | 2 +- icuSources/data/coll/kn.txt | 4 +- icuSources/data/coll/ko.txt | 8 +- icuSources/data/coll/kok.txt | 2 +- icuSources/data/coll/ky.txt | 2 +- icuSources/data/coll/lkt.txt | 2 +- icuSources/data/coll/ln.txt | 4 +- icuSources/data/coll/lo.txt | 2 +- icuSources/data/coll/lt.txt | 2 +- icuSources/data/coll/lv.txt | 2 +- icuSources/data/coll/mk.txt | 2 +- icuSources/data/coll/ml.txt | 2 +- icuSources/data/coll/mn.txt | 2 +- icuSources/data/coll/mr.txt | 2 +- icuSources/data/coll/mt.txt | 2 +- icuSources/data/coll/my.txt | 2 +- icuSources/data/coll/nb.txt | 4 +- icuSources/data/coll/ne.txt | 2 +- icuSources/data/coll/nn.txt | 4 +- icuSources/data/coll/om.txt | 2 +- icuSources/data/coll/or.txt | 2 +- icuSources/data/coll/pa.txt | 2 +- icuSources/data/coll/pl.txt | 2 +- icuSources/data/coll/ps.txt | 2 +- icuSources/data/coll/ro.txt | 2 +- icuSources/data/coll/root.txt | 112 +- icuSources/data/coll/ru.txt | 2 +- icuSources/data/coll/se.txt | 4 +- icuSources/data/coll/si.txt | 4 +- icuSources/data/coll/sk.txt | 4 +- icuSources/data/coll/sl.txt | 2 +- icuSources/data/coll/smn.txt | 4 +- icuSources/data/coll/sq.txt | 2 +- icuSources/data/coll/sr.txt | 2 +- icuSources/data/coll/sr_Latn.txt | 4 +- icuSources/data/coll/sv.txt | 6 +- icuSources/data/coll/ta.txt | 2 +- icuSources/data/coll/te.txt | 2 +- icuSources/data/coll/th.txt | 2 +- icuSources/data/coll/tk.txt | 2 +- icuSources/data/coll/to.txt | 2 +- icuSources/data/coll/tr.txt | 4 +- icuSources/data/coll/ug.txt | 2 +- icuSources/data/coll/uk.txt | 2 +- icuSources/data/coll/ur.txt | 2 +- icuSources/data/coll/uz.txt | 2 +- icuSources/data/coll/vi.txt | 4 +- icuSources/data/coll/wo.txt | 17 + .../data/{rbnf/yue_CN.txt => coll/wuu.txt} | 4 +- icuSources/data/coll/yi.txt | 4 +- icuSources/data/coll/yo.txt | 2 +- icuSources/data/coll/yue.txt | 2 +- icuSources/data/coll/yue_CN.txt | 2 +- icuSources/data/coll/yue_Hans.txt | 2 +- icuSources/data/coll/zh.txt | 393 +- icuSources/data/curr/af.txt | 29 +- icuSources/data/curr/af_NA.txt | 2 +- icuSources/data/curr/agq.txt | 10 +- icuSources/data/curr/ak.txt | 10 +- icuSources/data/curr/am.txt | 46 +- icuSources/data/curr/ar.txt | 210 +- icuSources/data/curr/ar_AE.txt | 2 +- icuSources/data/curr/ar_DJ.txt | 2 +- icuSources/data/curr/ar_ER.txt | 2 +- icuSources/data/curr/ar_KM.txt | 11 + icuSources/data/curr/ar_LB.txt | 2 +- icuSources/data/curr/ar_SO.txt | 2 +- icuSources/data/curr/ar_SS.txt | 2 +- icuSources/data/curr/as.txt | 1369 +- icuSources/data/curr/asa.txt | 10 +- icuSources/data/curr/ast.txt | 20 +- icuSources/data/curr/az.txt | 28 +- icuSources/data/curr/az_Cyrl.txt | 2 +- icuSources/data/curr/az_Latn.txt | 2 +- icuSources/data/curr/bas.txt | 10 +- icuSources/data/curr/be.txt | 43 +- icuSources/data/curr/bem.txt | 2 +- icuSources/data/curr/bez.txt | 10 +- icuSources/data/curr/bg.txt | 29 +- icuSources/data/curr/bm.txt | 10 +- icuSources/data/curr/bn.txt | 81 +- icuSources/data/curr/bo.txt | 2 +- icuSources/data/curr/bo_IN.txt | 2 +- icuSources/data/curr/br.txt | 26 +- icuSources/data/curr/brx.txt | 10 +- icuSources/data/curr/bs.txt | 42 +- icuSources/data/curr/bs_Cyrl.txt | 20 +- icuSources/data/curr/bs_Latn.txt | 2 +- icuSources/data/curr/ca.txt | 29 +- icuSources/data/curr/ca_FR.txt | 2 +- icuSources/data/curr/ccp.txt | 1828 + icuSources/data/curr/ce.txt | 39 +- icuSources/data/curr/cgg.txt | 10 +- icuSources/data/curr/chr.txt | 35 +- icuSources/data/curr/ckb.txt | 8 +- icuSources/data/curr/cs.txt | 78 +- icuSources/data/curr/cy.txt | 845 +- icuSources/data/curr/da.txt | 44 +- icuSources/data/curr/dav.txt | 10 +- icuSources/data/curr/de.txt | 34 +- icuSources/data/curr/de_CH.txt | 24 +- icuSources/data/curr/de_LI.txt | 2 +- icuSources/data/curr/de_LU.txt | 2 +- icuSources/data/curr/dje.txt | 10 +- icuSources/data/curr/dsb.txt | 22 +- icuSources/data/curr/dua.txt | 2 +- icuSources/data/curr/dyo.txt | 6 +- icuSources/data/curr/dz.txt | 2 +- icuSources/data/curr/ebu.txt | 10 +- icuSources/data/curr/ee.txt | 227 +- icuSources/data/curr/el.txt | 59 +- icuSources/data/curr/en.txt | 32 +- icuSources/data/curr/en_001.txt | 2 +- icuSources/data/curr/en_150.txt | 2 +- icuSources/data/curr/en_AG.txt | 2 +- icuSources/data/curr/en_AI.txt | 2 +- icuSources/data/curr/en_AT.txt | 2 +- icuSources/data/curr/en_AU.txt | 10 +- icuSources/data/curr/en_BB.txt | 2 +- icuSources/data/curr/en_BE.txt | 2 +- icuSources/data/curr/en_BI.txt | 2 +- icuSources/data/curr/en_BM.txt | 2 +- icuSources/data/curr/en_BS.txt | 2 +- icuSources/data/curr/en_BW.txt | 2 +- icuSources/data/curr/en_BZ.txt | 2 +- icuSources/data/curr/en_CA.txt | 2 +- icuSources/data/curr/en_CC.txt | 2 +- icuSources/data/curr/en_CH.txt | 2 +- icuSources/data/curr/en_CK.txt | 2 +- icuSources/data/curr/en_CM.txt | 2 +- icuSources/data/curr/en_CX.txt | 2 +- icuSources/data/curr/en_CY.txt | 2 +- icuSources/data/curr/en_DE.txt | 2 +- icuSources/data/curr/en_DG.txt | 2 +- icuSources/data/curr/en_DK.txt | 2 +- icuSources/data/curr/en_DM.txt | 2 +- icuSources/data/curr/en_ER.txt | 2 +- icuSources/data/curr/en_FI.txt | 2 +- icuSources/data/curr/en_FJ.txt | 2 +- icuSources/data/curr/en_FK.txt | 2 +- icuSources/data/curr/en_FM.txt | 2 +- icuSources/data/curr/en_GB.txt | 20 +- icuSources/data/curr/en_GD.txt | 2 +- icuSources/data/curr/en_GG.txt | 2 +- icuSources/data/curr/en_GH.txt | 2 +- icuSources/data/curr/en_GI.txt | 2 +- icuSources/data/curr/en_GM.txt | 2 +- icuSources/data/curr/en_GY.txt | 2 +- icuSources/data/curr/en_HK.txt | 2 +- icuSources/data/curr/en_IE.txt | 2 +- icuSources/data/curr/en_IL.txt | 2 +- icuSources/data/curr/en_IM.txt | 2 +- icuSources/data/curr/en_IN.txt | 2 +- icuSources/data/curr/en_IO.txt | 2 +- icuSources/data/curr/en_JE.txt | 2 +- icuSources/data/curr/en_JM.txt | 2 +- icuSources/data/curr/en_KE.txt | 2 +- icuSources/data/curr/en_KI.txt | 2 +- icuSources/data/curr/en_KN.txt | 2 +- icuSources/data/curr/en_KY.txt | 2 +- icuSources/data/curr/en_LC.txt | 2 +- icuSources/data/curr/en_LR.txt | 2 +- icuSources/data/curr/en_LS.txt | 2 +- icuSources/data/curr/en_MG.txt | 2 +- icuSources/data/curr/en_MO.txt | 2 +- icuSources/data/curr/en_MS.txt | 2 +- icuSources/data/curr/en_MT.txt | 2 +- icuSources/data/curr/en_MU.txt | 2 +- icuSources/data/curr/en_MW.txt | 2 +- icuSources/data/curr/en_MY.txt | 2 +- icuSources/data/curr/en_NA.txt | 2 +- icuSources/data/curr/en_NF.txt | 2 +- icuSources/data/curr/en_NG.txt | 2 +- icuSources/data/curr/en_NL.txt | 2 +- icuSources/data/curr/en_NR.txt | 2 +- icuSources/data/curr/en_NU.txt | 2 +- icuSources/data/curr/en_NZ.txt | 2 +- icuSources/data/curr/en_PG.txt | 2 +- icuSources/data/curr/en_PH.txt | 4 +- icuSources/data/curr/en_PK.txt | 2 +- icuSources/data/curr/en_PN.txt | 2 +- icuSources/data/curr/en_PW.txt | 2 +- icuSources/data/curr/en_RW.txt | 2 +- icuSources/data/curr/en_SB.txt | 2 +- icuSources/data/curr/en_SC.txt | 2 +- icuSources/data/curr/en_SD.txt | 2 +- icuSources/data/curr/en_SE.txt | 2 +- icuSources/data/curr/en_SG.txt | 2 +- icuSources/data/curr/en_SH.txt | 2 +- icuSources/data/curr/en_SI.txt | 2 +- icuSources/data/curr/en_SL.txt | 2 +- icuSources/data/curr/en_SS.txt | 2 +- icuSources/data/curr/en_SX.txt | 2 +- icuSources/data/curr/en_SZ.txt | 2 +- icuSources/data/curr/en_TC.txt | 2 +- icuSources/data/curr/en_TK.txt | 2 +- icuSources/data/curr/en_TO.txt | 2 +- icuSources/data/curr/en_TT.txt | 2 +- icuSources/data/curr/en_TV.txt | 2 +- icuSources/data/curr/en_TZ.txt | 2 +- icuSources/data/curr/en_UG.txt | 2 +- icuSources/data/curr/en_VC.txt | 2 +- icuSources/data/curr/en_VG.txt | 2 +- icuSources/data/curr/en_VU.txt | 2 +- icuSources/data/curr/en_WS.txt | 2 +- icuSources/data/curr/en_ZA.txt | 2 +- icuSources/data/curr/en_ZM.txt | 2 +- icuSources/data/curr/en_ZW.txt | 2 +- icuSources/data/curr/eo.txt | 2 +- icuSources/data/curr/es.txt | 72 +- icuSources/data/curr/es_419.txt | 8 +- icuSources/data/curr/es_AR.txt | 2 +- icuSources/data/curr/es_BO.txt | 2 +- icuSources/data/curr/es_BR.txt | 2 +- icuSources/data/curr/es_BZ.txt | 2 +- icuSources/data/curr/es_CL.txt | 2 +- icuSources/data/curr/es_CO.txt | 2 +- icuSources/data/curr/es_CR.txt | 2 +- icuSources/data/curr/es_CU.txt | 2 +- icuSources/data/curr/es_DO.txt | 2 +- icuSources/data/curr/es_EC.txt | 2 +- icuSources/data/curr/es_GQ.txt | 4 +- icuSources/data/curr/es_GT.txt | 2 +- icuSources/data/curr/es_HN.txt | 2 +- icuSources/data/curr/es_MX.txt | 424 +- icuSources/data/curr/es_NI.txt | 2 +- icuSources/data/curr/es_PA.txt | 2 +- icuSources/data/curr/es_PE.txt | 2 +- icuSources/data/curr/es_PH.txt | 2 +- icuSources/data/curr/es_PR.txt | 2 +- icuSources/data/curr/es_PY.txt | 2 +- icuSources/data/curr/es_SV.txt | 2 +- icuSources/data/curr/es_US.txt | 64 +- icuSources/data/curr/es_UY.txt | 2 +- icuSources/data/curr/es_VE.txt | 2 +- icuSources/data/curr/et.txt | 32 +- icuSources/data/curr/eu.txt | 28 +- icuSources/data/curr/ewo.txt | 10 +- icuSources/data/curr/fa.txt | 53 +- icuSources/data/curr/fa_AF.txt | 2 +- icuSources/data/curr/ff.txt | 10 +- icuSources/data/curr/ff_GN.txt | 2 +- icuSources/data/curr/ff_MR.txt | 4 +- icuSources/data/curr/fi.txt | 69 +- icuSources/data/curr/fil.txt | 29 +- icuSources/data/curr/fo.txt | 37 +- icuSources/data/curr/fo_DK.txt | 2 +- icuSources/data/curr/fr.txt | 58 +- icuSources/data/curr/fr_BI.txt | 2 +- icuSources/data/curr/fr_CA.txt | 35 +- icuSources/data/curr/fr_CD.txt | 2 +- icuSources/data/curr/fr_DJ.txt | 2 +- icuSources/data/curr/fr_DZ.txt | 2 +- icuSources/data/curr/fr_GN.txt | 2 +- icuSources/data/curr/fr_HT.txt | 2 +- icuSources/data/curr/fr_KM.txt | 2 +- icuSources/data/curr/fr_LU.txt | 2 +- icuSources/data/curr/fr_MG.txt | 2 +- icuSources/data/curr/fr_MR.txt | 4 +- icuSources/data/curr/fr_MU.txt | 2 +- icuSources/data/curr/fr_RW.txt | 2 +- icuSources/data/curr/fr_SC.txt | 2 +- icuSources/data/curr/fr_SY.txt | 2 +- icuSources/data/curr/fr_TN.txt | 2 +- icuSources/data/curr/fr_VU.txt | 2 +- icuSources/data/curr/fur.txt | 2 +- icuSources/data/curr/fy.txt | 18 +- icuSources/data/curr/ga.txt | 534 +- icuSources/data/curr/gd.txt | 26 +- icuSources/data/curr/gl.txt | 37 +- icuSources/data/curr/gsw.txt | 18 +- icuSources/data/curr/gu.txt | 29 +- icuSources/data/curr/guz.txt | 10 +- icuSources/data/curr/gv.txt | 2 +- icuSources/data/curr/ha.txt | 10 +- icuSources/data/curr/ha_GH.txt | 2 +- icuSources/data/curr/haw.txt | 2 +- icuSources/data/curr/he.txt | 215 +- icuSources/data/curr/hi.txt | 42 +- icuSources/data/curr/hr.txt | 34 +- icuSources/data/curr/hr_BA.txt | 2 +- icuSources/data/curr/hsb.txt | 22 +- icuSources/data/curr/hu.txt | 29 +- icuSources/data/curr/hy.txt | 285 +- icuSources/data/curr/id.txt | 26 +- icuSources/data/curr/ig.txt | 2 +- icuSources/data/curr/ii.txt | 2 +- icuSources/data/curr/is.txt | 73 +- icuSources/data/curr/it.txt | 32 +- icuSources/data/curr/iu.txt | 2 +- icuSources/data/curr/ja.txt | 50 +- icuSources/data/curr/jgo.txt | 2 +- icuSources/data/curr/jmc.txt | 10 +- icuSources/data/curr/ka.txt | 28 +- icuSources/data/curr/kab.txt | 10 +- icuSources/data/curr/kam.txt | 10 +- icuSources/data/curr/kde.txt | 10 +- icuSources/data/curr/kea.txt | 16 +- icuSources/data/curr/khq.txt | 10 +- icuSources/data/curr/ki.txt | 10 +- icuSources/data/curr/kk.txt | 28 +- icuSources/data/curr/kkj.txt | 2 +- icuSources/data/curr/kl.txt | 2 +- icuSources/data/curr/kln.txt | 10 +- icuSources/data/curr/km.txt | 25 +- icuSources/data/curr/kn.txt | 55 +- icuSources/data/curr/ko.txt | 31 +- icuSources/data/curr/kok.txt | 82 +- icuSources/data/curr/ks.txt | 6 +- icuSources/data/curr/ksb.txt | 10 +- icuSources/data/curr/ksf.txt | 10 +- icuSources/data/curr/ksh.txt | 15 +- icuSources/data/curr/kw.txt | 2 +- icuSources/data/curr/ky.txt | 28 +- icuSources/data/curr/lag.txt | 10 +- icuSources/data/curr/lb.txt | 18 +- icuSources/data/curr/lg.txt | 10 +- icuSources/data/curr/lkt.txt | 2 +- icuSources/data/curr/ln.txt | 10 +- icuSources/data/curr/ln_AO.txt | 2 +- icuSources/data/curr/lo.txt | 25 +- icuSources/data/curr/lrc.txt | 6 +- icuSources/data/curr/lt.txt | 34 +- icuSources/data/curr/lu.txt | 10 +- icuSources/data/curr/luo.txt | 10 +- icuSources/data/curr/luy.txt | 10 +- icuSources/data/curr/lv.txt | 32 +- icuSources/data/curr/mas.txt | 10 +- icuSources/data/curr/mas_TZ.txt | 2 +- icuSources/data/curr/mer.txt | 10 +- icuSources/data/curr/mfe.txt | 10 +- icuSources/data/curr/mg.txt | 10 +- icuSources/data/curr/mgh.txt | 2 +- icuSources/data/curr/mgo.txt | 2 +- icuSources/data/curr/mk.txt | 111 +- icuSources/data/curr/ml.txt | 35 +- icuSources/data/curr/mn.txt | 41 +- icuSources/data/curr/mr.txt | 29 +- icuSources/data/curr/ms.txt | 55 +- icuSources/data/curr/ms_Arab.txt | 2 +- icuSources/data/curr/ms_Arab_BN.txt | 2 +- icuSources/data/curr/ms_BN.txt | 2 +- icuSources/data/curr/ms_SG.txt | 2 +- icuSources/data/curr/mt.txt | 30 +- icuSources/data/curr/mua.txt | 10 +- icuSources/data/curr/my.txt | 238 +- icuSources/data/curr/mzn.txt | 18 +- icuSources/data/curr/naq.txt | 10 +- icuSources/data/curr/nb.txt | 44 +- icuSources/data/curr/nd.txt | 10 +- icuSources/data/curr/nds.txt | 2 +- icuSources/data/curr/ne.txt | 31 +- icuSources/data/curr/nl.txt | 33 +- icuSources/data/curr/nl_AW.txt | 2 +- icuSources/data/curr/nl_BQ.txt | 2 +- icuSources/data/curr/nl_CW.txt | 2 +- icuSources/data/curr/nl_SR.txt | 2 +- icuSources/data/curr/nl_SX.txt | 2 +- icuSources/data/curr/nmg.txt | 10 +- icuSources/data/curr/nn.txt | 889 +- icuSources/data/curr/nnh.txt | 2 +- icuSources/data/curr/nus.txt | 2 +- icuSources/data/curr/nyn.txt | 10 +- icuSources/data/curr/om.txt | 2 +- icuSources/data/curr/om_KE.txt | 2 +- icuSources/data/curr/or.txt | 1369 +- icuSources/data/curr/os.txt | 2 +- icuSources/data/curr/os_RU.txt | 2 +- icuSources/data/curr/pa.txt | 29 +- icuSources/data/curr/pa_Arab.txt | 2 +- icuSources/data/curr/pa_Guru.txt | 2 +- icuSources/data/curr/pl.txt | 35 +- icuSources/data/curr/pool.res | Bin 171232 -> 178128 bytes icuSources/data/curr/ps.txt | 1365 +- icuSources/data/curr/pt.txt | 90 +- icuSources/data/curr/pt_AO.txt | 2 +- icuSources/data/curr/pt_CH.txt | 2 +- icuSources/data/curr/pt_CV.txt | 4 +- icuSources/data/curr/pt_GQ.txt | 2 +- icuSources/data/curr/pt_GW.txt | 2 +- icuSources/data/curr/pt_LU.txt | 2 +- icuSources/data/curr/pt_MO.txt | 2 +- icuSources/data/curr/pt_MZ.txt | 2 +- icuSources/data/curr/pt_PT.txt | 456 +- icuSources/data/curr/pt_ST.txt | 6 +- icuSources/data/curr/pt_TL.txt | 2 +- icuSources/data/curr/qu.txt | 2 +- icuSources/data/curr/qu_BO.txt | 2 +- icuSources/data/curr/qu_EC.txt | 2 +- icuSources/data/curr/resfiles.mk | 159 +- icuSources/data/curr/reslocal.mk | 4 +- icuSources/data/curr/rm.txt | 10 +- icuSources/data/curr/rn.txt | 10 +- icuSources/data/curr/ro.txt | 37 +- icuSources/data/curr/ro_MD.txt | 2 +- icuSources/data/curr/rof.txt | 10 +- icuSources/data/curr/root.txt | 8 +- icuSources/data/curr/ru.txt | 362 +- icuSources/data/curr/ru_BY.txt | 4 +- icuSources/data/curr/ru_KG.txt | 4 +- icuSources/data/curr/ru_KZ.txt | 4 +- icuSources/data/curr/ru_MD.txt | 4 +- icuSources/data/curr/rw.txt | 2 +- icuSources/data/curr/rwk.txt | 10 +- icuSources/data/curr/sah.txt | 2 +- icuSources/data/curr/saq.txt | 10 +- icuSources/data/curr/sbp.txt | 10 +- icuSources/data/curr/se.txt | 2 +- icuSources/data/curr/se_SE.txt | 2 +- icuSources/data/curr/seh.txt | 10 +- icuSources/data/curr/ses.txt | 10 +- icuSources/data/curr/sg.txt | 10 +- icuSources/data/curr/shi.txt | 10 +- icuSources/data/curr/shi_Latn.txt | 10 +- icuSources/data/curr/shi_Tfng.txt | 2 +- icuSources/data/curr/si.txt | 28 +- icuSources/data/curr/sk.txt | 1210 +- icuSources/data/curr/sl.txt | 101 +- icuSources/data/curr/smn.txt | 2 +- icuSources/data/curr/sn.txt | 10 +- icuSources/data/curr/so.txt | 2 +- icuSources/data/curr/so_DJ.txt | 2 +- icuSources/data/curr/so_ET.txt | 2 +- icuSources/data/curr/so_KE.txt | 2 +- icuSources/data/curr/sq.txt | 84 +- icuSources/data/curr/sq_MK.txt | 2 +- icuSources/data/curr/sr.txt | 46 +- icuSources/data/curr/sr_Cyrl.txt | 2 +- icuSources/data/curr/sr_Latn.txt | 46 +- icuSources/data/curr/supplementalData.txt | 53 + icuSources/data/curr/sv.txt | 28 +- icuSources/data/curr/sw.txt | 555 +- icuSources/data/curr/sw_CD.txt | 6 +- icuSources/data/curr/sw_UG.txt | 2 +- icuSources/data/curr/ta.txt | 29 +- icuSources/data/curr/ta_LK.txt | 2 +- icuSources/data/curr/ta_MY.txt | 2 +- icuSources/data/curr/ta_SG.txt | 2 +- icuSources/data/curr/te.txt | 34 +- icuSources/data/curr/teo.txt | 10 +- icuSources/data/curr/teo_KE.txt | 2 +- icuSources/data/curr/tg.txt | 82 +- icuSources/data/curr/th.txt | 30 +- icuSources/data/curr/ti.txt | 2 +- icuSources/data/curr/ti_ER.txt | 2 +- icuSources/data/curr/tk.txt | 198 +- icuSources/data/curr/to.txt | 7 +- icuSources/data/curr/tr.txt | 34 +- icuSources/data/curr/tt.txt | 85 + icuSources/data/curr/twq.txt | 10 +- icuSources/data/curr/tzm.txt | 10 +- icuSources/data/curr/ug.txt | 18 +- icuSources/data/curr/uk.txt | 81 +- icuSources/data/curr/ur.txt | 29 +- icuSources/data/curr/ur_IN.txt | 2 +- icuSources/data/curr/uz.txt | 29 +- icuSources/data/curr/uz_Arab.txt | 2 +- icuSources/data/curr/uz_Cyrl.txt | 2 +- icuSources/data/curr/uz_Latn.txt | 2 +- icuSources/data/curr/vai.txt | 15 +- icuSources/data/curr/vai_Latn.txt | 10 +- icuSources/data/curr/vai_Vaii.txt | 2 +- icuSources/data/curr/vi.txt | 30 +- icuSources/data/curr/vun.txt | 10 +- icuSources/data/curr/wae.txt | 2 +- icuSources/data/curr/wo.txt | 92 + icuSources/data/curr/wuu.txt | 5 + icuSources/data/curr/xog.txt | 10 +- icuSources/data/curr/yav.txt | 2 +- icuSources/data/curr/yi.txt | 2 +- icuSources/data/curr/yo.txt | 10 +- icuSources/data/curr/yo_BJ.txt | 10 +- icuSources/data/curr/yue.txt | 25 +- icuSources/data/curr/yue_Hans.txt | 25 +- icuSources/data/curr/yue_Hant.txt | 2 +- icuSources/data/curr/zgh.txt | 10 +- icuSources/data/curr/zh.txt | 29 +- icuSources/data/curr/zh_Hans.txt | 2 +- icuSources/data/curr/zh_Hans_HK.txt | 5 +- icuSources/data/curr/zh_Hans_MO.txt | 5 +- icuSources/data/curr/zh_Hans_SG.txt | 5 +- icuSources/data/curr/zh_Hant.txt | 35 +- icuSources/data/curr/zh_Hant_HK.txt | 34 +- icuSources/data/curr/zh_Hant_MO.txt | 2 +- icuSources/data/curr/zu.txt | 28 +- icuSources/data/icu-coll-deprecates.xml | 3 + icuSources/data/icu-config.xml | 14 +- icuSources/data/icu-locale-deprecates.xml | 2 + icuSources/data/icu4j-readme.txt | 7 +- icuSources/data/in/base_in/nfc.nrm | Bin 35260 -> 35784 bytes icuSources/data/in/base_in/nfkc.nrm | Bin 54160 -> 54660 bytes icuSources/data/in/base_in/nfkc_cf.nrm | Bin 51864 -> 52584 bytes icuSources/data/in/base_in/ubidi.icu | Bin 24648 -> 25756 bytes icuSources/data/in/base_in/ucase.icu | Bin 28188 -> 28306 bytes icuSources/data/in/base_in/uprops.icu | Bin 126792 -> 130080 bytes icuSources/data/in/base_in/uts46.nrm | Bin 61060 -> 61652 bytes .../data/in/coll/ucadata-implicithan.icu | Bin 175244 -> 178456 bytes icuSources/data/in/coll/ucadata-unihan.icu | Bin 515968 -> 519212 bytes icuSources/data/in/nfc.nrm | Bin 35260 -> 35784 bytes icuSources/data/in/nfkc.nrm | Bin 54160 -> 54660 bytes icuSources/data/in/nfkc_cf.nrm | Bin 51864 -> 52584 bytes icuSources/data/in/pnames.icu | Bin 37595 -> 38540 bytes icuSources/data/in/ubidi.icu | Bin 24904 -> 26012 bytes icuSources/data/in/ucase.icu | Bin 28244 -> 28362 bytes icuSources/data/in/unames.icu | Bin 264500 -> 269616 bytes icuSources/data/in/uprops.icu | Bin 127688 -> 130952 bytes icuSources/data/in/uts46.nrm | Bin 61060 -> 61652 bytes icuSources/data/lang/af.txt | 40 +- icuSources/data/lang/agq.txt | 2 +- icuSources/data/lang/ak.txt | 2 +- icuSources/data/lang/am.txt | 20 +- icuSources/data/lang/ar.txt | 40 +- icuSources/data/lang/ar_EG.txt | 2 +- icuSources/data/lang/ar_LY.txt | 2 +- icuSources/data/lang/ar_SA.txt | 4 +- icuSources/data/lang/as.txt | 556 +- icuSources/data/lang/asa.txt | 2 +- icuSources/data/lang/ast.txt | 3 +- icuSources/data/lang/az.txt | 20 +- icuSources/data/lang/az_Cyrl.txt | 2 +- icuSources/data/lang/az_Latn.txt | 2 +- icuSources/data/lang/bas.txt | 2 +- icuSources/data/lang/be.txt | 25 +- icuSources/data/lang/bem.txt | 2 +- icuSources/data/lang/bez.txt | 2 +- icuSources/data/lang/bg.txt | 36 +- icuSources/data/lang/bm.txt | 2 +- icuSources/data/lang/bn.txt | 74 +- icuSources/data/lang/bn_IN.txt | 2 +- icuSources/data/lang/bo.txt | 2 +- icuSources/data/lang/br.txt | 109 +- icuSources/data/lang/brx.txt | 2 +- icuSources/data/lang/bs.txt | 62 +- icuSources/data/lang/bs_Cyrl.txt | 58 +- icuSources/data/lang/bs_Latn.txt | 2 +- icuSources/data/lang/ca.txt | 47 +- icuSources/data/lang/ccp.txt | 857 + icuSources/data/lang/ce.txt | 184 +- icuSources/data/lang/cgg.txt | 2 +- icuSources/data/lang/chr.txt | 14 +- icuSources/data/lang/ckb.txt | 8 +- icuSources/data/lang/cs.txt | 19 +- icuSources/data/lang/cy.txt | 56 +- icuSources/data/lang/da.txt | 35 +- icuSources/data/lang/dav.txt | 2 +- icuSources/data/lang/de.txt | 12 +- icuSources/data/lang/de_AT.txt | 2 +- icuSources/data/lang/de_CH.txt | 2 +- icuSources/data/lang/de_LU.txt | 2 +- icuSources/data/lang/dje.txt | 2 +- icuSources/data/lang/dsb.txt | 2 +- icuSources/data/lang/dua.txt | 2 +- icuSources/data/lang/dyo.txt | 2 +- icuSources/data/lang/dz.txt | 2 +- icuSources/data/lang/ebu.txt | 2 +- icuSources/data/lang/ee.txt | 2 +- icuSources/data/lang/el.txt | 180 +- icuSources/data/lang/en.txt | 17 +- icuSources/data/lang/en_001.txt | 2 +- icuSources/data/lang/en_150.txt | 2 +- icuSources/data/lang/en_AG.txt | 2 +- icuSources/data/lang/en_AI.txt | 2 +- icuSources/data/lang/en_AT.txt | 2 +- icuSources/data/lang/en_AU.txt | 8 +- icuSources/data/lang/en_BB.txt | 2 +- icuSources/data/lang/en_BE.txt | 2 +- icuSources/data/lang/en_BM.txt | 2 +- icuSources/data/lang/en_BS.txt | 2 +- icuSources/data/lang/en_BW.txt | 2 +- icuSources/data/lang/en_BZ.txt | 2 +- icuSources/data/lang/en_CA.txt | 21 +- icuSources/data/lang/en_CC.txt | 2 +- icuSources/data/lang/en_CH.txt | 2 +- icuSources/data/lang/en_CK.txt | 2 +- icuSources/data/lang/en_CM.txt | 2 +- icuSources/data/lang/en_CX.txt | 2 +- icuSources/data/lang/en_CY.txt | 2 +- icuSources/data/lang/en_DE.txt | 2 +- icuSources/data/lang/en_DG.txt | 2 +- icuSources/data/lang/en_DK.txt | 2 +- icuSources/data/lang/en_DM.txt | 2 +- icuSources/data/lang/en_ER.txt | 2 +- icuSources/data/lang/en_FI.txt | 2 +- icuSources/data/lang/en_FJ.txt | 2 +- icuSources/data/lang/en_FK.txt | 2 +- icuSources/data/lang/en_FM.txt | 2 +- icuSources/data/lang/en_GB.txt | 29 +- icuSources/data/lang/en_GD.txt | 2 +- icuSources/data/lang/en_GG.txt | 2 +- icuSources/data/lang/en_GH.txt | 2 +- icuSources/data/lang/en_GI.txt | 2 +- icuSources/data/lang/en_GM.txt | 2 +- icuSources/data/lang/en_GY.txt | 2 +- icuSources/data/lang/en_HK.txt | 2 +- icuSources/data/lang/en_IE.txt | 2 +- icuSources/data/lang/en_IL.txt | 2 +- icuSources/data/lang/en_IM.txt | 2 +- icuSources/data/lang/en_IN.txt | 3 +- icuSources/data/lang/en_IO.txt | 2 +- icuSources/data/lang/en_JE.txt | 2 +- icuSources/data/lang/en_JM.txt | 2 +- icuSources/data/lang/en_KE.txt | 2 +- icuSources/data/lang/en_KI.txt | 2 +- icuSources/data/lang/en_KN.txt | 2 +- icuSources/data/lang/en_KY.txt | 2 +- icuSources/data/lang/en_LC.txt | 2 +- icuSources/data/lang/en_LR.txt | 2 +- icuSources/data/lang/en_LS.txt | 2 +- icuSources/data/lang/en_MG.txt | 2 +- icuSources/data/lang/en_MO.txt | 2 +- icuSources/data/lang/en_MS.txt | 2 +- icuSources/data/lang/en_MT.txt | 2 +- icuSources/data/lang/en_MU.txt | 2 +- icuSources/data/lang/en_MW.txt | 2 +- icuSources/data/lang/en_MY.txt | 2 +- icuSources/data/lang/en_NA.txt | 2 +- icuSources/data/lang/en_NF.txt | 2 +- icuSources/data/lang/en_NG.txt | 2 +- icuSources/data/lang/en_NL.txt | 2 +- icuSources/data/lang/en_NR.txt | 2 +- icuSources/data/lang/en_NU.txt | 2 +- icuSources/data/lang/en_NZ.txt | 2 +- icuSources/data/lang/en_PG.txt | 2 +- icuSources/data/lang/en_PH.txt | 2 +- icuSources/data/lang/en_PK.txt | 2 +- icuSources/data/lang/en_PN.txt | 2 +- icuSources/data/lang/en_PW.txt | 2 +- icuSources/data/lang/en_RW.txt | 2 +- icuSources/data/lang/en_SB.txt | 2 +- icuSources/data/lang/en_SC.txt | 2 +- icuSources/data/lang/en_SD.txt | 2 +- icuSources/data/lang/en_SE.txt | 2 +- icuSources/data/lang/en_SG.txt | 2 +- icuSources/data/lang/en_SH.txt | 2 +- icuSources/data/lang/en_SI.txt | 2 +- icuSources/data/lang/en_SL.txt | 2 +- icuSources/data/lang/en_SS.txt | 2 +- icuSources/data/lang/en_SX.txt | 2 +- icuSources/data/lang/en_SZ.txt | 2 +- icuSources/data/lang/en_TC.txt | 2 +- icuSources/data/lang/en_TK.txt | 2 +- icuSources/data/lang/en_TO.txt | 2 +- icuSources/data/lang/en_TT.txt | 2 +- icuSources/data/lang/en_TV.txt | 2 +- icuSources/data/lang/en_TZ.txt | 2 +- icuSources/data/lang/en_UG.txt | 2 +- icuSources/data/lang/en_VC.txt | 2 +- icuSources/data/lang/en_VG.txt | 2 +- icuSources/data/lang/en_VU.txt | 2 +- icuSources/data/lang/en_WS.txt | 2 +- icuSources/data/lang/en_ZA.txt | 2 +- icuSources/data/lang/en_ZM.txt | 2 +- icuSources/data/lang/en_ZW.txt | 2 +- icuSources/data/lang/eo.txt | 2 +- icuSources/data/lang/es.txt | 14 +- icuSources/data/lang/es_419.txt | 56 +- icuSources/data/lang/es_AR.txt | 2 +- icuSources/data/lang/es_BO.txt | 2 +- icuSources/data/lang/es_BR.txt | 2 +- icuSources/data/lang/es_BZ.txt | 2 +- icuSources/data/lang/es_CL.txt | 2 +- icuSources/data/lang/es_CO.txt | 2 +- icuSources/data/lang/es_CR.txt | 2 +- icuSources/data/lang/es_CU.txt | 2 +- icuSources/data/lang/es_DO.txt | 2 +- icuSources/data/lang/es_EC.txt | 2 +- icuSources/data/lang/es_GT.txt | 2 +- icuSources/data/lang/es_HN.txt | 2 +- icuSources/data/lang/es_MX.txt | 33 +- icuSources/data/lang/es_NI.txt | 2 +- icuSources/data/lang/es_PA.txt | 2 +- icuSources/data/lang/es_PE.txt | 2 +- icuSources/data/lang/es_PR.txt | 2 +- icuSources/data/lang/es_PY.txt | 2 +- icuSources/data/lang/es_SV.txt | 2 +- icuSources/data/lang/es_US.txt | 28 +- icuSources/data/lang/es_UY.txt | 2 +- icuSources/data/lang/es_VE.txt | 2 +- icuSources/data/lang/et.txt | 59 +- icuSources/data/lang/eu.txt | 67 +- icuSources/data/lang/ewo.txt | 2 +- icuSources/data/lang/fa.txt | 12 +- icuSources/data/lang/fa_AF.txt | 2 +- icuSources/data/lang/ff.txt | 2 +- icuSources/data/lang/fi.txt | 40 +- icuSources/data/lang/fil.txt | 78 +- icuSources/data/lang/fo.txt | 17 +- icuSources/data/lang/fr.txt | 26 +- icuSources/data/lang/fr_BE.txt | 2 +- icuSources/data/lang/fr_CA.txt | 16 +- icuSources/data/lang/fr_CH.txt | 2 +- icuSources/data/lang/fur.txt | 2 +- icuSources/data/lang/fy.txt | 4 +- icuSources/data/lang/ga.txt | 332 +- icuSources/data/lang/gd.txt | 152 +- icuSources/data/lang/gl.txt | 112 +- icuSources/data/lang/gsw.txt | 2 +- icuSources/data/lang/gu.txt | 49 +- icuSources/data/lang/guz.txt | 2 +- icuSources/data/lang/gv.txt | 2 +- icuSources/data/lang/ha.txt | 2 +- icuSources/data/lang/haw.txt | 2 +- icuSources/data/lang/he.txt | 29 +- icuSources/data/lang/hi.txt | 55 +- icuSources/data/lang/hr.txt | 10 +- icuSources/data/lang/hsb.txt | 2 +- icuSources/data/lang/hu.txt | 20 +- icuSources/data/lang/hy.txt | 65 +- icuSources/data/lang/id.txt | 17 +- icuSources/data/lang/ig.txt | 2 +- icuSources/data/lang/ii.txt | 2 +- icuSources/data/lang/is.txt | 24 +- icuSources/data/lang/it.txt | 9 +- icuSources/data/lang/iu.txt | 2 +- icuSources/data/lang/ja.txt | 7 +- icuSources/data/lang/jgo.txt | 2 +- icuSources/data/lang/jmc.txt | 2 +- icuSources/data/lang/ka.txt | 4 +- icuSources/data/lang/kab.txt | 2 +- icuSources/data/lang/kam.txt | 2 +- icuSources/data/lang/kde.txt | 2 +- icuSources/data/lang/kea.txt | 2 +- icuSources/data/lang/khq.txt | 2 +- icuSources/data/lang/ki.txt | 2 +- icuSources/data/lang/kk.txt | 25 +- icuSources/data/lang/kkj.txt | 2 +- icuSources/data/lang/kl.txt | 2 +- icuSources/data/lang/kln.txt | 2 +- icuSources/data/lang/km.txt | 33 +- icuSources/data/lang/kn.txt | 69 +- icuSources/data/lang/ko.txt | 12 +- icuSources/data/lang/kok.txt | 350 +- icuSources/data/lang/ks.txt | 2 +- icuSources/data/lang/ksb.txt | 2 +- icuSources/data/lang/ksf.txt | 2 +- icuSources/data/lang/ksh.txt | 2 +- icuSources/data/lang/kw.txt | 2 +- icuSources/data/lang/ky.txt | 46 +- icuSources/data/lang/lag.txt | 2 +- icuSources/data/lang/lb.txt | 2 +- icuSources/data/lang/lg.txt | 2 +- icuSources/data/lang/lkt.txt | 2 +- icuSources/data/lang/ln.txt | 2 +- icuSources/data/lang/lo.txt | 3 +- icuSources/data/lang/lrc.txt | 2 +- icuSources/data/lang/lt.txt | 11 +- icuSources/data/lang/lu.txt | 2 +- icuSources/data/lang/luo.txt | 2 +- icuSources/data/lang/luy.txt | 2 +- icuSources/data/lang/lv.txt | 39 +- icuSources/data/lang/mas.txt | 2 +- icuSources/data/lang/mer.txt | 2 +- icuSources/data/lang/mfe.txt | 2 +- icuSources/data/lang/mg.txt | 2 +- icuSources/data/lang/mgh.txt | 2 +- icuSources/data/lang/mgo.txt | 2 +- icuSources/data/lang/mk.txt | 39 +- icuSources/data/lang/ml.txt | 68 +- icuSources/data/lang/mn.txt | 208 +- icuSources/data/lang/mr.txt | 19 +- icuSources/data/lang/ms.txt | 86 +- icuSources/data/lang/ms_Arab.txt | 2 +- icuSources/data/lang/mt.txt | 4 +- icuSources/data/lang/mua.txt | 2 +- icuSources/data/lang/my.txt | 32 +- icuSources/data/lang/mzn.txt | 2 +- icuSources/data/lang/naq.txt | 2 +- icuSources/data/lang/nb.txt | 36 +- icuSources/data/lang/nd.txt | 2 +- icuSources/data/lang/nds.txt | 2 +- icuSources/data/lang/ne.txt | 40 +- icuSources/data/lang/nl.txt | 35 +- icuSources/data/lang/nmg.txt | 2 +- icuSources/data/lang/nn.txt | 114 +- icuSources/data/lang/nnh.txt | 2 +- icuSources/data/lang/nus.txt | 2 +- icuSources/data/lang/nyn.txt | 2 +- icuSources/data/lang/om.txt | 2 +- icuSources/data/lang/or.txt | 337 +- icuSources/data/lang/os.txt | 2 +- icuSources/data/lang/pa.txt | 14 +- icuSources/data/lang/pa_Arab.txt | 2 +- icuSources/data/lang/pa_Guru.txt | 2 +- icuSources/data/lang/pl.txt | 8 +- icuSources/data/lang/pool.res | Bin 108156 -> 113536 bytes icuSources/data/lang/ps.txt | 524 +- icuSources/data/lang/pt.txt | 52 +- icuSources/data/lang/pt_AO.txt | 2 +- icuSources/data/lang/pt_CH.txt | 2 +- icuSources/data/lang/pt_CV.txt | 2 +- icuSources/data/lang/pt_GQ.txt | 2 +- icuSources/data/lang/pt_GW.txt | 2 +- icuSources/data/lang/pt_LU.txt | 2 +- icuSources/data/lang/pt_MO.txt | 2 +- icuSources/data/lang/pt_MZ.txt | 2 +- icuSources/data/lang/pt_PT.txt | 49 +- icuSources/data/lang/pt_ST.txt | 2 +- icuSources/data/lang/pt_TL.txt | 2 +- icuSources/data/lang/qu.txt | 2 +- icuSources/data/lang/resfiles.mk | 139 +- icuSources/data/lang/reslocal.mk | 4 +- icuSources/data/lang/rm.txt | 2 +- icuSources/data/lang/rn.txt | 2 +- icuSources/data/lang/ro.txt | 22 +- icuSources/data/lang/ro_MD.txt | 2 +- icuSources/data/lang/rof.txt | 2 +- icuSources/data/lang/root.txt | 2 +- icuSources/data/lang/ru.txt | 45 +- icuSources/data/lang/rw.txt | 4 +- icuSources/data/lang/rwk.txt | 2 +- icuSources/data/lang/sah.txt | 2 +- icuSources/data/lang/saq.txt | 2 +- icuSources/data/lang/sbp.txt | 2 +- icuSources/data/lang/se.txt | 2 +- icuSources/data/lang/se_FI.txt | 2 +- icuSources/data/lang/seh.txt | 2 +- icuSources/data/lang/ses.txt | 2 +- icuSources/data/lang/sg.txt | 2 +- icuSources/data/lang/shi.txt | 2 +- icuSources/data/lang/shi_Latn.txt | 2 +- icuSources/data/lang/shi_Tfng.txt | 2 +- icuSources/data/lang/si.txt | 37 +- icuSources/data/lang/sk.txt | 32 +- icuSources/data/lang/sl.txt | 69 +- icuSources/data/lang/smn.txt | 2 +- icuSources/data/lang/sn.txt | 2 +- icuSources/data/lang/so.txt | 2 +- icuSources/data/lang/sq.txt | 24 +- icuSources/data/lang/sr.txt | 21 +- icuSources/data/lang/sr_Cyrl.txt | 2 +- icuSources/data/lang/sr_Cyrl_BA.txt | 2 +- icuSources/data/lang/sr_Cyrl_ME.txt | 2 +- icuSources/data/lang/sr_Cyrl_XK.txt | 2 +- icuSources/data/lang/sr_Latn.txt | 21 +- icuSources/data/lang/sr_Latn_BA.txt | 2 +- icuSources/data/lang/sr_Latn_ME.txt | 2 +- icuSources/data/lang/sr_Latn_XK.txt | 2 +- icuSources/data/lang/sv.txt | 38 +- icuSources/data/lang/sv_FI.txt | 2 +- icuSources/data/lang/sw.txt | 63 +- icuSources/data/lang/sw_CD.txt | 3 +- icuSources/data/lang/sw_KE.txt | 4 +- icuSources/data/lang/ta.txt | 11 +- icuSources/data/lang/te.txt | 117 +- icuSources/data/lang/teo.txt | 2 +- icuSources/data/lang/tg.txt | 39 +- icuSources/data/lang/th.txt | 45 +- icuSources/data/lang/ti.txt | 16 +- icuSources/data/lang/tk.txt | 562 +- icuSources/data/lang/to.txt | 15 +- icuSources/data/lang/tr.txt | 76 +- icuSources/data/lang/tt.txt | 191 + icuSources/data/lang/twq.txt | 2 +- icuSources/data/lang/tzm.txt | 2 +- icuSources/data/lang/ug.txt | 2 +- icuSources/data/lang/uk.txt | 63 +- icuSources/data/lang/ur.txt | 36 +- icuSources/data/lang/ur_IN.txt | 4 +- icuSources/data/lang/uz.txt | 41 +- icuSources/data/lang/uz_Arab.txt | 2 +- icuSources/data/lang/uz_Cyrl.txt | 2 +- icuSources/data/lang/uz_Latn.txt | 2 +- icuSources/data/lang/vai.txt | 2 +- icuSources/data/lang/vai_Latn.txt | 2 +- icuSources/data/lang/vai_Vaii.txt | 2 +- icuSources/data/lang/vi.txt | 27 +- icuSources/data/lang/vun.txt | 2 +- icuSources/data/lang/wae.txt | 2 +- icuSources/data/lang/wo.txt | 195 + icuSources/data/lang/wuu.txt | 5 + icuSources/data/lang/xog.txt | 2 +- icuSources/data/lang/yav.txt | 2 +- icuSources/data/lang/yi.txt | 4 +- icuSources/data/lang/yo.txt | 4 +- icuSources/data/lang/yo_BJ.txt | 2 +- icuSources/data/lang/yue.txt | 3 +- icuSources/data/lang/yue_Hans.txt | 3 +- icuSources/data/lang/yue_Hant.txt | 2 +- icuSources/data/lang/zgh.txt | 2 +- icuSources/data/lang/zh.txt | 128 +- icuSources/data/lang/zh_Hans.txt | 2 +- icuSources/data/lang/zh_Hant.txt | 54 +- icuSources/data/lang/zh_Hant_HK.txt | 15 +- icuSources/data/lang/zh_Hant_MO.txt | 2 +- icuSources/data/lang/zu.txt | 8 +- icuSources/data/locales/af.txt | 110 +- icuSources/data/locales/af_NA.txt | 2 +- icuSources/data/locales/af_ZA.txt | 2 +- icuSources/data/locales/agq.txt | 3 +- icuSources/data/locales/agq_CM.txt | 2 +- icuSources/data/locales/ak.txt | 12 +- icuSources/data/locales/ak_GH.txt | 2 +- icuSources/data/locales/am.txt | 225 +- icuSources/data/locales/am_ET.txt | 2 +- icuSources/data/locales/ar.txt | 794 +- icuSources/data/locales/ar_001.txt | 2 +- icuSources/data/locales/ar_AE.txt | 2 +- icuSources/data/locales/ar_BH.txt | 5 +- icuSources/data/locales/ar_DJ.txt | 5 +- icuSources/data/locales/ar_DZ.txt | 3 +- icuSources/data/locales/ar_EG.txt | 5 +- icuSources/data/locales/ar_EH.txt | 2 +- icuSources/data/locales/ar_ER.txt | 5 +- icuSources/data/locales/ar_IL.txt | 9 +- icuSources/data/locales/ar_IQ.txt | 7 +- icuSources/data/locales/ar_JO.txt | 5 +- icuSources/data/locales/ar_KM.txt | 9 +- icuSources/data/locales/ar_KW.txt | 5 +- icuSources/data/locales/ar_LB.txt | 4 +- icuSources/data/locales/ar_LY.txt | 23 +- icuSources/data/locales/ar_MA.txt | 7 +- icuSources/data/locales/ar_MR.txt | 4 +- icuSources/data/locales/ar_OM.txt | 5 +- icuSources/data/locales/ar_PS.txt | 5 +- icuSources/data/locales/ar_QA.txt | 5 +- icuSources/data/locales/ar_SA.txt | 24 +- icuSources/data/locales/ar_SD.txt | 5 +- icuSources/data/locales/ar_SO.txt | 4 +- icuSources/data/locales/ar_SS.txt | 5 +- icuSources/data/locales/ar_SY.txt | 5 +- icuSources/data/locales/ar_TD.txt | 5 +- icuSources/data/locales/ar_TN.txt | 3 +- icuSources/data/locales/ar_YE.txt | 5 +- icuSources/data/locales/as.txt | 1617 +- icuSources/data/locales/as_IN.txt | 2 +- icuSources/data/locales/asa.txt | 2 +- icuSources/data/locales/asa_TZ.txt | 2 +- icuSources/data/locales/ast.txt | 71 +- icuSources/data/locales/ast_ES.txt | 2 +- icuSources/data/locales/az.txt | 162 +- icuSources/data/locales/az_Cyrl.txt | 7 +- icuSources/data/locales/az_Cyrl_AZ.txt | 2 +- icuSources/data/locales/az_Latn.txt | 2 +- icuSources/data/locales/az_Latn_AZ.txt | 2 +- icuSources/data/locales/bas.txt | 3 +- icuSources/data/locales/bas_CM.txt | 2 +- icuSources/data/locales/be.txt | 126 +- icuSources/data/locales/be_BY.txt | 2 +- icuSources/data/locales/bem.txt | 2 +- icuSources/data/locales/bem_ZM.txt | 2 +- icuSources/data/locales/bez.txt | 2 +- icuSources/data/locales/bez_TZ.txt | 2 +- icuSources/data/locales/bg.txt | 310 +- icuSources/data/locales/bg_BG.txt | 2 +- icuSources/data/locales/bm.txt | 2 +- icuSources/data/locales/bm_ML.txt | 2 +- icuSources/data/locales/bn.txt | 828 +- icuSources/data/locales/bn_BD.txt | 2 +- icuSources/data/locales/bn_IN.txt | 2 +- icuSources/data/locales/bo.txt | 19 +- icuSources/data/locales/bo_CN.txt | 2 +- icuSources/data/locales/bo_IN.txt | 2 +- icuSources/data/locales/br.txt | 5418 +- icuSources/data/locales/br_FR.txt | 2 +- icuSources/data/locales/brx.txt | 7 +- icuSources/data/locales/brx_IN.txt | 2 +- icuSources/data/locales/bs.txt | 161 +- icuSources/data/locales/bs_Cyrl.txt | 58 +- icuSources/data/locales/bs_Cyrl_BA.txt | 2 +- icuSources/data/locales/bs_Latn.txt | 2 +- icuSources/data/locales/bs_Latn_BA.txt | 2 +- icuSources/data/locales/ca.txt | 215 +- icuSources/data/locales/ca_AD.txt | 2 +- icuSources/data/locales/ca_ES.txt | 2 +- icuSources/data/locales/ca_FR.txt | 2 +- icuSources/data/locales/ca_IT.txt | 2 +- icuSources/data/locales/ccp.txt | 1658 + icuSources/data/locales/ccp_BD.txt | 5 + icuSources/data/locales/ccp_IN.txt | 5 + icuSources/data/locales/ce.txt | 339 +- icuSources/data/locales/ce_RU.txt | 2 +- icuSources/data/locales/cgg.txt | 2 +- icuSources/data/locales/cgg_UG.txt | 2 +- icuSources/data/locales/chr.txt | 126 +- icuSources/data/locales/chr_US.txt | 2 +- icuSources/data/locales/ckb.txt | 5 +- icuSources/data/locales/ckb_IQ.txt | 2 +- icuSources/data/locales/ckb_IR.txt | 2 +- icuSources/data/locales/cs.txt | 3155 +- icuSources/data/locales/cs_CZ.txt | 2 +- icuSources/data/locales/cy.txt | 626 +- icuSources/data/locales/cy_GB.txt | 2 +- icuSources/data/locales/da.txt | 318 +- icuSources/data/locales/da_DK.txt | 2 +- icuSources/data/locales/da_GL.txt | 21 +- icuSources/data/locales/dav.txt | 2 +- icuSources/data/locales/dav_KE.txt | 2 +- icuSources/data/locales/de.txt | 629 +- icuSources/data/locales/de_AT.txt | 3 +- icuSources/data/locales/de_BE.txt | 2 +- icuSources/data/locales/de_CH.txt | 59 +- icuSources/data/locales/de_DE.txt | 2 +- icuSources/data/locales/de_IT.txt | 2 +- icuSources/data/locales/de_LI.txt | 3 +- icuSources/data/locales/de_LU.txt | 2 +- icuSources/data/locales/dje.txt | 3 +- icuSources/data/locales/dje_NE.txt | 2 +- icuSources/data/locales/dsb.txt | 3 +- icuSources/data/locales/dsb_DE.txt | 2 +- icuSources/data/locales/dua.txt | 3 +- icuSources/data/locales/dua_CM.txt | 2 +- icuSources/data/locales/dyo.txt | 3 +- icuSources/data/locales/dyo_SN.txt | 2 +- icuSources/data/locales/dz.txt | 9 +- icuSources/data/locales/dz_BT.txt | 2 +- icuSources/data/locales/ebu.txt | 2 +- icuSources/data/locales/ebu_KE.txt | 2 +- icuSources/data/locales/ee.txt | 232 +- icuSources/data/locales/ee_GH.txt | 2 +- icuSources/data/locales/ee_TG.txt | 2 +- icuSources/data/locales/el.txt | 872 +- icuSources/data/locales/el_CY.txt | 2 +- icuSources/data/locales/el_GR.txt | 2 +- icuSources/data/locales/en.txt | 32 +- icuSources/data/locales/en_001.txt | 9 +- icuSources/data/locales/en_150.txt | 9 +- icuSources/data/locales/en_AG.txt | 2 +- icuSources/data/locales/en_AI.txt | 2 +- icuSources/data/locales/en_AS.txt | 2 +- icuSources/data/locales/en_AT.txt | 2 +- icuSources/data/locales/en_AU.txt | 426 +- icuSources/data/locales/en_BB.txt | 2 +- icuSources/data/locales/en_BE.txt | 2 +- icuSources/data/locales/en_BI.txt | 2 +- icuSources/data/locales/en_BM.txt | 2 +- icuSources/data/locales/en_BS.txt | 2 +- icuSources/data/locales/en_BW.txt | 2 +- icuSources/data/locales/en_BZ.txt | 2 +- icuSources/data/locales/en_CA.txt | 174 +- icuSources/data/locales/en_CC.txt | 2 +- icuSources/data/locales/en_CH.txt | 2 +- icuSources/data/locales/en_CK.txt | 2 +- icuSources/data/locales/en_CM.txt | 2 +- icuSources/data/locales/en_CN.txt | 8 + icuSources/data/locales/en_CX.txt | 2 +- icuSources/data/locales/en_CY.txt | 2 +- icuSources/data/locales/en_DE.txt | 10 +- icuSources/data/locales/en_DG.txt | 2 +- icuSources/data/locales/en_DK.txt | 2 +- icuSources/data/locales/en_DM.txt | 2 +- icuSources/data/locales/en_ER.txt | 2 +- icuSources/data/locales/en_FI.txt | 3 +- icuSources/data/locales/en_FJ.txt | 2 +- icuSources/data/locales/en_FK.txt | 2 +- icuSources/data/locales/en_FM.txt | 2 +- icuSources/data/locales/en_FR.txt | 8 + icuSources/data/locales/en_GB.txt | 299 +- icuSources/data/locales/en_GD.txt | 2 +- icuSources/data/locales/en_GG.txt | 2 +- icuSources/data/locales/en_GH.txt | 2 +- icuSources/data/locales/en_GI.txt | 2 +- icuSources/data/locales/en_GM.txt | 2 +- icuSources/data/locales/en_GU.txt | 2 +- icuSources/data/locales/en_GY.txt | 2 +- icuSources/data/locales/en_HK.txt | 10 +- icuSources/data/locales/en_IE.txt | 10 +- icuSources/data/locales/en_IL.txt | 4 +- icuSources/data/locales/en_IM.txt | 2 +- icuSources/data/locales/en_IN.txt | 90 +- icuSources/data/locales/en_IO.txt | 2 +- icuSources/data/locales/en_JE.txt | 2 +- icuSources/data/locales/en_JM.txt | 2 +- icuSources/data/locales/en_JP.txt | 12 +- icuSources/data/locales/en_KE.txt | 2 +- icuSources/data/locales/en_KI.txt | 2 +- icuSources/data/locales/en_KN.txt | 2 +- icuSources/data/locales/en_KY.txt | 2 +- icuSources/data/locales/en_LC.txt | 2 +- icuSources/data/locales/en_LR.txt | 2 +- icuSources/data/locales/en_LS.txt | 2 +- icuSources/data/locales/en_MG.txt | 2 +- icuSources/data/locales/en_MH.txt | 2 +- icuSources/data/locales/en_MO.txt | 2 +- icuSources/data/locales/en_MP.txt | 2 +- icuSources/data/locales/en_MS.txt | 2 +- icuSources/data/locales/en_MT.txt | 2 +- icuSources/data/locales/en_MU.txt | 2 +- icuSources/data/locales/en_MW.txt | 2 +- icuSources/data/locales/en_MY.txt | 2 +- icuSources/data/locales/en_NA.txt | 2 +- icuSources/data/locales/en_NF.txt | 2 +- icuSources/data/locales/en_NG.txt | 2 +- icuSources/data/locales/en_NL.txt | 2 +- icuSources/data/locales/en_NR.txt | 2 +- icuSources/data/locales/en_NU.txt | 2 +- icuSources/data/locales/en_NZ.txt | 14 +- icuSources/data/locales/en_PG.txt | 2 +- icuSources/data/locales/en_PH.txt | 2 +- icuSources/data/locales/en_PK.txt | 2 +- icuSources/data/locales/en_PN.txt | 2 +- icuSources/data/locales/en_PR.txt | 2 +- icuSources/data/locales/en_PW.txt | 2 +- icuSources/data/locales/en_RW.txt | 2 +- icuSources/data/locales/en_SB.txt | 2 +- icuSources/data/locales/en_SC.txt | 2 +- icuSources/data/locales/en_SD.txt | 2 +- icuSources/data/locales/en_SE.txt | 3 +- icuSources/data/locales/en_SG.txt | 10 +- icuSources/data/locales/en_SH.txt | 2 +- icuSources/data/locales/en_SI.txt | 2 +- icuSources/data/locales/en_SL.txt | 2 +- icuSources/data/locales/en_SS.txt | 2 +- icuSources/data/locales/en_SX.txt | 2 +- icuSources/data/locales/en_SZ.txt | 2 +- icuSources/data/locales/en_TC.txt | 2 +- icuSources/data/locales/en_TK.txt | 2 +- icuSources/data/locales/en_TO.txt | 2 +- icuSources/data/locales/en_TT.txt | 2 +- icuSources/data/locales/en_TV.txt | 2 +- icuSources/data/locales/en_TW.txt | 1 + icuSources/data/locales/en_TZ.txt | 2 +- icuSources/data/locales/en_UG.txt | 2 +- icuSources/data/locales/en_UM.txt | 2 +- icuSources/data/locales/en_US.txt | 2 +- icuSources/data/locales/en_US_POSIX.txt | 9 +- icuSources/data/locales/en_VC.txt | 2 +- icuSources/data/locales/en_VG.txt | 2 +- icuSources/data/locales/en_VI.txt | 2 +- icuSources/data/locales/en_VU.txt | 2 +- icuSources/data/locales/en_WS.txt | 2 +- icuSources/data/locales/en_ZA.txt | 3 +- icuSources/data/locales/en_ZM.txt | 2 +- icuSources/data/locales/en_ZW.txt | 2 +- icuSources/data/locales/eo.txt | 3 +- icuSources/data/locales/es.txt | 840 +- icuSources/data/locales/es_419.txt | 548 +- icuSources/data/locales/es_AR.txt | 31 +- icuSources/data/locales/es_BO.txt | 20 +- icuSources/data/locales/es_BR.txt | 2 +- icuSources/data/locales/es_BZ.txt | 2 +- icuSources/data/locales/es_CA.txt | 1 + icuSources/data/locales/es_CL.txt | 3 +- icuSources/data/locales/es_CO.txt | 8 +- icuSources/data/locales/es_CR.txt | 5 +- icuSources/data/locales/es_CU.txt | 2 +- icuSources/data/locales/es_DO.txt | 4 +- icuSources/data/locales/es_EA.txt | 2 +- icuSources/data/locales/es_EC.txt | 2 +- icuSources/data/locales/es_ES.txt | 2 +- icuSources/data/locales/es_GQ.txt | 2 +- icuSources/data/locales/es_GT.txt | 17 +- icuSources/data/locales/es_HN.txt | 6 +- icuSources/data/locales/es_IC.txt | 2 +- icuSources/data/locales/es_MX.txt | 257 +- icuSources/data/locales/es_NI.txt | 4 +- icuSources/data/locales/es_PA.txt | 22 +- icuSources/data/locales/es_PE.txt | 4 +- icuSources/data/locales/es_PH.txt | 2 +- icuSources/data/locales/es_PR.txt | 2 +- icuSources/data/locales/es_PY.txt | 7 +- icuSources/data/locales/es_SV.txt | 5 +- icuSources/data/locales/es_US.txt | 269 +- icuSources/data/locales/es_UY.txt | 2 +- icuSources/data/locales/es_VE.txt | 16 +- icuSources/data/locales/et.txt | 472 +- icuSources/data/locales/et_EE.txt | 2 +- icuSources/data/locales/eu.txt | 341 +- icuSources/data/locales/eu_ES.txt | 2 +- icuSources/data/locales/ewo.txt | 3 +- icuSources/data/locales/ewo_CM.txt | 2 +- icuSources/data/locales/fa.txt | 443 +- icuSources/data/locales/fa_AF.txt | 2 +- icuSources/data/locales/fa_IR.txt | 2 +- icuSources/data/locales/ff.txt | 3 +- icuSources/data/locales/ff_CM.txt | 2 +- icuSources/data/locales/ff_GN.txt | 2 +- icuSources/data/locales/ff_MR.txt | 2 +- icuSources/data/locales/ff_SN.txt | 2 +- icuSources/data/locales/fi.txt | 623 +- icuSources/data/locales/fi_FI.txt | 2 +- icuSources/data/locales/fil.txt | 2650 +- icuSources/data/locales/fil_PH.txt | 2 +- icuSources/data/locales/fo.txt | 136 +- icuSources/data/locales/fo_DK.txt | 2 +- icuSources/data/locales/fo_FO.txt | 2 +- icuSources/data/locales/fr.txt | 819 +- icuSources/data/locales/fr_BE.txt | 2 +- icuSources/data/locales/fr_BF.txt | 2 +- icuSources/data/locales/fr_BI.txt | 2 +- icuSources/data/locales/fr_BJ.txt | 2 +- icuSources/data/locales/fr_BL.txt | 2 +- icuSources/data/locales/fr_CA.txt | 507 +- icuSources/data/locales/fr_CD.txt | 2 +- icuSources/data/locales/fr_CF.txt | 2 +- icuSources/data/locales/fr_CG.txt | 2 +- icuSources/data/locales/fr_CH.txt | 18 +- icuSources/data/locales/fr_CI.txt | 2 +- icuSources/data/locales/fr_CM.txt | 2 +- icuSources/data/locales/fr_DJ.txt | 2 +- icuSources/data/locales/fr_DZ.txt | 2 +- icuSources/data/locales/fr_FR.txt | 2 +- icuSources/data/locales/fr_GA.txt | 2 +- icuSources/data/locales/fr_GF.txt | 2 +- icuSources/data/locales/fr_GN.txt | 2 +- icuSources/data/locales/fr_GP.txt | 2 +- icuSources/data/locales/fr_GQ.txt | 2 +- icuSources/data/locales/fr_HT.txt | 2 +- icuSources/data/locales/fr_KM.txt | 2 +- icuSources/data/locales/fr_LU.txt | 3 +- icuSources/data/locales/fr_MA.txt | 3 +- icuSources/data/locales/fr_MC.txt | 2 +- icuSources/data/locales/fr_MF.txt | 2 +- icuSources/data/locales/fr_MG.txt | 2 +- icuSources/data/locales/fr_ML.txt | 2 +- icuSources/data/locales/fr_MQ.txt | 2 +- icuSources/data/locales/fr_MR.txt | 2 +- icuSources/data/locales/fr_MU.txt | 2 +- icuSources/data/locales/fr_NC.txt | 2 +- icuSources/data/locales/fr_NE.txt | 2 +- icuSources/data/locales/fr_PF.txt | 2 +- icuSources/data/locales/fr_PM.txt | 2 +- icuSources/data/locales/fr_RE.txt | 2 +- icuSources/data/locales/fr_RW.txt | 2 +- icuSources/data/locales/fr_SC.txt | 2 +- icuSources/data/locales/fr_SN.txt | 2 +- icuSources/data/locales/fr_SY.txt | 2 +- icuSources/data/locales/fr_TD.txt | 2 +- icuSources/data/locales/fr_TG.txt | 2 +- icuSources/data/locales/fr_TN.txt | 2 +- icuSources/data/locales/fr_VU.txt | 2 +- icuSources/data/locales/fr_WF.txt | 2 +- icuSources/data/locales/fr_YT.txt | 2 +- icuSources/data/locales/fur.txt | 3 +- icuSources/data/locales/fur_IT.txt | 2 +- icuSources/data/locales/fy.txt | 7 +- icuSources/data/locales/fy_NL.txt | 2 +- icuSources/data/locales/ga.txt | 162 +- icuSources/data/locales/ga_IE.txt | 2 +- icuSources/data/locales/gd.txt | 501 +- icuSources/data/locales/gd_GB.txt | 2 +- icuSources/data/locales/gl.txt | 462 +- icuSources/data/locales/gl_ES.txt | 2 +- icuSources/data/locales/gsw.txt | 3 +- icuSources/data/locales/gsw_CH.txt | 2 +- icuSources/data/locales/gsw_FR.txt | 2 +- icuSources/data/locales/gsw_LI.txt | 2 +- icuSources/data/locales/gu.txt | 1035 +- icuSources/data/locales/gu_IN.txt | 2 +- icuSources/data/locales/guz.txt | 2 +- icuSources/data/locales/guz_KE.txt | 2 +- icuSources/data/locales/gv.txt | 7 +- icuSources/data/locales/gv_IM.txt | 2 +- icuSources/data/locales/ha.txt | 3 +- icuSources/data/locales/ha_GH.txt | 2 +- icuSources/data/locales/ha_NE.txt | 14 +- icuSources/data/locales/ha_NG.txt | 2 +- icuSources/data/locales/haw.txt | 7 +- icuSources/data/locales/haw_US.txt | 2 +- icuSources/data/locales/he.txt | 745 +- icuSources/data/locales/he_IL.txt | 2 +- icuSources/data/locales/hi.txt | 528 +- icuSources/data/locales/hi_IN.txt | 2 +- icuSources/data/locales/hr.txt | 309 +- icuSources/data/locales/hr_BA.txt | 2 +- icuSources/data/locales/hr_HR.txt | 2 +- icuSources/data/locales/hsb.txt | 3 +- icuSources/data/locales/hsb_DE.txt | 2 +- icuSources/data/locales/hu.txt | 523 +- icuSources/data/locales/hu_HU.txt | 2 +- icuSources/data/locales/hy.txt | 205 +- icuSources/data/locales/hy_AM.txt | 2 +- icuSources/data/locales/id.txt | 631 +- icuSources/data/locales/id_ID.txt | 2 +- icuSources/data/locales/ig.txt | 6 +- icuSources/data/locales/ig_NG.txt | 2 +- icuSources/data/locales/ii.txt | 3 +- icuSources/data/locales/ii_CN.txt | 2 +- icuSources/data/locales/is.txt | 2875 +- icuSources/data/locales/is_IS.txt | 2 +- icuSources/data/locales/it.txt | 311 +- icuSources/data/locales/it_CH.txt | 3 +- icuSources/data/locales/it_IT.txt | 2 +- icuSources/data/locales/it_SM.txt | 2 +- icuSources/data/locales/it_VA.txt | 2 +- icuSources/data/locales/iu.txt | 2 +- icuSources/data/locales/iu_CA.txt | 2 +- icuSources/data/locales/ja.txt | 288 +- icuSources/data/locales/ja_JP.txt | 2 +- icuSources/data/locales/jgo.txt | 3 +- icuSources/data/locales/jgo_CM.txt | 2 +- icuSources/data/locales/jmc.txt | 2 +- icuSources/data/locales/jmc_TZ.txt | 2 +- icuSources/data/locales/ka.txt | 44 +- icuSources/data/locales/ka_GE.txt | 2 +- icuSources/data/locales/kab.txt | 3 +- icuSources/data/locales/kab_DZ.txt | 2 +- icuSources/data/locales/kam.txt | 2 +- icuSources/data/locales/kam_KE.txt | 2 +- icuSources/data/locales/kde.txt | 2 +- icuSources/data/locales/kde_TZ.txt | 2 +- icuSources/data/locales/kea.txt | 3 +- icuSources/data/locales/kea_CV.txt | 2 +- icuSources/data/locales/khq.txt | 3 +- icuSources/data/locales/khq_ML.txt | 2 +- icuSources/data/locales/ki.txt | 2 +- icuSources/data/locales/ki_KE.txt | 2 +- icuSources/data/locales/kk.txt | 269 +- icuSources/data/locales/kk_KZ.txt | 2 +- icuSources/data/locales/kkj.txt | 3 +- icuSources/data/locales/kkj_CM.txt | 2 +- icuSources/data/locales/kl.txt | 24 +- icuSources/data/locales/kl_GL.txt | 2 +- icuSources/data/locales/kln.txt | 2 +- icuSources/data/locales/kln_KE.txt | 2 +- icuSources/data/locales/km.txt | 182 +- icuSources/data/locales/km_KH.txt | 2 +- icuSources/data/locales/kn.txt | 935 +- icuSources/data/locales/kn_IN.txt | 2 +- icuSources/data/locales/ko.txt | 222 +- icuSources/data/locales/ko_KP.txt | 2 +- icuSources/data/locales/ko_KR.txt | 2 +- icuSources/data/locales/kok.txt | 1270 +- icuSources/data/locales/kok_IN.txt | 2 +- icuSources/data/locales/ks.txt | 9 +- icuSources/data/locales/ks_IN.txt | 2 +- icuSources/data/locales/ksb.txt | 2 +- icuSources/data/locales/ksb_TZ.txt | 2 +- icuSources/data/locales/ksf.txt | 3 +- icuSources/data/locales/ksf_CM.txt | 2 +- icuSources/data/locales/ksh.txt | 5 +- icuSources/data/locales/ksh_DE.txt | 2 +- icuSources/data/locales/kw.txt | 2 +- icuSources/data/locales/kw_GB.txt | 2 +- icuSources/data/locales/ky.txt | 131 +- icuSources/data/locales/ky_KG.txt | 2 +- icuSources/data/locales/lag.txt | 2 +- icuSources/data/locales/lag_TZ.txt | 2 +- icuSources/data/locales/lb.txt | 3 +- icuSources/data/locales/lb_LU.txt | 2 +- icuSources/data/locales/lg.txt | 2 +- icuSources/data/locales/lg_UG.txt | 2 +- icuSources/data/locales/lkt.txt | 3 +- icuSources/data/locales/lkt_US.txt | 2 +- icuSources/data/locales/ln.txt | 3 +- icuSources/data/locales/ln_AO.txt | 2 +- icuSources/data/locales/ln_CD.txt | 2 +- icuSources/data/locales/ln_CF.txt | 2 +- icuSources/data/locales/ln_CG.txt | 2 +- icuSources/data/locales/lo.txt | 86 +- icuSources/data/locales/lo_LA.txt | 2 +- icuSources/data/locales/lrc.txt | 3 +- icuSources/data/locales/lrc_IQ.txt | 2 +- icuSources/data/locales/lrc_IR.txt | 2 +- icuSources/data/locales/lt.txt | 453 +- icuSources/data/locales/lt_LT.txt | 2 +- icuSources/data/locales/lu.txt | 3 +- icuSources/data/locales/lu_CD.txt | 2 +- icuSources/data/locales/luo.txt | 2 +- icuSources/data/locales/luo_KE.txt | 2 +- icuSources/data/locales/luy.txt | 2 +- icuSources/data/locales/luy_KE.txt | 2 +- icuSources/data/locales/lv.txt | 564 +- icuSources/data/locales/lv_LV.txt | 2 +- icuSources/data/locales/mas.txt | 2 +- icuSources/data/locales/mas_KE.txt | 2 +- icuSources/data/locales/mas_TZ.txt | 2 +- icuSources/data/locales/mer.txt | 2 +- icuSources/data/locales/mer_KE.txt | 2 +- icuSources/data/locales/mfe.txt | 3 +- icuSources/data/locales/mfe_MU.txt | 2 +- icuSources/data/locales/mg.txt | 7 +- icuSources/data/locales/mg_MG.txt | 2 +- icuSources/data/locales/mgh.txt | 3 +- icuSources/data/locales/mgh_MZ.txt | 2 +- icuSources/data/locales/mgo.txt | 3 +- icuSources/data/locales/mgo_CM.txt | 2 +- icuSources/data/locales/mk.txt | 1804 +- icuSources/data/locales/mk_MK.txt | 2 +- icuSources/data/locales/ml.txt | 732 +- icuSources/data/locales/ml_IN.txt | 2 +- icuSources/data/locales/mn.txt | 448 +- icuSources/data/locales/mn_MN.txt | 2 +- icuSources/data/locales/mr.txt | 964 +- icuSources/data/locales/mr_IN.txt | 2 +- icuSources/data/locales/ms.txt | 1074 +- icuSources/data/locales/ms_Arab.txt | 6 +- icuSources/data/locales/ms_Arab_BN.txt | 2 +- icuSources/data/locales/ms_Arab_MY.txt | 2 +- icuSources/data/locales/ms_BN.txt | 8 +- icuSources/data/locales/ms_MY.txt | 2 +- icuSources/data/locales/ms_SG.txt | 2 +- icuSources/data/locales/mt.txt | 3 +- icuSources/data/locales/mt_MT.txt | 2 +- icuSources/data/locales/mua.txt | 3 +- icuSources/data/locales/mua_CM.txt | 2 +- icuSources/data/locales/my.txt | 234 +- icuSources/data/locales/my_MM.txt | 2 +- icuSources/data/locales/mzn.txt | 2 +- icuSources/data/locales/mzn_IR.txt | 2 +- icuSources/data/locales/naq.txt | 2 +- icuSources/data/locales/naq_NA.txt | 2 +- icuSources/data/locales/nb.txt | 5017 +- icuSources/data/locales/nb_NO.txt | 2 +- icuSources/data/locales/nb_SJ.txt | 2 +- icuSources/data/locales/nd.txt | 2 +- icuSources/data/locales/nd_ZW.txt | 2 +- icuSources/data/locales/nds.txt | 3 +- icuSources/data/locales/nds_DE.txt | 2 +- icuSources/data/locales/nds_NL.txt | 2 +- icuSources/data/locales/ne.txt | 330 +- icuSources/data/locales/ne_IN.txt | 4 +- icuSources/data/locales/ne_NP.txt | 2 +- icuSources/data/locales/nl.txt | 7037 +- icuSources/data/locales/nl_AW.txt | 2 +- icuSources/data/locales/nl_BE.txt | 10 +- icuSources/data/locales/nl_BQ.txt | 2 +- icuSources/data/locales/nl_CW.txt | 2 +- icuSources/data/locales/nl_NL.txt | 2 +- icuSources/data/locales/nl_SR.txt | 2 +- icuSources/data/locales/nl_SX.txt | 2 +- icuSources/data/locales/nmg.txt | 3 +- icuSources/data/locales/nmg_CM.txt | 2 +- icuSources/data/locales/nn.txt | 872 +- icuSources/data/locales/nn_NO.txt | 2 +- icuSources/data/locales/nnh.txt | 3 +- icuSources/data/locales/nnh_CM.txt | 2 +- icuSources/data/locales/nus.txt | 3 +- icuSources/data/locales/nus_SS.txt | 2 +- icuSources/data/locales/nyn.txt | 2 +- icuSources/data/locales/nyn_UG.txt | 2 +- icuSources/data/locales/om.txt | 7 +- icuSources/data/locales/om_ET.txt | 2 +- icuSources/data/locales/om_KE.txt | 2 +- icuSources/data/locales/or.txt | 1569 +- icuSources/data/locales/or_IN.txt | 2 +- icuSources/data/locales/os.txt | 3 +- icuSources/data/locales/os_GE.txt | 2 +- icuSources/data/locales/os_RU.txt | 2 +- icuSources/data/locales/pa.txt | 723 +- icuSources/data/locales/pa_Arab.txt | 3 +- icuSources/data/locales/pa_Arab_PK.txt | 2 +- icuSources/data/locales/pa_Guru.txt | 2 +- icuSources/data/locales/pa_Guru_IN.txt | 2 +- icuSources/data/locales/pl.txt | 380 +- icuSources/data/locales/pl_PL.txt | 2 +- icuSources/data/locales/pool.res | Bin 116560 -> 126056 bytes icuSources/data/locales/ps.txt | 1740 +- icuSources/data/locales/ps_AF.txt | 2 +- icuSources/data/locales/pt.txt | 799 +- icuSources/data/locales/pt_AO.txt | 2 +- icuSources/data/locales/pt_BR.txt | 2 +- icuSources/data/locales/pt_CH.txt | 2 +- icuSources/data/locales/pt_CV.txt | 2 +- icuSources/data/locales/pt_GQ.txt | 2 +- icuSources/data/locales/pt_GW.txt | 2 +- icuSources/data/locales/pt_LU.txt | 2 +- icuSources/data/locales/pt_MO.txt | 2 +- icuSources/data/locales/pt_MZ.txt | 2 +- icuSources/data/locales/pt_PT.txt | 276 +- icuSources/data/locales/pt_ST.txt | 2 +- icuSources/data/locales/pt_TL.txt | 2 +- icuSources/data/locales/qu.txt | 339 +- icuSources/data/locales/qu_BO.txt | 2 +- icuSources/data/locales/qu_EC.txt | 2 +- icuSources/data/locales/qu_PE.txt | 2 +- icuSources/data/locales/resfiles.mk | 256 +- icuSources/data/locales/reslocal.mk | 4 +- icuSources/data/locales/rm.txt | 7 +- icuSources/data/locales/rm_CH.txt | 2 +- icuSources/data/locales/rn.txt | 3 +- icuSources/data/locales/rn_BI.txt | 2 +- icuSources/data/locales/ro.txt | 845 +- icuSources/data/locales/ro_MD.txt | 2 +- icuSources/data/locales/ro_RO.txt | 2 +- icuSources/data/locales/rof.txt | 2 +- icuSources/data/locales/rof_TZ.txt | 2 +- icuSources/data/locales/root.txt | 46 +- icuSources/data/locales/ru.txt | 1080 +- icuSources/data/locales/ru_BY.txt | 2 +- icuSources/data/locales/ru_KG.txt | 2 +- icuSources/data/locales/ru_KZ.txt | 2 +- icuSources/data/locales/ru_MD.txt | 2 +- icuSources/data/locales/ru_RU.txt | 2 +- icuSources/data/locales/ru_UA.txt | 40 +- icuSources/data/locales/rw.txt | 3 +- icuSources/data/locales/rw_RW.txt | 2 +- icuSources/data/locales/rwk.txt | 2 +- icuSources/data/locales/rwk_TZ.txt | 2 +- icuSources/data/locales/sah.txt | 5 +- icuSources/data/locales/sah_RU.txt | 2 +- icuSources/data/locales/saq.txt | 2 +- icuSources/data/locales/saq_KE.txt | 2 +- icuSources/data/locales/sbp.txt | 3 +- icuSources/data/locales/sbp_TZ.txt | 2 +- icuSources/data/locales/se.txt | 9 +- icuSources/data/locales/se_FI.txt | 1242 +- icuSources/data/locales/se_NO.txt | 2 +- icuSources/data/locales/se_SE.txt | 2 +- icuSources/data/locales/seh.txt | 3 +- icuSources/data/locales/seh_MZ.txt | 2 +- icuSources/data/locales/ses.txt | 3 +- icuSources/data/locales/ses_ML.txt | 2 +- icuSources/data/locales/sg.txt | 3 +- icuSources/data/locales/sg_CF.txt | 2 +- icuSources/data/locales/shi.txt | 3 +- icuSources/data/locales/shi_Latn.txt | 3 +- icuSources/data/locales/shi_Latn_MA.txt | 2 +- icuSources/data/locales/shi_Tfng.txt | 2 +- icuSources/data/locales/shi_Tfng_MA.txt | 2 +- icuSources/data/locales/si.txt | 115 +- icuSources/data/locales/si_LK.txt | 2 +- icuSources/data/locales/sk.txt | 709 +- icuSources/data/locales/sk_SK.txt | 2 +- icuSources/data/locales/sl.txt | 967 +- icuSources/data/locales/sl_SI.txt | 2 +- icuSources/data/locales/smn.txt | 9 +- icuSources/data/locales/smn_FI.txt | 2 +- icuSources/data/locales/sn.txt | 7 +- icuSources/data/locales/sn_ZW.txt | 2 +- icuSources/data/locales/so.txt | 3 +- icuSources/data/locales/so_DJ.txt | 2 +- icuSources/data/locales/so_ET.txt | 2 +- icuSources/data/locales/so_KE.txt | 2 +- icuSources/data/locales/so_SO.txt | 2 +- icuSources/data/locales/sq.txt | 295 +- icuSources/data/locales/sq_AL.txt | 2 +- icuSources/data/locales/sq_MK.txt | 2 +- icuSources/data/locales/sq_XK.txt | 2 +- icuSources/data/locales/sr.txt | 158 +- icuSources/data/locales/sr_Cyrl.txt | 2 +- icuSources/data/locales/sr_Cyrl_BA.txt | 2 +- icuSources/data/locales/sr_Cyrl_ME.txt | 2 +- icuSources/data/locales/sr_Cyrl_RS.txt | 2 +- icuSources/data/locales/sr_Cyrl_XK.txt | 2 +- icuSources/data/locales/sr_Latn.txt | 160 +- icuSources/data/locales/sr_Latn_BA.txt | 2 +- icuSources/data/locales/sr_Latn_ME.txt | 2 +- icuSources/data/locales/sr_Latn_RS.txt | 2 +- icuSources/data/locales/sr_Latn_XK.txt | 2 +- icuSources/data/locales/sv.txt | 187 +- icuSources/data/locales/sv_AX.txt | 2 +- icuSources/data/locales/sv_FI.txt | 2 +- icuSources/data/locales/sv_SE.txt | 2 +- icuSources/data/locales/sw.txt | 309 +- icuSources/data/locales/sw_CD.txt | 3 +- icuSources/data/locales/sw_KE.txt | 14 +- icuSources/data/locales/sw_TZ.txt | 2 +- icuSources/data/locales/sw_UG.txt | 2 +- icuSources/data/locales/ta.txt | 606 +- icuSources/data/locales/ta_IN.txt | 2 +- icuSources/data/locales/ta_LK.txt | 2 +- icuSources/data/locales/ta_MY.txt | 2 +- icuSources/data/locales/ta_SG.txt | 2 +- icuSources/data/locales/te.txt | 1122 +- icuSources/data/locales/te_IN.txt | 2 +- icuSources/data/locales/teo.txt | 2 +- icuSources/data/locales/teo_KE.txt | 2 +- icuSources/data/locales/teo_UG.txt | 2 +- icuSources/data/locales/tg.txt | 120 +- icuSources/data/locales/tg_TJ.txt | 2 +- icuSources/data/locales/th.txt | 130 +- icuSources/data/locales/th_TH.txt | 2 +- icuSources/data/locales/ti.txt | 953 +- icuSources/data/locales/ti_ER.txt | 2 +- icuSources/data/locales/ti_ET.txt | 2 +- icuSources/data/locales/tk.txt | 824 +- icuSources/data/locales/to.txt | 116 +- icuSources/data/locales/to_TO.txt | 2 +- icuSources/data/locales/tr.txt | 538 +- icuSources/data/locales/tr_CY.txt | 2 +- icuSources/data/locales/tr_TR.txt | 2 +- icuSources/data/locales/tt.txt | 584 + icuSources/data/locales/tt_RU.txt | 5 + icuSources/data/locales/twq.txt | 3 +- icuSources/data/locales/twq_NE.txt | 2 +- icuSources/data/locales/tzm.txt | 3 +- icuSources/data/locales/tzm_MA.txt | 2 +- icuSources/data/locales/ug.txt | 3 +- icuSources/data/locales/ug_CN.txt | 2 +- icuSources/data/locales/uk.txt | 524 +- icuSources/data/locales/uk_UA.txt | 2 +- icuSources/data/locales/ur.txt | 623 +- icuSources/data/locales/ur_IN.txt | 66 +- icuSources/data/locales/ur_PK.txt | 2 +- icuSources/data/locales/uz.txt | 93 +- icuSources/data/locales/uz_Arab.txt | 3 +- icuSources/data/locales/uz_Arab_AF.txt | 2 +- icuSources/data/locales/uz_Cyrl.txt | 7 +- icuSources/data/locales/uz_Cyrl_UZ.txt | 2 +- icuSources/data/locales/uz_Latn.txt | 2 +- icuSources/data/locales/uz_Latn_UZ.txt | 2 +- icuSources/data/locales/vai.txt | 55 +- icuSources/data/locales/vai_Latn.txt | 3 +- icuSources/data/locales/vai_Latn_LR.txt | 2 +- icuSources/data/locales/vai_Vaii.txt | 2 +- icuSources/data/locales/vai_Vaii_LR.txt | 2 +- icuSources/data/locales/vi.txt | 317 +- icuSources/data/locales/vi_VN.txt | 2 +- icuSources/data/locales/vun.txt | 2 +- icuSources/data/locales/vun_TZ.txt | 2 +- icuSources/data/locales/wae.txt | 3 +- icuSources/data/locales/wae_CH.txt | 2 +- icuSources/data/locales/wo.txt | 514 + icuSources/data/locales/wo_SN.txt | 5 + icuSources/data/locales/wuu.txt | 5 + icuSources/data/locales/xog.txt | 2 +- icuSources/data/locales/xog_UG.txt | 2 +- icuSources/data/locales/yav.txt | 3 +- icuSources/data/locales/yav_CM.txt | 2 +- icuSources/data/locales/yi.txt | 3 +- icuSources/data/locales/yi_001.txt | 2 +- icuSources/data/locales/yo.txt | 3 +- icuSources/data/locales/yo_BJ.txt | 2 +- icuSources/data/locales/yo_NG.txt | 2 +- icuSources/data/locales/yue.txt | 134 +- icuSources/data/locales/yue_Hans.txt | 180 +- icuSources/data/locales/yue_Hans_CN.txt | 2 +- icuSources/data/locales/yue_Hant.txt | 2 +- icuSources/data/locales/yue_Hant_HK.txt | 2 +- icuSources/data/locales/zgh.txt | 5 +- icuSources/data/locales/zgh_MA.txt | 2 +- icuSources/data/locales/zh.txt | 1787 +- icuSources/data/locales/zh_Hans.txt | 2 +- icuSources/data/locales/zh_Hans_CN.txt | 2 +- icuSources/data/locales/zh_Hans_HK.txt | 11 +- icuSources/data/locales/zh_Hans_MO.txt | 8 +- icuSources/data/locales/zh_Hans_SG.txt | 15 +- icuSources/data/locales/zh_Hant.txt | 7996 +- icuSources/data/locales/zh_Hant_HK.txt | 183 +- icuSources/data/locales/zh_Hant_MO.txt | 2 +- icuSources/data/locales/zh_Hant_TW.txt | 2 +- icuSources/data/locales/zu.txt | 119 +- icuSources/data/locales/zu_ZA.txt | 2 +- icuSources/data/makedata.mak | 39 +- icuSources/data/makedata.vcxproj | 23 +- icuSources/data/makedata_uwp.vcxproj | 10 +- icuSources/data/misc/currencyNumericCodes.txt | 40 +- icuSources/data/misc/dayPeriods.txt | 622 +- icuSources/data/misc/icuver.txt | 4 +- icuSources/data/misc/keyTypeData.txt | 6 + icuSources/data/misc/likelySubtags.txt | 30 +- icuSources/data/misc/metaZones.txt | 16 +- icuSources/data/misc/metadata.txt | 226 +- icuSources/data/misc/numberingSystems.txt | 15 + icuSources/data/misc/plurals.txt | 108 +- icuSources/data/misc/supplementalData.txt | 1210 +- icuSources/data/misc/windowsZones.txt | 10 +- icuSources/data/misc/zoneinfo64.txt | 101 +- icuSources/data/rbnf/ak.txt | 61 + icuSources/data/rbnf/ccp.txt | 55 + icuSources/data/rbnf/chr.txt | 57 + icuSources/data/rbnf/de_CH.txt | 2 +- icuSources/data/rbnf/en_001.txt | 5 + icuSources/data/rbnf/en_IN.txt | 183 + icuSources/data/rbnf/ff.txt | 89 + icuSources/data/rbnf/he.txt | 16 +- icuSources/data/rbnf/hi.txt | 38 +- icuSources/data/rbnf/ko.txt | 7 +- icuSources/data/rbnf/lb.txt | 205 + icuSources/data/rbnf/lrc.txt | 59 + icuSources/data/rbnf/qu.txt | 46 + icuSources/data/rbnf/rbnffiles.mk | 34 +- icuSources/data/rbnf/rbnflocal.mk | 2 + icuSources/data/rbnf/sk.txt | 70 +- icuSources/data/rbnf/sr_Latn.txt | 2 +- icuSources/data/rbnf/sv.txt | 15 +- icuSources/data/rbnf/sw.txt | 52 + icuSources/data/rbnf/wuu.txt | 5 + icuSources/data/rbnf/yue_Hans.txt | 2 +- icuSources/data/region/af.txt | 34 +- icuSources/data/region/agq.txt | 2 +- icuSources/data/region/ak.txt | 2 +- icuSources/data/region/am.txt | 18 +- icuSources/data/region/ar.txt | 25 +- icuSources/data/region/ar_AE.txt | 2 +- icuSources/data/region/ar_LY.txt | 2 +- icuSources/data/region/ar_SA.txt | 10 +- icuSources/data/region/as.txt | 310 +- icuSources/data/region/asa.txt | 2 +- icuSources/data/region/ast.txt | 5 +- icuSources/data/region/az.txt | 4 +- icuSources/data/region/az_Cyrl.txt | 2 +- icuSources/data/region/az_Latn.txt | 2 +- icuSources/data/region/bas.txt | 2 +- icuSources/data/region/be.txt | 24 +- icuSources/data/region/bem.txt | 2 +- icuSources/data/region/bez.txt | 2 +- icuSources/data/region/bg.txt | 8 +- icuSources/data/region/bm.txt | 2 +- icuSources/data/region/bn.txt | 32 +- icuSources/data/region/bn_IN.txt | 3 +- icuSources/data/region/bo.txt | 2 +- icuSources/data/region/bo_IN.txt | 2 +- icuSources/data/region/br.txt | 8 +- icuSources/data/region/brx.txt | 2 +- icuSources/data/region/bs.txt | 51 +- icuSources/data/region/bs_Cyrl.txt | 111 +- icuSources/data/region/bs_Latn.txt | 2 +- icuSources/data/region/ca.txt | 6 +- icuSources/data/region/ccp.txt | 326 + icuSources/data/region/ce.txt | 27 +- icuSources/data/region/cgg.txt | 2 +- icuSources/data/region/chr.txt | 14 +- icuSources/data/region/ckb.txt | 17 +- icuSources/data/region/cs.txt | 38 +- icuSources/data/region/cy.txt | 8 +- icuSources/data/region/da.txt | 11 +- icuSources/data/region/dav.txt | 2 +- icuSources/data/region/de.txt | 8 +- icuSources/data/region/de_AT.txt | 2 +- icuSources/data/region/de_CH.txt | 3 +- icuSources/data/region/dje.txt | 2 +- icuSources/data/region/dsb.txt | 2 +- icuSources/data/region/dua.txt | 2 +- icuSources/data/region/dyo.txt | 2 +- icuSources/data/region/dz.txt | 2 +- icuSources/data/region/ebu.txt | 2 +- icuSources/data/region/ee.txt | 2 +- icuSources/data/region/el.txt | 31 +- icuSources/data/region/en.txt | 3 +- icuSources/data/region/en_150.txt | 2 +- icuSources/data/region/en_AG.txt | 2 +- icuSources/data/region/en_AI.txt | 2 +- icuSources/data/region/en_AT.txt | 2 +- icuSources/data/region/en_AU.txt | 2 +- icuSources/data/region/en_BB.txt | 2 +- icuSources/data/region/en_BE.txt | 2 +- icuSources/data/region/en_BM.txt | 2 +- icuSources/data/region/en_BS.txt | 2 +- icuSources/data/region/en_BW.txt | 2 +- icuSources/data/region/en_BZ.txt | 2 +- icuSources/data/region/en_CA.txt | 2 +- icuSources/data/region/en_CC.txt | 2 +- icuSources/data/region/en_CH.txt | 2 +- icuSources/data/region/en_CK.txt | 2 +- icuSources/data/region/en_CM.txt | 2 +- icuSources/data/region/en_CX.txt | 2 +- icuSources/data/region/en_CY.txt | 2 +- icuSources/data/region/en_DE.txt | 2 +- icuSources/data/region/en_DG.txt | 2 +- icuSources/data/region/en_DK.txt | 2 +- icuSources/data/region/en_DM.txt | 2 +- icuSources/data/region/en_ER.txt | 2 +- icuSources/data/region/en_FI.txt | 2 +- icuSources/data/region/en_FJ.txt | 2 +- icuSources/data/region/en_FK.txt | 2 +- icuSources/data/region/en_FM.txt | 2 +- icuSources/data/region/en_GB.txt | 16 +- icuSources/data/region/en_GD.txt | 2 +- icuSources/data/region/en_GG.txt | 2 +- icuSources/data/region/en_GH.txt | 2 +- icuSources/data/region/en_GI.txt | 2 +- icuSources/data/region/en_GM.txt | 2 +- icuSources/data/region/en_GY.txt | 2 +- icuSources/data/region/en_HK.txt | 2 +- icuSources/data/region/en_IE.txt | 2 +- icuSources/data/region/en_IL.txt | 2 +- icuSources/data/region/en_IM.txt | 2 +- icuSources/data/region/en_IN.txt | 2 +- icuSources/data/region/en_IO.txt | 2 +- icuSources/data/region/en_JE.txt | 2 +- icuSources/data/region/en_JM.txt | 2 +- icuSources/data/region/en_KE.txt | 2 +- icuSources/data/region/en_KI.txt | 2 +- icuSources/data/region/en_KN.txt | 2 +- icuSources/data/region/en_KY.txt | 2 +- icuSources/data/region/en_LC.txt | 2 +- icuSources/data/region/en_LR.txt | 2 +- icuSources/data/region/en_LS.txt | 2 +- icuSources/data/region/en_MG.txt | 2 +- icuSources/data/region/en_MO.txt | 2 +- icuSources/data/region/en_MS.txt | 2 +- icuSources/data/region/en_MT.txt | 2 +- icuSources/data/region/en_MU.txt | 2 +- icuSources/data/region/en_MW.txt | 2 +- icuSources/data/region/en_MY.txt | 2 +- icuSources/data/region/en_NA.txt | 2 +- icuSources/data/region/en_NF.txt | 2 +- icuSources/data/region/en_NG.txt | 2 +- icuSources/data/region/en_NL.txt | 2 +- icuSources/data/region/en_NR.txt | 2 +- icuSources/data/region/en_NU.txt | 2 +- icuSources/data/region/en_NZ.txt | 2 +- icuSources/data/region/en_PG.txt | 2 +- icuSources/data/region/en_PH.txt | 2 +- icuSources/data/region/en_PK.txt | 2 +- icuSources/data/region/en_PN.txt | 2 +- icuSources/data/region/en_PW.txt | 2 +- icuSources/data/region/en_RW.txt | 2 +- icuSources/data/region/en_SB.txt | 2 +- icuSources/data/region/en_SC.txt | 2 +- icuSources/data/region/en_SD.txt | 2 +- icuSources/data/region/en_SE.txt | 2 +- icuSources/data/region/en_SG.txt | 2 +- icuSources/data/region/en_SH.txt | 2 +- icuSources/data/region/en_SI.txt | 2 +- icuSources/data/region/en_SL.txt | 2 +- icuSources/data/region/en_SS.txt | 2 +- icuSources/data/region/en_SX.txt | 2 +- icuSources/data/region/en_SZ.txt | 2 +- icuSources/data/region/en_TC.txt | 2 +- icuSources/data/region/en_TK.txt | 2 +- icuSources/data/region/en_TO.txt | 2 +- icuSources/data/region/en_TT.txt | 2 +- icuSources/data/region/en_TV.txt | 2 +- icuSources/data/region/en_TZ.txt | 2 +- icuSources/data/region/en_UG.txt | 2 +- icuSources/data/region/en_VC.txt | 2 +- icuSources/data/region/en_VG.txt | 2 +- icuSources/data/region/en_VU.txt | 2 +- icuSources/data/region/en_WS.txt | 2 +- icuSources/data/region/en_ZA.txt | 2 +- icuSources/data/region/en_ZM.txt | 2 +- icuSources/data/region/en_ZW.txt | 2 +- icuSources/data/region/eo.txt | 2 +- icuSources/data/region/es.txt | 9 +- icuSources/data/region/es_419.txt | 20 +- icuSources/data/region/es_AR.txt | 4 +- icuSources/data/region/es_BO.txt | 3 +- icuSources/data/region/es_BR.txt | 2 +- icuSources/data/region/es_BZ.txt | 2 +- icuSources/data/region/es_CL.txt | 3 +- icuSources/data/region/es_CO.txt | 4 +- icuSources/data/region/es_CR.txt | 3 +- icuSources/data/region/es_CU.txt | 2 +- icuSources/data/region/es_DO.txt | 3 +- icuSources/data/region/es_EC.txt | 3 +- icuSources/data/region/es_GT.txt | 3 +- icuSources/data/region/es_HN.txt | 3 +- icuSources/data/region/es_MX.txt | 24 +- icuSources/data/region/es_NI.txt | 3 +- icuSources/data/region/es_PA.txt | 3 +- icuSources/data/region/es_PE.txt | 3 +- icuSources/data/region/es_PR.txt | 5 +- icuSources/data/region/es_PY.txt | 3 +- icuSources/data/region/es_SV.txt | 5 +- icuSources/data/region/es_US.txt | 24 +- icuSources/data/region/es_UY.txt | 2 +- icuSources/data/region/es_VE.txt | 3 +- icuSources/data/region/et.txt | 12 +- icuSources/data/region/eu.txt | 36 +- icuSources/data/region/ewo.txt | 2 +- icuSources/data/region/fa.txt | 4 +- icuSources/data/region/fa_AF.txt | 3 +- icuSources/data/region/ff.txt | 2 +- icuSources/data/region/fi.txt | 4 +- icuSources/data/region/fil.txt | 34 +- icuSources/data/region/fo.txt | 12 +- icuSources/data/region/fr.txt | 7 +- icuSources/data/region/fr_BE.txt | 2 +- icuSources/data/region/fr_CA.txt | 5 +- icuSources/data/region/fur.txt | 2 +- icuSources/data/region/fy.txt | 2 +- icuSources/data/region/ga.txt | 294 +- icuSources/data/region/gd.txt | 8 +- icuSources/data/region/gl.txt | 56 +- icuSources/data/region/gsw.txt | 2 +- icuSources/data/region/gu.txt | 90 +- icuSources/data/region/guz.txt | 2 +- icuSources/data/region/gv.txt | 2 +- icuSources/data/region/ha.txt | 2 +- icuSources/data/region/haw.txt | 2 +- icuSources/data/region/he.txt | 30 +- icuSources/data/region/hi.txt | 20 +- icuSources/data/region/hr.txt | 8 +- icuSources/data/region/hsb.txt | 2 +- icuSources/data/region/hu.txt | 13 +- icuSources/data/region/hy.txt | 13 +- icuSources/data/region/id.txt | 14 +- icuSources/data/region/ig.txt | 4 +- icuSources/data/region/ii.txt | 2 +- icuSources/data/region/is.txt | 13 +- icuSources/data/region/it.txt | 12 +- icuSources/data/region/iu.txt | 2 +- icuSources/data/region/ja.txt | 22 +- icuSources/data/region/jgo.txt | 2 +- icuSources/data/region/jmc.txt | 2 +- icuSources/data/region/ka.txt | 5 +- icuSources/data/region/kab.txt | 2 +- icuSources/data/region/kam.txt | 2 +- icuSources/data/region/kde.txt | 2 +- icuSources/data/region/kea.txt | 2 +- icuSources/data/region/khq.txt | 2 +- icuSources/data/region/ki.txt | 2 +- icuSources/data/region/kk.txt | 16 +- icuSources/data/region/kkj.txt | 2 +- icuSources/data/region/kl.txt | 2 +- icuSources/data/region/kln.txt | 2 +- icuSources/data/region/km.txt | 126 +- icuSources/data/region/kn.txt | 88 +- icuSources/data/region/ko.txt | 5 +- icuSources/data/region/ko_KP.txt | 2 +- icuSources/data/region/kok.txt | 308 +- icuSources/data/region/ks.txt | 2 +- icuSources/data/region/ksb.txt | 2 +- icuSources/data/region/ksf.txt | 2 +- icuSources/data/region/ksh.txt | 2 +- icuSources/data/region/kw.txt | 2 +- icuSources/data/region/ky.txt | 65 +- icuSources/data/region/lag.txt | 2 +- icuSources/data/region/lb.txt | 4 +- icuSources/data/region/lg.txt | 2 +- icuSources/data/region/lkt.txt | 2 +- icuSources/data/region/ln.txt | 2 +- icuSources/data/region/lo.txt | 33 +- icuSources/data/region/lrc.txt | 2 +- icuSources/data/region/lt.txt | 5 +- icuSources/data/region/lu.txt | 2 +- icuSources/data/region/luo.txt | 2 +- icuSources/data/region/luy.txt | 2 +- icuSources/data/region/lv.txt | 4 +- icuSources/data/region/mas.txt | 2 +- icuSources/data/region/mer.txt | 2 +- icuSources/data/region/mfe.txt | 2 +- icuSources/data/region/mg.txt | 2 +- icuSources/data/region/mgh.txt | 2 +- icuSources/data/region/mgo.txt | 2 +- icuSources/data/region/mk.txt | 14 +- icuSources/data/region/ml.txt | 44 +- icuSources/data/region/mn.txt | 104 +- icuSources/data/region/mr.txt | 6 +- icuSources/data/region/ms.txt | 4 +- icuSources/data/region/ms_Arab.txt | 2 +- icuSources/data/region/mt.txt | 2 +- icuSources/data/region/mua.txt | 2 +- icuSources/data/region/my.txt | 36 +- icuSources/data/region/mzn.txt | 2 +- icuSources/data/region/naq.txt | 2 +- icuSources/data/region/nb.txt | 7 +- icuSources/data/region/nd.txt | 2 +- icuSources/data/region/nds.txt | 2 +- icuSources/data/region/ne.txt | 47 +- icuSources/data/region/nl.txt | 14 +- icuSources/data/region/nmg.txt | 2 +- icuSources/data/region/nn.txt | 31 +- icuSources/data/region/nnh.txt | 2 +- icuSources/data/region/nus.txt | 2 +- icuSources/data/region/nyn.txt | 2 +- icuSources/data/region/om.txt | 2 +- icuSources/data/region/or.txt | 210 +- icuSources/data/region/os.txt | 2 +- icuSources/data/region/pa.txt | 8 +- icuSources/data/region/pa_Arab.txt | 2 +- icuSources/data/region/pa_Guru.txt | 2 +- icuSources/data/region/pl.txt | 9 +- icuSources/data/region/pool.res | Bin 74132 -> 78060 bytes icuSources/data/region/ps.txt | 263 +- icuSources/data/region/pt.txt | 20 +- icuSources/data/region/pt_AO.txt | 2 +- icuSources/data/region/pt_CH.txt | 2 +- icuSources/data/region/pt_CV.txt | 2 +- icuSources/data/region/pt_GQ.txt | 2 +- icuSources/data/region/pt_GW.txt | 2 +- icuSources/data/region/pt_LU.txt | 2 +- icuSources/data/region/pt_MO.txt | 2 +- icuSources/data/region/pt_MZ.txt | 2 +- icuSources/data/region/pt_PT.txt | 20 +- icuSources/data/region/pt_ST.txt | 2 +- icuSources/data/region/pt_TL.txt | 2 +- icuSources/data/region/qu.txt | 2 +- icuSources/data/region/resfiles.mk | 138 +- icuSources/data/region/reslocal.mk | 4 +- icuSources/data/region/rm.txt | 10 +- icuSources/data/region/rn.txt | 2 +- icuSources/data/region/ro.txt | 11 +- icuSources/data/region/ro_MD.txt | 2 +- icuSources/data/region/rof.txt | 2 +- icuSources/data/region/root.txt | 2 +- icuSources/data/region/ru.txt | 21 +- icuSources/data/region/ru_UA.txt | 3 +- icuSources/data/region/rw.txt | 6 +- icuSources/data/region/rwk.txt | 2 +- icuSources/data/region/sah.txt | 2 +- icuSources/data/region/saq.txt | 2 +- icuSources/data/region/sbp.txt | 2 +- icuSources/data/region/se.txt | 2 +- icuSources/data/region/se_FI.txt | 23 +- icuSources/data/region/seh.txt | 2 +- icuSources/data/region/ses.txt | 2 +- icuSources/data/region/sg.txt | 2 +- icuSources/data/region/shi.txt | 2 +- icuSources/data/region/shi_Latn.txt | 2 +- icuSources/data/region/shi_Tfng.txt | 2 +- icuSources/data/region/si.txt | 10 +- icuSources/data/region/sk.txt | 13 +- icuSources/data/region/sl.txt | 11 +- icuSources/data/region/smn.txt | 2 +- icuSources/data/region/sn.txt | 2 +- icuSources/data/region/so.txt | 2 +- icuSources/data/region/sq.txt | 40 +- icuSources/data/region/sr.txt | 13 +- icuSources/data/region/sr_Cyrl.txt | 2 +- icuSources/data/region/sr_Cyrl_BA.txt | 4 +- icuSources/data/region/sr_Cyrl_ME.txt | 4 +- icuSources/data/region/sr_Cyrl_XK.txt | 4 +- icuSources/data/region/sr_Latn.txt | 13 +- icuSources/data/region/sr_Latn_BA.txt | 4 +- icuSources/data/region/sr_Latn_ME.txt | 4 +- icuSources/data/region/sr_Latn_XK.txt | 4 +- icuSources/data/region/sv.txt | 8 +- icuSources/data/region/sw.txt | 95 +- icuSources/data/region/sw_CD.txt | 2 +- icuSources/data/region/sw_KE.txt | 7 +- icuSources/data/region/ta.txt | 4 +- icuSources/data/region/te.txt | 108 +- icuSources/data/region/teo.txt | 2 +- icuSources/data/region/tg.txt | 9 +- icuSources/data/region/th.txt | 16 +- icuSources/data/region/ti.txt | 272 +- icuSources/data/region/tk.txt | 297 +- icuSources/data/region/to.txt | 28 +- icuSources/data/region/tr.txt | 11 +- icuSources/data/region/tt.txt | 256 + icuSources/data/region/twq.txt | 2 +- icuSources/data/region/tzm.txt | 2 +- icuSources/data/region/ug.txt | 4 +- icuSources/data/region/uk.txt | 82 +- icuSources/data/region/ur.txt | 16 +- icuSources/data/region/ur_IN.txt | 2 +- icuSources/data/region/uz.txt | 8 +- icuSources/data/region/uz_Arab.txt | 2 +- icuSources/data/region/uz_Cyrl.txt | 12 +- icuSources/data/region/uz_Latn.txt | 2 +- icuSources/data/region/vai.txt | 36 +- icuSources/data/region/vai_Latn.txt | 2 +- icuSources/data/region/vai_Vaii.txt | 2 +- icuSources/data/region/vi.txt | 18 +- icuSources/data/region/vun.txt | 2 +- icuSources/data/region/wae.txt | 2 +- icuSources/data/region/wo.txt | 259 + icuSources/data/region/wuu.txt | 5 + icuSources/data/region/xog.txt | 2 +- icuSources/data/region/yav.txt | 2 +- icuSources/data/region/yi.txt | 2 +- icuSources/data/region/yo.txt | 4 +- icuSources/data/region/yo_BJ.txt | 3 +- icuSources/data/region/yue.txt | 4 +- icuSources/data/region/yue_Hans.txt | 4 +- icuSources/data/region/yue_Hant.txt | 2 +- icuSources/data/region/zgh.txt | 2 +- icuSources/data/region/zh.txt | 8 +- icuSources/data/region/zh_Hans.txt | 2 +- icuSources/data/region/zh_Hant.txt | 28 +- icuSources/data/region/zh_Hant_HK.txt | 8 +- icuSources/data/region/zh_Hant_MO.txt | 2 +- icuSources/data/region/zu.txt | 6 +- icuSources/data/translit/Hani_Latn.txt | 38 +- icuSources/data/translit/Zawgyi_my.txt | 1 + icuSources/data/translit/az_Cyrl_az_BGN.txt | 2 +- icuSources/data/translit/be_be_Latn_BGN.txt | 63 +- icuSources/data/translit/blt_blt_FONIPA.txt | 138 + icuSources/data/translit/cy_cy_FONIPA.txt | 195 + icuSources/data/translit/de_ASCII.txt | 21 + icuSources/data/translit/fa_fa_FONIPA.txt | 82 + icuSources/data/translit/ha_ha_NE.txt | 12 + icuSources/data/translit/hy_hy_Latn_BGN.txt | 151 +- .../data/translit/ja_Hrkt_ja_Latn_BGN.txt | 116 +- icuSources/data/translit/ka_ka_Latn_BGN.txt | 117 +- .../data/translit/ka_ka_Latn_BGN_1981.txt | 60 + icuSources/data/translit/nv_nv_FONIPA.txt | 80 + icuSources/data/translit/ru_ru_Latn_BGN.txt | 18 +- icuSources/data/translit/ta_ta_FONIPA.txt | 8 +- icuSources/data/translit/vec_vec_FONIPA.txt | 91 + icuSources/data/unidata/ApplePUApatch.txt | 48 +- icuSources/data/unidata/CaseFolding.txt | 85 +- .../data/unidata/DerivedCoreProperties.txt | 503 +- .../unidata/DerivedNormalizationProps.txt | 93 +- icuSources/data/unidata/FractionalUCA.txt | 73705 ++++++++-------- .../data/unidata/NormalizationCorrections.txt | 4 +- icuSources/data/unidata/NormalizationTest.txt | 52 +- icuSources/data/unidata/SpecialCasing.txt | 8 +- icuSources/data/unidata/UCARules.txt | 982 +- icuSources/data/unidata/UnicodeData.txt | 778 +- .../base_unidata/DerivedCoreProperties.txt | 503 +- .../data/unidata/base_unidata/UnicodeData.txt | 778 +- .../data/unidata/base_unidata/ppucd.txt | 2918 +- icuSources/data/unidata/changes.txt | 389 + icuSources/data/unidata/confusables.txt | 57 +- .../data/unidata/norm2/base_norm2/nfc.txt | 17 +- .../data/unidata/norm2/base_norm2/nfkc.txt | 2 +- icuSources/data/unidata/norm2/nfc.txt | 17 +- icuSources/data/unidata/norm2/nfkc.txt | 2 +- icuSources/data/unidata/norm2/nfkc_cf.txt | 81 +- icuSources/data/unidata/norm2/uts46.txt | 176 +- icuSources/data/unidata/ppucd.txt | 3110 +- icuSources/data/unit/af.txt | 12 +- icuSources/data/unit/agq.txt | 2 +- icuSources/data/unit/ak.txt | 2 +- icuSources/data/unit/am.txt | 84 +- icuSources/data/unit/ar.txt | 113 +- icuSources/data/unit/as.txt | 1578 +- icuSources/data/unit/asa.txt | 2 +- icuSources/data/unit/ast.txt | 12 +- icuSources/data/unit/az.txt | 12 +- icuSources/data/unit/az_Cyrl.txt | 2 +- icuSources/data/unit/az_Latn.txt | 2 +- icuSources/data/unit/bas.txt | 2 +- icuSources/data/unit/be.txt | 480 +- icuSources/data/unit/bem.txt | 2 +- icuSources/data/unit/bez.txt | 2 +- icuSources/data/unit/bg.txt | 46 +- icuSources/data/unit/bm.txt | 2 +- icuSources/data/unit/bn.txt | 217 +- icuSources/data/unit/bo.txt | 2 +- icuSources/data/unit/br.txt | 154 +- icuSources/data/unit/brx.txt | 2 +- icuSources/data/unit/bs.txt | 46 +- icuSources/data/unit/bs_Cyrl.txt | 2 +- icuSources/data/unit/bs_Latn.txt | 2 +- icuSources/data/unit/ca.txt | 128 +- icuSources/data/unit/ccp.txt | 1697 + icuSources/data/unit/ce.txt | 2 +- icuSources/data/unit/cgg.txt | 2 +- icuSources/data/unit/chr.txt | 28 +- icuSources/data/unit/ckb.txt | 2 +- icuSources/data/unit/cs.txt | 77 +- icuSources/data/unit/cy.txt | 80 +- icuSources/data/unit/da.txt | 91 +- icuSources/data/unit/dav.txt | 2 +- icuSources/data/unit/de.txt | 68 +- icuSources/data/unit/de_CH.txt | 6 +- icuSources/data/unit/dje.txt | 2 +- icuSources/data/unit/dsb.txt | 2 +- icuSources/data/unit/dua.txt | 2 +- icuSources/data/unit/dyo.txt | 2 +- icuSources/data/unit/dz.txt | 2 +- icuSources/data/unit/ebu.txt | 2 +- icuSources/data/unit/ee.txt | 2 +- icuSources/data/unit/el.txt | 14 +- icuSources/data/unit/en.txt | 14 +- icuSources/data/unit/en_001.txt | 2 +- icuSources/data/unit/en_150.txt | 2 +- icuSources/data/unit/en_AG.txt | 2 +- icuSources/data/unit/en_AI.txt | 2 +- icuSources/data/unit/en_AT.txt | 2 +- icuSources/data/unit/en_AU.txt | 28 +- icuSources/data/unit/en_BB.txt | 2 +- icuSources/data/unit/en_BE.txt | 2 +- icuSources/data/unit/en_BM.txt | 2 +- icuSources/data/unit/en_BS.txt | 2 +- icuSources/data/unit/en_BW.txt | 2 +- icuSources/data/unit/en_BZ.txt | 2 +- icuSources/data/unit/en_CA.txt | 403 +- icuSources/data/unit/en_CC.txt | 2 +- icuSources/data/unit/en_CH.txt | 2 +- icuSources/data/unit/en_CK.txt | 2 +- icuSources/data/unit/en_CM.txt | 2 +- icuSources/data/unit/en_CX.txt | 2 +- icuSources/data/unit/en_CY.txt | 2 +- icuSources/data/unit/en_DE.txt | 2 +- icuSources/data/unit/en_DG.txt | 2 +- icuSources/data/unit/en_DK.txt | 2 +- icuSources/data/unit/en_DM.txt | 2 +- icuSources/data/unit/en_ER.txt | 2 +- icuSources/data/unit/en_FI.txt | 2 +- icuSources/data/unit/en_FJ.txt | 2 +- icuSources/data/unit/en_FK.txt | 2 +- icuSources/data/unit/en_FM.txt | 2 +- icuSources/data/unit/en_GB.txt | 37 +- icuSources/data/unit/en_GD.txt | 2 +- icuSources/data/unit/en_GG.txt | 2 +- icuSources/data/unit/en_GH.txt | 2 +- icuSources/data/unit/en_GI.txt | 2 +- icuSources/data/unit/en_GM.txt | 2 +- icuSources/data/unit/en_GY.txt | 2 +- icuSources/data/unit/en_HK.txt | 2 +- icuSources/data/unit/en_IE.txt | 2 +- icuSources/data/unit/en_IL.txt | 2 +- icuSources/data/unit/en_IM.txt | 2 +- icuSources/data/unit/en_IN.txt | 2 +- icuSources/data/unit/en_IO.txt | 2 +- icuSources/data/unit/en_JE.txt | 2 +- icuSources/data/unit/en_JM.txt | 2 +- icuSources/data/unit/en_KE.txt | 2 +- icuSources/data/unit/en_KI.txt | 2 +- icuSources/data/unit/en_KN.txt | 2 +- icuSources/data/unit/en_KY.txt | 2 +- icuSources/data/unit/en_LC.txt | 2 +- icuSources/data/unit/en_LR.txt | 2 +- icuSources/data/unit/en_LS.txt | 2 +- icuSources/data/unit/en_MG.txt | 2 +- icuSources/data/unit/en_MO.txt | 2 +- icuSources/data/unit/en_MS.txt | 2 +- icuSources/data/unit/en_MT.txt | 2 +- icuSources/data/unit/en_MU.txt | 2 +- icuSources/data/unit/en_MW.txt | 2 +- icuSources/data/unit/en_MY.txt | 2 +- icuSources/data/unit/en_NA.txt | 2 +- icuSources/data/unit/en_NF.txt | 2 +- icuSources/data/unit/en_NG.txt | 2 +- icuSources/data/unit/en_NL.txt | 2 +- icuSources/data/unit/en_NR.txt | 2 +- icuSources/data/unit/en_NU.txt | 2 +- icuSources/data/unit/en_NZ.txt | 2 +- icuSources/data/unit/en_PG.txt | 2 +- icuSources/data/unit/en_PH.txt | 2 +- icuSources/data/unit/en_PK.txt | 2 +- icuSources/data/unit/en_PN.txt | 2 +- icuSources/data/unit/en_PW.txt | 2 +- icuSources/data/unit/en_RW.txt | 2 +- icuSources/data/unit/en_SB.txt | 2 +- icuSources/data/unit/en_SC.txt | 2 +- icuSources/data/unit/en_SD.txt | 2 +- icuSources/data/unit/en_SE.txt | 2 +- icuSources/data/unit/en_SG.txt | 2 +- icuSources/data/unit/en_SH.txt | 2 +- icuSources/data/unit/en_SI.txt | 2 +- icuSources/data/unit/en_SL.txt | 2 +- icuSources/data/unit/en_SS.txt | 2 +- icuSources/data/unit/en_SX.txt | 2 +- icuSources/data/unit/en_SZ.txt | 2 +- icuSources/data/unit/en_TC.txt | 2 +- icuSources/data/unit/en_TK.txt | 2 +- icuSources/data/unit/en_TO.txt | 2 +- icuSources/data/unit/en_TT.txt | 2 +- icuSources/data/unit/en_TV.txt | 2 +- icuSources/data/unit/en_TZ.txt | 2 +- icuSources/data/unit/en_UG.txt | 2 +- icuSources/data/unit/en_VC.txt | 2 +- icuSources/data/unit/en_VG.txt | 2 +- icuSources/data/unit/en_VU.txt | 2 +- icuSources/data/unit/en_WS.txt | 2 +- icuSources/data/unit/en_ZA.txt | 2 +- icuSources/data/unit/en_ZM.txt | 2 +- icuSources/data/unit/en_ZW.txt | 2 +- icuSources/data/unit/eo.txt | 2 +- icuSources/data/unit/es.txt | 106 +- icuSources/data/unit/es_419.txt | 114 +- icuSources/data/unit/es_AR.txt | 3 +- icuSources/data/unit/es_BO.txt | 2 +- icuSources/data/unit/es_BR.txt | 2 +- icuSources/data/unit/es_BZ.txt | 2 +- icuSources/data/unit/es_CL.txt | 2 +- icuSources/data/unit/es_CO.txt | 2 +- icuSources/data/unit/es_CR.txt | 2 +- icuSources/data/unit/es_CU.txt | 2 +- icuSources/data/unit/es_DO.txt | 2 +- icuSources/data/unit/es_EC.txt | 2 +- icuSources/data/unit/es_GT.txt | 7 +- icuSources/data/unit/es_HN.txt | 2 +- icuSources/data/unit/es_MX.txt | 50 +- icuSources/data/unit/es_NI.txt | 2 +- icuSources/data/unit/es_PA.txt | 2 +- icuSources/data/unit/es_PE.txt | 2 +- icuSources/data/unit/es_PR.txt | 2 +- icuSources/data/unit/es_PY.txt | 2 +- icuSources/data/unit/es_SV.txt | 2 +- icuSources/data/unit/es_US.txt | 68 +- icuSources/data/unit/es_UY.txt | 2 +- icuSources/data/unit/es_VE.txt | 2 +- icuSources/data/unit/et.txt | 185 +- icuSources/data/unit/eu.txt | 18 +- icuSources/data/unit/ewo.txt | 2 +- icuSources/data/unit/fa.txt | 112 +- icuSources/data/unit/ff.txt | 2 +- icuSources/data/unit/fi.txt | 12 +- icuSources/data/unit/fil.txt | 203 +- icuSources/data/unit/fo.txt | 28 +- icuSources/data/unit/fr.txt | 214 +- icuSources/data/unit/fr_CA.txt | 169 +- icuSources/data/unit/fr_HT.txt | 2 +- icuSources/data/unit/fur.txt | 2 +- icuSources/data/unit/fy.txt | 2 +- icuSources/data/unit/ga.txt | 386 +- icuSources/data/unit/gd.txt | 137 +- icuSources/data/unit/gl.txt | 14 +- icuSources/data/unit/gsw.txt | 2 +- icuSources/data/unit/gu.txt | 62 +- icuSources/data/unit/guz.txt | 2 +- icuSources/data/unit/gv.txt | 2 +- icuSources/data/unit/ha.txt | 2 +- icuSources/data/unit/haw.txt | 2 +- icuSources/data/unit/he.txt | 324 +- icuSources/data/unit/hi.txt | 43 +- icuSources/data/unit/hr.txt | 4 +- icuSources/data/unit/hsb.txt | 2 +- icuSources/data/unit/hu.txt | 67 +- icuSources/data/unit/hy.txt | 66 +- icuSources/data/unit/id.txt | 160 +- icuSources/data/unit/ig.txt | 2 +- icuSources/data/unit/ii.txt | 2 +- icuSources/data/unit/is.txt | 267 +- icuSources/data/unit/it.txt | 15 +- icuSources/data/unit/iu.txt | 2 +- icuSources/data/unit/ja.txt | 106 +- icuSources/data/unit/jgo.txt | 2 +- icuSources/data/unit/jmc.txt | 2 +- icuSources/data/unit/ka.txt | 12 +- icuSources/data/unit/kab.txt | 2 +- icuSources/data/unit/kam.txt | 2 +- icuSources/data/unit/kde.txt | 2 +- icuSources/data/unit/kea.txt | 2 +- icuSources/data/unit/khq.txt | 2 +- icuSources/data/unit/ki.txt | 2 +- icuSources/data/unit/kk.txt | 12 +- icuSources/data/unit/kkj.txt | 2 +- icuSources/data/unit/kl.txt | 2 +- icuSources/data/unit/kln.txt | 2 +- icuSources/data/unit/km.txt | 10 +- icuSources/data/unit/kn.txt | 99 +- icuSources/data/unit/ko.txt | 174 +- icuSources/data/unit/kok.txt | 7 +- icuSources/data/unit/ks.txt | 2 +- icuSources/data/unit/ksb.txt | 2 +- icuSources/data/unit/ksf.txt | 2 +- icuSources/data/unit/ksh.txt | 2 +- icuSources/data/unit/kw.txt | 2 +- icuSources/data/unit/ky.txt | 20 +- icuSources/data/unit/lag.txt | 2 +- icuSources/data/unit/lb.txt | 2 +- icuSources/data/unit/lg.txt | 2 +- icuSources/data/unit/lkt.txt | 2 +- icuSources/data/unit/ln.txt | 2 +- icuSources/data/unit/lo.txt | 10 +- icuSources/data/unit/lrc.txt | 9 +- icuSources/data/unit/lt.txt | 151 +- icuSources/data/unit/lu.txt | 2 +- icuSources/data/unit/luo.txt | 2 +- icuSources/data/unit/luy.txt | 2 +- icuSources/data/unit/lv.txt | 544 +- icuSources/data/unit/mas.txt | 2 +- icuSources/data/unit/mer.txt | 2 +- icuSources/data/unit/mfe.txt | 2 +- icuSources/data/unit/mg.txt | 2 +- icuSources/data/unit/mgh.txt | 2 +- icuSources/data/unit/mgo.txt | 2 +- icuSources/data/unit/mk.txt | 134 +- icuSources/data/unit/ml.txt | 196 +- icuSources/data/unit/mn.txt | 36 +- icuSources/data/unit/mr.txt | 141 +- icuSources/data/unit/ms.txt | 184 +- icuSources/data/unit/ms_Arab.txt | 2 +- icuSources/data/unit/mt.txt | 2 +- icuSources/data/unit/mua.txt | 2 +- icuSources/data/unit/my.txt | 160 +- icuSources/data/unit/mzn.txt | 2 +- icuSources/data/unit/naq.txt | 2 +- icuSources/data/unit/nb.txt | 114 +- icuSources/data/unit/nd.txt | 2 +- icuSources/data/unit/nds.txt | 2 +- icuSources/data/unit/ne.txt | 110 +- icuSources/data/unit/nl.txt | 176 +- icuSources/data/unit/nmg.txt | 2 +- icuSources/data/unit/nn.txt | 1516 +- icuSources/data/unit/nnh.txt | 2 +- icuSources/data/unit/nus.txt | 2 +- icuSources/data/unit/nyn.txt | 2 +- icuSources/data/unit/om.txt | 2 +- icuSources/data/unit/or.txt | 1578 +- icuSources/data/unit/os.txt | 2 +- icuSources/data/unit/pa.txt | 49 +- icuSources/data/unit/pa_Arab.txt | 2 +- icuSources/data/unit/pa_Guru.txt | 2 +- icuSources/data/unit/pl.txt | 80 +- icuSources/data/unit/pool.res | Bin 70432 -> 77844 bytes icuSources/data/unit/ps.txt | 1568 +- icuSources/data/unit/pt.txt | 212 +- icuSources/data/unit/pt_AO.txt | 2 +- icuSources/data/unit/pt_CH.txt | 2 +- icuSources/data/unit/pt_CV.txt | 2 +- icuSources/data/unit/pt_GQ.txt | 2 +- icuSources/data/unit/pt_GW.txt | 2 +- icuSources/data/unit/pt_LU.txt | 2 +- icuSources/data/unit/pt_MO.txt | 2 +- icuSources/data/unit/pt_MZ.txt | 2 +- icuSources/data/unit/pt_PT.txt | 51 +- icuSources/data/unit/pt_ST.txt | 2 +- icuSources/data/unit/pt_TL.txt | 2 +- icuSources/data/unit/qu.txt | 7 +- icuSources/data/unit/resfiles.mk | 135 +- icuSources/data/unit/reslocal.mk | 4 +- icuSources/data/unit/rm.txt | 2 +- icuSources/data/unit/rn.txt | 2 +- icuSources/data/unit/ro.txt | 180 +- icuSources/data/unit/ro_MD.txt | 2 +- icuSources/data/unit/rof.txt | 2 +- icuSources/data/unit/root.txt | 2 +- icuSources/data/unit/ru.txt | 280 +- icuSources/data/unit/rw.txt | 2 +- icuSources/data/unit/rwk.txt | 2 +- icuSources/data/unit/sah.txt | 2 +- icuSources/data/unit/saq.txt | 2 +- icuSources/data/unit/sbp.txt | 2 +- icuSources/data/unit/se.txt | 2 +- icuSources/data/unit/seh.txt | 2 +- icuSources/data/unit/ses.txt | 2 +- icuSources/data/unit/sg.txt | 2 +- icuSources/data/unit/shi.txt | 2 +- icuSources/data/unit/shi_Latn.txt | 2 +- icuSources/data/unit/shi_Tfng.txt | 2 +- icuSources/data/unit/si.txt | 40 +- icuSources/data/unit/sk.txt | 226 +- icuSources/data/unit/sl.txt | 359 +- icuSources/data/unit/smn.txt | 2 +- icuSources/data/unit/sn.txt | 2 +- icuSources/data/unit/so.txt | 2 +- icuSources/data/unit/sq.txt | 18 +- icuSources/data/unit/sr.txt | 42 +- icuSources/data/unit/sr_Cyrl.txt | 2 +- icuSources/data/unit/sr_Latn.txt | 42 +- icuSources/data/unit/sv.txt | 9 +- icuSources/data/unit/sv_FI.txt | 2 +- icuSources/data/unit/sw.txt | 36 +- icuSources/data/unit/ta.txt | 84 +- icuSources/data/unit/te.txt | 120 +- icuSources/data/unit/teo.txt | 2 +- icuSources/data/unit/tg.txt | 7 +- icuSources/data/unit/th.txt | 40 +- icuSources/data/unit/ti.txt | 7 +- icuSources/data/unit/tk.txt | 280 +- icuSources/data/unit/to.txt | 44 +- icuSources/data/unit/tr.txt | 97 +- icuSources/data/unit/tt.txt | 10 + icuSources/data/unit/twq.txt | 2 +- icuSources/data/unit/tzm.txt | 2 +- icuSources/data/unit/ug.txt | 2 +- icuSources/data/unit/uk.txt | 157 +- icuSources/data/unit/ur.txt | 328 +- icuSources/data/unit/ur_IN.txt | 2 +- icuSources/data/unit/uz.txt | 16 +- icuSources/data/unit/uz_Arab.txt | 2 +- icuSources/data/unit/uz_Cyrl.txt | 2 +- icuSources/data/unit/uz_Latn.txt | 2 +- icuSources/data/unit/vai.txt | 2 +- icuSources/data/unit/vai_Latn.txt | 2 +- icuSources/data/unit/vai_Vaii.txt | 2 +- icuSources/data/unit/vi.txt | 18 +- icuSources/data/unit/vun.txt | 2 +- icuSources/data/unit/wae.txt | 2 +- icuSources/data/unit/wo.txt | 10 + icuSources/data/unit/wuu.txt | 5 + icuSources/data/unit/xog.txt | 2 +- icuSources/data/unit/yav.txt | 2 +- icuSources/data/unit/yi.txt | 2 +- icuSources/data/unit/yo.txt | 2 +- icuSources/data/unit/yue.txt | 297 +- icuSources/data/unit/yue_Hans.txt | 51 +- icuSources/data/unit/yue_Hant.txt | 2 +- icuSources/data/unit/zgh.txt | 2 +- icuSources/data/unit/zh.txt | 248 +- icuSources/data/unit/zh_Hans.txt | 2 +- icuSources/data/unit/zh_Hans_HK.txt | 2 +- icuSources/data/unit/zh_Hans_MO.txt | 2 +- icuSources/data/unit/zh_Hans_SG.txt | 2 +- icuSources/data/unit/zh_Hant.txt | 184 +- icuSources/data/unit/zh_Hant_HK.txt | 153 +- icuSources/data/unit/zh_Hant_MO.txt | 2 +- icuSources/data/unit/zu.txt | 12 +- icuSources/data/xml/brkitr/de.xml | 2 +- icuSources/data/xml/brkitr/el.xml | 2 +- icuSources/data/xml/brkitr/en.xml | 2 +- icuSources/data/xml/brkitr/en_US.xml | 2 +- icuSources/data/xml/brkitr/en_US_POSIX.xml | 2 +- icuSources/data/xml/brkitr/es.xml | 2 +- icuSources/data/xml/brkitr/fi.xml | 2 +- icuSources/data/xml/brkitr/fr.xml | 2 +- icuSources/data/xml/brkitr/it.xml | 2 +- icuSources/data/xml/brkitr/ja.xml | 2 +- icuSources/data/xml/brkitr/pt.xml | 2 +- icuSources/data/xml/brkitr/root.xml | 2 +- icuSources/data/xml/brkitr/ru.xml | 2 +- icuSources/data/xml/collation/root.xml | 2 +- icuSources/data/xml/main/root.xml | 2 +- icuSources/data/xml/rbnf/be.xml | 2 +- icuSources/data/xml/rbnf/bg.xml | 2 +- icuSources/data/xml/rbnf/ca.xml | 2 +- icuSources/data/xml/rbnf/cy.xml | 2 +- icuSources/data/xml/rbnf/da.xml | 2 +- icuSources/data/xml/rbnf/de.xml | 2 +- icuSources/data/xml/rbnf/en.xml | 2 +- icuSources/data/xml/rbnf/fo.xml | 2 +- icuSources/data/xml/rbnf/ga.xml | 2 +- icuSources/data/xml/rbnf/is.xml | 2 +- icuSources/data/xml/rbnf/mk.xml | 2 +- icuSources/data/xml/rbnf/mt.xml | 2 +- icuSources/data/xml/rbnf/nb.xml | 2 +- icuSources/data/xml/rbnf/nn.xml | 2 +- icuSources/data/xml/rbnf/root.xml | 2 +- icuSources/data/xml/rbnf/ru.xml | 2 +- icuSources/data/xml/rbnf/sr.xml | 2 +- icuSources/data/xml/rbnf/uk.xml | 2 +- icuSources/data/zone/af.txt | 144 +- icuSources/data/zone/agq.txt | 2 +- icuSources/data/zone/ak.txt | 2 +- icuSources/data/zone/am.txt | 40 +- icuSources/data/zone/ar.txt | 40 +- icuSources/data/zone/as.txt | 1876 +- icuSources/data/zone/asa.txt | 2 +- icuSources/data/zone/ast.txt | 5 +- icuSources/data/zone/az.txt | 30 +- icuSources/data/zone/az_Cyrl.txt | 2 +- icuSources/data/zone/az_Latn.txt | 2 +- icuSources/data/zone/bas.txt | 2 +- icuSources/data/zone/be.txt | 29 +- icuSources/data/zone/bem.txt | 2 +- icuSources/data/zone/bez.txt | 2 +- icuSources/data/zone/bg.txt | 78 +- icuSources/data/zone/bm.txt | 2 +- icuSources/data/zone/bn.txt | 98 +- icuSources/data/zone/bo.txt | 2 +- icuSources/data/zone/br.txt | 2 +- icuSources/data/zone/brx.txt | 2 +- icuSources/data/zone/bs.txt | 53 +- icuSources/data/zone/bs_Cyrl.txt | 2 +- icuSources/data/zone/bs_Latn.txt | 2 +- icuSources/data/zone/ca.txt | 16 +- icuSources/data/zone/ccp.txt | 1989 + icuSources/data/zone/ce.txt | 57 +- icuSources/data/zone/cgg.txt | 2 +- icuSources/data/zone/chr.txt | 17 +- icuSources/data/zone/ckb.txt | 2 +- icuSources/data/zone/cs.txt | 38 +- icuSources/data/zone/cy.txt | 62 +- icuSources/data/zone/da.txt | 170 +- icuSources/data/zone/dav.txt | 2 +- icuSources/data/zone/de.txt | 14 +- icuSources/data/zone/de_CH.txt | 10 + icuSources/data/zone/dje.txt | 2 +- icuSources/data/zone/dsb.txt | 2 +- icuSources/data/zone/dua.txt | 2 +- icuSources/data/zone/dyo.txt | 2 +- icuSources/data/zone/dz.txt | 2 +- icuSources/data/zone/ebu.txt | 2 +- icuSources/data/zone/ee.txt | 1494 +- icuSources/data/zone/el.txt | 212 +- icuSources/data/zone/en.txt | 12 +- icuSources/data/zone/en_001.txt | 2 +- icuSources/data/zone/en_150.txt | 2 +- icuSources/data/zone/en_AG.txt | 2 +- icuSources/data/zone/en_AI.txt | 2 +- icuSources/data/zone/en_AT.txt | 2 +- icuSources/data/zone/en_AU.txt | 13 +- icuSources/data/zone/en_BB.txt | 2 +- icuSources/data/zone/en_BE.txt | 2 +- icuSources/data/zone/en_BM.txt | 2 +- icuSources/data/zone/en_BS.txt | 2 +- icuSources/data/zone/en_BW.txt | 2 +- icuSources/data/zone/en_BZ.txt | 2 +- icuSources/data/zone/en_CA.txt | 10 +- icuSources/data/zone/en_CC.txt | 2 +- icuSources/data/zone/en_CH.txt | 2 +- icuSources/data/zone/en_CK.txt | 2 +- icuSources/data/zone/en_CM.txt | 2 +- icuSources/data/zone/en_CX.txt | 2 +- icuSources/data/zone/en_CY.txt | 2 +- icuSources/data/zone/en_DE.txt | 2 +- icuSources/data/zone/en_DG.txt | 2 +- icuSources/data/zone/en_DK.txt | 2 +- icuSources/data/zone/en_DM.txt | 2 +- icuSources/data/zone/en_ER.txt | 2 +- icuSources/data/zone/en_FI.txt | 2 +- icuSources/data/zone/en_FJ.txt | 2 +- icuSources/data/zone/en_FK.txt | 2 +- icuSources/data/zone/en_FM.txt | 2 +- icuSources/data/zone/en_GB.txt | 46 +- icuSources/data/zone/en_GD.txt | 2 +- icuSources/data/zone/en_GG.txt | 2 +- icuSources/data/zone/en_GH.txt | 2 +- icuSources/data/zone/en_GI.txt | 2 +- icuSources/data/zone/en_GM.txt | 2 +- icuSources/data/zone/en_GU.txt | 2 +- icuSources/data/zone/en_GY.txt | 2 +- icuSources/data/zone/en_HK.txt | 2 +- icuSources/data/zone/en_IE.txt | 2 +- icuSources/data/zone/en_IL.txt | 2 +- icuSources/data/zone/en_IM.txt | 2 +- icuSources/data/zone/en_IN.txt | 5 +- icuSources/data/zone/en_IO.txt | 2 +- icuSources/data/zone/en_JE.txt | 2 +- icuSources/data/zone/en_JM.txt | 2 +- icuSources/data/zone/en_KE.txt | 2 +- icuSources/data/zone/en_KI.txt | 2 +- icuSources/data/zone/en_KN.txt | 2 +- icuSources/data/zone/en_KY.txt | 2 +- icuSources/data/zone/en_LC.txt | 2 +- icuSources/data/zone/en_LR.txt | 2 +- icuSources/data/zone/en_LS.txt | 2 +- icuSources/data/zone/en_MG.txt | 2 +- icuSources/data/zone/en_MH.txt | 2 +- icuSources/data/zone/en_MO.txt | 2 +- icuSources/data/zone/en_MP.txt | 2 +- icuSources/data/zone/en_MS.txt | 2 +- icuSources/data/zone/en_MT.txt | 2 +- icuSources/data/zone/en_MU.txt | 2 +- icuSources/data/zone/en_MW.txt | 2 +- icuSources/data/zone/en_MY.txt | 2 +- icuSources/data/zone/en_NA.txt | 2 +- icuSources/data/zone/en_NF.txt | 2 +- icuSources/data/zone/en_NG.txt | 2 +- icuSources/data/zone/en_NL.txt | 2 +- icuSources/data/zone/en_NR.txt | 2 +- icuSources/data/zone/en_NU.txt | 2 +- icuSources/data/zone/en_NZ.txt | 2 +- icuSources/data/zone/en_PG.txt | 2 +- icuSources/data/zone/en_PH.txt | 2 +- icuSources/data/zone/en_PK.txt | 2 +- icuSources/data/zone/en_PN.txt | 2 +- icuSources/data/zone/en_PW.txt | 2 +- icuSources/data/zone/en_RW.txt | 2 +- icuSources/data/zone/en_SB.txt | 2 +- icuSources/data/zone/en_SC.txt | 2 +- icuSources/data/zone/en_SD.txt | 2 +- icuSources/data/zone/en_SE.txt | 2 +- icuSources/data/zone/en_SG.txt | 2 +- icuSources/data/zone/en_SH.txt | 2 +- icuSources/data/zone/en_SI.txt | 2 +- icuSources/data/zone/en_SL.txt | 2 +- icuSources/data/zone/en_SS.txt | 2 +- icuSources/data/zone/en_SX.txt | 2 +- icuSources/data/zone/en_SZ.txt | 2 +- icuSources/data/zone/en_TC.txt | 2 +- icuSources/data/zone/en_TK.txt | 2 +- icuSources/data/zone/en_TO.txt | 2 +- icuSources/data/zone/en_TT.txt | 2 +- icuSources/data/zone/en_TV.txt | 2 +- icuSources/data/zone/en_TZ.txt | 2 +- icuSources/data/zone/en_UG.txt | 2 +- icuSources/data/zone/en_VC.txt | 2 +- icuSources/data/zone/en_VG.txt | 2 +- icuSources/data/zone/en_VU.txt | 2 +- icuSources/data/zone/en_WS.txt | 2 +- icuSources/data/zone/en_ZA.txt | 2 +- icuSources/data/zone/en_ZM.txt | 2 +- icuSources/data/zone/en_ZW.txt | 2 +- icuSources/data/zone/eo.txt | 2 +- icuSources/data/zone/es.txt | 86 +- icuSources/data/zone/es_419.txt | 57 +- icuSources/data/zone/es_AR.txt | 2 +- icuSources/data/zone/es_BO.txt | 2 +- icuSources/data/zone/es_BR.txt | 2 +- icuSources/data/zone/es_BZ.txt | 2 +- icuSources/data/zone/es_CL.txt | 2 +- icuSources/data/zone/es_CO.txt | 2 +- icuSources/data/zone/es_CR.txt | 2 +- icuSources/data/zone/es_CU.txt | 2 +- icuSources/data/zone/es_DO.txt | 2 +- icuSources/data/zone/es_EC.txt | 2 +- icuSources/data/zone/es_GT.txt | 2 +- icuSources/data/zone/es_HN.txt | 2 +- icuSources/data/zone/es_MX.txt | 451 +- icuSources/data/zone/es_NI.txt | 2 +- icuSources/data/zone/es_PA.txt | 2 +- icuSources/data/zone/es_PE.txt | 2 +- icuSources/data/zone/es_PR.txt | 2 +- icuSources/data/zone/es_PY.txt | 2 +- icuSources/data/zone/es_SV.txt | 2 +- icuSources/data/zone/es_US.txt | 95 +- icuSources/data/zone/es_UY.txt | 2 +- icuSources/data/zone/es_VE.txt | 2 +- icuSources/data/zone/et.txt | 54 +- icuSources/data/zone/eu.txt | 433 +- icuSources/data/zone/ewo.txt | 2 +- icuSources/data/zone/fa.txt | 18 +- icuSources/data/zone/ff.txt | 2 +- icuSources/data/zone/fi.txt | 28 +- icuSources/data/zone/fil.txt | 71 +- icuSources/data/zone/fo.txt | 21 +- icuSources/data/zone/fr.txt | 14 +- icuSources/data/zone/fr_CA.txt | 26 +- icuSources/data/zone/fr_GF.txt | 2 +- icuSources/data/zone/fur.txt | 2 +- icuSources/data/zone/fy.txt | 2 +- icuSources/data/zone/ga.txt | 50 +- icuSources/data/zone/gd.txt | 38 +- icuSources/data/zone/gl.txt | 130 +- icuSources/data/zone/gsw.txt | 2 +- icuSources/data/zone/gu.txt | 174 +- icuSources/data/zone/guz.txt | 2 +- icuSources/data/zone/gv.txt | 2 +- icuSources/data/zone/ha.txt | 2 +- icuSources/data/zone/haw.txt | 2 +- icuSources/data/zone/he.txt | 24 +- icuSources/data/zone/hi.txt | 48 +- icuSources/data/zone/hr.txt | 64 +- icuSources/data/zone/hsb.txt | 2 +- icuSources/data/zone/hu.txt | 52 +- icuSources/data/zone/hy.txt | 22 +- icuSources/data/zone/id.txt | 14 +- icuSources/data/zone/ig.txt | 2 +- icuSources/data/zone/ii.txt | 2 +- icuSources/data/zone/is.txt | 44 +- icuSources/data/zone/it.txt | 14 +- icuSources/data/zone/iu.txt | 2 +- icuSources/data/zone/ja.txt | 18 +- icuSources/data/zone/jgo.txt | 2 +- icuSources/data/zone/jmc.txt | 2 +- icuSources/data/zone/ka.txt | 14 +- icuSources/data/zone/kab.txt | 2 +- icuSources/data/zone/kam.txt | 2 +- icuSources/data/zone/kde.txt | 2 +- icuSources/data/zone/kea.txt | 2 +- icuSources/data/zone/khq.txt | 2 +- icuSources/data/zone/ki.txt | 2 +- icuSources/data/zone/kk.txt | 122 +- icuSources/data/zone/kkj.txt | 2 +- icuSources/data/zone/kl.txt | 2 +- icuSources/data/zone/kln.txt | 2 +- icuSources/data/zone/km.txt | 348 +- icuSources/data/zone/kn.txt | 25 +- icuSources/data/zone/ko.txt | 22 +- icuSources/data/zone/ko_KP.txt | 2 +- icuSources/data/zone/kok.txt | 14 +- icuSources/data/zone/ks.txt | 2 +- icuSources/data/zone/ksb.txt | 2 +- icuSources/data/zone/ksf.txt | 2 +- icuSources/data/zone/ksh.txt | 2 +- icuSources/data/zone/kw.txt | 2 +- icuSources/data/zone/ky.txt | 17 +- icuSources/data/zone/lag.txt | 2 +- icuSources/data/zone/lb.txt | 2 +- icuSources/data/zone/lg.txt | 2 +- icuSources/data/zone/lkt.txt | 2 +- icuSources/data/zone/ln.txt | 2 +- icuSources/data/zone/lo.txt | 17 +- icuSources/data/zone/lrc.txt | 2 +- icuSources/data/zone/lt.txt | 16 +- icuSources/data/zone/lu.txt | 2 +- icuSources/data/zone/luo.txt | 2 +- icuSources/data/zone/luy.txt | 2 +- icuSources/data/zone/lv.txt | 20 +- icuSources/data/zone/mas.txt | 2 +- icuSources/data/zone/mer.txt | 2 +- icuSources/data/zone/mfe.txt | 2 +- icuSources/data/zone/mg.txt | 2 +- icuSources/data/zone/mgh.txt | 2 +- icuSources/data/zone/mgo.txt | 2 +- icuSources/data/zone/mk.txt | 78 +- icuSources/data/zone/ml.txt | 40 +- icuSources/data/zone/mn.txt | 120 +- icuSources/data/zone/mr.txt | 26 +- icuSources/data/zone/ms.txt | 22 +- icuSources/data/zone/ms_Arab.txt | 2 +- icuSources/data/zone/mt.txt | 2 +- icuSources/data/zone/mua.txt | 2 +- icuSources/data/zone/my.txt | 274 +- icuSources/data/zone/mzn.txt | 2 +- icuSources/data/zone/naq.txt | 2 +- icuSources/data/zone/nb.txt | 54 +- icuSources/data/zone/nd.txt | 2 +- icuSources/data/zone/nds.txt | 2 +- icuSources/data/zone/ne.txt | 64 +- icuSources/data/zone/ne_IN.txt | 2 +- icuSources/data/zone/nl.txt | 20 +- icuSources/data/zone/nl_SR.txt | 2 +- icuSources/data/zone/nmg.txt | 2 +- icuSources/data/zone/nn.txt | 1820 +- icuSources/data/zone/nnh.txt | 2 +- icuSources/data/zone/nus.txt | 2 +- icuSources/data/zone/nyn.txt | 2 +- icuSources/data/zone/om.txt | 2 +- icuSources/data/zone/or.txt | 1875 +- icuSources/data/zone/os.txt | 2 +- icuSources/data/zone/pa.txt | 17 +- icuSources/data/zone/pa_Arab.txt | 2 +- icuSources/data/zone/pa_Guru.txt | 2 +- icuSources/data/zone/pl.txt | 200 +- icuSources/data/zone/pool.res | Bin 87772 -> 93188 bytes icuSources/data/zone/ps.txt | 1749 +- icuSources/data/zone/pt.txt | 98 +- icuSources/data/zone/pt_AO.txt | 2 +- icuSources/data/zone/pt_CH.txt | 2 +- icuSources/data/zone/pt_CV.txt | 2 +- icuSources/data/zone/pt_GQ.txt | 2 +- icuSources/data/zone/pt_GW.txt | 2 +- icuSources/data/zone/pt_LU.txt | 2 +- icuSources/data/zone/pt_MO.txt | 2 +- icuSources/data/zone/pt_MZ.txt | 2 +- icuSources/data/zone/pt_PT.txt | 67 +- icuSources/data/zone/pt_ST.txt | 2 +- icuSources/data/zone/pt_TL.txt | 2 +- icuSources/data/zone/qu.txt | 1497 +- icuSources/data/zone/qu_BO.txt | 2 +- icuSources/data/zone/qu_EC.txt | 2 +- icuSources/data/zone/resfiles.mk | 133 +- icuSources/data/zone/reslocal.mk | 4 +- icuSources/data/zone/rm.txt | 2 +- icuSources/data/zone/rn.txt | 2 +- icuSources/data/zone/ro.txt | 24 +- icuSources/data/zone/rof.txt | 2 +- icuSources/data/zone/root.txt | 5 +- icuSources/data/zone/ru.txt | 24 +- icuSources/data/zone/rw.txt | 2 +- icuSources/data/zone/rwk.txt | 2 +- icuSources/data/zone/sah.txt | 2 +- icuSources/data/zone/saq.txt | 2 +- icuSources/data/zone/sbp.txt | 2 +- icuSources/data/zone/se.txt | 2 +- icuSources/data/zone/se_FI.txt | 739 + icuSources/data/zone/seh.txt | 2 +- icuSources/data/zone/ses.txt | 2 +- icuSources/data/zone/sg.txt | 2 +- icuSources/data/zone/shi.txt | 2 +- icuSources/data/zone/shi_Latn.txt | 2 +- icuSources/data/zone/shi_Tfng.txt | 2 +- icuSources/data/zone/si.txt | 27 +- icuSources/data/zone/sk.txt | 64 +- icuSources/data/zone/sl.txt | 38 +- icuSources/data/zone/smn.txt | 2 +- icuSources/data/zone/sn.txt | 2 +- icuSources/data/zone/so.txt | 2 +- icuSources/data/zone/sq.txt | 78 +- icuSources/data/zone/sr.txt | 298 +- icuSources/data/zone/sr_Cyrl.txt | 2 +- icuSources/data/zone/sr_Latn.txt | 298 +- icuSources/data/zone/sv.txt | 15 +- icuSources/data/zone/sw.txt | 125 +- icuSources/data/zone/ta.txt | 17 +- icuSources/data/zone/ta_MY.txt | 2 +- icuSources/data/zone/ta_SG.txt | 2 +- icuSources/data/zone/te.txt | 165 +- icuSources/data/zone/teo.txt | 2 +- icuSources/data/zone/tg.txt | 63 +- icuSources/data/zone/th.txt | 14 +- icuSources/data/zone/ti.txt | 1282 +- icuSources/data/zone/tk.txt | 684 +- icuSources/data/zone/to.txt | 10 +- icuSources/data/zone/tr.txt | 42 +- icuSources/data/zone/tt.txt | 63 + icuSources/data/zone/twq.txt | 2 +- icuSources/data/zone/tzdbNames.txt | 8 +- icuSources/data/zone/tzm.txt | 2 +- icuSources/data/zone/ug.txt | 2 +- icuSources/data/zone/uk.txt | 196 +- icuSources/data/zone/ur.txt | 18 +- icuSources/data/zone/ur_IN.txt | 5 +- icuSources/data/zone/uz.txt | 29 +- icuSources/data/zone/uz_Arab.txt | 2 +- icuSources/data/zone/uz_Cyrl.txt | 2 +- icuSources/data/zone/uz_Latn.txt | 2 +- icuSources/data/zone/vai.txt | 2 +- icuSources/data/zone/vai_Latn.txt | 2 +- icuSources/data/zone/vai_Vaii.txt | 2 +- icuSources/data/zone/vi.txt | 76 +- icuSources/data/zone/vun.txt | 2 +- icuSources/data/zone/wae.txt | 2 +- icuSources/data/zone/wo.txt | 66 + icuSources/data/zone/wuu.txt | 5 + icuSources/data/zone/xog.txt | 2 +- icuSources/data/zone/yav.txt | 2 +- icuSources/data/zone/yi.txt | 2 +- icuSources/data/zone/yo.txt | 2 +- icuSources/data/zone/yue.txt | 24 +- icuSources/data/zone/yue_Hans.txt | 20 +- icuSources/data/zone/yue_Hant.txt | 2 +- icuSources/data/zone/zgh.txt | 2 +- icuSources/data/zone/zh.txt | 18 +- icuSources/data/zone/zh_Hans.txt | 2 +- icuSources/data/zone/zh_Hans_SG.txt | 2 +- icuSources/data/zone/zh_Hant.txt | 52 +- icuSources/data/zone/zh_Hant_HK.txt | 16 +- icuSources/data/zone/zh_Hant_MO.txt | 2 +- icuSources/data/zone/zu.txt | 11 +- icuSources/extra/uconv/makedata.mak | 27 +- icuSources/extra/uconv/uconv.1.in | 14 +- icuSources/extra/uconv/uconv.vcxproj | 142 +- icuSources/i18n/Makefile.in | 16 +- icuSources/i18n/affixpatternparser.cpp | 14 +- icuSources/i18n/alphaindex.cpp | 13 +- icuSources/i18n/anytrans.cpp | 4 +- icuSources/i18n/calendar.cpp | 208 +- icuSources/i18n/coll.cpp | 17 + icuSources/i18n/collationdatareader.cpp | 3 +- icuSources/i18n/collationdatawriter.cpp | 2 +- icuSources/i18n/collationfastlatinbuilder.cpp | 2 +- icuSources/i18n/collationfcd.cpp | 98 +- icuSources/i18n/collationiterator.h | 19 +- icuSources/i18n/collationweights.cpp | 2 +- icuSources/i18n/currpinf.cpp | 3 + icuSources/i18n/currunit.cpp | 55 +- icuSources/i18n/datefmt.cpp | 5 +- icuSources/i18n/dayperiodrules.cpp | 2 +- icuSources/i18n/dcfmtsym.cpp | 68 +- icuSources/i18n/decNumber.cpp | 32 +- icuSources/i18n/decfmtst.cpp | 4 +- icuSources/i18n/decimalformatpattern.cpp | 10 +- icuSources/i18n/decimfmt.cpp | 63 +- icuSources/i18n/decimfmtimpl.cpp | 22 +- icuSources/i18n/decimfmtimpl.h | 6 + icuSources/i18n/digitformatter.cpp | 2 +- icuSources/i18n/digitlst.cpp | 61 +- icuSources/i18n/digitlst.h | 2 + .../i18n/double-conversion-bignum-dtoa.cpp | 659 + .../i18n/double-conversion-bignum-dtoa.h | 102 + icuSources/i18n/double-conversion-bignum.cpp | 784 + icuSources/i18n/double-conversion-bignum.h | 162 + .../i18n/double-conversion-cached-powers.cpp | 193 + .../i18n/double-conversion-cached-powers.h | 82 + icuSources/i18n/double-conversion-diy-fp.cpp | 74 + icuSources/i18n/double-conversion-diy-fp.h | 136 + .../i18n/double-conversion-fast-dtoa.cpp | 683 + icuSources/i18n/double-conversion-fast-dtoa.h | 106 + icuSources/i18n/double-conversion-ieee.h | 420 + icuSources/i18n/double-conversion-strtod.cpp | 574 + icuSources/i18n/double-conversion-strtod.h | 63 + icuSources/i18n/double-conversion-utils.h | 358 + icuSources/i18n/double-conversion.cpp | 1004 + icuSources/i18n/double-conversion.h | 566 + icuSources/i18n/dtfmtsym.cpp | 22 +- icuSources/i18n/dtptngen.cpp | 360 +- icuSources/i18n/dtptngen_impl.h | 8 +- icuSources/i18n/fmtable.cpp | 72 + icuSources/i18n/fphdlimp.cpp | 21 +- icuSources/i18n/fphdlimp.h | 23 +- icuSources/i18n/gregocal.cpp | 3 + icuSources/i18n/i18n.vcxproj | 1419 +- icuSources/i18n/i18n.vcxproj.filters | 570 +- icuSources/i18n/i18n_uwp.vcxproj | 563 +- icuSources/i18n/measfmt.cpp | 60 +- icuSources/i18n/measunit.cpp | 223 +- icuSources/i18n/msgfmt.cpp | 27 +- icuSources/i18n/nfrs.cpp | 35 +- icuSources/i18n/nfrs.h | 7 +- icuSources/i18n/nfrule.cpp | 6 + icuSources/i18n/nfrule.h | 2 + icuSources/i18n/nfsubs.cpp | 29 +- icuSources/i18n/nfsubs.h | 1 + icuSources/i18n/nounit.cpp | 42 + icuSources/i18n/number_affixutils.cpp | 438 + icuSources/i18n/number_affixutils.h | 243 + icuSources/i18n/number_asformat.cpp | 105 + icuSources/i18n/number_asformat.h | 107 + icuSources/i18n/number_capi.cpp | 240 + icuSources/i18n/number_compact.cpp | 320 + icuSources/i18n/number_compact.h | 90 + icuSources/i18n/number_currencysymbols.cpp | 123 + icuSources/i18n/number_currencysymbols.h | 65 + icuSources/i18n/number_decimalquantity.cpp | 1184 + icuSources/i18n/number_decimalquantity.h | 483 + icuSources/i18n/number_decimfmtprops.cpp | 144 + icuSources/i18n/number_decimfmtprops.h | 163 + icuSources/i18n/number_decnum.h | 77 + icuSources/i18n/number_fluent.cpp | 853 + icuSources/i18n/number_formatimpl.cpp | 505 + icuSources/i18n/number_formatimpl.h | 150 + icuSources/i18n/number_grouping.cpp | 110 + icuSources/i18n/number_integerwidth.cpp | 67 + icuSources/i18n/number_longnames.cpp | 268 + icuSources/i18n/number_longnames.h | 56 + icuSources/i18n/number_mapper.cpp | 502 + icuSources/i18n/number_mapper.h | 206 + icuSources/i18n/number_microprops.h | 82 + icuSources/i18n/number_modifiers.cpp | 329 + icuSources/i18n/number_modifiers.h | 269 + icuSources/i18n/number_multiplier.cpp | 156 + icuSources/i18n/number_multiplier.h | 57 + icuSources/i18n/number_notation.cpp | 88 + icuSources/i18n/number_padding.cpp | 96 + icuSources/i18n/number_patternmodifier.cpp | 300 + icuSources/i18n/number_patternmodifier.h | 249 + icuSources/i18n/number_patternstring.cpp | 1070 + icuSources/i18n/number_patternstring.h | 293 + icuSources/i18n/number_rounding.cpp | 414 + icuSources/i18n/number_roundingutils.h | 196 + icuSources/i18n/number_scientific.cpp | 147 + icuSources/i18n/number_scientific.h | 62 + icuSources/i18n/number_skeletons.cpp | 1510 + icuSources/i18n/number_skeletons.h | 327 + icuSources/i18n/number_stringbuilder.cpp | 488 + icuSources/i18n/number_stringbuilder.h | 150 + icuSources/i18n/number_types.h | 303 + icuSources/i18n/number_utils.cpp | 253 + icuSources/i18n/number_utils.h | 94 + icuSources/i18n/number_utypes.h | 79 + icuSources/i18n/numfmt.cpp | 18 + icuSources/i18n/numparse_affixes.cpp | 495 + icuSources/i18n/numparse_affixes.h | 255 + icuSources/i18n/numparse_compositions.cpp | 107 + icuSources/i18n/numparse_compositions.h | 124 + icuSources/i18n/numparse_currency.cpp | 186 + icuSources/i18n/numparse_currency.h | 74 + icuSources/i18n/numparse_decimal.cpp | 458 + icuSources/i18n/numparse_decimal.h | 76 + icuSources/i18n/numparse_impl.cpp | 361 + icuSources/i18n/numparse_impl.h | 109 + icuSources/i18n/numparse_parsednumber.cpp | 122 + icuSources/i18n/numparse_scientific.cpp | 133 + icuSources/i18n/numparse_scientific.h | 45 + icuSources/i18n/numparse_stringsegment.cpp | 146 + icuSources/i18n/numparse_stringsegment.h | 24 + icuSources/i18n/numparse_symbols.cpp | 193 + icuSources/i18n/numparse_symbols.h | 173 + icuSources/i18n/numparse_types.h | 377 + icuSources/i18n/numparse_utils.h | 43 + icuSources/i18n/numparse_validators.cpp | 85 + icuSources/i18n/numparse_validators.h | 95 + icuSources/i18n/numsys.cpp | 7 + icuSources/i18n/plurrule.cpp | 130 +- icuSources/i18n/plurrule_impl.h | 217 +- icuSources/i18n/precision.cpp | 5 +- icuSources/i18n/rbnf.cpp | 88 +- icuSources/i18n/regexcmp.cpp | 6 +- icuSources/i18n/reldatefmt.cpp | 5 +- icuSources/i18n/rematch.cpp | 13 +- icuSources/i18n/simpletz.cpp | 4 +- icuSources/i18n/smpdtfmt.cpp | 48 +- icuSources/i18n/timezone.cpp | 5 +- icuSources/i18n/transreg.cpp | 23 +- icuSources/i18n/tzfmt.cpp | 45 +- icuSources/i18n/tzgnames.cpp | 10 +- icuSources/i18n/tznames_impl.cpp | 34 +- icuSources/i18n/tznames_impl.h | 5 + icuSources/i18n/ucal.cpp | 18 +- icuSources/i18n/ucln_in.h | 2 + icuSources/i18n/ucol.cpp | 1 + icuSources/i18n/ucol_res.cpp | 11 +- icuSources/i18n/ucol_sit.cpp | 11 +- icuSources/i18n/udatpg.cpp | 21 +- icuSources/i18n/umsg.cpp | 6 +- icuSources/i18n/unicode/calendar.h | 20 +- icuSources/i18n/unicode/coll.h | 4 +- .../i18n/unicode/compactdecimalformat.h | 10 +- icuSources/i18n/unicode/currunit.h | 23 +- icuSources/i18n/unicode/datefmt.h | 3 +- icuSources/i18n/unicode/dcfmtsym.h | 102 +- icuSources/i18n/unicode/decimfmt.h | 49 +- icuSources/i18n/unicode/dtitvinf.h | 2 - icuSources/i18n/unicode/dtptngen.h | 67 +- icuSources/i18n/unicode/fmtable.h | 31 + icuSources/i18n/unicode/fpositer.h | 4 +- icuSources/i18n/unicode/measfmt.h | 23 +- icuSources/i18n/unicode/measunit.h | 29 +- icuSources/i18n/unicode/nounit.h | 111 + icuSources/i18n/unicode/numberformatter.h | 2646 + icuSources/i18n/unicode/numfmt.h | 78 +- icuSources/i18n/unicode/plurrule.h | 6 +- icuSources/i18n/unicode/rbnf.h | 17 +- icuSources/i18n/unicode/simpletz.h | 6 +- icuSources/i18n/unicode/smpdtfmt.h | 10 + icuSources/i18n/unicode/timezone.h | 2 + icuSources/i18n/unicode/tznames.h | 6 +- icuSources/i18n/unicode/ucoleitr.h | 4 +- icuSources/i18n/unicode/udatpg.h | 53 +- icuSources/i18n/unicode/unum.h | 61 +- icuSources/i18n/unicode/unumberformatter.h | 717 + icuSources/i18n/unicode/upluralrules.h | 6 +- icuSources/i18n/unicode/uspoof.h | 74 +- icuSources/i18n/unicode/utrans.h | 4 +- icuSources/i18n/unum.cpp | 97 +- icuSources/i18n/uregex.cpp | 6 +- icuSources/i18n/uspoof.cpp | 203 +- icuSources/i18n/uspoof_build.cpp | 21 + icuSources/i18n/uspoof_conf.cpp | 38 +- icuSources/i18n/uspoof_conf.h | 2 + icuSources/i18n/uspoof_impl.cpp | 50 +- icuSources/i18n/uspoof_impl.h | 3 + icuSources/i18n/utf8collationiterator.cpp | 68 +- icuSources/i18n/utrans.cpp | 10 +- icuSources/i18n/visibledigits.cpp | 7 + icuSources/i18n/visibledigits.h | 8 +- icuSources/i18n/vtzone.cpp | 26 +- icuSources/i18n/windtfmt.cpp | 9 +- icuSources/i18n/winnmfmt.cpp | 8 +- icuSources/i18n/wintzimpl.cpp | 28 +- icuSources/i18n/zonemeta.cpp | 4 +- icuSources/io/io.vcxproj | 202 +- icuSources/io/ufile.cpp | 2 +- icuSources/io/ufmt_cmn.cpp | 2 +- icuSources/io/unicode/ustream.h | 7 - icuSources/io/ustream.cpp | 3 - icuSources/layoutex/layout/plruns.h | 3 + icuSources/layoutex/layoutex.vcxproj | 163 +- icuSources/samples/all/all.sln | 258 +- icuSources/samples/all/samplecheck.bat | 247 + icuSources/samples/break/break.cpp | 3 +- icuSources/samples/break/break.sln | 8 +- icuSources/samples/break/break.vcxproj | 114 +- icuSources/samples/cal/cal.sln | 8 +- icuSources/samples/cal/cal.vcxproj | 120 +- icuSources/samples/case/case.cpp | 2 + icuSources/samples/case/case.sln | 8 +- icuSources/samples/case/case.vcxproj | 103 +- icuSources/samples/case/ucase.c | 2 +- icuSources/samples/citer/citer.cpp | 5 + icuSources/samples/citer/citer.vcxproj | 76 +- icuSources/samples/coll/coll.cpp | 2 +- icuSources/samples/coll/coll.sln | 8 +- icuSources/samples/coll/coll.vcxproj | 89 +- icuSources/samples/csdet/csdet.vcxproj | 61 +- icuSources/samples/date/date.sln | 8 +- icuSources/samples/date/date.vcxproj | 116 +- icuSources/samples/datefmt/datefmt.sln | 8 +- icuSources/samples/datefmt/datefmt.vcxproj | 87 +- icuSources/samples/datefmt/main.cpp | 2 + icuSources/samples/datefmt/util.cpp | 2 + icuSources/samples/datefmt/util.h | 2 + .../samples/dtitvfmtsample/dtitvfmtsample.cpp | 1 + .../dtitvfmtsample/dtitvfmtsample.vcxproj | 116 +- .../samples/dtptngsample/dtptngsample.cpp | 1 + .../samples/dtptngsample/dtptngsample.vcxproj | 105 +- icuSources/samples/layout/layout.vcxproj | 49 +- icuSources/samples/legacy/legacy.sln | 8 +- icuSources/samples/legacy/legacy.vcxproj | 24 +- icuSources/samples/msgfmt/msgfmt.sln | 8 +- icuSources/samples/msgfmt/msgfmt.vcxproj | 84 +- icuSources/samples/msgfmt/util.cpp | 2 + icuSources/samples/msgfmt/util.h | 2 + icuSources/samples/numfmt/numfmt.sln | 8 +- icuSources/samples/numfmt/numfmt.vcxproj | 83 +- icuSources/samples/numfmt/util.cpp | 2 + icuSources/samples/numfmt/util.h | 2 + .../samples/plurfmtsample/plurfmtsample.cpp | 4 +- .../plurfmtsample/plurfmtsample.vcxproj | 106 +- icuSources/samples/props/props.sln | 8 +- icuSources/samples/props/props.vcxproj | 69 +- icuSources/samples/strsrch/strsrch.sln | 8 +- icuSources/samples/strsrch/strsrch.vcxproj | 82 +- icuSources/samples/translit/translit.sln | 8 +- icuSources/samples/translit/translit.vcxproj | 102 +- icuSources/samples/translit/unaccent.h | 2 + icuSources/samples/translit/util.cpp | 2 + icuSources/samples/translit/util.h | 2 + icuSources/samples/uciter8/uciter8.sln | 8 +- icuSources/samples/uciter8/uciter8.vcxproj | 102 +- icuSources/samples/uciter8/uit_len8.c | 2 +- icuSources/samples/ucnv/convsamp.cpp | 35 +- icuSources/samples/ucnv/ucnv.sln | 8 +- icuSources/samples/ucnv/ucnv.vcxproj | 102 +- icuSources/samples/udata/reader.vcxproj | 142 +- icuSources/samples/udata/udata.sln | 16 +- icuSources/samples/udata/writer.vcxproj | 121 +- .../ufortune/resources/fortune_resources.mak | 6 +- icuSources/samples/ufortune/ufortune.sln | 8 +- icuSources/samples/ufortune/ufortune.vcxproj | 170 +- icuSources/samples/ugrep/ugrep.cpp | 13 +- icuSources/samples/ugrep/ugrep.sln | 8 +- icuSources/samples/ugrep/ugrep.vcxproj | 98 +- icuSources/samples/uresb/resources.vcxproj | 36 +- icuSources/samples/uresb/uresb.sln | 16 +- icuSources/samples/uresb/uresb.vcxproj | 90 +- icuSources/samples/ustring/ustring.cpp | 2 + icuSources/samples/ustring/ustring.sln | 8 +- icuSources/samples/ustring/ustring.vcxproj | 101 +- icuSources/stubdata/stubdata.vcxproj | 202 +- icuSources/test/Makefile.in | 5 +- icuSources/test/cintltst/Makefile.in | 3 +- icuSources/test/cintltst/callcoll.c | 35 + icuSources/test/cintltst/calltest.c | 2 + icuSources/test/cintltst/capitst.c | 2 +- icuSources/test/cintltst/cbiapts.c | 1737 +- icuSources/test/cintltst/cbiditransformtst.c | 1 + icuSources/test/cintltst/cbiditst.c | 15 +- icuSources/test/cintltst/ccaltst.c | 4 +- icuSources/test/cintltst/ccapitst.c | 22 +- .../test/cintltst/cdateintervalformattest.c | 115 + icuSources/test/cintltst/cdattst.c | 89 + icuSources/test/cintltst/cintltst.c | 34 + icuSources/test/cintltst/cintltst.h | 17 +- icuSources/test/cintltst/cintltst.vcxproj | 150 +- .../test/cintltst/cintltst.vcxproj.filters | 3 + icuSources/test/cintltst/citertst.c | 1 + icuSources/test/cintltst/cldrtest.c | 72 +- icuSources/test/cintltst/cloctst.c | 24 +- icuSources/test/cintltst/cmeasureformattest.c | 2 +- icuSources/test/cintltst/cmsccoll.c | 9 +- icuSources/test/cintltst/cmsgtst.c | 29 +- icuSources/test/cintltst/cnmdptst.c | 16 +- icuSources/test/cintltst/cnormtst.c | 11 +- icuSources/test/cintltst/cnumtst.c | 298 +- .../test/cintltst/crelativedateformattest.c | 39 +- icuSources/test/cintltst/crestst.c | 1 + icuSources/test/cintltst/creststn.c | 5 +- icuSources/test/cintltst/cucdapi.c | 9 +- icuSources/test/cintltst/cucdtst.c | 151 +- icuSources/test/cintltst/custrtrn.c | 19 +- icuSources/test/cintltst/custrtst.c | 126 + icuSources/test/cintltst/nccbtst.c | 6 +- icuSources/test/cintltst/ncnvtst.c | 14 +- icuSources/test/cintltst/nucnvtst.c | 22 +- icuSources/test/cintltst/putiltst.c | 14 + icuSources/test/cintltst/reapits.c | 1 + icuSources/test/cintltst/tracetst.c | 2 +- icuSources/test/cintltst/trie2test.c | 58 +- icuSources/test/cintltst/ucnvseltst.c | 1 + icuSources/test/cintltst/udatpg_test.c | 72 + .../test/cintltst/unumberformattertst.c | 190 + icuSources/test/cintltst/uregiontest.c | 16 +- icuSources/test/cintltst/utf16tst.c | 232 +- icuSources/test/cintltst/utf8tst.c | 604 +- icuSources/test/cintltst/utransts.c | 2 + icuSources/test/depstest/dependencies.txt | 125 +- icuSources/test/hdrtst/cxxfiles.txt | 2 + icuSources/test/hdrtst/testinternalheaders.sh | 4 +- icuSources/test/intltest/Makefile.in | 7 +- icuSources/test/intltest/alphaindextst.cpp | 25 + icuSources/test/intltest/alphaindextst.h | 4 + icuSources/test/intltest/apicoll.cpp | 68 +- icuSources/test/intltest/apicoll.h | 1 + icuSources/test/intltest/bidiconf.cpp | 16 +- icuSources/test/intltest/bytestrietest.cpp | 18 +- icuSources/test/intltest/callimts.cpp | 4 +- icuSources/test/intltest/calregts.cpp | 63 +- icuSources/test/intltest/calregts.h | 2 + icuSources/test/intltest/citrtest.cpp | 10 +- icuSources/test/intltest/collationtest.cpp | 56 +- .../intltest/compactdecimalformattest.cpp | 142 +- icuSources/test/intltest/convtest.cpp | 143 +- icuSources/test/intltest/convtest.h | 1 + .../datadrivennumberformattestsuite.cpp | 13 +- .../datadrivennumberformattestsuite.h | 1 + icuSources/test/intltest/dcfmapts.cpp | 198 +- icuSources/test/intltest/dcfmapts.h | 1 + icuSources/test/intltest/dcfmtest.cpp | 5 +- icuSources/test/intltest/dtfmrgts.cpp | 17 +- icuSources/test/intltest/dtfmrgts.h | 1 + icuSources/test/intltest/dtfmtrtts.cpp | 15 +- icuSources/test/intltest/dtfmttst.cpp | 69 +- icuSources/test/intltest/dtfmttst.h | 1 + icuSources/test/intltest/dtifmtts.cpp | 1153 +- icuSources/test/intltest/dtptngts.cpp | 227 +- icuSources/test/intltest/dtptngts.h | 2 + icuSources/test/intltest/idnaconf.cpp | 2 +- icuSources/test/intltest/incaltst.cpp | 18 +- icuSources/test/intltest/intltest.cpp | 99 +- icuSources/test/intltest/intltest.h | 29 +- icuSources/test/intltest/intltest.vcxproj | 157 +- .../test/intltest/intltest.vcxproj.filters | 41 +- icuSources/test/intltest/itformat.cpp | 15 +- icuSources/test/intltest/itrbnf.cpp | 37 + icuSources/test/intltest/itrbnf.h | 2 + icuSources/test/intltest/itspoof.cpp | 72 +- icuSources/test/intltest/itspoof.h | 6 + icuSources/test/intltest/itutil.cpp | 142 +- icuSources/test/intltest/itutil.h | 1 + icuSources/test/intltest/loctest.cpp | 57 +- icuSources/test/intltest/loctest.h | 2 + icuSources/test/intltest/measfmttest.cpp | 23 +- icuSources/test/intltest/nmfmtrt.cpp | 10 +- icuSources/test/intltest/normconf.cpp | 216 +- icuSources/test/intltest/normconf.h | 13 +- .../test/intltest/numberformattesttuple.cpp | 27 +- .../test/intltest/numberformattesttuple.h | 7 +- icuSources/test/intltest/numbertest.h | 284 + .../test/intltest/numbertest_affixutils.cpp | 249 + icuSources/test/intltest/numbertest_api.cpp | 2553 + .../intltest/numbertest_decimalquantity.cpp | 383 + .../intltest/numbertest_doubleconversion.cpp | 45 + .../test/intltest/numbertest_modifiers.cpp | 182 + icuSources/test/intltest/numbertest_parse.cpp | 354 + .../intltest/numbertest_patternmodifier.cpp | 184 + .../intltest/numbertest_patternstring.cpp | 116 + .../test/intltest/numbertest_skeletons.cpp | 272 + .../intltest/numbertest_stringbuilder.cpp | 288 + .../intltest/numbertest_stringsegment.cpp | 94 + .../test/intltest/numfmtdatadriventest.cpp | 490 + icuSources/test/intltest/numfmtst.cpp | 1900 +- icuSources/test/intltest/numfmtst.h | 71 +- icuSources/test/intltest/numrgts.cpp | 168 +- icuSources/test/intltest/plurfmts.cpp | 25 +- icuSources/test/intltest/plurults.cpp | 12 +- icuSources/test/intltest/rbbiapts.cpp | 122 +- icuSources/test/intltest/rbbimonkeytest.cpp | 40 +- icuSources/test/intltest/rbbimonkeytest.h | 15 + icuSources/test/intltest/rbbitst.cpp | 1071 +- icuSources/test/intltest/rbbitst.h | 49 +- icuSources/test/intltest/regextst.cpp | 47 +- icuSources/test/intltest/regextst.h | 4 +- icuSources/test/intltest/regiontst.cpp | 16 +- .../test/intltest/static_unisets_test.cpp | 119 + icuSources/test/intltest/strcase.cpp | 766 +- icuSources/test/intltest/strtest.cpp | 65 +- icuSources/test/intltest/testidna.cpp | 43 +- icuSources/test/intltest/testutil.cpp | 256 +- icuSources/test/intltest/testutil.h | 26 +- icuSources/test/intltest/tmsgfmt.cpp | 49 +- icuSources/test/intltest/tmsgfmt.h | 1 + icuSources/test/intltest/transtst.cpp | 4 +- icuSources/test/intltest/tsdate.cpp | 1 + icuSources/test/intltest/tsdcfmsy.cpp | 162 +- icuSources/test/intltest/tsdcfmsy.h | 2 + icuSources/test/intltest/tsmthred.cpp | 140 +- icuSources/test/intltest/tsmthred.h | 2 +- icuSources/test/intltest/tstnorm.cpp | 325 +- icuSources/test/intltest/tstnorm.h | 7 + icuSources/test/intltest/tufmtts.h | 63 - icuSources/test/intltest/tzfmttst.cpp | 64 +- icuSources/test/intltest/tzfmttst.h | 1 + icuSources/test/intltest/tzregts.cpp | 65 +- icuSources/test/intltest/tzregts.h | 1 + icuSources/test/intltest/ucdtest.cpp | 40 + icuSources/test/intltest/ucdtest.h | 2 + icuSources/test/intltest/ucharstrietest.cpp | 19 +- icuSources/test/intltest/unifiedcachetest.cpp | 62 +- icuSources/test/intltest/uobjtest.cpp | 10 +- icuSources/test/intltest/usettest.cpp | 129 +- icuSources/test/intltest/usettest.h | 3 + icuSources/test/intltest/ustrtest.cpp | 11 +- icuSources/test/intltest/uts46test.cpp | 175 +- icuSources/test/intltest/utxttest.cpp | 118 +- icuSources/test/intltest/utxttest.h | 2 +- icuSources/test/intltest/windttst.cpp | 5 +- icuSources/test/intltest/winnmtst.cpp | 2 + icuSources/test/iotest/iotest.cpp | 2 - icuSources/test/iotest/iotest.vcxproj | 145 +- icuSources/test/iotest/stream.cpp | 2 - icuSources/test/letest/letest.vcxproj | 28 +- .../test/perf/DateFmtPerf/DateFmtPerf.cpp | 2 +- icuSources/test/testdata/BidiTest.txt | 6 +- .../CollationTest_NON_IGNORABLE_SHORT.txt | 3469 +- .../testdata/CollationTest_SHIFTED_SHORT.txt | 4017 +- .../test/testdata/GraphemeBreakTest.txt | 1148 +- icuSources/test/testdata/IdnaTest.txt | 7848 -- icuSources/test/testdata/IdnaTestV2.txt | 6331 ++ icuSources/test/testdata/LineBreakTest.txt | 246 +- .../test/testdata/SentenceBreakTest.txt | 6 +- icuSources/test/testdata/WordBreakTest.txt | 718 +- .../test/testdata/break_rules/grapheme.txt | 12 +- icuSources/test/testdata/break_rules/line.txt | 39 +- .../test/testdata/break_rules/line_loose.txt | 37 +- .../testdata/break_rules/line_loose_cj.txt | 37 +- .../test/testdata/break_rules/line_normal.txt | 37 +- .../testdata/break_rules/line_normal_cj.txt | 37 +- .../test/testdata/break_rules/readme.txt | 20 +- icuSources/test/testdata/break_rules/word.txt | 26 +- .../test/testdata/break_rules/word_POSIX.txt | 26 +- icuSources/test/testdata/conversion.txt | 4 +- .../numberformattestspecification.txt | 1149 +- icuSources/test/testdata/rbbitst.txt | 204 +- icuSources/test/testdata/regextst.txt | 9 +- icuSources/test/testdata/root.txt | 4 +- icuSources/test/testdata/structLocale.txt | 406 + icuSources/test/testdata/tokCFSTrules.txt | 120 + .../test/testdata/tokCFSTrulesLE_icu57.data | Bin 0 -> 433536 bytes .../test/testdata/tokCFSTrulesLE_icu60.data | Bin 0 -> 434744 bytes icuSources/test/testdata/wordNLLT_icu57.dat | Bin 0 -> 115048 bytes icuSources/test/testdata/wordNLLT_icu60.dat | Bin 0 -> 100920 bytes icuSources/test/testdata/wordNLLTu6.txt | 279 + icuSources/test/testdata/wordNLLTu8.txt | 395 + .../{word_urbTokTest.txt => wordNLLTu9.txt} | 138 +- icuSources/tools/ctestfw/ctestfw.vcxproj | 149 +- icuSources/tools/ctestfw/tstdtmod.cpp | 69 +- icuSources/tools/ctestfw/unicode/testlog.h | 20 +- icuSources/tools/ctestfw/uperf.cpp | 6 +- icuSources/tools/escapesrc/escapesrc.cpp | 147 +- icuSources/tools/genbrk/genbrk.vcxproj | 78 +- icuSources/tools/genccode/genccode.vcxproj | 78 +- icuSources/tools/gencfu/gencfu.vcxproj | 82 +- icuSources/tools/gencmn/gencmn.vcxproj | 78 +- icuSources/tools/gencnval/gencnval.vcxproj | 78 +- icuSources/tools/gendict/gendict.cpp | 6 +- icuSources/tools/gendict/gendict.vcxproj | 78 +- icuSources/tools/gennorm2/Makefile.in | 2 +- icuSources/tools/gennorm2/extradata.cpp | 253 + icuSources/tools/gennorm2/extradata.h | 70 + icuSources/tools/gennorm2/gennorm2.cpp | 82 +- icuSources/tools/gennorm2/gennorm2.vcxproj | 130 +- icuSources/tools/gennorm2/n2builder.cpp | 1414 +- icuSources/tools/gennorm2/n2builder.h | 61 +- icuSources/tools/gennorm2/norms.cpp | 332 + icuSources/tools/gennorm2/norms.h | 217 + icuSources/tools/genrb/derb.vcxproj | 89 +- icuSources/tools/genrb/genrb.cpp | 2 +- icuSources/tools/genrb/genrb.vcxproj | 84 +- icuSources/tools/genrb/parse.cpp | 10 +- icuSources/tools/genrb/wrtjava.cpp | 22 +- icuSources/tools/genrb/wrtxml.cpp | 5 + icuSources/tools/genren/Makefile | 2 +- icuSources/tools/genren/README | 17 +- icuSources/tools/genren/genren.pl | 6 +- icuSources/tools/gensprep/gensprep.c | 2 +- icuSources/tools/gensprep/gensprep.vcxproj | 78 +- icuSources/tools/gentest/gentest.vcxproj | 82 +- icuSources/tools/icu-svnprops-check.py | 5 + icuSources/tools/icuinfo/icuinfo.vcxproj | 138 +- icuSources/tools/icuinfo/testplug.vcxproj | 78 +- icuSources/tools/icupkg/icupkg.vcxproj | 127 +- icuSources/tools/icuswap/icuswap.vcxproj | 3 +- icuSources/tools/makeconv/makeconv.1.in | 4 +- icuSources/tools/makeconv/makeconv.h | 8 +- icuSources/tools/makeconv/makeconv.vcxproj | 128 +- icuSources/tools/pkgdata/pkgdata.vcxproj | 126 +- icuSources/tools/toolutil/package.cpp | 2 +- icuSources/tools/toolutil/pkg_genc.cpp | 3 +- icuSources/tools/toolutil/swapimpl.cpp | 3 +- icuSources/tools/toolutil/toolutil.vcxproj | 151 +- icuSources/tools/toolutil/udbgutil.cpp | 1 - icuSources/tools/toolutil/uparse.cpp | 4 +- icuSources/tools/tzcode/Makefile.in | 4 +- icuSources/tools/tzcode/icuzdump.cpp | 1 + icuSources/tools/tzcode/icuzdump.vcxproj | 3 +- icuSources/tools/tzcode/icuzones | 90 +- icuSources/tools/tzcode/tz2icu.cpp | 87 +- makefile | 97 +- minimalapis.txt | 1 + minimalpatchconfig.txt | 14 +- modules/embedded/module.modulemap | 26 + modules/embedded/module.private.modulemap | 66 + modules/macos/module.private.modulemap | 86 + patchconfig.txt | 10 +- windowspatchconfig.txt | 46 +- 3672 files changed, 281860 insertions(+), 110249 deletions(-) create mode 100644 icuSources/allinone/Build.Windows.ProjectConfiguration.props create mode 100644 icuSources/allinone/Build.Windows.UWP.ProjectConfiguration.props create mode 100644 icuSources/allinone/Windows.CopyUnicodeHeaderFiles.targets create mode 100644 icuSources/common/bytesinkutil.cpp create mode 100644 icuSources/common/bytesinkutil.h create mode 100644 icuSources/common/rbbi57.cpp create mode 100644 icuSources/common/rbbi57.h create mode 100644 icuSources/common/rbbi_cache.cpp create mode 100644 icuSources/common/rbbi_cache.h create mode 100644 icuSources/common/rbbidata57.cpp create mode 100644 icuSources/common/rbbidata57.h create mode 100644 icuSources/common/rbbirb57.cpp create mode 100644 icuSources/common/rbbirb57.h create mode 100644 icuSources/common/rbbiscan57.cpp create mode 100644 icuSources/common/rbbiscan57.h create mode 100644 icuSources/common/rbbisetb57.cpp create mode 100644 icuSources/common/rbbisetb57.h create mode 100644 icuSources/common/rbbistbl57.cpp create mode 100644 icuSources/common/rbbitblb57.cpp create mode 100644 icuSources/common/rbbitblb57.h create mode 100644 icuSources/common/static_unicode_sets.cpp create mode 100644 icuSources/common/static_unicode_sets.h create mode 100644 icuSources/common/unicode/stringoptions.h create mode 100644 icuSources/data/coll/wo.txt rename icuSources/data/{rbnf/yue_CN.txt => coll/wuu.txt} (78%) create mode 100644 icuSources/data/curr/ar_KM.txt create mode 100644 icuSources/data/curr/ccp.txt create mode 100644 icuSources/data/curr/tt.txt create mode 100644 icuSources/data/curr/wo.txt create mode 100644 icuSources/data/curr/wuu.txt create mode 100644 icuSources/data/lang/ccp.txt create mode 100644 icuSources/data/lang/tt.txt create mode 100644 icuSources/data/lang/wo.txt create mode 100644 icuSources/data/lang/wuu.txt create mode 100644 icuSources/data/locales/ccp.txt create mode 100644 icuSources/data/locales/ccp_BD.txt create mode 100644 icuSources/data/locales/ccp_IN.txt create mode 100644 icuSources/data/locales/tt.txt create mode 100644 icuSources/data/locales/tt_RU.txt create mode 100644 icuSources/data/locales/wo.txt create mode 100644 icuSources/data/locales/wo_SN.txt create mode 100644 icuSources/data/locales/wuu.txt create mode 100644 icuSources/data/rbnf/ak.txt create mode 100644 icuSources/data/rbnf/ccp.txt create mode 100644 icuSources/data/rbnf/chr.txt create mode 100644 icuSources/data/rbnf/en_001.txt create mode 100644 icuSources/data/rbnf/en_IN.txt create mode 100644 icuSources/data/rbnf/ff.txt create mode 100644 icuSources/data/rbnf/lb.txt create mode 100644 icuSources/data/rbnf/lrc.txt create mode 100644 icuSources/data/rbnf/qu.txt create mode 100644 icuSources/data/rbnf/sw.txt create mode 100644 icuSources/data/rbnf/wuu.txt create mode 100644 icuSources/data/region/ccp.txt create mode 100644 icuSources/data/region/tt.txt create mode 100644 icuSources/data/region/wo.txt create mode 100644 icuSources/data/region/wuu.txt create mode 100644 icuSources/data/translit/blt_blt_FONIPA.txt create mode 100644 icuSources/data/translit/cy_cy_FONIPA.txt create mode 100644 icuSources/data/translit/de_ASCII.txt create mode 100644 icuSources/data/translit/fa_fa_FONIPA.txt create mode 100644 icuSources/data/translit/ha_ha_NE.txt create mode 100644 icuSources/data/translit/ka_ka_Latn_BGN_1981.txt create mode 100644 icuSources/data/translit/nv_nv_FONIPA.txt create mode 100644 icuSources/data/translit/vec_vec_FONIPA.txt create mode 100644 icuSources/data/unit/ccp.txt create mode 100644 icuSources/data/unit/tt.txt create mode 100644 icuSources/data/unit/wo.txt create mode 100644 icuSources/data/unit/wuu.txt create mode 100644 icuSources/data/zone/ccp.txt create mode 100644 icuSources/data/zone/de_CH.txt create mode 100644 icuSources/data/zone/se_FI.txt create mode 100644 icuSources/data/zone/tt.txt create mode 100644 icuSources/data/zone/wo.txt create mode 100644 icuSources/data/zone/wuu.txt create mode 100644 icuSources/i18n/double-conversion-bignum-dtoa.cpp create mode 100644 icuSources/i18n/double-conversion-bignum-dtoa.h create mode 100644 icuSources/i18n/double-conversion-bignum.cpp create mode 100644 icuSources/i18n/double-conversion-bignum.h create mode 100644 icuSources/i18n/double-conversion-cached-powers.cpp create mode 100644 icuSources/i18n/double-conversion-cached-powers.h create mode 100644 icuSources/i18n/double-conversion-diy-fp.cpp create mode 100644 icuSources/i18n/double-conversion-diy-fp.h create mode 100644 icuSources/i18n/double-conversion-fast-dtoa.cpp create mode 100644 icuSources/i18n/double-conversion-fast-dtoa.h create mode 100644 icuSources/i18n/double-conversion-ieee.h create mode 100644 icuSources/i18n/double-conversion-strtod.cpp create mode 100644 icuSources/i18n/double-conversion-strtod.h create mode 100644 icuSources/i18n/double-conversion-utils.h create mode 100644 icuSources/i18n/double-conversion.cpp create mode 100644 icuSources/i18n/double-conversion.h create mode 100644 icuSources/i18n/nounit.cpp create mode 100644 icuSources/i18n/number_affixutils.cpp create mode 100644 icuSources/i18n/number_affixutils.h create mode 100644 icuSources/i18n/number_asformat.cpp create mode 100644 icuSources/i18n/number_asformat.h create mode 100644 icuSources/i18n/number_capi.cpp create mode 100644 icuSources/i18n/number_compact.cpp create mode 100644 icuSources/i18n/number_compact.h create mode 100644 icuSources/i18n/number_currencysymbols.cpp create mode 100644 icuSources/i18n/number_currencysymbols.h create mode 100644 icuSources/i18n/number_decimalquantity.cpp create mode 100644 icuSources/i18n/number_decimalquantity.h create mode 100644 icuSources/i18n/number_decimfmtprops.cpp create mode 100644 icuSources/i18n/number_decimfmtprops.h create mode 100644 icuSources/i18n/number_decnum.h create mode 100644 icuSources/i18n/number_fluent.cpp create mode 100644 icuSources/i18n/number_formatimpl.cpp create mode 100644 icuSources/i18n/number_formatimpl.h create mode 100644 icuSources/i18n/number_grouping.cpp create mode 100644 icuSources/i18n/number_integerwidth.cpp create mode 100644 icuSources/i18n/number_longnames.cpp create mode 100644 icuSources/i18n/number_longnames.h create mode 100644 icuSources/i18n/number_mapper.cpp create mode 100644 icuSources/i18n/number_mapper.h create mode 100644 icuSources/i18n/number_microprops.h create mode 100644 icuSources/i18n/number_modifiers.cpp create mode 100644 icuSources/i18n/number_modifiers.h create mode 100644 icuSources/i18n/number_multiplier.cpp create mode 100644 icuSources/i18n/number_multiplier.h create mode 100644 icuSources/i18n/number_notation.cpp create mode 100644 icuSources/i18n/number_padding.cpp create mode 100644 icuSources/i18n/number_patternmodifier.cpp create mode 100644 icuSources/i18n/number_patternmodifier.h create mode 100644 icuSources/i18n/number_patternstring.cpp create mode 100644 icuSources/i18n/number_patternstring.h create mode 100644 icuSources/i18n/number_rounding.cpp create mode 100644 icuSources/i18n/number_roundingutils.h create mode 100644 icuSources/i18n/number_scientific.cpp create mode 100644 icuSources/i18n/number_scientific.h create mode 100644 icuSources/i18n/number_skeletons.cpp create mode 100644 icuSources/i18n/number_skeletons.h create mode 100644 icuSources/i18n/number_stringbuilder.cpp create mode 100644 icuSources/i18n/number_stringbuilder.h create mode 100644 icuSources/i18n/number_types.h create mode 100644 icuSources/i18n/number_utils.cpp create mode 100644 icuSources/i18n/number_utils.h create mode 100644 icuSources/i18n/number_utypes.h create mode 100644 icuSources/i18n/numparse_affixes.cpp create mode 100644 icuSources/i18n/numparse_affixes.h create mode 100644 icuSources/i18n/numparse_compositions.cpp create mode 100644 icuSources/i18n/numparse_compositions.h create mode 100644 icuSources/i18n/numparse_currency.cpp create mode 100644 icuSources/i18n/numparse_currency.h create mode 100644 icuSources/i18n/numparse_decimal.cpp create mode 100644 icuSources/i18n/numparse_decimal.h create mode 100644 icuSources/i18n/numparse_impl.cpp create mode 100644 icuSources/i18n/numparse_impl.h create mode 100644 icuSources/i18n/numparse_parsednumber.cpp create mode 100644 icuSources/i18n/numparse_scientific.cpp create mode 100644 icuSources/i18n/numparse_scientific.h create mode 100644 icuSources/i18n/numparse_stringsegment.cpp create mode 100644 icuSources/i18n/numparse_stringsegment.h create mode 100644 icuSources/i18n/numparse_symbols.cpp create mode 100644 icuSources/i18n/numparse_symbols.h create mode 100644 icuSources/i18n/numparse_types.h create mode 100644 icuSources/i18n/numparse_utils.h create mode 100644 icuSources/i18n/numparse_validators.cpp create mode 100644 icuSources/i18n/numparse_validators.h create mode 100644 icuSources/i18n/unicode/nounit.h create mode 100644 icuSources/i18n/unicode/numberformatter.h create mode 100644 icuSources/i18n/unicode/unumberformatter.h create mode 100644 icuSources/samples/all/samplecheck.bat create mode 100644 icuSources/test/cintltst/unumberformattertst.c create mode 100644 icuSources/test/intltest/numbertest.h create mode 100644 icuSources/test/intltest/numbertest_affixutils.cpp create mode 100644 icuSources/test/intltest/numbertest_api.cpp create mode 100644 icuSources/test/intltest/numbertest_decimalquantity.cpp create mode 100644 icuSources/test/intltest/numbertest_doubleconversion.cpp create mode 100644 icuSources/test/intltest/numbertest_modifiers.cpp create mode 100644 icuSources/test/intltest/numbertest_parse.cpp create mode 100644 icuSources/test/intltest/numbertest_patternmodifier.cpp create mode 100644 icuSources/test/intltest/numbertest_patternstring.cpp create mode 100644 icuSources/test/intltest/numbertest_skeletons.cpp create mode 100644 icuSources/test/intltest/numbertest_stringbuilder.cpp create mode 100644 icuSources/test/intltest/numbertest_stringsegment.cpp create mode 100644 icuSources/test/intltest/numfmtdatadriventest.cpp create mode 100644 icuSources/test/intltest/static_unisets_test.cpp delete mode 100644 icuSources/test/intltest/tufmtts.h delete mode 100644 icuSources/test/testdata/IdnaTest.txt create mode 100644 icuSources/test/testdata/IdnaTestV2.txt create mode 100644 icuSources/test/testdata/tokCFSTrules.txt create mode 100644 icuSources/test/testdata/tokCFSTrulesLE_icu57.data create mode 100644 icuSources/test/testdata/tokCFSTrulesLE_icu60.data create mode 100644 icuSources/test/testdata/wordNLLT_icu57.dat create mode 100644 icuSources/test/testdata/wordNLLT_icu60.dat create mode 100644 icuSources/test/testdata/wordNLLTu6.txt create mode 100644 icuSources/test/testdata/wordNLLTu8.txt rename icuSources/test/testdata/{word_urbTokTest.txt => wordNLLTu9.txt} (77%) create mode 100644 icuSources/tools/gennorm2/extradata.cpp create mode 100644 icuSources/tools/gennorm2/extradata.h create mode 100644 icuSources/tools/gennorm2/norms.cpp create mode 100644 icuSources/tools/gennorm2/norms.h create mode 100644 modules/embedded/module.modulemap create mode 100644 modules/embedded/module.private.modulemap create mode 100644 modules/macos/module.private.modulemap diff --git a/ICU.plist b/ICU.plist index 3445b68a..6524fb34 100644 --- a/ICU.plist +++ b/ICU.plist @@ -4,7 +4,7 @@ OpenSourceImportDate - 2017-04-18 + 2018-06-21 OpenSourceLicense other OpenSourceLicenseFile @@ -12,9 +12,9 @@ OpenSourceProject International Components for Unicode OpenSourceURL - http://source.icu-project.org/repos/icu/tags/release-59-1/icu4c + http://source.icu-project.org/repos/icu/tags/release-62-1/icu4c OpenSourceVersion - 59.1 + 62.1 OpenSourceWebsiteURL http://site.icu-project.org/ diff --git a/LICENSE b/LICENSE index c5295dae..25b6eb9d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) -Copyright © 1991-2017 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in http://www.unicode.org/copyright.html +Copyright © 1991-2018 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation @@ -131,7 +131,7 @@ property of their respective owners. # ---------COPYING.libtabe ---- BEGIN-------------------- # # /* - # * Copyrighy (c) 1999 TaBE Project. + # * Copyright (c) 1999 TaBE Project. # * Copyright (c) 1999 Pai-Hsiang Hsiao. # * All rights reserved. # * @@ -383,3 +383,32 @@ Database section 7. # by ICANN or the IETF Trust on the database or the code. Any person # making a contribution to the database or code waives all rights to # future claims in that contribution or in the TZ Database. + +6. Google double-conversion + +Copyright 2006-2011, the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/cldrFiles/plurals.xml b/cldrFiles/plurals.xml index 3310c8ee..2704a8e7 100644 --- a/cldrFiles/plurals.xml +++ b/cldrFiles/plurals.xml @@ -6,7 +6,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic For terms of use, see http://www.unicode.org/copyright.html --> - + @@ -30,7 +30,7 @@ For terms of use, see http://www.unicode.org/copyright.html i = 0..1 @integer 0, 1 @decimal 0.0~1.5 @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … - + i = 1 and v = 0 @integer 1 @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … @@ -46,7 +46,7 @@ For terms of use, see http://www.unicode.org/copyright.html n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0 @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … - + n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000 @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … @@ -59,8 +59,8 @@ For terms of use, see http://www.unicode.org/copyright.html @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … - v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, … - @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … + v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, … + @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … diff --git a/cldrFiles/supplementalData.xml b/cldrFiles/supplementalData.xml index fff0a2fc..2644fe85 100644 --- a/cldrFiles/supplementalData.xml +++ b/cldrFiles/supplementalData.xml @@ -7,7 +7,7 @@ For terms of use, see http://www.unicode.org/copyright.html --> - + @@ -27,6 +27,7 @@ For terms of use, see http://www.unicode.org/copyright.html + @@ -52,11 +53,13 @@ For terms of use, see http://www.unicode.org/copyright.html + + @@ -69,6 +72,7 @@ For terms of use, see http://www.unicode.org/copyright.html + @@ -327,6 +331,7 @@ The printed version of ISO-4217:2001 + @@ -752,7 +757,8 @@ The printed version of ISO-4217:2001 - + + @@ -972,7 +978,8 @@ The printed version of ISO-4217:2001 - + + @@ -1214,10 +1221,10 @@ XXX Code for transations where no currency is involved - + - + @@ -1232,6 +1239,8 @@ XXX Code for transations where no currency is involved + + @@ -1242,14 +1251,14 @@ XXX Code for transations where no currency is involved - - + + - + - + @@ -1556,6 +1565,7 @@ XXX Code for transations where no currency is involved + @@ -1567,7 +1577,7 @@ XXX Code for transations where no currency is involved - + @@ -2067,7 +2077,7 @@ XXX Code for transations where no currency is involved - + @@ -2340,8 +2350,8 @@ XXX Code for transations where no currency is involved - - + + @@ -2352,7 +2362,7 @@ XXX Code for transations where no currency is involved - + @@ -2362,22 +2372,22 @@ XXX Code for transations where no currency is involved - + - + - + - + @@ -2386,46 +2396,46 @@ XXX Code for transations where no currency is involved - - + + - + - + - + - + - + - + - + - + - + @@ -2435,13 +2445,13 @@ XXX Code for transations where no currency is involved - + - + @@ -2449,7 +2459,7 @@ XXX Code for transations where no currency is involved - + @@ -2457,7 +2467,7 @@ XXX Code for transations where no currency is involved - + @@ -2465,10 +2475,10 @@ XXX Code for transations where no currency is involved - + - + @@ -2479,7 +2489,7 @@ XXX Code for transations where no currency is involved - + @@ -2487,57 +2497,57 @@ XXX Code for transations where no currency is involved - + - + - + - + - - + + - + - + - + - + - + - + - + @@ -2548,35 +2558,35 @@ XXX Code for transations where no currency is involved - + - + - + - + - + - + - + - + @@ -2594,19 +2604,19 @@ XXX Code for transations where no currency is involved - - + + - + - + @@ -2616,16 +2626,16 @@ XXX Code for transations where no currency is involved - + - + - + @@ -2637,7 +2647,7 @@ XXX Code for transations where no currency is involved - + @@ -2645,15 +2655,15 @@ XXX Code for transations where no currency is involved - + - + - + @@ -2678,13 +2688,13 @@ XXX Code for transations where no currency is involved - - + + - + - + @@ -2708,47 +2718,47 @@ XXX Code for transations where no currency is involved - + - + - + - + - + - + - + - + - + - + - + @@ -2775,63 +2785,63 @@ XXX Code for transations where no currency is involved - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2840,7 +2850,7 @@ XXX Code for transations where no currency is involved - + @@ -2849,7 +2859,7 @@ XXX Code for transations where no currency is involved - + @@ -2859,7 +2869,7 @@ XXX Code for transations where no currency is involved - + @@ -2871,28 +2881,28 @@ XXX Code for transations where no currency is involved - + - + - + - + - + - + @@ -2910,11 +2920,11 @@ XXX Code for transations where no currency is involved - + - + @@ -2933,10 +2943,10 @@ XXX Code for transations where no currency is involved - + - + @@ -2950,10 +2960,10 @@ XXX Code for transations where no currency is involved - + - + @@ -2965,19 +2975,19 @@ XXX Code for transations where no currency is involved - + - + - + - + @@ -2988,14 +2998,14 @@ XXX Code for transations where no currency is involved - + - + @@ -3007,46 +3017,47 @@ XXX Code for transations where no currency is involved - + - + - + - + + - + - + - + - + - + - + - + @@ -3054,12 +3065,12 @@ XXX Code for transations where no currency is involved - + - + - + @@ -3090,12 +3101,12 @@ XXX Code for transations where no currency is involved - + - + @@ -3107,13 +3118,13 @@ XXX Code for transations where no currency is involved - + - + - + @@ -3192,10 +3203,10 @@ XXX Code for transations where no currency is involved - + - + @@ -3204,7 +3215,7 @@ XXX Code for transations where no currency is involved - + @@ -3224,14 +3235,14 @@ XXX Code for transations where no currency is involved - - + + - + - + - + @@ -3252,23 +3263,23 @@ XXX Code for transations where no currency is involved - + - + - + - + - + @@ -3290,110 +3301,110 @@ XXX Code for transations where no currency is involved - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3406,39 +3417,39 @@ XXX Code for transations where no currency is involved - + - + - + - + - + - + - + - + @@ -3454,49 +3465,49 @@ XXX Code for transations where no currency is involved - + - + - + - + - + - + - + - + - + - + @@ -3504,17 +3515,17 @@ XXX Code for transations where no currency is involved - + - + - + @@ -3524,7 +3535,7 @@ XXX Code for transations where no currency is involved - + @@ -3537,7 +3548,7 @@ XXX Code for transations where no currency is involved - + @@ -3548,10 +3559,10 @@ XXX Code for transations where no currency is involved - - + + - + @@ -3561,22 +3572,22 @@ XXX Code for transations where no currency is involved - + - + - + - + - + @@ -3594,10 +3605,10 @@ XXX Code for transations where no currency is involved - + - + @@ -3611,12 +3622,12 @@ XXX Code for transations where no currency is involved - + - + - + @@ -3645,47 +3656,47 @@ XXX Code for transations where no currency is involved - - + + - - - + + + - - - + + + - + - + - + - + - + - + - + @@ -3704,10 +3715,10 @@ XXX Code for transations where no currency is involved - - + + - + @@ -3732,7 +3743,7 @@ XXX Code for transations where no currency is involved - + @@ -3744,47 +3755,47 @@ XXX Code for transations where no currency is involved - - + + - + - + - + - + - + - + - + - + - + @@ -3797,7 +3808,7 @@ XXX Code for transations where no currency is involved - + @@ -3807,7 +3818,7 @@ XXX Code for transations where no currency is involved - + @@ -3845,24 +3856,24 @@ XXX Code for transations where no currency is involved - + - + - + - + - + - + - + @@ -3872,19 +3883,19 @@ XXX Code for transations where no currency is involved - + - + - + @@ -3892,10 +3903,10 @@ XXX Code for transations where no currency is involved - + - + @@ -3903,11 +3914,11 @@ XXX Code for transations where no currency is involved - - - + + + - + @@ -3916,17 +3927,17 @@ XXX Code for transations where no currency is involved - + - + - + - + @@ -3938,69 +3949,69 @@ XXX Code for transations where no currency is involved - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4015,36 +4026,36 @@ XXX Code for transations where no currency is involved - + - + - + - + - + - + - + @@ -4062,26 +4073,26 @@ XXX Code for transations where no currency is involved - - + + - + - + - - - + + + - + - + @@ -4099,7 +4110,7 @@ XXX Code for transations where no currency is involved - + @@ -4113,7 +4124,7 @@ XXX Code for transations where no currency is involved - + @@ -4126,12 +4137,12 @@ XXX Code for transations where no currency is involved - + - + - + @@ -4151,62 +4162,62 @@ XXX Code for transations where no currency is involved - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4216,7 +4227,7 @@ XXX Code for transations where no currency is involved - + @@ -4231,13 +4242,13 @@ XXX Code for transations where no currency is involved - + - + @@ -4614,7 +4625,7 @@ XXX Code for transations where no currency is involved - + /> @@ -4650,7 +4661,7 @@ XXX Code for transations where no currency is involved KG KZ LB LI LK LT LU LV MC MD ME MK MN MQ MY - NL NO + NL NO NZ PL PT RE RO RS RU SE SI SK SM @@ -4659,11 +4670,11 @@ XXX Code for transations where no currency is involved VA VN XK" /> - + - + @@ -5228,6 +5239,7 @@ XXX Code for transations where no currency is involved + @@ -5291,6 +5303,7 @@ XXX Code for transations where no currency is involved + @@ -5329,6 +5342,7 @@ XXX Code for transations where no currency is involved + @@ -5603,6 +5617,7 @@ XXX Code for transations where no currency is involved [missing] (could be higher if 2nd lang included; no data yet) Mainly in Guangdong Prov, ~70-80 million + [missing] [missing] pop 7k. Figure is questionable writing pop artificially set to 5% see also http://en.wikipedia.org/wiki/Lower_Sorbian Tigrinya ethnic pop is about 60% diff --git a/crosshostpatchconfig.txt b/crosshostpatchconfig.txt index ff2936c7..2f09fc62 100644 --- a/crosshostpatchconfig.txt +++ b/crosshostpatchconfig.txt @@ -1,5 +1,5 @@ ---- ./common/unicode/udata.h 2017-04-30 10:43:56.000000000 -0700 -+++ ./common/unicode/udata.h 2017-04-30 11:43:56.000000000 -0700 +--- ./common/unicode/udata.h 2018-06-11 22:37:06.000000000 -0700 ++++ ./common/unicode/udata.h 2018-06-10 16:06:23.000000000 -0700 @@ -401,10 +401,10 @@ typedef enum UDataFileAccess { /** ICU looks for data in single files first, then in packages. (default) @stable ICU 3.4 */ diff --git a/emojiData/charClasses.txt b/emojiData/charClasses.txt index d6b4738c..890a97a4 100644 --- a/emojiData/charClasses.txt +++ b/emojiData/charClasses.txt @@ -1,4 +1,4 @@ -$E_Base = [[\p{Grapheme_Cluster_Break = EB}] \U0001F46A-\U0001F46D\U0001F46F\U0001F91D\U0001F93C]; -$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; -$E_Base_GAZ = [\p{Grapheme_Cluster_Break = EBG}]; +$E_Base = [[:EBase:] \U0001F46A-\U0001F46D\U0001F46F\U0001F91D\U0001F93C]; +$Extended_Pict = [:ExtPict:]; +$E_Base_GAZ = [\U000026F9\U0001F466-\U0001F469]; $EmojiNRK = [[\p{Emoji}] - [\p{Grapheme_Cluster_Break = Regional_Indicator}*\u00230-9©®™〰〽]]; diff --git a/emojiData/lineClasses.txt b/emojiData/lineClasses.txt index 70ee4420..dc2fbdcf 100644 --- a/emojiData/lineClasses.txt +++ b/emojiData/lineClasses.txt @@ -1,3 +1,3 @@ $EB = [[:LineBreak = EB:] \U0001F46A-\U0001F46D\U0001F46F\U0001F91D\U0001F93C]; $EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; +$Extended_Pict = [:ExtPict:]; diff --git a/icuSources/Doxyfile.in b/icuSources/Doxyfile.in index df543e80..8c6c5deb 100644 --- a/icuSources/Doxyfile.in +++ b/icuSources/Doxyfile.in @@ -194,7 +194,7 @@ EXPAND_ONLY_PREDEF = YES SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = -PREDEFINED = U_EXPORT2= U_STABLE= U_DRAFT= U_INTERNAL= U_SYSTEM= U_DEPRECATED= U_OBSOLETE= U_CALLCONV= U_CDECL_BEGIN= U_CDECL_END= U_NO_THROW=\ "U_NAMESPACE_BEGIN=namespace icu{" "U_NAMESPACE_END=}" U_SHOW_CPLUSPLUS_API=1 U_DEFINE_LOCAL_OPEN_POINTER()= U_IN_DOXYGEN=1 U_OVERRIDE=override U_FINAL=final UCONFIG_ENABLE_PLUGINS=1 U_CHAR16_IS_TYPEDEF=0 U_CPLUSPLUS_VERSION=11 U_HAVE_RVALUE_REFERENCES=1 U_WCHAR_IS_UTF16 +PREDEFINED = U_EXPORT2= U_STABLE= U_DRAFT= U_INTERNAL= U_SYSTEM= U_DEPRECATED= U_OBSOLETE= U_CALLCONV_FPTR= U_CALLCONV= U_CDECL_BEGIN= U_CDECL_END= U_NO_THROW=\ "U_NAMESPACE_BEGIN=namespace icu{" "U_NAMESPACE_END=}" U_SHOW_CPLUSPLUS_API=1 U_DEFINE_LOCAL_OPEN_POINTER()= U_IN_DOXYGEN=1 U_OVERRIDE= U_FINAL=final UCONFIG_ENABLE_PLUGINS=1 U_CHAR16_IS_TYPEDEF=0 U_CPLUSPLUS_VERSION=11 U_WCHAR_IS_UTF16 U_NOEXCEPT= EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- diff --git a/icuSources/Makefile.in b/icuSources/Makefile.in index f4bab77e..c1db15bf 100644 --- a/icuSources/Makefile.in +++ b/icuSources/Makefile.in @@ -34,9 +34,11 @@ subdir = . @LAYOUTEX_TRUE@LAYOUTEX = layoutex @ICUIO_TRUE@ICUIO = io @EXTRAS_TRUE@EXTRA = extra -@TESTS_TRUE@TEST = test +# need tools for tests +@TOOLS_TRUE@@TESTS_TRUE@TEST = test @SAMPLES_TRUE@SAMPLE = samples @TOOLS_TRUE@TOOLS = tools +@TOOLS_TRUE@DATASUBDIR = data ## pkgconfig setup. Always have uc and i18n. Others are optional. ALL_PKGCONFIG_SUFFIX=uc i18n @@ -58,7 +60,7 @@ INSTALLED_BUILT_FILES = $(top_builddir)/config/Makefile.inc $(top_builddir)/conf LOCAL_BUILT_FILES = icudefs.mk config/icucross.mk config/icucross.inc DOCDIRS = common i18n -SUBDIRS = stubdata common i18n $(LAYOUTEX) $(ICUIO) $(TOOLS) data $(EXTRA) $(SAMPLE) $(TEST) +SUBDIRS = stubdata common i18n $(LAYOUTEX) $(ICUIO) $(TOOLS) $(DATASUBDIR) $(EXTRA) $(SAMPLE) $(TEST) SECTION = 1 @@ -85,7 +87,7 @@ all: all-local all-recursive install: install-recursive install-local clean: clean-recursive-with-twist clean-local distclean : distclean-recursive distclean-local -dist: dist-recursive dist-local +dist: dist-recursive check: all check-recursive check-recursive: all xcheck: all xcheck-recursive diff --git a/icuSources/acinclude.m4 b/icuSources/acinclude.m4 index 5c8fda71..507f41f5 100644 --- a/icuSources/acinclude.m4 +++ b/icuSources/acinclude.m4 @@ -464,12 +464,12 @@ AC_DEFUN([AC_CHECK_STRICT_COMPILE], then case "${host}" in *-*-solaris*) - # Don't use -std=c99 on Solaris because of timezone check fails + # Don't use -std=c11 on Solaris because of timezone check fails ;; *) # Do not use -ansi. It limits us to C90, and it breaks some platforms. - # We use -std=c99 to disable the gnu99 defaults and its associated warnings - CFLAGS="$CFLAGS -std=c99" + # We use -std=c11 to disable the gnu99 defaults and its associated warnings + CFLAGS="$CFLAGS -std=c11" ;; esac diff --git a/icuSources/allinone/Build.Windows.ProjectConfiguration.props b/icuSources/allinone/Build.Windows.ProjectConfiguration.props new file mode 100644 index 00000000..0a163849 --- /dev/null +++ b/icuSources/allinone/Build.Windows.ProjectConfiguration.props @@ -0,0 +1,129 @@ + + + + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + + v141 + + + + + 8.1 + + + + 0x0601 + + + + + true + true + + + + + + WINVER=$(Win32_WinNTVersion); + _WIN32_WINNT=$(Win32_WinNTVersion); + _CRT_SECURE_NO_DEPRECATE; + %(PreprocessorDefinitions) + + + true + true + + /utf-8 %(AdditionalOptions) + + true + + + 0x0409 + + + true + + + + + + NDEBUG;%(PreprocessorDefinitions) + + + NDEBUG;%(PreprocessorDefinitions) + true + + + NDEBUG;%(PreprocessorDefinitions) + + + true + + + + + + _DEBUG;%(PreprocessorDefinitions) + + + _DEBUG;%(PreprocessorDefinitions) + Disabled + EnableFastChecks + true + + + _DEBUG;%(PreprocessorDefinitions) + + + true + false + + + + + + Win32 + + + WIN32;%(PreprocessorDefinitions) + + + MachineX86 + + + + + + X64 + + + WIN64;WIN32;%(PreprocessorDefinitions) + + + MachineX64 + + + \ No newline at end of file diff --git a/icuSources/allinone/Build.Windows.UWP.ProjectConfiguration.props b/icuSources/allinone/Build.Windows.UWP.ProjectConfiguration.props new file mode 100644 index 00000000..4b51960d --- /dev/null +++ b/icuSources/allinone/Build.Windows.UWP.ProjectConfiguration.props @@ -0,0 +1,41 @@ + + + + + + + 10.0.16299.0 + + 10.0.10240.0 + + 14.0 + true + Windows Store + 10.0 + + + + + v141 + + + + + %(PreprocessorDefinitions) + U_PLATFORM_HAS_WINUWP_API=1; + + + + + %(PreprocessorDefinitions); + U_PLATFORM_HAS_WINUWP_API=1; + + + + + %(PreprocessorDefinitions) + U_PLATFORM_HAS_WINUWP_API=1; + + + + \ No newline at end of file diff --git a/icuSources/allinone/Windows.CopyUnicodeHeaderFiles.targets b/icuSources/allinone/Windows.CopyUnicodeHeaderFiles.targets new file mode 100644 index 00000000..b6ece387 --- /dev/null +++ b/icuSources/allinone/Windows.CopyUnicodeHeaderFiles.targets @@ -0,0 +1,27 @@ + + + + + + + $(SolutionDir)\..\..\include\unicode + + $(BuildDependsOn); + CopyUnicodeHeaderFiles; + + + + + + + + + + + + + \ No newline at end of file diff --git a/icuSources/allinone/allinone.sln b/icuSources/allinone/allinone.sln index 88a0d197..b2b13305 100644 --- a/icuSources/allinone/allinone.sln +++ b/icuSources/allinone/allinone.sln @@ -1,73 +1,198 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2036 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cal", "..\samples\cal\cal.vcxproj", "{F7659D77-09CF-4FE9-ACEE-927287AA9509}" + ProjectSection(ProjectDependencies) = postProject + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cintltst", "..\test\cintltst\cintltst.vcxproj", "{3D1246AE-1B32-479B-BECA-AEFA97BE2321}" + ProjectSection(ProjectDependencies) = postProject + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} = {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "..\common\common.vcxproj", "{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}" + ProjectSection(ProjectDependencies) = postProject + {203EC78A-0531-43F0-A636-285439BDE025} = {203EC78A-0531-43F0-A636-285439BDE025} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ctestfw", "..\tools\ctestfw\ctestfw.vcxproj", "{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "date", "..\samples\date\date.vcxproj", "{38B5751A-C6F9-4409-950C-F4F9DA17275F}" + ProjectSection(ProjectDependencies) = postProject + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "derb", "..\tools\genrb\derb.vcxproj", "{D3065ADB-8820-4CC7-9B6C-9510833961A3}" ProjectSection(ProjectDependencies) = postProject {C2B04507-2521-4801-BF0D-5FD79D6D518C} = {C2B04507-2521-4801-BF0D-5FD79D6D518C} + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genbrk", "..\tools\genbrk\genbrk.vcxproj", "{C2BE5000-7501-4E87-9724-B8D82494FAE6}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genccode", "..\tools\genccode\genccode.vcxproj", "{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gencmn", "..\tools\gencmn\gencmn.vcxproj", "{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gencnval", "..\tools\gencnval\gencnval.vcxproj", "{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genrb", "..\tools\genrb\genrb.vcxproj", "{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}" + ProjectSection(ProjectDependencies) = postProject + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gentest", "..\tools\gentest\gentest.vcxproj", "{77C78066-746F-4EA6-B3FE-B8C8A4A97891}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} = {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "i18n", "..\i18n\i18n.vcxproj", "{0178B127-6269-407D-B112-93877BB62776}" + ProjectSection(ProjectDependencies) = postProject + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "intltest", "..\test\intltest\intltest.vcxproj", "{73632960-B3A6-464D-83A3-4B43365F19B8}" + ProjectSection(ProjectDependencies) = postProject + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} = {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makeconv", "..\tools\makeconv\makeconv.vcxproj", "{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makedata", "..\data\makedata.vcxproj", "{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pkgdata", "..\tools\pkgdata\pkgdata.vcxproj", "{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stubdata", "..\stubdata\stubdata.vcxproj", "{203EC78A-0531-43F0-A636-285439BDE025}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "toolutil", "..\tools\toolutil\toolutil.vcxproj", "{6B231032-3CB5-4EED-9210-810D666A23A0}" + ProjectSection(ProjectDependencies) = postProject + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uconv", "..\extra\uconv\uconv.vcxproj", "{DBA4088D-F6F9-4F8F-8820-082A4765C16C}" + ProjectSection(ProjectDependencies) = postProject + {97521D06-EC47-45D4-8BD0-9E16B3F93B2A} = {97521D06-EC47-45D4-8BD0-9E16B3F93B2A} + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + {4C8454FE-81D3-4CA3-9927-29BA96F03DAC} = {4C8454FE-81D3-4CA3-9927-29BA96F03DAC} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "io", "..\io\io.vcxproj", "{C2B04507-2521-4801-BF0D-5FD79D6D518C}" + ProjectSection(ProjectDependencies) = postProject + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gensprep", "..\tools\gensprep\gensprep.vcxproj", "{631C23CE-6C1D-4875-88F0-85E0A42B36EA}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iotest", "..\test\iotest\iotest.vcxproj", "{E4993E82-D68A-46CA-BAE0-9D35E172E46F}" + ProjectSection(ProjectDependencies) = postProject + {C2B04507-2521-4801-BF0D-5FD79D6D518C} = {C2B04507-2521-4801-BF0D-5FD79D6D518C} + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} = {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icupkg", "..\tools\icupkg\icupkg.vcxproj", "{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gendict", "..\tools\gendict\gendict.vcxproj", "{9D4211F7-2C77-439C-82F0-30A4E43BA569}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gencfu", "..\tools\gencfu\gencfu.vcxproj", "{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}" + ProjectSection(ProjectDependencies) = postProject + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gennorm2", "..\tools\gennorm2\gennorm2.vcxproj", "{C7891A65-80AB-4245-912E-5F1E17B0E6C4}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icuinfo", "..\tools\icuinfo\icuinfo.vcxproj", "{E7611F49-F088-4175-9446-6111444E72C8}" + ProjectSection(ProjectDependencies) = postProject + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} = {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testplug", "..\tools\icuinfo\testplug.vcxproj", "{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}" + ProjectSection(ProjectDependencies) = postProject + {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0} + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makedata_uwp", "..\data\makedata_uwp.vcxproj", "{B1D53358-37BD-48BC-B27C-68BAF1E78508}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "i18n_uwp", "..\i18n\i18n_uwp.vcxproj", "{6786C051-383B-47E0-9E82-B8B994E06A25}" + ProjectSection(ProjectDependencies) = postProject + {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776} + {C10CF34B-3F79-430E-AD38-5A32DC0589C2} = {C10CF34B-3F79-430E-AD38-5A32DC0589C2} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common_uwp", "..\common\common_uwp.vcxproj", "{C10CF34B-3F79-430E-AD38-5A32DC0589C2}" + ProjectSection(ProjectDependencies) = postProject + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -409,6 +534,9 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A714726C-FE2D-466C-95F3-06C5C4EAE54F} + EndGlobalSection GlobalSection(SubversionScc) = preSolution Svn-Managed = True Manager = AnkhSVN - Subversion Support for Visual Studio diff --git a/icuSources/common/Makefile.in b/icuSources/common/Makefile.in index 10fa8de3..391ef28a 100644 --- a/icuSources/common/Makefile.in +++ b/icuSources/common/Makefile.in @@ -89,7 +89,7 @@ ucnv_ext.o ucnvmbcs.o ucnv2022.o ucnvhz.o ucnv_lmb.o ucnvisci.o ucnvdisp.o ucnv_ resource.o uresbund.o ures_cnv.o uresdata.o resbund.o resbund_cnv.o \ ucurr.o \ messagepattern.o ucat.o locmap.o uloc.o locid.o locutil.o locavailable.o locdispnames.o locdspnm.o loclikely.o locresdata.o \ -bytestream.o stringpiece.o \ +bytestream.o stringpiece.o bytesinkutil.o \ stringtriebuilder.o bytestriebuilder.o \ bytestrie.o bytestrieiterator.o \ ucharstrie.o ucharstriebuilder.o ucharstrieiterator.o \ @@ -104,14 +104,15 @@ patternprops.o uchar.o uprops.o ucase.o propname.o ubidi_props.o ubidi.o ubidiwr uscript.o uscript_props.o usc_impl.o unames.o \ utrie.o utrie2.o utrie2_builder.o bmpset.o unisetspan.o uset_props.o uniset_props.o uniset_closure.o uset.o uniset.o usetiter.o ruleiter.o caniter.o unifilt.o unifunct.o \ uarrsort.o brkiter.o ubrk.o brkeng.o dictbe.o filteredbrk.o \ -rbbi.o rbbidata.o rbbinode.o rbbirb.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o \ +rbbi.o rbbidata.o rbbinode.o rbbirb.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o rbbi_cache.o \ serv.o servnotf.o servls.o servlk.o servlkf.o servrbf.o servslkf.o \ uidna.o usprep.o uts46.o punycode.o \ util.o util_props.o parsepos.o locbased.o cwchar.o wintz.o dtintrv.o ucnvsel.o propsvec.o \ ulist.o uloc_tag.o icudataver.o icuplug.o listformatter.o ulistformatter.o \ sharedobject.o simpleformatter.o unifiedcache.o uloc_keytype.o \ ubiditransform.o \ -pluralmap.o +pluralmap.o \ +static_unicode_sets.o ## Header files to install HEADERS = $(srcdir)/unicode/*.h diff --git a/icuSources/common/Makefile.local b/icuSources/common/Makefile.local index 33aa19e3..66277a99 100644 --- a/icuSources/common/Makefile.local +++ b/icuSources/common/Makefile.local @@ -1,6 +1,6 @@ #****************************************************************************** # -# Copyright (c) 2006-2008,2014,2016 Apple Inc. +# Copyright (c) 2006-2008,2014,2016,2018 Apple Inc. # All Rights Reserved. # #****************************************************************************** @@ -8,9 +8,9 @@ #ifeq "$(WINDOWS)" "YES" #else - OBJECTS += rbtok.o urbtok.o aaplbfct.o ualoc.o + OBJECTS += rbbi57.o rbbitblb57.o rbbistbl57.o rbbiscan57.o rbbidata57.o rbbirb57.o rbbisetb57.o rbtok.o urbtok.o aaplbfct.o ualoc.o - STATIC_OBJECT += rbtok.$(STATIC_O) urbtok.$(STATIC_O) aaplbfct.$(STATIC_O) ualoc.$(STATIC_O) + STATIC_OBJECT += rbbi57.$(STATIC_O) rbbitblb57.$(STATIC_O) rbbistbl57.$(STATIC_O) rbbiscan57.$(STATIC_O) rbbidata57.$(STATIC_O) rbbirb57.$(STATIC_O) rbbisetb57.$(STATIC_O) rbtok.$(STATIC_O) urbtok.$(STATIC_O) aaplbfct.$(STATIC_O) ualoc.$(STATIC_O) - DEPS += rbtok.d urbtok.d aaplbfct.d ualoc.d + DEPS += rbbi57.d rbbitblb57.d rbbistbl57.d rbbiscan57.d rbbidata57.d rbbirb57.d rbbisetb57.d rbtok.d urbtok.d aaplbfct.d ualoc.d #endif diff --git a/icuSources/common/aaplbfct.cpp b/icuSources/common/aaplbfct.cpp index fbecac0e..8d53b091 100644 --- a/icuSources/common/aaplbfct.cpp +++ b/icuSources/common/aaplbfct.cpp @@ -196,7 +196,7 @@ and CompactTrieDictionary no longer exists. Need to work out new implementation DictionaryMatcher * AppleLanguageBreakFactory::loadDictionaryMatcherFor(UScriptCode script, int32_t breakType) { - DictionaryMatcher *icuDictMatcher = ICULanguageBreakFactory::loadDictionaryMatcherFor(script, breakType); + DictionaryMatcher *icuDictMatcher = ICULanguageBreakFactory::loadDictionaryMatcherFor(script); #if !TARGET_OS_EMBEDDED #if 0 // need to update loadDictionaryMatcherFor implementation below diff --git a/icuSources/common/bmpset.cpp b/icuSources/common/bmpset.cpp index 08f9bed0..35bc80dc 100644 --- a/icuSources/common/bmpset.cpp +++ b/icuSources/common/bmpset.cpp @@ -28,7 +28,7 @@ U_NAMESPACE_BEGIN BMPSet::BMPSet(const int32_t *parentList, int32_t parentListLength) : list(parentList), listLength(parentListLength) { - uprv_memset(asciiBytes, 0, sizeof(asciiBytes)); + uprv_memset(latin1Contains, 0, sizeof(latin1Contains)); uprv_memset(table7FF, 0, sizeof(table7FF)); uprv_memset(bmpBlockBits, 0, sizeof(bmpBlockBits)); @@ -45,14 +45,16 @@ BMPSet::BMPSet(const int32_t *parentList, int32_t parentListLength) : list4kStarts[i]=findCodePoint(i<<12, list4kStarts[i-1], listLength-1); } list4kStarts[0x11]=listLength-1; + containsFFFD=containsSlow(0xfffd, list4kStarts[0xf], list4kStarts[0x10]); initBits(); overrideIllegal(); } BMPSet::BMPSet(const BMPSet &otherBMPSet, const int32_t *newParentList, int32_t newParentListLength) : + containsFFFD(otherBMPSet.containsFFFD), list(newParentList), listLength(newParentListLength) { - uprv_memcpy(asciiBytes, otherBMPSet.asciiBytes, sizeof(asciiBytes)); + uprv_memcpy(latin1Contains, otherBMPSet.latin1Contains, sizeof(latin1Contains)); uprv_memcpy(table7FF, otherBMPSet.table7FF, sizeof(table7FF)); uprv_memcpy(bmpBlockBits, otherBMPSet.bmpBlockBits, sizeof(bmpBlockBits)); uprv_memcpy(list4kStarts, otherBMPSet.list4kStarts, sizeof(list4kStarts)); @@ -98,9 +100,9 @@ static void set32x64Bits(uint32_t table[64], int32_t start, int32_t limit) { ++lead; } if(lead=0x80) { + if(start>=0x100) { break; } do { - asciiBytes[start++]=1; - } while(start0x80) { + if(start<0x80) { + start=0x80; + } + break; + } + } // Set table7FF[]. while(start<0x800) { @@ -204,19 +223,14 @@ void BMPSet::initBits() { * for faster validity checking at runtime. * No need to set 0 values where they were reset to 0 in the constructor * and not modified by initBits(). - * (asciiBytes[] trail bytes, table7FF[] 0..7F, bmpBlockBits[] 0..7FF) + * (table7FF[] 0..7F, bmpBlockBits[] 0..7FF) * Need to set 0 values for surrogates D800..DFFF. */ void BMPSet::overrideIllegal() { uint32_t bits, mask; int32_t i; - if(containsSlow(0xfffd, list4kStarts[0xf], list4kStarts[0x10])) { - // contains(FFFD)==TRUE - for(i=0x80; i<0xc0; ++i) { - asciiBytes[i]=1; - } - + if(containsFFFD) { bits=3; // Lead bytes 0xC0 and 0xC1. for(i=0; i<64; ++i) { table7FF[i]|=bits; @@ -233,7 +247,6 @@ void BMPSet::overrideIllegal() { bmpBlockBits[i]=(bmpBlockBits[i]&mask)|bits; } } else { - // contains(FFFD)==FALSE mask=~(0x10001<<0xd); // Lead byte 0xED. for(i=32; i<64; ++i) { // Second half of 4k block. bmpBlockBits[i]&=mask; @@ -277,8 +290,8 @@ int32_t BMPSet::findCodePoint(UChar32 c, int32_t lo, int32_t hi) const { UBool BMPSet::contains(UChar32 c) const { - if((uint32_t)c<=0x7f) { - return (UBool)asciiBytes[c]; + if((uint32_t)c<=0xff) { + return (UBool)latin1Contains[c]; } else if((uint32_t)c<=0x7ff) { return (UBool)((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0); } else if((uint32_t)c<0xd800 || (c>=0xe000 && c<=0xffff)) { @@ -314,8 +327,8 @@ BMPSet::span(const UChar *s, const UChar *limit, USetSpanCondition spanCondition // span do { c=*s; - if(c<=0x7f) { - if(!asciiBytes[c]) { + if(c<=0xff) { + if(!latin1Contains[c]) { break; } } else if(c<=0x7ff) { @@ -354,8 +367,8 @@ BMPSet::span(const UChar *s, const UChar *limit, USetSpanCondition spanCondition // span not do { c=*s; - if(c<=0x7f) { - if(asciiBytes[c]) { + if(c<=0xff) { + if(latin1Contains[c]) { break; } } else if(c<=0x7ff) { @@ -403,8 +416,8 @@ BMPSet::spanBack(const UChar *s, const UChar *limit, USetSpanCondition spanCondi // span for(;;) { c=*(--limit); - if(c<=0x7f) { - if(!asciiBytes[c]) { + if(c<=0xff) { + if(!latin1Contains[c]) { break; } } else if(c<=0x7ff) { @@ -446,8 +459,8 @@ BMPSet::spanBack(const UChar *s, const UChar *limit, USetSpanCondition spanCondi // span not for(;;) { c=*(--limit); - if(c<=0x7f) { - if(asciiBytes[c]) { + if(c<=0xff) { + if(latin1Contains[c]) { break; } } else if(c<=0x7ff) { @@ -497,22 +510,22 @@ const uint8_t * BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const { const uint8_t *limit=s+length; uint8_t b=*s; - if((int8_t)b>=0) { + if(U8_IS_SINGLE(b)) { // Initial all-ASCII span. if(spanCondition) { do { - if(!asciiBytes[b] || ++s==limit) { + if(!latin1Contains[b] || ++s==limit) { return s; } b=*s; - } while((int8_t)b>=0); + } while(U8_IS_SINGLE(b)); } else { do { - if(asciiBytes[b] || ++s==limit) { + if(latin1Contains[b] || ++s==limit) { return s; } b=*s; - } while((int8_t)b>=0); + } while(U8_IS_SINGLE(b)); } length=(int32_t)(limit-s); } @@ -540,20 +553,20 @@ BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanConditi // single trail byte, check for preceding 3- or 4-byte lead byte if(length>=2 && (b=*(limit-2))>=0xe0) { limit-=2; - if(asciiBytes[0x80]!=spanCondition) { + if(containsFFFD!=spanCondition) { limit0=limit; } } else if(b<0xc0 && b>=0x80 && length>=3 && (b=*(limit-3))>=0xf0) { // 4-byte lead byte with only two trail bytes limit-=3; - if(asciiBytes[0x80]!=spanCondition) { + if(containsFFFD!=spanCondition) { limit0=limit; } } } else { // lead byte with no trail bytes --limit; - if(asciiBytes[0x80]!=spanCondition) { + if(containsFFFD!=spanCondition) { limit0=limit; } } @@ -563,26 +576,26 @@ BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanConditi while(s=0xc0 && (t1=(uint8_t)(*s-0x80)) <= 0x3f ) { if((USetSpanCondition)((table7FF[t1]&((uint32_t)1<<(b&0x1f)))!=0) != spanCondition) { @@ -642,7 +656,7 @@ BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanConditi // Give an illegal sequence the same value as the result of contains(FFFD). // Handle each byte of an illegal sequence separately to simplify the code; // no need to optimize error handling. - if(asciiBytes[0x80]!=spanCondition) { + if(containsFFFD!=spanCondition) { return s-1; } } @@ -667,26 +681,26 @@ BMPSet::spanBackUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCon do { b=s[--length]; - if((int8_t)b>=0) { + if(U8_IS_SINGLE(b)) { // ASCII sub-span if(spanCondition) { do { - if(!asciiBytes[b]) { + if(!latin1Contains[b]) { return length+1; } else if(length==0) { return 0; } b=s[--length]; - } while((int8_t)b>=0); + } while(U8_IS_SINGLE(b)); } else { do { - if(asciiBytes[b]) { + if(latin1Contains[b]) { return length+1; } else if(length==0) { return 0; } b=s[--length]; - } while((int8_t)b>=0); + } while(U8_IS_SINGLE(b)); } } diff --git a/icuSources/common/bmpset.h b/icuSources/common/bmpset.h index 87375d2c..018aeb7f 100644 --- a/icuSources/common/bmpset.h +++ b/icuSources/common/bmpset.h @@ -28,11 +28,12 @@ U_NAMESPACE_BEGIN * Helper class for frozen UnicodeSets, implements contains() and span() * optimized for BMP code points. Structured to be UTF-8-friendly. * - * ASCII: Look up bytes. + * Latin-1: Look up bytes. * 2-byte characters: Bits organized vertically. * 3-byte characters: Use zero/one/mixed data per 64-block in U+0000..U+FFFF, * with mixed for illegal ranges. - * Supplementary characters: Call contains() on the parent set. + * Supplementary characters: Binary search over + * the supplementary part of the parent set's inversion list. */ class BMPSet : public UMemory { public: @@ -96,12 +97,12 @@ private: inline UBool containsSlow(UChar32 c, int32_t lo, int32_t hi) const; /* - * One byte per ASCII character, or trail byte in lead position. - * 0 or 1 for ASCII characters. - * The value for trail bytes is the result of contains(FFFD) - * for faster validity checking at runtime. + * One byte 0 or 1 per Latin-1 character. */ - UBool asciiBytes[0xc0]; + UBool latin1Contains[0x100]; + + /* TRUE if contains(U+FFFD). */ + UBool containsFFFD; /* * One bit per code point from U+0000..U+07FF. diff --git a/icuSources/common/brkeng.cpp b/icuSources/common/brkeng.cpp index a5900607..7144af60 100644 --- a/icuSources/common/brkeng.cpp +++ b/icuSources/common/brkeng.cpp @@ -11,9 +11,6 @@ #if !UCONFIG_NO_BREAK_ITERATION -#include "brkeng.h" -#include "cmemory.h" -#include "dictbe.h" #include "unicode/uchar.h" #include "unicode/uniset.h" #include "unicode/chariter.h" @@ -24,6 +21,10 @@ #include "unicode/uscript.h" #include "unicode/ucharstrie.h" #include "unicode/bytestrie.h" + +#include "brkeng.h" +#include "cmemory.h" +#include "dictbe.h" #include "charstr.h" #include "dictionarydata.h" #include "mutex.h" @@ -58,66 +59,47 @@ LanguageBreakFactory::~LanguageBreakFactory() { ****************************************************************** */ -UnhandledEngine::UnhandledEngine(UErrorCode &/*status*/) { - for (int32_t i = 0; i < UPRV_LENGTHOF(fHandled); ++i) { - fHandled[i] = 0; - } +UnhandledEngine::UnhandledEngine(UErrorCode &status) : fHandled(nullptr) { + (void)status; } UnhandledEngine::~UnhandledEngine() { - for (int32_t i = 0; i < UPRV_LENGTHOF(fHandled); ++i) { - if (fHandled[i] != 0) { - delete fHandled[i]; - } - } + delete fHandled; + fHandled = nullptr; } UBool -UnhandledEngine::handles(UChar32 c, int32_t breakType) const { - return (breakType >= 0 && breakType < UPRV_LENGTHOF(fHandled) - && fHandled[breakType] != 0 && fHandled[breakType]->contains(c)); +UnhandledEngine::handles(UChar32 c) const { + return fHandled && fHandled->contains(c); } int32_t UnhandledEngine::findBreaks( UText *text, - int32_t startPos, - int32_t endPos, - UBool reverse, - int32_t breakType, - UStack &/*foundBreaks*/ ) const { - if (breakType >= 0 && breakType < UPRV_LENGTHOF(fHandled)) { - UChar32 c = utext_current32(text); - if (reverse) { - while((int32_t)utext_getNativeIndex(text) > startPos && fHandled[breakType]->contains(c)) { - c = utext_previous32(text); - } - } - else { - while((int32_t)utext_getNativeIndex(text) < endPos && fHandled[breakType]->contains(c)) { - utext_next32(text); // TODO: recast loop to work with post-increment operations. - c = utext_current32(text); - } - } + int32_t /* startPos */, + int32_t endPos, + UVector32 &/*foundBreaks*/ ) const { + UChar32 c = utext_current32(text); + while((int32_t)utext_getNativeIndex(text) < endPos && fHandled->contains(c)) { + utext_next32(text); // TODO: recast loop to work with post-increment operations. + c = utext_current32(text); } return 0; } void -UnhandledEngine::handleCharacter(UChar32 c, int32_t breakType) { - if (breakType >= 0 && breakType < UPRV_LENGTHOF(fHandled)) { - if (fHandled[breakType] == 0) { - fHandled[breakType] = new UnicodeSet(); - if (fHandled[breakType] == 0) { - return; - } - } - if (!fHandled[breakType]->contains(c)) { - UErrorCode status = U_ZERO_ERROR; - // Apply the entire script of the character. - int32_t script = u_getIntPropertyValue(c, UCHAR_SCRIPT); - fHandled[breakType]->applyIntPropertyValue(UCHAR_SCRIPT, script, status); +UnhandledEngine::handleCharacter(UChar32 c) { + if (fHandled == nullptr) { + fHandled = new UnicodeSet(); + if (fHandled == nullptr) { + return; } } + if (!fHandled->contains(c)) { + UErrorCode status = U_ZERO_ERROR; + // Apply the entire script of the character. + int32_t script = u_getIntPropertyValue(c, UCHAR_SCRIPT); + fHandled->applyIntPropertyValue(UCHAR_SCRIPT, script, status); + } } /* @@ -145,7 +127,7 @@ U_NAMESPACE_BEGIN static UMutex gBreakEngineMutex = U_MUTEX_INITIALIZER; const LanguageBreakEngine * -ICULanguageBreakFactory::getEngineFor(UChar32 c, int32_t breakType) { +ICULanguageBreakFactory::getEngineFor(UChar32 c) { const LanguageBreakEngine *lbe = NULL; UErrorCode status = U_ZERO_ERROR; @@ -163,14 +145,14 @@ ICULanguageBreakFactory::getEngineFor(UChar32 c, int32_t breakType) { int32_t i = fEngines->size(); while (--i >= 0) { lbe = (const LanguageBreakEngine *)(fEngines->elementAt(i)); - if (lbe != NULL && lbe->handles(c, breakType)) { + if (lbe != NULL && lbe->handles(c)) { return lbe; } } } // We didn't find an engine. Create one. - lbe = loadEngineFor(c, breakType); + lbe = loadEngineFor(c); if (lbe != NULL) { fEngines->push((void *)lbe, status); } @@ -178,11 +160,11 @@ ICULanguageBreakFactory::getEngineFor(UChar32 c, int32_t breakType) { } const LanguageBreakEngine * -ICULanguageBreakFactory::loadEngineFor(UChar32 c, int32_t breakType) { +ICULanguageBreakFactory::loadEngineFor(UChar32 c) { UErrorCode status = U_ZERO_ERROR; UScriptCode code = uscript_getScript(c, &status); if (U_SUCCESS(status)) { - DictionaryMatcher *m = loadDictionaryMatcherFor(code, breakType); + DictionaryMatcher *m = loadDictionaryMatcherFor(code); if (m != NULL) { const LanguageBreakEngine *engine = NULL; switch(code) { @@ -243,7 +225,7 @@ ICULanguageBreakFactory::loadEngineFor(UChar32 c, int32_t breakType) { } DictionaryMatcher * -ICULanguageBreakFactory::loadDictionaryMatcherFor(UScriptCode script, int32_t /* brkType */) { +ICULanguageBreakFactory::loadDictionaryMatcherFor(UScriptCode script) { UErrorCode status = U_ZERO_ERROR; // open root from brkitr tree. UResourceBundle *b = ures_open(U_ICUDATA_BRKITR, "", &status); diff --git a/icuSources/common/brkeng.h b/icuSources/common/brkeng.h index 0335d11f..e40fce13 100644 --- a/icuSources/common/brkeng.h +++ b/icuSources/common/brkeng.h @@ -19,6 +19,7 @@ U_NAMESPACE_BEGIN class UnicodeSet; class UStack; +class UVector32; class DictionaryMatcher; /******************************************************************* @@ -53,11 +54,10 @@ class LanguageBreakEngine : public UMemory { * a particular kind of break.

* * @param c A character which begins a run that the engine might handle - * @param breakType The type of text break which the caller wants to determine * @return TRUE if this engine handles the particular character and break * type. */ - virtual UBool handles(UChar32 c, int32_t breakType) const = 0; + virtual UBool handles(UChar32 c) const = 0; /** *

Find any breaks within a run in the supplied text.

@@ -67,18 +67,13 @@ class LanguageBreakEngine : public UMemory { * is capable of handling. * @param startPos The start of the run within the supplied text. * @param endPos The end of the run within the supplied text. - * @param reverse Whether the caller is looking for breaks in a reverse - * direction. - * @param breakType The type of break desired, or -1. - * @param foundBreaks An allocated C array of the breaks found, if any + * @param foundBreaks A Vector of int32_t to receive the breaks. * @return The number of breaks found. */ virtual int32_t findBreaks( UText *text, int32_t startPos, int32_t endPos, - UBool reverse, - int32_t breakType, - UStack &foundBreaks ) const = 0; + UVector32 &foundBreaks ) const = 0; }; @@ -127,11 +122,9 @@ class LanguageBreakFactory : public UMemory { * * @param c A character that begins a run for which a LanguageBreakEngine is * sought. - * @param breakType The kind of text break for which a LanguageBreakEngine is - * sought. * @return A LanguageBreakEngine with the desired characteristics, or 0. */ - virtual const LanguageBreakEngine *getEngineFor(UChar32 c, int32_t breakType) = 0; + virtual const LanguageBreakEngine *getEngineFor(UChar32 c) = 0; }; @@ -154,11 +147,11 @@ class UnhandledEngine : public LanguageBreakEngine { private: /** - * The sets of characters handled, for each break type + * The sets of characters handled. * @internal */ - UnicodeSet *fHandled[4]; + UnicodeSet *fHandled; public: @@ -178,11 +171,10 @@ class UnhandledEngine : public LanguageBreakEngine { * a particular kind of break.

* * @param c A character which begins a run that the engine might handle - * @param breakType The type of text break which the caller wants to determine * @return TRUE if this engine handles the particular character and break * type. */ - virtual UBool handles(UChar32 c, int32_t breakType) const; + virtual UBool handles(UChar32 c) const; /** *

Find any breaks within a run in the supplied text.

@@ -192,26 +184,20 @@ class UnhandledEngine : public LanguageBreakEngine { * is capable of handling. * @param startPos The start of the run within the supplied text. * @param endPos The end of the run within the supplied text. - * @param reverse Whether the caller is looking for breaks in a reverse - * direction. - * @param breakType The type of break desired, or -1. * @param foundBreaks An allocated C array of the breaks found, if any * @return The number of breaks found. */ virtual int32_t findBreaks( UText *text, int32_t startPos, int32_t endPos, - UBool reverse, - int32_t breakType, - UStack &foundBreaks ) const; + UVector32 &foundBreaks ) const; /** *

Tell the engine to handle a particular character and break type.

* * @param c A character which the engine should handle - * @param breakType The type of text break for which the engine should handle c */ - virtual void handleCharacter(UChar32 c, int32_t breakType); + virtual void handleCharacter(UChar32 c); }; @@ -255,11 +241,9 @@ class ICULanguageBreakFactory : public LanguageBreakFactory { * * @param c A character that begins a run for which a LanguageBreakEngine is * sought. - * @param breakType The kind of text break for which a LanguageBreakEngine is - * sought. * @return A LanguageBreakEngine with the desired characteristics, or 0. */ - virtual const LanguageBreakEngine *getEngineFor(UChar32 c, int32_t breakType); + virtual const LanguageBreakEngine *getEngineFor(UChar32 c); protected: /** @@ -268,21 +252,17 @@ protected: * * @param c A character that begins a run for which a LanguageBreakEngine is * sought. - * @param breakType The kind of text break for which a LanguageBreakEngine is - * sought. * @return A LanguageBreakEngine with the desired characteristics, or 0. */ - virtual const LanguageBreakEngine *loadEngineFor(UChar32 c, int32_t breakType); + virtual const LanguageBreakEngine *loadEngineFor(UChar32 c); /** *

Create a DictionaryMatcher for the specified script and break type.

* @param script An ISO 15924 script code that identifies the dictionary to be * created. - * @param breakType The kind of text break for which a dictionary is - * sought. * @return A DictionaryMatcher with the desired characteristics, or NULL. */ - virtual DictionaryMatcher *loadDictionaryMatcherFor(UScriptCode script, int32_t breakType); + virtual DictionaryMatcher *loadDictionaryMatcherFor(UScriptCode script); }; U_NAMESPACE_END diff --git a/icuSources/common/brkiter.cpp b/icuSources/common/brkiter.cpp index fe4732a6..f14c23a0 100644 --- a/icuSources/common/brkiter.cpp +++ b/icuSources/common/brkiter.cpp @@ -39,7 +39,6 @@ #include "uassert.h" #include "ubrkimpl.h" #include "charstr.h" -#include "unicode/filteredbrk.h" // ***************************************************************************** // class BreakIterator @@ -53,7 +52,7 @@ U_NAMESPACE_BEGIN // ------------------------------------- BreakIterator* -BreakIterator::buildInstance(const Locale& loc, const char *type, int32_t kind, UErrorCode &status) +BreakIterator::buildInstance(const Locale& loc, const char *type, UErrorCode &status) { char fnbuff[256]; char ext[4]={'\0'}; @@ -122,7 +121,6 @@ BreakIterator::buildInstance(const Locale& loc, const char *type, int32_t kind, U_LOCALE_BASED(locBased, *(BreakIterator*)result); locBased.setLocaleIDs(ures_getLocaleByType(b, ULOC_VALID_LOCALE, &status), actualLocale.data()); - result->setBreakType(kind); } ures_close(b); @@ -196,16 +194,29 @@ BreakIterator::getAvailableLocales(int32_t& count) // ------------------------------------------ // -// Default constructor and destructor +// Constructors, destructor and assignment operator // //------------------------------------------- BreakIterator::BreakIterator() -: fKeepAll(FALSE) +: fLineWordOpts(UBRK_LINEWORD_NORMAL) { *validLocale = *actualLocale = 0; } +BreakIterator::BreakIterator(const BreakIterator &other) : UObject(other) { + uprv_strncpy(actualLocale, other.actualLocale, sizeof(actualLocale)); + uprv_strncpy(validLocale, other.validLocale, sizeof(validLocale)); +} + +BreakIterator &BreakIterator::operator =(const BreakIterator &other) { + if (this != &other) { + uprv_strncpy(actualLocale, other.actualLocale, sizeof(actualLocale)); + uprv_strncpy(validLocale, other.validLocale, sizeof(validLocale)); + } + return *this; +} + BreakIterator::~BreakIterator() { } @@ -267,7 +278,7 @@ ICUBreakIteratorService::~ICUBreakIteratorService() {} // defined in ucln_cmn.h U_NAMESPACE_END -static icu::UInitOnce gInitOnce; +static icu::UInitOnce gInitOnceBrkiter; static icu::ICULocaleService* gService = NULL; @@ -282,7 +293,7 @@ static UBool U_CALLCONV breakiterator_cleanup(void) { delete gService; gService = NULL; } - gInitOnce.reset(); + gInitOnceBrkiter.reset(); #endif return TRUE; } @@ -298,7 +309,7 @@ initService(void) { static ICULocaleService* getService(void) { - umtx_initOnce(gInitOnce, &initService); + umtx_initOnce(gInitOnceBrkiter, &initService); return gService; } @@ -308,7 +319,7 @@ getService(void) static inline UBool hasService(void) { - return !gInitOnce.isReset() && getService() != NULL; + return !gInitOnceBrkiter.isReset() && getService() != NULL; } // ------------------------------------- @@ -402,10 +413,10 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) BreakIterator *result = NULL; switch (kind) { case UBRK_CHARACTER: - result = BreakIterator::buildInstance(loc, "grapheme", kind, status); + result = BreakIterator::buildInstance(loc, "grapheme", status); break; case UBRK_WORD: - result = BreakIterator::buildInstance(loc, "word", kind, status); + result = BreakIterator::buildInstance(loc, "word", status); break; case UBRK_LINE: uprv_strcpy(lbType, "line"); @@ -418,16 +429,24 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) uprv_strcat(lbType, lbKeyValue); } } - result = BreakIterator::buildInstance(loc, lbType, kind, status); + result = BreakIterator::buildInstance(loc, lbType, status); if (U_SUCCESS(status) && result != NULL) { char lwKeyValue[kKeyValueLenMax] = {0}; UErrorCode kvStatus = U_ZERO_ERROR; int32_t kLen = loc.getKeywordValue("lw", lwKeyValue, kKeyValueLenMax, kvStatus); - result->setKeepAll(U_SUCCESS(kvStatus) && kLen > 0 && uprv_strcmp(lwKeyValue,"keepall")==0); + ULineWordOptions lineWordOpts = UBRK_LINEWORD_NORMAL; + if (U_SUCCESS(kvStatus) && kLen > 0) { + if (uprv_strcmp(lwKeyValue,"keepall")==0 || uprv_strcmp(lwKeyValue,"keep-all")==0) { + lineWordOpts = UBRK_LINEWORD_KEEP_ALL; + } else if (uprv_strcmp(lwKeyValue,"keep-hangul")==0) { + lineWordOpts = UBRK_LINEWORD_KEEP_HANGUL; + } + } + result->setLineWordOpts(lineWordOpts); } break; case UBRK_SENTENCE: - result = BreakIterator::buildInstance(loc, "sentence", kind, status); + result = BreakIterator::buildInstance(loc, "sentence", status); #if !UCONFIG_NO_FILTERED_BREAK_ITERATION { char ssKeyValue[kKeyValueLenMax] = {0}; @@ -444,7 +463,7 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) #endif break; case UBRK_TITLE: - result = BreakIterator::buildInstance(loc, "title", kind, status); + result = BreakIterator::buildInstance(loc, "title", status); break; default: status = U_ILLEGAL_ARGUMENT_ERROR; diff --git a/icuSources/common/bytesinkutil.cpp b/icuSources/common/bytesinkutil.cpp new file mode 100644 index 00000000..6af7ddfd --- /dev/null +++ b/icuSources/common/bytesinkutil.cpp @@ -0,0 +1,123 @@ +// © 2017 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +// bytesinkutil.cpp +// created: 2017sep14 Markus W. Scherer + +#include "unicode/utypes.h" +#include "unicode/bytestream.h" +#include "unicode/edits.h" +#include "unicode/stringoptions.h" +#include "unicode/utf8.h" +#include "unicode/utf16.h" +#include "bytesinkutil.h" +#include "cmemory.h" +#include "uassert.h" + +U_NAMESPACE_BEGIN + +UBool +ByteSinkUtil::appendChange(int32_t length, const char16_t *s16, int32_t s16Length, + ByteSink &sink, Edits *edits, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return FALSE; } + char scratch[200]; + int32_t s8Length = 0; + for (int32_t i = 0; i < s16Length;) { + int32_t capacity; + int32_t desiredCapacity = s16Length - i; + if (desiredCapacity < (INT32_MAX / 3)) { + desiredCapacity *= 3; // max 3 UTF-8 bytes per UTF-16 code unit + } else if (desiredCapacity < (INT32_MAX / 2)) { + desiredCapacity *= 2; + } else { + desiredCapacity = INT32_MAX; + } + char *buffer = sink.GetAppendBuffer(U8_MAX_LENGTH, desiredCapacity, + scratch, UPRV_LENGTHOF(scratch), &capacity); + capacity -= U8_MAX_LENGTH - 1; + int32_t j = 0; + for (; i < s16Length && j < capacity;) { + UChar32 c; + U16_NEXT_UNSAFE(s16, i, c); + U8_APPEND_UNSAFE(buffer, j, c); + } + if (j > (INT32_MAX - s8Length)) { + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + return FALSE; + } + sink.Append(buffer, j); + s8Length += j; + } + if (edits != nullptr) { + edits->addReplace(length, s8Length); + } + return TRUE; +} + +UBool +ByteSinkUtil::appendChange(const uint8_t *s, const uint8_t *limit, + const char16_t *s16, int32_t s16Length, + ByteSink &sink, Edits *edits, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return FALSE; } + if ((limit - s) > INT32_MAX) { + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + return FALSE; + } + return appendChange((int32_t)(limit - s), s16, s16Length, sink, edits, errorCode); +} + +void +ByteSinkUtil::appendCodePoint(int32_t length, UChar32 c, ByteSink &sink, Edits *edits) { + char s8[U8_MAX_LENGTH]; + int32_t s8Length = 0; + U8_APPEND_UNSAFE(s8, s8Length, c); + if (edits != nullptr) { + edits->addReplace(length, s8Length); + } + sink.Append(s8, s8Length); +} + +namespace { + +// See unicode/utf8.h U8_APPEND_UNSAFE(). +inline uint8_t getTwoByteLead(UChar32 c) { return (uint8_t)((c >> 6) | 0xc0); } +inline uint8_t getTwoByteTrail(UChar32 c) { return (uint8_t)((c & 0x3f) | 0x80); } + +} // namespace + +void +ByteSinkUtil::appendTwoBytes(UChar32 c, ByteSink &sink) { + U_ASSERT(0x80 <= c && c <= 0x7ff); // 2-byte UTF-8 + char s8[2] = { (char)getTwoByteLead(c), (char)getTwoByteTrail(c) }; + sink.Append(s8, 2); +} + +void +ByteSinkUtil::appendNonEmptyUnchanged(const uint8_t *s, int32_t length, + ByteSink &sink, uint32_t options, Edits *edits) { + U_ASSERT(length > 0); + if (edits != nullptr) { + edits->addUnchanged(length); + } + if ((options & U_OMIT_UNCHANGED_TEXT) == 0) { + sink.Append(reinterpret_cast(s), length); + } +} + +UBool +ByteSinkUtil::appendUnchanged(const uint8_t *s, const uint8_t *limit, + ByteSink &sink, uint32_t options, Edits *edits, + UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return FALSE; } + if ((limit - s) > INT32_MAX) { + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + return FALSE; + } + int32_t length = (int32_t)(limit - s); + if (length > 0) { + appendNonEmptyUnchanged(s, length, sink, options, edits); + } + return TRUE; +} + +U_NAMESPACE_END diff --git a/icuSources/common/bytesinkutil.h b/icuSources/common/bytesinkutil.h new file mode 100644 index 00000000..8287ffea --- /dev/null +++ b/icuSources/common/bytesinkutil.h @@ -0,0 +1,61 @@ +// © 2017 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +// bytesinkutil.h +// created: 2017sep14 Markus W. Scherer + +#include "unicode/utypes.h" +#include "unicode/bytestream.h" +#include "unicode/edits.h" +#include "cmemory.h" +#include "uassert.h" + +U_NAMESPACE_BEGIN + +class ByteSink; +class Edits; + +class U_COMMON_API ByteSinkUtil { +public: + ByteSinkUtil() = delete; // all static + + /** (length) bytes were mapped to valid (s16, s16Length). */ + static UBool appendChange(int32_t length, + const char16_t *s16, int32_t s16Length, + ByteSink &sink, Edits *edits, UErrorCode &errorCode); + + /** The bytes at [s, limit[ were mapped to valid (s16, s16Length). */ + static UBool appendChange(const uint8_t *s, const uint8_t *limit, + const char16_t *s16, int32_t s16Length, + ByteSink &sink, Edits *edits, UErrorCode &errorCode); + + /** (length) bytes were mapped/changed to valid code point c. */ + static void appendCodePoint(int32_t length, UChar32 c, ByteSink &sink, Edits *edits = nullptr); + + /** The few bytes at [src, nextSrc[ were mapped/changed to valid code point c. */ + static inline void appendCodePoint(const uint8_t *src, const uint8_t *nextSrc, UChar32 c, + ByteSink &sink, Edits *edits = nullptr) { + appendCodePoint((int32_t)(nextSrc - src), c, sink, edits); + } + + /** Append the two-byte character (U+0080..U+07FF). */ + static void appendTwoBytes(UChar32 c, ByteSink &sink); + + static UBool appendUnchanged(const uint8_t *s, int32_t length, + ByteSink &sink, uint32_t options, Edits *edits, + UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return FALSE; } + if (length > 0) { appendNonEmptyUnchanged(s, length, sink, options, edits); } + return TRUE; + } + + static UBool appendUnchanged(const uint8_t *s, const uint8_t *limit, + ByteSink &sink, uint32_t options, Edits *edits, + UErrorCode &errorCode); + +private: + static void appendNonEmptyUnchanged(const uint8_t *s, int32_t length, + ByteSink &sink, uint32_t options, Edits *edits); +}; + +U_NAMESPACE_END diff --git a/icuSources/common/bytestream.cpp b/icuSources/common/bytestream.cpp index bfd7bded..0d0e4dda 100644 --- a/icuSources/common/bytestream.cpp +++ b/icuSources/common/bytestream.cpp @@ -45,6 +45,12 @@ void CheckedArrayByteSink::Append(const char* bytes, int32_t n) { if (n <= 0) { return; } + if (n > (INT32_MAX - appended_)) { + // TODO: Report as integer overflow, not merely buffer overflow. + appended_ = INT32_MAX; + overflowed_ = TRUE; + return; + } appended_ += n; int32_t available = capacity_ - size_; if (n > available) { diff --git a/icuSources/common/caniter.cpp b/icuSources/common/caniter.cpp index aee9f4ee..b28acfc8 100644 --- a/icuSources/common/caniter.cpp +++ b/icuSources/common/caniter.cpp @@ -405,7 +405,7 @@ UnicodeString* CanonicalIterator::getEquivalents(const UnicodeString &segment, i //String[] finalResult = new String[result.size()]; UnicodeString *finalResult = NULL; int32_t resultCount; - if((resultCount = result.count())) { + if((resultCount = result.count()) != 0) { finalResult = new UnicodeString[resultCount]; if (finalResult == 0) { status = U_MEMORY_ALLOCATION_ERROR; diff --git a/icuSources/common/charstr.cpp b/icuSources/common/charstr.cpp index 8bacd20d..353f1d52 100644 --- a/icuSources/common/charstr.cpp +++ b/icuSources/common/charstr.cpp @@ -23,6 +23,18 @@ U_NAMESPACE_BEGIN +CharString::CharString(CharString&& src) U_NOEXCEPT + : buffer(std::move(src.buffer)), len(src.len) { + src.len = 0; // not strictly necessary because we make no guarantees on the source string +} + +CharString& CharString::operator=(CharString&& src) U_NOEXCEPT { + buffer = std::move(src.buffer); + len = src.len; + src.len = 0; // not strictly necessary because we make no guarantees on the source string + return *this; +} + CharString &CharString::copyFrom(const CharString &s, UErrorCode &errorCode) { if(U_SUCCESS(errorCode) && this!=&s && ensureCapacity(s.len+1, 0, errorCode)) { len=s.len; diff --git a/icuSources/common/charstr.h b/icuSources/common/charstr.h index 3cfdf6a8..86f69c38 100644 --- a/icuSources/common/charstr.h +++ b/icuSources/common/charstr.h @@ -55,6 +55,18 @@ public: } ~CharString() {} + /** + * Move constructor; might leave src in an undefined state. + * This string will have the same contents and state that the source string had. + */ + CharString(CharString &&src) U_NOEXCEPT; + /** + * Move assignment operator; might leave src in an undefined state. + * This string will have the same contents and state that the source string had. + * The behavior is undefined if *this and src are the same object. + */ + CharString &operator=(CharString &&src) U_NOEXCEPT; + /** * Replaces this string's contents with the other string's contents. * CharString does not support the standard copy constructor nor diff --git a/icuSources/common/cmemory.cpp b/icuSources/common/cmemory.cpp index 2176c929..663c1411 100644 --- a/icuSources/common/cmemory.cpp +++ b/icuSources/common/cmemory.cpp @@ -41,30 +41,6 @@ static int n=0; static long b=0; #endif -#if U_DEBUG - -static char gValidMemorySink = 0; - -U_CAPI void uprv_checkValidMemory(const void *p, size_t n) { - /* - * Access the memory to ensure that it's all valid. - * Load and save a computed value to try to ensure that the compiler - * does not throw away the whole loop. - * A thread analyzer might complain about un-mutexed access to gValidMemorySink - * which is true but harmless because no one ever uses the value in gValidMemorySink. - */ - const char *s = (const char *)p; - char c = gValidMemorySink; - size_t i; - U_ASSERT(p != NULL); - for(i = 0; i < n; ++i) { - c ^= s[i]; - } - gValidMemorySink = c; -} - -#endif /* U_DEBUG */ - U_CAPI void * U_EXPORT2 uprv_malloc(size_t s) { #if U_DEBUG && defined(UPRV_MALLOC_COUNT) diff --git a/icuSources/common/cmemory.h b/icuSources/common/cmemory.h index 665a8227..e3532c75 100644 --- a/icuSources/common/cmemory.h +++ b/icuSources/common/cmemory.h @@ -36,31 +36,10 @@ #include #endif -#if U_DEBUG - -/* - * The C++ standard requires that the source pointer for memcpy() & memmove() - * is valid, not NULL, and not at the end of an allocated memory block. - * In debug mode, we read one byte from the source point to verify that it's - * a valid, readable pointer. - */ - -U_CAPI void uprv_checkValidMemory(const void *p, size_t n); - -#define uprv_memcpy(dst, src, size) ( \ - uprv_checkValidMemory(src, 1), \ - U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size)) -#define uprv_memmove(dst, src, size) ( \ - uprv_checkValidMemory(src, 1), \ - U_STANDARD_CPP_NAMESPACE memmove(dst, src, size)) - -#else #define uprv_memcpy(dst, src, size) U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size) #define uprv_memmove(dst, src, size) U_STANDARD_CPP_NAMESPACE memmove(dst, src, size) -#endif /* U_DEBUG */ - /** * \def UPRV_LENGTHOF * Convenience macro to determine the length of a fixed array at compile-time. @@ -162,7 +141,6 @@ public: * @param p simple pointer to an array of T items that is adopted */ explicit LocalMemory(T *p=NULL) : LocalPointerBase(p) {} -#if U_HAVE_RVALUE_REFERENCES /** * Move constructor, leaves src with isNull(). * @param src source smart pointer @@ -170,14 +148,12 @@ public: LocalMemory(LocalMemory &&src) U_NOEXCEPT : LocalPointerBase(src.ptr) { src.ptr=NULL; } -#endif /** * Destructor deletes the memory it owns. */ ~LocalMemory() { uprv_free(LocalPointerBase::ptr); } -#if U_HAVE_RVALUE_REFERENCES /** * Move assignment operator, leaves src with isNull(). * The behavior is undefined if *this and src are the same object. @@ -187,7 +163,6 @@ public: LocalMemory &operator=(LocalMemory &&src) U_NOEXCEPT { return moveFrom(src); } -#endif /** * Move assignment, leaves src with isNull(). * The behavior is undefined if *this and src are the same object. @@ -312,10 +287,26 @@ public: * Default constructor initializes with internal T[stackCapacity] buffer. */ MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(FALSE) {} + /** + * Automatically allocates the heap array if the argument is larger than the stack capacity. + * Intended for use when an approximate capacity is known at compile time but the true + * capacity is not known until runtime. + */ + MaybeStackArray(int32_t newCapacity) : MaybeStackArray() { + if (capacity < newCapacity) { resize(newCapacity); } + }; /** * Destructor deletes the array (if owned). */ ~MaybeStackArray() { releaseArray(); } + /** + * Move constructor: transfers ownership or copies the stack array. + */ + MaybeStackArray(MaybeStackArray &&src) U_NOEXCEPT; + /** + * Move assignment: transfers ownership or copies the stack array. + */ + MaybeStackArray &operator=(MaybeStackArray &&src) U_NOEXCEPT; /** * Returns the array capacity (number of T items). * @return array capacity @@ -393,6 +384,11 @@ private: uprv_free(ptr); } } + void resetToStackArray() { + ptr=stackArray; + capacity=stackCapacity; + needToRelease=FALSE; + } /* No comparison operators with other MaybeStackArray's. */ bool operator==(const MaybeStackArray & /*other*/) {return FALSE;} bool operator!=(const MaybeStackArray & /*other*/) {return TRUE;} @@ -415,6 +411,34 @@ private: #endif }; +template +icu::MaybeStackArray::MaybeStackArray( + MaybeStackArray && src) U_NOEXCEPT + : ptr(src.ptr), capacity(src.capacity), needToRelease(src.needToRelease) { + if (src.ptr == src.stackArray) { + ptr = stackArray; + uprv_memcpy(stackArray, src.stackArray, sizeof(T) * src.capacity); + } else { + src.resetToStackArray(); // take ownership away from src + } +} + +template +inline MaybeStackArray & +MaybeStackArray::operator=(MaybeStackArray && src) U_NOEXCEPT { + releaseArray(); // in case this instance had its own memory allocated + capacity = src.capacity; + needToRelease = src.needToRelease; + if (src.ptr == src.stackArray) { + ptr = stackArray; + uprv_memcpy(stackArray, src.stackArray, sizeof(T) * src.capacity); + } else { + ptr = src.ptr; + src.resetToStackArray(); // take ownership away from src + } + return *this; +} + template inline T *MaybeStackArray::resize(int32_t newCapacity, int32_t length) { if(newCapacity>0) { @@ -464,9 +488,7 @@ inline T *MaybeStackArray::orphanOrClone(int32_t length, int32 uprv_memcpy(p, ptr, (size_t)length*sizeof(T)); } resultCapacity=length; - ptr=stackArray; - capacity=stackCapacity; - needToRelease=FALSE; + resetToStackArray(); return p; } diff --git a/icuSources/common/common.vcxproj b/icuSources/common/common.vcxproj index 33ef60e2..0f501406 100644 --- a/icuSources/common/common.vcxproj +++ b/icuSources/common/common.vcxproj @@ -1,50 +1,16 @@  - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - + + + {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} - - DynamicLibrary - false - MultiByte - v140 - - - DynamicLibrary - false - MultiByte - v140 - - + DynamicLibrary false MultiByte - v140 - - - DynamicLibrary - false - MultiByte - v140 @@ -81,40 +47,47 @@ .\x64\Debug\ true + + + + U_ATTRIBUTE_DEPRECATED=;U_COMMON_IMPLEMENTATION;U_PLATFORM_USES_ONLY_WIN32_API=1;%(PreprocessorDefinitions) + false + Level3 + + + icudt.lib;%(AdditionalDependencies) + 0x4a800000 + + + + + + RBBI_DEBUG;%(PreprocessorDefinitions) + true + MultiThreadedDebugDLL + + + + + + MultiThreadedDLL + true + + - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 .\..\..\lib\icuuc.tlb - U_ATTRIBUTE_DEPRECATED=;WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - false - true .\x86\Release/common.pch .\x86\Release/ .\x86\Release/ .\x86\Release/ - Level3 - true - /utf-8 %(AdditionalOptions) - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - ..\..\bin\icuuc59.dll - true + ..\..\bin\icuuc62.dll + .\..\..\lib;%(AdditionalLibraryDirectories) .\..\..\lib\icuuc.pdb - true - 0x4a800000 - false ..\..\lib\icuuc.lib @@ -122,41 +95,19 @@ - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 .\..\..\lib\icuucd.tlb - Disabled - U_ATTRIBUTE_DEPRECATED=;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;RBBI_DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - false - true .\x86\Debug/common.pch .\x86\Debug/ .\x86\Debug/ .\x86\Debug/ - true - Level3 - true EditAndContinue - /utf-8 %(AdditionalOptions) - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - ..\..\bin\icuuc59d.dll - true - true + ..\..\bin\icuuc62d.dll + .\..\..\lib;%(AdditionalLibraryDirectories) .\..\..\lib\icuucd.pdb - 0x4a800000 - false ..\..\lib\icuucd.lib @@ -164,79 +115,37 @@ - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 .\..\..\lib64\icuuc.tlb - U_ATTRIBUTE_DEPRECATED=;WIN64;WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - false - true .\x64\Release/common.pch .\x64\Release/ .\x64\Release/ .\x64\Release/ - Level3 - true - /utf-8 %(AdditionalOptions) - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - ..\..\bin64\icuuc59.dll - true + ..\..\bin64\icuuc62.dll + .\..\..\lib64;%(AdditionalLibraryDirectories) .\..\..\lib64\icuuc.pdb - true - 0x4a800000 ..\..\lib64\icuuc.lib - MachineX64 - _DEBUG;%(PreprocessorDefinitions) - true - true - X64 .\..\..\lib64\icuucd.tlb - Disabled - U_ATTRIBUTE_DEPRECATED=;WIN64;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;RBBI_DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - false - true .\x64\Debug/common.pch .\x64\Debug/ .\x64\Debug/ .\x64\Debug/ - true - Level3 - true ProgramDatabase - /utf-8 %(AdditionalOptions) - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - ..\..\bin64\icuuc59d.dll - true - true + ..\..\bin64\icuuc62d.dll + .\..\..\lib64;%(AdditionalLibraryDirectories) .\..\..\lib64\icuucd.pdb - 0x4a800000 ..\..\lib64\icuucd.lib - MachineX64 @@ -248,33 +157,22 @@ - - - - + + - - - - + + - - + - - - - + + + - - ..\i18n;%(AdditionalIncludeDirectories) - ..\i18n;%(AdditionalIncludeDirectories) - ..\i18n;%(AdditionalIncludeDirectories) - ..\i18n;%(AdditionalIncludeDirectories) - + @@ -291,44 +189,22 @@ - - false - false - false - false - - - false - false - false - false - + + - - false - false - false - false - + - - false - false - false - false - + - - + - - + @@ -342,25 +218,15 @@ - - + - - false - + - - false - - - false - false - false - false - + + @@ -370,19 +236,15 @@ - - + - - + - - - - + + @@ -392,28 +254,22 @@ - - + - - + - - + - - + - - false - + @@ -428,22 +284,16 @@ - - - - - - - - - - - - - - + + + + + + + + @@ -484,86 +334,15 @@ - - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - + - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - @@ -571,21 +350,8 @@ + - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - @@ -596,53 +362,11 @@ - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - @@ -653,1255 +377,77 @@ - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - + - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - + - - - {203ec78a-0531-43f0-a636-285439bde025} - false - - + + diff --git a/icuSources/common/common.vcxproj.filters b/icuSources/common/common.vcxproj.filters index 0542a8b1..20863f13 100644 --- a/icuSources/common/common.vcxproj.filters +++ b/icuSources/common/common.vcxproj.filters @@ -97,6 +97,9 @@ break iteration + + break iteration + break iteration @@ -460,6 +463,9 @@ sprep + + strings + strings @@ -601,6 +607,9 @@ bidi + + formatting + @@ -636,6 +645,9 @@ break iteration + + break iteration + break iteration @@ -861,6 +873,9 @@ sprep + + strings + strings @@ -924,6 +939,9 @@ bidi + + formatting + @@ -1195,5 +1213,8 @@ collections + + strings + - + \ No newline at end of file diff --git a/icuSources/common/common_uwp.vcxproj b/icuSources/common/common_uwp.vcxproj index d3d9f8ae..ee11e5d9 100644 --- a/icuSources/common/common_uwp.vcxproj +++ b/icuSources/common/common_uwp.vcxproj @@ -1,5 +1,6 @@  + Debug @@ -30,19 +31,12 @@ {C10CF34B-3F79-430E-AD38-5A32DC0589C2} DynamicLibrary en-US - 14.0 - true - Windows Store - 10.0.10586.0 - 10.0.10240.0 - 10.0 DynamicLibrary false MultiByte - v140 @@ -70,15 +64,16 @@ true + - U_DISABLE_RENAMING=1;U_PLATFORM_HAS_WINUWP_API=1;%(PreprocessorDefinitions) true true ..\..\include;..\common;%(AdditionalIncludeDirectories) + - U_DISABLE_RENAMING=1;U_PLATFORM_HAS_WINUWP_API=1;U_ATTRIBUTE_DEPRECATED=;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;U_PLATFORM_USES_ONLY_WIN32_API=1;%(PreprocessorDefinitions) + U_ATTRIBUTE_DEPRECATED=;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;U_PLATFORM_USES_ONLY_WIN32_API=1;%(PreprocessorDefinitions) true @@ -93,7 +88,6 @@ /utf-8 %(AdditionalOptions) - U_DISABLE_RENAMING=1;U_PLATFORM_HAS_WINUWP_API=1;%(PreprocessorDefinitions) 0x0409 ../common;%(AdditionalIncludeDirectories) @@ -108,6 +102,7 @@ + NDEBUG;%(PreprocessorDefinitions) @@ -120,9 +115,11 @@ true + vccorlib.lib;WindowsApp.lib;msvcrt.lib;%(AdditionalDependencies) + _DEBUG;%(PreprocessorDefinitions) @@ -137,8 +134,13 @@ _DEBUG;%(PreprocessorDefinitions) + + true + vccorlibd.lib;WindowsApp.lib;msvcrtd.lib;%(AdditionalDependencies) + + Win32 @@ -147,6 +149,7 @@ + X64 @@ -158,6 +161,7 @@ + ARM @@ -168,6 +172,7 @@ MachineARM + .\..\..\lib32uwp\icuuc.tlb @@ -179,10 +184,9 @@ .\x86\ReleaseUWP/ - ..\..\bin32uwp\icuuc.dll + ..\..\bin32uwp\icuuc62.dll .\..\..\lib32uwp\icuuc.pdb ..\..\lib32uwp\icuuc.lib - vccorlib.lib;WindowsApp.lib;msvcrt.lib;%(AdditionalDependencies) @@ -196,10 +200,9 @@ .\x86\DebugUWP/ - ..\..\bin32uwp\icuucd.dll + ..\..\bin32uwp\icuuc62d.dll .\..\..\lib32uwp\icuucd.pdb ..\..\lib32uwp\icuucd.lib - vccorlibd.lib;WindowsApp.lib;msvcrtd.lib;%(AdditionalDependencies) @@ -213,10 +216,9 @@ .\x64\ReleaseUWP/ - ..\..\bin64uwp\icuuc.dll + ..\..\bin64uwp\icuuc62.dll .\..\..\lib64uwp\icuuc.pdb ..\..\lib64uwp\icuuc.lib - vccorlib.lib;WindowsApp.lib;msvcrt.lib;%(AdditionalDependencies) @@ -230,10 +232,9 @@ .\x64\DebugUWP/ - ..\..\bin64uwp\icuucd.dll + ..\..\bin64uwp\icuuc62d.dll .\..\..\lib64uwp\icuucd.pdb ..\..\lib64uwp\icuucd.lib - vccorlibd.lib;WindowsApp.lib;msvcrtd.lib;%(AdditionalDependencies) @@ -247,10 +248,9 @@ .\ARM\ReleaseUWP/ - ..\..\binARMuwp\icuuc.dll + ..\..\binARMuwp\icuuc62.dll .\..\..\libARMuwp\icuuc.pdb ..\..\libARMuwp\icuuc.lib - vccorlib.lib;WindowsApp.lib;msvcrt.lib;%(AdditionalDependencies) @@ -264,10 +264,9 @@ .\ARM\DebugUWP/ - ..\..\binARMuwp\icuucd.dll + ..\..\binARMuwp\icuuc62d.dll .\..\..\libARMuwp\icuucd.pdb ..\..\libARMuwp\icuucd.lib - vccorlibd.lib;WindowsApp.lib;msvcrtd.lib;%(AdditionalDependencies) @@ -280,30 +279,22 @@ - - - - + + - - - - + + - - + - - - - + + + - - ..\i18n;%(AdditionalIncludeDirectories) - + @@ -320,14 +311,12 @@ - - + true - - + @@ -335,15 +324,13 @@ - - + - - + @@ -357,19 +344,15 @@ - - + - - + - - - - + + @@ -379,19 +362,15 @@ - - + - - + - - - - + + @@ -401,27 +380,22 @@ - - + - - + - - + - - + - - + @@ -436,22 +410,16 @@ - - - - - - - - - - - - - - + + + + + + + + @@ -491,37 +459,17 @@ + - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - @@ -529,11 +477,8 @@ + - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - @@ -544,23 +489,11 @@ - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - @@ -571,466 +504,69 @@ - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - + - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - - - copy "%(FullPath)" ..\..\include\unicode - - ..\..\include\unicode\%(Filename)%(Extension);%(Outputs) - + @@ -1038,4 +574,4 @@ - \ No newline at end of file + diff --git a/icuSources/common/cstring.h b/icuSources/common/cstring.h index 2232efcd..ed0b1a7c 100644 --- a/icuSources/common/cstring.h +++ b/icuSources/common/cstring.h @@ -40,28 +40,10 @@ #define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c) #define uprv_strstr(s, c) U_STANDARD_CPP_NAMESPACE strstr(s, c) #define uprv_strrchr(s, c) U_STANDARD_CPP_NAMESPACE strrchr(s, c) - -#if U_DEBUG - -#define uprv_strncpy(dst, src, size) ( \ - uprv_checkValidMemory(src, 1), \ - U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size)) -#define uprv_strncmp(s1, s2, n) ( \ - uprv_checkValidMemory(s1, 1), \ - uprv_checkValidMemory(s2, 1), \ - U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)) -#define uprv_strncat(dst, src, n) ( \ - uprv_checkValidMemory(src, 1), \ - U_STANDARD_CPP_NAMESPACE strncat(dst, src, n)) - -#else - #define uprv_strncpy(dst, src, size) U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size) #define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n) #define uprv_strncat(dst, src, n) U_STANDARD_CPP_NAMESPACE strncat(dst, src, n) -#endif /* U_DEBUG */ - /** * Is c an ASCII-repertoire letter a-z or A-Z? * Note: The implementation is specific to whether ICU is compiled for diff --git a/icuSources/common/dictbe.cpp b/icuSources/common/dictbe.cpp index 8ee76efb..d8ae45c6 100644 --- a/icuSources/common/dictbe.cpp +++ b/icuSources/common/dictbe.cpp @@ -29,26 +29,23 @@ U_NAMESPACE_BEGIN ****************************************************************** */ -DictionaryBreakEngine::DictionaryBreakEngine(uint32_t breakTypes) { - fTypes = breakTypes; +DictionaryBreakEngine::DictionaryBreakEngine() { } DictionaryBreakEngine::~DictionaryBreakEngine() { } UBool -DictionaryBreakEngine::handles(UChar32 c, int32_t breakType) const { - return (breakType >= 0 && breakType < 32 && (((uint32_t)1 << breakType) & fTypes) - && fSet.contains(c)); +DictionaryBreakEngine::handles(UChar32 c) const { + return fSet.contains(c); } int32_t DictionaryBreakEngine::findBreaks( UText *text, int32_t startPos, int32_t endPos, - UBool reverse, - int32_t breakType, - UStack &foundBreaks ) const { + UVector32 &foundBreaks ) const { + (void)startPos; // TODO: remove this param? int32_t result = 0; // Find the span of characters included in the set. @@ -60,38 +57,14 @@ DictionaryBreakEngine::findBreaks( UText *text, int32_t rangeStart; int32_t rangeEnd; UChar32 c = utext_current32(text); - if (reverse) { - UBool isDict = fSet.contains(c); - while((current = (int32_t)utext_getNativeIndex(text)) > startPos && isDict) { - c = utext_previous32(text); - isDict = fSet.contains(c); - } - if (current < startPos) { - rangeStart = startPos; - } else { - rangeStart = current; - if (!isDict) { - utext_next32(text); - rangeStart = (int32_t)utext_getNativeIndex(text); - } - } - // rangeEnd = start + 1; - utext_setNativeIndex(text, start); - utext_next32(text); - rangeEnd = (int32_t)utext_getNativeIndex(text); - } - else { - while((current = (int32_t)utext_getNativeIndex(text)) < endPos && fSet.contains(c)) { - utext_next32(text); // TODO: recast loop for postincrement - c = utext_current32(text); - } - rangeStart = start; - rangeEnd = current; - } - if (breakType >= 0 && breakType < 32 && (((uint32_t)1 << breakType) & fTypes)) { - result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks); - utext_setNativeIndex(text, current); + while((current = (int32_t)utext_getNativeIndex(text)) < endPos && fSet.contains(c)) { + utext_next32(text); // TODO: recast loop for postincrement + c = utext_current32(text); } + rangeStart = start; + rangeEnd = current; + result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks); + utext_setNativeIndex(text, current); return result; } @@ -216,7 +189,7 @@ static const int32_t THAI_MIN_WORD = 2; static const int32_t THAI_MIN_WORD_SPAN = THAI_MIN_WORD * 2; ThaiBreakEngine::ThaiBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status) - : DictionaryBreakEngine((1<= rangeEnd) { @@ -458,7 +431,7 @@ static const int32_t LAO_MIN_WORD = 2; static const int32_t LAO_MIN_WORD_SPAN = LAO_MIN_WORD * 2; LaoBreakEngine::LaoBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status) - : DictionaryBreakEngine((1< kMaxKatakanaLength) ? 8192 : katakanaCost[wordLength]; } -static inline bool isKatakana(uint16_t value) { - return (value >= 0x30A1u && value <= 0x30FEu && value != 0x30FBu) || - (value >= 0xFF66u && value <= 0xFF9fu); +static inline bool isKatakana(UChar32 value) { + return (value >= 0x30A1 && value <= 0x30FE && value != 0x30FB) || + (value >= 0xFF66 && value <= 0xFF9f); } @@ -1128,14 +1101,14 @@ static inline int32_t utext_i32_flag(int32_t bitIndex) { * @param text A UText representing the text * @param rangeStart The start of the range of dictionary characters * @param rangeEnd The end of the range of dictionary characters - * @param foundBreaks Output of C array of int32_t break positions, or 0 + * @param foundBreaks vector to receive the break positions * @return The number of breaks found */ int32_t CjkBreakEngine::divideUpDictionaryRange( UText *inText, int32_t rangeStart, int32_t rangeEnd, - UStack &foundBreaks ) const { + UVector32 &foundBreaks ) const { if (rangeStart >= rangeEnd) { return 0; } @@ -1346,8 +1319,8 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, } if (katakanaRunLength < kMaxKatakanaGroupLength) { uint32_t newSnlp = bestSnlp.elementAti(i) + getKatakanaCost(katakanaRunLength); - if (newSnlp < (uint32_t)bestSnlp.elementAti(j)) { - bestSnlp.setElementAt(newSnlp, j); + if (newSnlp < (uint32_t)bestSnlp.elementAti(i+katakanaRunLength)) { + bestSnlp.setElementAt(newSnlp, i+katakanaRunLength); prev.setElementAt(i, i+katakanaRunLength); // prev[j] = i; } } @@ -1405,6 +1378,7 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText, prevCPPos = cpPos; prevUTextPos = utextPos; } + (void)prevCPPos; // suppress compiler warnings about unused variable // inString goes out of scope // inputMap goes out of scope diff --git a/icuSources/common/dictbe.h b/icuSources/common/dictbe.h index 242f475c..731bfdff 100644 --- a/icuSources/common/dictbe.h +++ b/icuSources/common/dictbe.h @@ -15,6 +15,7 @@ #include "unicode/utext.h" #include "brkeng.h" +#include "uvectr32.h" U_NAMESPACE_BEGIN @@ -41,27 +42,12 @@ class DictionaryBreakEngine : public LanguageBreakEngine { UnicodeSet fSet; - /** - * The set of break types handled by this engine - * @internal - */ - - uint32_t fTypes; - - /** - *

Default constructor.

- * - */ - DictionaryBreakEngine(); - public: /** - *

Constructor setting the break types handled.

- * - * @param breakTypes A bitmap of types handled by the engine. + *

Constructor

*/ - DictionaryBreakEngine( uint32_t breakTypes ); + DictionaryBreakEngine(); /** *

Virtual destructor.

@@ -73,32 +59,26 @@ class DictionaryBreakEngine : public LanguageBreakEngine { * a particular kind of break.

* * @param c A character which begins a run that the engine might handle - * @param breakType The type of text break which the caller wants to determine * @return TRUE if this engine handles the particular character and break * type. */ - virtual UBool handles( UChar32 c, int32_t breakType ) const; + virtual UBool handles(UChar32 c) const; /** *

Find any breaks within a run in the supplied text.

* * @param text A UText representing the text. The iterator is left at * the end of the run of characters which the engine is capable of handling - * that starts from the first (or last) character in the range. + * that starts from the first character in the range. * @param startPos The start of the run within the supplied text. * @param endPos The end of the run within the supplied text. - * @param reverse Whether the caller is looking for breaks in a reverse - * direction. - * @param breakType The type of break desired, or -1. - * @param foundBreaks An allocated C array of the breaks found, if any + * @param foundBreaks vector of int32_t to receive the break positions * @return The number of breaks found. */ virtual int32_t findBreaks( UText *text, int32_t startPos, int32_t endPos, - UBool reverse, - int32_t breakType, - UStack &foundBreaks ) const; + UVector32 &foundBreaks ) const; protected: @@ -109,13 +89,6 @@ class DictionaryBreakEngine : public LanguageBreakEngine { */ virtual void setCharacters( const UnicodeSet &set ); - /** - *

Set the break types handled by this engine.

- * - * @param breakTypes A bitmap of types handled by the engine. - */ -// virtual void setBreakTypes( uint32_t breakTypes ); - /** *

Divide up a range of known dictionary characters handled by this break engine.

* @@ -128,7 +101,7 @@ class DictionaryBreakEngine : public LanguageBreakEngine { virtual int32_t divideUpDictionaryRange( UText *text, int32_t rangeStart, int32_t rangeEnd, - UStack &foundBreaks ) const = 0; + UVector32 &foundBreaks ) const = 0; }; @@ -185,7 +158,7 @@ class ThaiBreakEngine : public DictionaryBreakEngine { virtual int32_t divideUpDictionaryRange( UText *text, int32_t rangeStart, int32_t rangeEnd, - UStack &foundBreaks ) const; + UVector32 &foundBreaks ) const; }; @@ -241,7 +214,7 @@ class LaoBreakEngine : public DictionaryBreakEngine { virtual int32_t divideUpDictionaryRange( UText *text, int32_t rangeStart, int32_t rangeEnd, - UStack &foundBreaks ) const; + UVector32 &foundBreaks ) const; }; @@ -297,7 +270,7 @@ class BurmeseBreakEngine : public DictionaryBreakEngine { virtual int32_t divideUpDictionaryRange( UText *text, int32_t rangeStart, int32_t rangeEnd, - UStack &foundBreaks ) const; + UVector32 &foundBreaks ) const; }; @@ -353,7 +326,7 @@ class KhmerBreakEngine : public DictionaryBreakEngine { virtual int32_t divideUpDictionaryRange( UText *text, int32_t rangeStart, int32_t rangeEnd, - UStack &foundBreaks ) const; + UVector32 &foundBreaks ) const; }; @@ -417,7 +390,7 @@ class CjkBreakEngine : public DictionaryBreakEngine { virtual int32_t divideUpDictionaryRange( UText *text, int32_t rangeStart, int32_t rangeEnd, - UStack &foundBreaks ) const; + UVector32 &foundBreaks ) const; }; diff --git a/icuSources/common/edits.cpp b/icuSources/common/edits.cpp index 58a70d5c..3b3611fc 100644 --- a/icuSources/common/edits.cpp +++ b/icuSources/common/edits.cpp @@ -4,10 +4,12 @@ // edits.cpp // created: 2017feb08 Markus W. Scherer -#include "unicode/utypes.h" #include "unicode/edits.h" +#include "unicode/unistr.h" +#include "unicode/utypes.h" #include "cmemory.h" #include "uassert.h" +#include "util.h" U_NAMESPACE_BEGIN @@ -17,10 +19,10 @@ namespace { const int32_t MAX_UNCHANGED_LENGTH = 0x1000; const int32_t MAX_UNCHANGED = MAX_UNCHANGED_LENGTH - 1; -// 0wwwcccccccccccc with w=1..6 records ccc+1 replacements of w:w text units. -// No length change. -const int32_t MAX_SHORT_WIDTH = 6; -const int32_t MAX_SHORT_CHANGE_LENGTH = 0xfff; +// 0mmmnnnccccccccc with m=1..6 records ccc+1 replacements of m:n text units. +const int32_t MAX_SHORT_CHANGE_OLD_LENGTH = 6; +const int32_t MAX_SHORT_CHANGE_NEW_LENGTH = 7; +const int32_t SHORT_CHANGE_NUM_MASK = 0x1ff; const int32_t MAX_SHORT_CHANGE = 0x6fff; // 0111mmmmmmnnnnnn records a replacement of m text units with n. @@ -33,20 +35,85 @@ const int32_t LENGTH_IN_2TRAIL = 62; } // namespace -Edits::~Edits() { - if(array != stackArray) { +void Edits::releaseArray() U_NOEXCEPT { + if (array != stackArray) { uprv_free(array); } } -void Edits::reset() { - length = delta = 0; +Edits &Edits::copyArray(const Edits &other) { + if (U_FAILURE(errorCode_)) { + length = delta = numChanges = 0; + return *this; + } + if (length > capacity) { + uint16_t *newArray = (uint16_t *)uprv_malloc((size_t)length * 2); + if (newArray == nullptr) { + length = delta = numChanges = 0; + errorCode_ = U_MEMORY_ALLOCATION_ERROR; + return *this; + } + releaseArray(); + array = newArray; + capacity = length; + } + if (length > 0) { + uprv_memcpy(array, other.array, (size_t)length * 2); + } + return *this; +} + +Edits &Edits::moveArray(Edits &src) U_NOEXCEPT { + if (U_FAILURE(errorCode_)) { + length = delta = numChanges = 0; + return *this; + } + releaseArray(); + if (length > STACK_CAPACITY) { + array = src.array; + capacity = src.capacity; + src.array = src.stackArray; + src.capacity = STACK_CAPACITY; + src.reset(); + return *this; + } + array = stackArray; + capacity = STACK_CAPACITY; + if (length > 0) { + uprv_memcpy(array, src.array, (size_t)length * 2); + } + return *this; +} + +Edits &Edits::operator=(const Edits &other) { + length = other.length; + delta = other.delta; + numChanges = other.numChanges; + errorCode_ = other.errorCode_; + return copyArray(other); +} + +Edits &Edits::operator=(Edits &&src) U_NOEXCEPT { + length = src.length; + delta = src.delta; + numChanges = src.numChanges; + errorCode_ = src.errorCode_; + return moveArray(src); +} + +Edits::~Edits() { + releaseArray(); +} + +void Edits::reset() U_NOEXCEPT { + length = delta = numChanges = 0; + errorCode_ = U_ZERO_ERROR; } void Edits::addUnchanged(int32_t unchangedLength) { - if(U_FAILURE(errorCode) || unchangedLength == 0) { return; } + if(U_FAILURE(errorCode_) || unchangedLength == 0) { return; } if(unchangedLength < 0) { - errorCode = U_ILLEGAL_ARGUMENT_ERROR; + errorCode_ = U_ILLEGAL_ARGUMENT_ERROR; return; } // Merge into previous unchanged-text record, if any. @@ -72,38 +139,41 @@ void Edits::addUnchanged(int32_t unchangedLength) { } void Edits::addReplace(int32_t oldLength, int32_t newLength) { - if(U_FAILURE(errorCode)) { return; } - if(oldLength == newLength && 0 < oldLength && oldLength <= MAX_SHORT_WIDTH) { - // Replacement of short oldLength text units by same-length new text. - // Merge into previous short-replacement record, if any. - int32_t last = lastUnit(); - if(MAX_UNCHANGED < last && last < MAX_SHORT_CHANGE && - (last >> 12) == oldLength && (last & 0xfff) < MAX_SHORT_CHANGE_LENGTH) { - setLastUnit(last + 1); - return; - } - append(oldLength << 12); - return; - } - + if(U_FAILURE(errorCode_)) { return; } if(oldLength < 0 || newLength < 0) { - errorCode = U_ILLEGAL_ARGUMENT_ERROR; + errorCode_ = U_ILLEGAL_ARGUMENT_ERROR; return; } if (oldLength == 0 && newLength == 0) { return; } + ++numChanges; int32_t newDelta = newLength - oldLength; if (newDelta != 0) { if ((newDelta > 0 && delta >= 0 && newDelta > (INT32_MAX - delta)) || (newDelta < 0 && delta < 0 && newDelta < (INT32_MIN - delta))) { // Integer overflow or underflow. - errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + errorCode_ = U_INDEX_OUTOFBOUNDS_ERROR; return; } delta += newDelta; } + if(0 < oldLength && oldLength <= MAX_SHORT_CHANGE_OLD_LENGTH && + newLength <= MAX_SHORT_CHANGE_NEW_LENGTH) { + // Merge into previous same-lengths short-replacement record, if any. + int32_t u = (oldLength << 12) | (newLength << 9); + int32_t last = lastUnit(); + if(MAX_UNCHANGED < last && last < MAX_SHORT_CHANGE && + (last & ~SHORT_CHANGE_NUM_MASK) == u && + (last & SHORT_CHANGE_NUM_MASK) < SHORT_CHANGE_NUM_MASK) { + setLastUnit(last + 1); + return; + } + append(u); + return; + } + int32_t head = 0x7000; if (oldLength < LENGTH_IN_1TRAIL && newLength < LENGTH_IN_1TRAIL) { head |= oldLength << 6; @@ -149,7 +219,7 @@ UBool Edits::growArray() { } else if (capacity == INT32_MAX) { // Not U_BUFFER_OVERFLOW_ERROR because that could be confused on a string transform API // with a result-string-buffer overflow. - errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + errorCode_ = U_INDEX_OUTOFBOUNDS_ERROR; return FALSE; } else if (capacity >= (INT32_MAX / 2)) { newCapacity = INT32_MAX; @@ -158,18 +228,16 @@ UBool Edits::growArray() { } // Grow by at least 5 units so that a maximal change record will fit. if ((newCapacity - capacity) < 5) { - errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + errorCode_ = U_INDEX_OUTOFBOUNDS_ERROR; return FALSE; } uint16_t *newArray = (uint16_t *)uprv_malloc((size_t)newCapacity * 2); if (newArray == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; + errorCode_ = U_MEMORY_ALLOCATION_ERROR; return FALSE; } uprv_memcpy(newArray, array, (size_t)length * 2); - if (array != stackArray) { - uprv_free(array); - } + releaseArray(); array = newArray; capacity = newCapacity; return TRUE; @@ -177,27 +245,161 @@ UBool Edits::growArray() { UBool Edits::copyErrorTo(UErrorCode &outErrorCode) { if (U_FAILURE(outErrorCode)) { return TRUE; } - if (U_SUCCESS(errorCode)) { return FALSE; } - outErrorCode = errorCode; + if (U_SUCCESS(errorCode_)) { return FALSE; } + outErrorCode = errorCode_; return TRUE; } -UBool Edits::hasChanges() const { - if (delta != 0) { - return TRUE; - } - for (int32_t i = 0; i < length; ++i) { - if (array[i] > MAX_UNCHANGED) { - return TRUE; +Edits &Edits::mergeAndAppend(const Edits &ab, const Edits &bc, UErrorCode &errorCode) { + if (copyErrorTo(errorCode)) { return *this; } + // Picture string a --(Edits ab)--> string b --(Edits bc)--> string c. + // Parallel iteration over both Edits. + Iterator abIter = ab.getFineIterator(); + Iterator bcIter = bc.getFineIterator(); + UBool abHasNext = TRUE, bcHasNext = TRUE; + // Copy iterator state into local variables, so that we can modify and subdivide spans. + // ab old & new length, bc old & new length + int32_t aLength = 0, ab_bLength = 0, bc_bLength = 0, cLength = 0; + // When we have different-intermediate-length changes, we accumulate a larger change. + int32_t pending_aLength = 0, pending_cLength = 0; + for (;;) { + // At this point, for each of the two iterators: + // Either we are done with the locally cached current edit, + // and its intermediate-string length has been reset, + // or we will continue to work with a truncated remainder of this edit. + // + // If the current edit is done, and the iterator has not yet reached the end, + // then we fetch the next edit. This is true for at least one of the iterators. + // + // Normally it does not matter whether we fetch from ab and then bc or vice versa. + // However, the result is observably different when + // ab deletions meet bc insertions at the same intermediate-string index. + // Some users expect the bc insertions to come first, so we fetch from bc first. + if (bc_bLength == 0) { + if (bcHasNext && (bcHasNext = bcIter.next(errorCode))) { + bc_bLength = bcIter.oldLength(); + cLength = bcIter.newLength(); + if (bc_bLength == 0) { + // insertion + if (ab_bLength == 0 || !abIter.hasChange()) { + addReplace(pending_aLength, pending_cLength + cLength); + pending_aLength = pending_cLength = 0; + } else { + pending_cLength += cLength; + } + continue; + } + } + // else see if the other iterator is done, too. + } + if (ab_bLength == 0) { + if (abHasNext && (abHasNext = abIter.next(errorCode))) { + aLength = abIter.oldLength(); + ab_bLength = abIter.newLength(); + if (ab_bLength == 0) { + // deletion + if (bc_bLength == bcIter.oldLength() || !bcIter.hasChange()) { + addReplace(pending_aLength + aLength, pending_cLength); + pending_aLength = pending_cLength = 0; + } else { + pending_aLength += aLength; + } + continue; + } + } else if (bc_bLength == 0) { + // Both iterators are done at the same time: + // The intermediate-string lengths match. + break; + } else { + // The ab output string is shorter than the bc input string. + if (!copyErrorTo(errorCode)) { + errorCode = U_ILLEGAL_ARGUMENT_ERROR; + } + return *this; + } + } + if (bc_bLength == 0) { + // The bc input string is shorter than the ab output string. + if (!copyErrorTo(errorCode)) { + errorCode = U_ILLEGAL_ARGUMENT_ERROR; + } + return *this; + } + // Done fetching: ab_bLength > 0 && bc_bLength > 0 + + // The current state has two parts: + // - Past: We accumulate a longer ac edit in the "pending" variables. + // - Current: We have copies of the current ab/bc edits in local variables. + // At least one side is newly fetched. + // One side might be a truncated remainder of an edit we fetched earlier. + + if (!abIter.hasChange() && !bcIter.hasChange()) { + // An unchanged span all the way from string a to string c. + if (pending_aLength != 0 || pending_cLength != 0) { + addReplace(pending_aLength, pending_cLength); + pending_aLength = pending_cLength = 0; + } + int32_t unchangedLength = aLength <= cLength ? aLength : cLength; + addUnchanged(unchangedLength); + ab_bLength = aLength -= unchangedLength; + bc_bLength = cLength -= unchangedLength; + // At least one of the unchanged spans is now empty. + continue; + } + if (!abIter.hasChange() && bcIter.hasChange()) { + // Unchanged a->b but changed b->c. + if (ab_bLength >= bc_bLength) { + // Split the longer unchanged span into change + remainder. + addReplace(pending_aLength + bc_bLength, pending_cLength + cLength); + pending_aLength = pending_cLength = 0; + aLength = ab_bLength -= bc_bLength; + bc_bLength = 0; + continue; + } + // Handle the shorter unchanged span below like a change. + } else if (abIter.hasChange() && !bcIter.hasChange()) { + // Changed a->b and then unchanged b->c. + if (ab_bLength <= bc_bLength) { + // Split the longer unchanged span into change + remainder. + addReplace(pending_aLength + aLength, pending_cLength + ab_bLength); + pending_aLength = pending_cLength = 0; + cLength = bc_bLength -= ab_bLength; + ab_bLength = 0; + continue; + } + // Handle the shorter unchanged span below like a change. + } else { // both abIter.hasChange() && bcIter.hasChange() + if (ab_bLength == bc_bLength) { + // Changes on both sides up to the same position. Emit & reset. + addReplace(pending_aLength + aLength, pending_cLength + cLength); + pending_aLength = pending_cLength = 0; + ab_bLength = bc_bLength = 0; + continue; + } + } + // Accumulate the a->c change, reset the shorter side, + // keep a remainder of the longer one. + pending_aLength += aLength; + pending_cLength += cLength; + if (ab_bLength < bc_bLength) { + bc_bLength -= ab_bLength; + cLength = ab_bLength = 0; + } else { // ab_bLength > bc_bLength + ab_bLength -= bc_bLength; + aLength = bc_bLength = 0; } } - return FALSE; + if (pending_aLength != 0 || pending_cLength != 0) { + addReplace(pending_aLength, pending_cLength); + } + copyErrorTo(errorCode); + return *this; } Edits::Iterator::Iterator(const uint16_t *a, int32_t len, UBool oc, UBool crs) : array(a), index(0), length(len), remaining(0), onlyChanges_(oc), coarse(crs), - changed(FALSE), oldLength_(0), newLength_(0), + dir(0), changed(FALSE), oldLength_(0), newLength_(0), srcIndex(0), replIndex(0), destIndex(0) {} int32_t Edits::Iterator::readLength(int32_t head) { @@ -219,7 +421,7 @@ int32_t Edits::Iterator::readLength(int32_t head) { } } -void Edits::Iterator::updateIndexes() { +void Edits::Iterator::updateNextIndexes() { srcIndex += oldLength_; if (changed) { replIndex += newLength_; @@ -227,22 +429,52 @@ void Edits::Iterator::updateIndexes() { destIndex += newLength_; } +void Edits::Iterator::updatePreviousIndexes() { + srcIndex -= oldLength_; + if (changed) { + replIndex -= newLength_; + } + destIndex -= newLength_; +} + UBool Edits::Iterator::noNext() { - // No change beyond the string. + // No change before or beyond the string. + dir = 0; changed = FALSE; oldLength_ = newLength_ = 0; return FALSE; } UBool Edits::Iterator::next(UBool onlyChanges, UErrorCode &errorCode) { + // Forward iteration: Update the string indexes to the limit of the current span, + // and post-increment-read array units to assemble a new span. + // Leaves the array index one after the last unit of that span. if (U_FAILURE(errorCode)) { return FALSE; } // We have an errorCode in case we need to start guarding against integer overflows. // It is also convenient for caller loops if we bail out when an error was set elsewhere. - updateIndexes(); - if (remaining > 0) { - // Fine-grained iterator: Continue a sequence of equal-length changes. - --remaining; - return TRUE; + if (dir > 0) { + updateNextIndexes(); + } else { + if (dir < 0) { + // Turn around from previous() to next(). + // Post-increment-read the same span again. + if (remaining > 0) { + // Fine-grained iterator: + // Stay on the current one of a sequence of compressed changes. + ++index; // next() rests on the index after the sequence unit. + dir = 1; + return TRUE; + } + } + dir = 1; + } + if (remaining >= 1) { + // Fine-grained iterator: Continue a sequence of compressed changes. + if (remaining > 1) { + --remaining; + return TRUE; + } + remaining = 0; } if (index >= length) { return noNext(); @@ -258,7 +490,7 @@ UBool Edits::Iterator::next(UBool onlyChanges, UErrorCode &errorCode) { } newLength_ = oldLength_; if (onlyChanges) { - updateIndexes(); + updateNextIndexes(); if (index >= length) { return noNext(); } @@ -270,14 +502,19 @@ UBool Edits::Iterator::next(UBool onlyChanges, UErrorCode &errorCode) { } changed = TRUE; if (u <= MAX_SHORT_CHANGE) { + int32_t oldLen = u >> 12; + int32_t newLen = (u >> 9) & MAX_SHORT_CHANGE_NEW_LENGTH; + int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1; if (coarse) { - int32_t w = u >> 12; - int32_t len = (u & 0xfff) + 1; - oldLength_ = newLength_ = len * w; + oldLength_ = num * oldLen; + newLength_ = num * newLen; } else { - // Split a sequence of equal-length changes that was compressed into one unit. - oldLength_ = newLength_ = u >> 12; - remaining = u & 0xfff; + // Split a sequence of changes that was compressed into one unit. + oldLength_ = oldLen; + newLength_ = newLen; + if (num > 1) { + remaining = num; // This is the first of two or more changes. + } return TRUE; } } else { @@ -292,55 +529,275 @@ UBool Edits::Iterator::next(UBool onlyChanges, UErrorCode &errorCode) { while (index < length && (u = array[index]) > MAX_UNCHANGED) { ++index; if (u <= MAX_SHORT_CHANGE) { - int32_t w = u >> 12; - int32_t len = (u & 0xfff) + 1; - len = len * w; - oldLength_ += len; - newLength_ += len; + int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1; + oldLength_ += (u >> 12) * num; + newLength_ += ((u >> 9) & MAX_SHORT_CHANGE_NEW_LENGTH) * num; } else { U_ASSERT(u <= 0x7fff); - int32_t oldLen = readLength((u >> 6) & 0x3f); - int32_t newLen = readLength(u & 0x3f); - oldLength_ += oldLen; - newLength_ += newLen; + oldLength_ += readLength((u >> 6) & 0x3f); + newLength_ += readLength(u & 0x3f); } } return TRUE; } -UBool Edits::Iterator::findSourceIndex(int32_t i, UErrorCode &errorCode) { - if (U_FAILURE(errorCode) || i < 0) { return FALSE; } - if (i < srcIndex) { +UBool Edits::Iterator::previous(UErrorCode &errorCode) { + // Backward iteration: Pre-decrement-read array units to assemble a new span, + // then update the string indexes to the start of that span. + // Leaves the array index on the head unit of that span. + if (U_FAILURE(errorCode)) { return FALSE; } + // We have an errorCode in case we need to start guarding against integer overflows. + // It is also convenient for caller loops if we bail out when an error was set elsewhere. + if (dir >= 0) { + if (dir > 0) { + // Turn around from next() to previous(). + // Set the string indexes to the span limit and + // pre-decrement-read the same span again. + if (remaining > 0) { + // Fine-grained iterator: + // Stay on the current one of a sequence of compressed changes. + --index; // previous() rests on the sequence unit. + dir = -1; + return TRUE; + } + updateNextIndexes(); + } + dir = -1; + } + if (remaining > 0) { + // Fine-grained iterator: Continue a sequence of compressed changes. + int32_t u = array[index]; + U_ASSERT(MAX_UNCHANGED < u && u <= MAX_SHORT_CHANGE); + if (remaining <= (u & SHORT_CHANGE_NUM_MASK)) { + ++remaining; + updatePreviousIndexes(); + return TRUE; + } + remaining = 0; + } + if (index <= 0) { + return noNext(); + } + int32_t u = array[--index]; + if (u <= MAX_UNCHANGED) { + // Combine adjacent unchanged ranges. + changed = FALSE; + oldLength_ = u + 1; + while (index > 0 && (u = array[index - 1]) <= MAX_UNCHANGED) { + --index; + oldLength_ += u + 1; + } + newLength_ = oldLength_; + // No need to handle onlyChanges as long as previous() is called only from findIndex(). + updatePreviousIndexes(); + return TRUE; + } + changed = TRUE; + if (u <= MAX_SHORT_CHANGE) { + int32_t oldLen = u >> 12; + int32_t newLen = (u >> 9) & MAX_SHORT_CHANGE_NEW_LENGTH; + int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1; + if (coarse) { + oldLength_ = num * oldLen; + newLength_ = num * newLen; + } else { + // Split a sequence of changes that was compressed into one unit. + oldLength_ = oldLen; + newLength_ = newLen; + if (num > 1) { + remaining = 1; // This is the last of two or more changes. + } + updatePreviousIndexes(); + return TRUE; + } + } else { + if (u <= 0x7fff) { + // The change is encoded in u alone. + oldLength_ = readLength((u >> 6) & 0x3f); + newLength_ = readLength(u & 0x3f); + } else { + // Back up to the head of the change, read the lengths, + // and reset the index to the head again. + U_ASSERT(index > 0); + while ((u = array[--index]) > 0x7fff) {} + U_ASSERT(u > MAX_SHORT_CHANGE); + int32_t headIndex = index++; + oldLength_ = readLength((u >> 6) & 0x3f); + newLength_ = readLength(u & 0x3f); + index = headIndex; + } + if (!coarse) { + updatePreviousIndexes(); + return TRUE; + } + } + // Combine adjacent changes. + while (index > 0 && (u = array[index - 1]) > MAX_UNCHANGED) { + --index; + if (u <= MAX_SHORT_CHANGE) { + int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1; + oldLength_ += (u >> 12) * num; + newLength_ += ((u >> 9) & MAX_SHORT_CHANGE_NEW_LENGTH) * num; + } else if (u <= 0x7fff) { + // Read the lengths, and reset the index to the head again. + int32_t headIndex = index++; + oldLength_ += readLength((u >> 6) & 0x3f); + newLength_ += readLength(u & 0x3f); + index = headIndex; + } + } + updatePreviousIndexes(); + return TRUE; +} + +int32_t Edits::Iterator::findIndex(int32_t i, UBool findSource, UErrorCode &errorCode) { + if (U_FAILURE(errorCode) || i < 0) { return -1; } + int32_t spanStart, spanLength; + if (findSource) { // find source index + spanStart = srcIndex; + spanLength = oldLength_; + } else { // find destination index + spanStart = destIndex; + spanLength = newLength_; + } + if (i < spanStart) { + if (i >= (spanStart / 2)) { + // Search backwards. + for (;;) { + UBool hasPrevious = previous(errorCode); + U_ASSERT(hasPrevious); // because i>=0 and the first span starts at 0 + (void)hasPrevious; // avoid unused-variable warning + spanStart = findSource ? srcIndex : destIndex; + if (i >= spanStart) { + // The index is in the current span. + return 0; + } + if (remaining > 0) { + // Is the index in one of the remaining compressed edits? + // spanStart is the start of the current span, first of the remaining ones. + spanLength = findSource ? oldLength_ : newLength_; + int32_t u = array[index]; + U_ASSERT(MAX_UNCHANGED < u && u <= MAX_SHORT_CHANGE); + int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1 - remaining; + int32_t len = num * spanLength; + if (i >= (spanStart - len)) { + int32_t n = ((spanStart - i - 1) / spanLength) + 1; + // 1 <= n <= num + srcIndex -= n * oldLength_; + replIndex -= n * newLength_; + destIndex -= n * newLength_; + remaining += n; + return 0; + } + // Skip all of these edits at once. + srcIndex -= num * oldLength_; + replIndex -= num * newLength_; + destIndex -= num * newLength_; + remaining = 0; + } + } + } // Reset the iterator to the start. + dir = 0; index = remaining = oldLength_ = newLength_ = srcIndex = replIndex = destIndex = 0; - } else if (i < (srcIndex + oldLength_)) { + } else if (i < (spanStart + spanLength)) { // The index is in the current span. - return TRUE; + return 0; } while (next(FALSE, errorCode)) { - if (i < (srcIndex + oldLength_)) { + if (findSource) { + spanStart = srcIndex; + spanLength = oldLength_; + } else { + spanStart = destIndex; + spanLength = newLength_; + } + if (i < (spanStart + spanLength)) { // The index is in the current span. - return TRUE; + return 0; } - if (remaining > 0) { + if (remaining > 1) { // Is the index in one of the remaining compressed edits? - // srcIndex is the start of the current span, before the remaining ones. - int32_t len = (remaining + 1) * oldLength_; - if (i < (srcIndex + len)) { - int32_t n = (i - srcIndex) / oldLength_; // 1 <= n <= remaining - len = n * oldLength_; - srcIndex += len; - replIndex += len; - destIndex += len; + // spanStart is the start of the current span, first of the remaining ones. + int32_t len = remaining * spanLength; + if (i < (spanStart + len)) { + int32_t n = (i - spanStart) / spanLength; // 1 <= n <= remaining - 1 + srcIndex += n * oldLength_; + replIndex += n * newLength_; + destIndex += n * newLength_; remaining -= n; - return TRUE; + return 0; } // Make next() skip all of these edits at once. - oldLength_ = newLength_ = len; + oldLength_ *= remaining; + newLength_ *= remaining; remaining = 0; } } - return FALSE; + return 1; +} + +int32_t Edits::Iterator::destinationIndexFromSourceIndex(int32_t i, UErrorCode &errorCode) { + int32_t where = findIndex(i, TRUE, errorCode); + if (where < 0) { + // Error or before the string. + return 0; + } + if (where > 0 || i == srcIndex) { + // At or after string length, or at start of the found span. + return destIndex; + } + if (changed) { + // In a change span, map to its end. + return destIndex + newLength_; + } else { + // In an unchanged span, offset 1:1 within it. + return destIndex + (i - srcIndex); + } +} + +int32_t Edits::Iterator::sourceIndexFromDestinationIndex(int32_t i, UErrorCode &errorCode) { + int32_t where = findIndex(i, FALSE, errorCode); + if (where < 0) { + // Error or before the string. + return 0; + } + if (where > 0 || i == destIndex) { + // At or after string length, or at start of the found span. + return srcIndex; + } + if (changed) { + // In a change span, map to its end. + return srcIndex + oldLength_; + } else { + // In an unchanged span, offset within it. + return srcIndex + (i - destIndex); + } +} + +UnicodeString& Edits::Iterator::toString(UnicodeString& sb) const { + sb.append(u"{ src[", -1); + ICU_Utility::appendNumber(sb, srcIndex); + sb.append(u"..", -1); + ICU_Utility::appendNumber(sb, srcIndex + oldLength_); + if (changed) { + sb.append(u"] ⇝ dest[", -1); + } else { + sb.append(u"] ≡ dest[", -1); + } + ICU_Utility::appendNumber(sb, destIndex); + sb.append(u"..", -1); + ICU_Utility::appendNumber(sb, destIndex + newLength_); + if (changed) { + sb.append(u"], repl[", -1); + ICU_Utility::appendNumber(sb, replIndex); + sb.append(u"..", -1); + ICU_Utility::appendNumber(sb, replIndex + newLength_); + sb.append(u"] }", -1); + } else { + sb.append(u"] (no-change) }", -1); + } + return sb; } U_NAMESPACE_END diff --git a/icuSources/common/filteredbrk.cpp b/icuSources/common/filteredbrk.cpp index 43504e4e..cc5f04d5 100644 --- a/icuSources/common/filteredbrk.cpp +++ b/icuSources/common/filteredbrk.cpp @@ -703,7 +703,12 @@ FilteredBreakIteratorBuilder::createInstance(const Locale& where, UErrorCode& st } FilteredBreakIteratorBuilder * -FilteredBreakIteratorBuilder::createInstance(UErrorCode& status) { +FilteredBreakIteratorBuilder::createInstance(UErrorCode &status) { + return createEmptyInstance(status); +} + +FilteredBreakIteratorBuilder * +FilteredBreakIteratorBuilder::createEmptyInstance(UErrorCode& status) { if(U_FAILURE(status)) return NULL; LocalPointer ret(new SimpleFilteredBreakIteratorBuilder(status), status); return (U_SUCCESS(status))? ret.orphan(): NULL; diff --git a/icuSources/common/filterednormalizer2.cpp b/icuSources/common/filterednormalizer2.cpp index 28e5f6cb..1a0914d3 100644 --- a/icuSources/common/filterednormalizer2.cpp +++ b/icuSources/common/filterednormalizer2.cpp @@ -20,7 +20,9 @@ #if !UCONFIG_NO_NORMALIZATION +#include "unicode/edits.h" #include "unicode/normalizer2.h" +#include "unicode/stringoptions.h" #include "unicode/uniset.h" #include "unicode/unistr.h" #include "unicode/unorm.h" @@ -85,6 +87,52 @@ FilteredNormalizer2::normalize(const UnicodeString &src, return dest; } +void +FilteredNormalizer2::normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink, + Edits *edits, UErrorCode &errorCode) const { + if (U_FAILURE(errorCode)) { + return; + } + if (edits != nullptr && (options & U_EDITS_NO_RESET) == 0) { + edits->reset(); + } + options |= U_EDITS_NO_RESET; // Do not reset for each span. + normalizeUTF8(options, src.data(), src.length(), sink, edits, USET_SPAN_SIMPLE, errorCode); +} + +void +FilteredNormalizer2::normalizeUTF8(uint32_t options, const char *src, int32_t length, + ByteSink &sink, Edits *edits, + USetSpanCondition spanCondition, + UErrorCode &errorCode) const { + while (length > 0) { + int32_t spanLength = set.spanUTF8(src, length, spanCondition); + if (spanCondition == USET_SPAN_NOT_CONTAINED) { + if (spanLength != 0) { + if (edits != nullptr) { + edits->addUnchanged(spanLength); + } + if ((options & U_OMIT_UNCHANGED_TEXT) == 0) { + sink.Append(src, spanLength); + } + } + spanCondition = USET_SPAN_SIMPLE; + } else { + if (spanLength != 0) { + // Not norm2.normalizeSecondAndAppend() because we do not want + // to modify the non-filter part of dest. + norm2.normalizeUTF8(options, StringPiece(src, spanLength), sink, edits, errorCode); + if (U_FAILURE(errorCode)) { + break; + } + } + spanCondition = USET_SPAN_NOT_CONTAINED; + } + src += spanLength; + length -= spanLength; + } +} + UnicodeString & FilteredNormalizer2::normalizeSecondAndAppend(UnicodeString &first, const UnicodeString &second, @@ -196,6 +244,31 @@ FilteredNormalizer2::isNormalized(const UnicodeString &s, UErrorCode &errorCode) return TRUE; } +UBool +FilteredNormalizer2::isNormalizedUTF8(StringPiece sp, UErrorCode &errorCode) const { + if(U_FAILURE(errorCode)) { + return FALSE; + } + const char *s = sp.data(); + int32_t length = sp.length(); + USetSpanCondition spanCondition = USET_SPAN_SIMPLE; + while (length > 0) { + int32_t spanLength = set.spanUTF8(s, length, spanCondition); + if (spanCondition == USET_SPAN_NOT_CONTAINED) { + spanCondition = USET_SPAN_SIMPLE; + } else { + if (!norm2.isNormalizedUTF8(StringPiece(s, spanLength), errorCode) || + U_FAILURE(errorCode)) { + return FALSE; + } + spanCondition = USET_SPAN_NOT_CONTAINED; + } + s += spanLength; + length -= spanLength; + } + return TRUE; +} + UNormalizationCheckResult FilteredNormalizer2::quickCheck(const UnicodeString &s, UErrorCode &errorCode) const { uprv_checkCanGetBuffer(s, errorCode); diff --git a/icuSources/common/hash.h b/icuSources/common/hash.h index 67cd8b71..c6be4672 100644 --- a/icuSources/common/hash.h +++ b/icuSources/common/hash.h @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** -* Copyright (C) 1997-2016, International Business Machines +* Copyright (C) 1997-2014, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * Date Name Description @@ -86,9 +86,9 @@ public: int32_t puti(const UnicodeString& key, int32_t value, UErrorCode& status); void* get(const UnicodeString& key) const; - + int32_t geti(const UnicodeString& key) const; - + void* remove(const UnicodeString& key); int32_t removei(const UnicodeString& key); @@ -102,9 +102,9 @@ public: * @see uhash_nextElement */ const UHashElement* nextElement(int32_t& pos) const; - + UKeyComparator* setKeyComparator(UKeyComparator*keyComp); - + UValueComparator* setValueComparator(UValueComparator* valueComp); UBool equals(const Hashtable& that) const; @@ -117,7 +117,7 @@ private: * Implementation ********************************************************************/ -inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp, +inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode& status) { if (U_FAILURE(status)) { return; @@ -129,7 +129,7 @@ inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp, } } -inline void Hashtable::initSize(UHashFunction *keyHash, UKeyComparator *keyComp, +inline void Hashtable::initSize(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, int32_t size, UErrorCode& status) { if (U_FAILURE(status)) { return; @@ -141,7 +141,7 @@ inline void Hashtable::initSize(UHashFunction *keyHash, UKeyComparator *keyComp, } } -inline Hashtable::Hashtable(UKeyComparator *keyComp, UValueComparator *valueComp, +inline Hashtable::Hashtable(UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode& status) : hash(0) { init( uhash_hashUnicodeString, keyComp, valueComp, status); } @@ -234,7 +234,7 @@ inline void Hashtable::removeAll(void) { inline UKeyComparator* Hashtable::setKeyComparator(UKeyComparator*keyComp){ return uhash_setKeyComparator(hash, keyComp); } - + inline UValueComparator* Hashtable::setValueComparator(UValueComparator* valueComp){ return uhash_setValueComparator(hash, valueComp); } diff --git a/icuSources/common/listformatter.cpp b/icuSources/common/listformatter.cpp index d1056547..33a8ac28 100644 --- a/icuSources/common/listformatter.cpp +++ b/icuSources/common/listformatter.cpp @@ -63,7 +63,7 @@ ListFormatInternal(const ListFormatInternal &other) : static Hashtable* listPatternHash = NULL; static UMutex listFormatterMutex = U_MUTEX_INITIALIZER; -static const char *STANDARD_STYLE = "standard"; +static const char STANDARD_STYLE[] = "standard"; U_CDECL_BEGIN static UBool U_CALLCONV uprv_listformatter_cleanup() { diff --git a/icuSources/common/loadednormalizer2impl.cpp b/icuSources/common/loadednormalizer2impl.cpp index bd37b95e..288a7d69 100644 --- a/icuSources/common/loadednormalizer2impl.cpp +++ b/icuSources/common/loadednormalizer2impl.cpp @@ -62,7 +62,7 @@ LoadedNormalizer2Impl::isAcceptable(void * /*context*/, pInfo->dataFormat[1]==0x72 && pInfo->dataFormat[2]==0x6d && pInfo->dataFormat[3]==0x32 && - pInfo->formatVersion[0]==2 + pInfo->formatVersion[0]==3 ) { // Normalizer2Impl *me=(Normalizer2Impl *)context; // uprv_memcpy(me->dataVersion, pInfo->dataVersion, 4); @@ -84,7 +84,7 @@ LoadedNormalizer2Impl::load(const char *packageName, const char *name, UErrorCod const uint8_t *inBytes=(const uint8_t *)udata_getMemory(memory); const int32_t *inIndexes=(const int32_t *)inBytes; int32_t indexesLength=inIndexes[IX_NORM_TRIE_OFFSET]/4; - if(indexesLength<=IX_MIN_MAYBE_YES) { + if(indexesLength<=IX_MIN_LCCC_CP) { errorCode=U_INVALID_FORMAT_ERROR; // Not enough indexes. return; } diff --git a/icuSources/common/localsvc.cpp b/icuSources/common/localsvc.cpp index a6093196..ad8c8651 100644 --- a/icuSources/common/localsvc.cpp +++ b/icuSources/common/localsvc.cpp @@ -16,7 +16,7 @@ U_CAPI void* uprv_svc_hook(const char *what, UErrorCode *status) { if (uprv_strcmp(what, "languageBreakFactory") == 0) { #if U_PLATFORM_IS_DARWIN_BASED && TARGET_OS_MAC - return new AppleLanguageBreakFactory(*status); + return new icu::AppleLanguageBreakFactory(*status); } #else } diff --git a/icuSources/common/locavailable.cpp b/icuSources/common/locavailable.cpp index f054db3f..8782d0c7 100644 --- a/icuSources/common/locavailable.cpp +++ b/icuSources/common/locavailable.cpp @@ -35,7 +35,7 @@ U_NAMESPACE_BEGIN static icu::Locale* availableLocaleList = NULL; static int32_t availableLocaleListCount; -static icu::UInitOnce gInitOnce = U_INITONCE_INITIALIZER; +static icu::UInitOnce gInitOnceLocale = U_INITONCE_INITIALIZER; U_NAMESPACE_END @@ -50,7 +50,7 @@ static UBool U_CALLCONV locale_available_cleanup(void) availableLocaleList = NULL; } availableLocaleListCount = 0; - gInitOnce.reset(); + gInitOnceLocale.reset(); return TRUE; } @@ -81,7 +81,7 @@ void U_CALLCONV locale_available_init() { const Locale* U_EXPORT2 Locale::getAvailableLocales(int32_t& count) { - umtx_initOnce(gInitOnce, &locale_available_init); + umtx_initOnce(gInitOnceLocale, &locale_available_init); count = availableLocaleListCount; return availableLocaleList; } diff --git a/icuSources/common/locdispnames.cpp b/icuSources/common/locdispnames.cpp index 1aa3ca70..e3855027 100644 --- a/icuSources/common/locdispnames.cpp +++ b/icuSources/common/locdispnames.cpp @@ -542,7 +542,7 @@ uloc_getDisplayName(const char *locale, return 0; } separator = (const UChar *)p0 + subLen; - sepLen = p1 - separator; + sepLen = static_cast(p1 - separator); } if(patLen==0 || (patLen==defaultPatLen && !u_strncmp(pattern, defaultPattern, patLen))) { @@ -558,8 +558,8 @@ uloc_getDisplayName(const char *locale, *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; return 0; } - sub0Pos=p0-pattern; - sub1Pos=p1-pattern; + sub0Pos = static_cast(p0-pattern); + sub1Pos = static_cast(p1-pattern); if (sub1Pos < sub0Pos) { /* a very odd pattern */ int32_t t=sub0Pos; sub0Pos=sub1Pos; sub1Pos=t; langi=1; @@ -821,6 +821,8 @@ uloc_getDisplayKeywordValue( const char* locale, /* get the keyword value */ keywordValue[0]=0; keywordValueLen = uloc_getKeywordValue(locale, keyword, keywordValue, capacity, status); + if (*status == U_STRING_NOT_TERMINATED_WARNING) + *status = U_BUFFER_OVERFLOW_ERROR; /* * if the keyword is equal to currency .. then to get the display name diff --git a/icuSources/common/locdspnm.cpp b/icuSources/common/locdspnm.cpp index f770bce7..61d5735a 100644 --- a/icuSources/common/locdspnm.cpp +++ b/icuSources/common/locdspnm.cpp @@ -54,7 +54,7 @@ static int32_t ncat(char *buffer, uint32_t buflen, ...) { *p = 0; va_end(args); - return p - buffer; + return static_cast(p - buffer); } U_NAMESPACE_BEGIN @@ -643,8 +643,9 @@ LocaleDisplayNamesImpl::localeDisplayName(const Locale& locale, char value[ULOC_KEYWORD_AND_VALUES_CAPACITY]; // sigh, no ULOC_VALUE_CAPACITY const char* key; while ((key = e->next((int32_t *)0, status)) != NULL) { + value[0] = 0; locale.getKeywordValue(key, value, ULOC_KEYWORD_AND_VALUES_CAPACITY, status); - if (U_FAILURE(status)) { + if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING) { return result; } keyDisplayName(key, temp, TRUE); diff --git a/icuSources/common/loclikely.cpp b/icuSources/common/loclikely.cpp index cdd6f78c..7dd07afc 100644 --- a/icuSources/common/loclikely.cpp +++ b/icuSources/common/loclikely.cpp @@ -511,7 +511,7 @@ parseTagString( unknownLanguage); *langLength = (int32_t)uprv_strlen(lang); } - else if (_isIDSeparator(*position)) { + if (_isIDSeparator(*position)) { ++position; } @@ -1281,7 +1281,7 @@ uloc_minimizeSubtags(const char* localeID, // Pairs of (language subtag, + or -) for finding out fast if common languages // are LTR (minus) or RTL (plus). -static const char* LANG_DIR_STRING = +static const char LANG_DIR_STRING[] = "root-en-es-pt-zh-ja-ko-de-fr-it-ar+he+fa+ru-nl-pl-th-tr-"; // Implemented here because this calls uloc_addLikelySubtags(). diff --git a/icuSources/common/locmap.cpp b/icuSources/common/locmap.cpp index dd44c08a..6d62d831 100644 --- a/icuSources/common/locmap.cpp +++ b/icuSources/common/locmap.cpp @@ -190,7 +190,10 @@ ILCID_POSIX_ELEMENT_ARRAY(0x0423, be, be_BY) ILCID_POSIX_ELEMENT_ARRAY(0x0402, bg, bg_BG) -ILCID_POSIX_ELEMENT_ARRAY(0x0466, bin, bin_NG) +ILCID_POSIX_SUBTABLE(bin) { + {0x66, "bin"}, + {0x0466, "bin_NG"} +}; ILCID_POSIX_SUBTABLE(bn) { {0x45, "bn"}, @@ -214,7 +217,13 @@ ILCID_POSIX_SUBTABLE(ca) { }; ILCID_POSIX_ELEMENT_ARRAY(0x0483, co, co_FR) -ILCID_POSIX_ELEMENT_ARRAY(0x045c, chr,chr_US) + +ILCID_POSIX_SUBTABLE(chr) { + {0x05c, "chr"}, + {0x7c5c, "chr_Cher"}, + {0x045c, "chr_Cher_US"}, + {0x045c, "chr_US"} +}; // ICU has chosen different names for these. ILCID_POSIX_SUBTABLE(ckb) { @@ -263,10 +272,10 @@ ILCID_POSIX_SUBTABLE(en) { {0x2C09, "en_TT"}, {0x0409, "en_US"}, {0x007f, "en_US_POSIX"}, /* duplicate for round-tripping */ - {0x2409, "en_VI"}, /* Virgin Islands AKA Caribbean Islands (en_CB). On Windows8+ This is 0x1000 or dynamically assigned */ + {0x2409, "en_029"}, {0x1c09, "en_ZA"}, {0x3009, "en_ZW"}, - {0x2409, "en_029"}, + {0x2409, "en_VI"}, /* Virgin Islands AKA Caribbean Islands (en_CB). On Windows8+ This is 0x1000 or dynamically assigned */ {0x0409, "en_AS"}, /* Alias for en_US. Leave last. On Windows8+ This is 0x1000 or dynamically assigned */ {0x0409, "en_GU"}, /* Alias for en_US. Leave last. On Windows8+ This is 0x1000 or dynamically assigned */ {0x0409, "en_MH"}, /* Alias for en_US. Leave last. On Windows8+ This is 0x1000 or dynamically assigned */ @@ -419,7 +428,12 @@ ILCID_POSIX_SUBTABLE(hsb) { ILCID_POSIX_ELEMENT_ARRAY(0x040e, hu, hu_HU) ILCID_POSIX_ELEMENT_ARRAY(0x042b, hy, hy_AM) -ILCID_POSIX_ELEMENT_ARRAY(0x0469, ibb, ibb_NG) + +ILCID_POSIX_SUBTABLE(ibb) { + {0x69, "ibb"}, + {0x0469, "ibb_NG"} +}; + ILCID_POSIX_ELEMENT_ARRAY(0x0421, id, id_ID) ILCID_POSIX_ELEMENT_ARRAY(0x0470, ig, ig_NG) ILCID_POSIX_ELEMENT_ARRAY(0x0478, ii, ii_CN) @@ -458,13 +472,18 @@ ILCID_POSIX_ELEMENT_ARRAY(0x0471, kr, kr_NG) ILCID_POSIX_SUBTABLE(ks) { /* We could add PK and CN too */ {0x60, "ks"}, - {0x0860, "ks_IN"}, /* Documentation doesn't mention script */ {0x0460, "ks_Arab_IN"}, {0x0860, "ks_Deva_IN"} }; ILCID_POSIX_ELEMENT_ARRAY(0x0440, ky, ky_KG) /* Kyrgyz is spoken in Kyrgyzstan */ -ILCID_POSIX_ELEMENT_ARRAY(0x0476, la, la_IT) /* TODO: Verify the country */ + +ILCID_POSIX_SUBTABLE(la) { + {0x76, "la"}, + {0x0476, "la_001"}, + {0x0476, "la_IT"} /*Left in for compatibility*/ +}; + ILCID_POSIX_ELEMENT_ARRAY(0x046e, lb, lb_LU) ILCID_POSIX_ELEMENT_ARRAY(0x0454, lo, lo_LA) ILCID_POSIX_ELEMENT_ARRAY(0x0427, lt, lt_LT) @@ -535,15 +554,19 @@ ILCID_POSIX_SUBTABLE(or_IN) { {0x0448, "or_IN"}, }; - ILCID_POSIX_SUBTABLE(pa) { {0x46, "pa"}, {0x0446, "pa_IN"}, - {0x0846, "pa_PK"}, - {0x0846, "pa_Arab_PK"} + {0x0846, "pa_Arab_PK"}, + {0x0846, "pa_PK"} +}; + +ILCID_POSIX_SUBTABLE(pap) { + {0x79, "pap"}, + {0x0479, "pap_029"}, + {0x0479, "pap_AN"} /*Left in for compatibility*/ }; -ILCID_POSIX_ELEMENT_ARRAY(0x0479, pap, pap_AN) ILCID_POSIX_ELEMENT_ARRAY(0x0415, pl, pl_PL) ILCID_POSIX_ELEMENT_ARRAY(0x0463, ps, ps_AF) @@ -619,9 +642,11 @@ ILCID_POSIX_ELEMENT_ARRAY(0x0485, sah,sah_RU) ILCID_POSIX_SUBTABLE(sd) { {0x59, "sd"}, - {0x0459, "sd_IN"}, {0x0459, "sd_Deva_IN"}, - {0x0859, "sd_PK"} + {0x0459, "sd_IN"}, + {0x0859, "sd_Arab_PK"}, + {0x0859, "sd_PK"}, + {0x7c59, "sd_Arab"} }; ILCID_POSIX_SUBTABLE(se) { @@ -645,9 +670,8 @@ ILCID_POSIX_ELEMENT_ARRAY(0x045b, si, si_LK) ILCID_POSIX_ELEMENT_ARRAY(0x041b, sk, sk_SK) ILCID_POSIX_ELEMENT_ARRAY(0x0424, sl, sl_SI) -ILCID_POSIX_SUBTABLE(so) { /* TODO: Verify the country */ +ILCID_POSIX_SUBTABLE(so) { {0x77, "so"}, - {0x0477, "so_ET"}, {0x0477, "so_SO"} }; @@ -739,7 +763,12 @@ ILCID_POSIX_SUBTABLE(ve) { /* TODO: Verify the country */ ILCID_POSIX_ELEMENT_ARRAY(0x042a, vi, vi_VN) ILCID_POSIX_ELEMENT_ARRAY(0x0488, wo, wo_SN) ILCID_POSIX_ELEMENT_ARRAY(0x0434, xh, xh_ZA) -ILCID_POSIX_ELEMENT_ARRAY(0x043d, yi, yi) + +ILCID_POSIX_SUBTABLE(yi) { + {0x003d, "yi"}, + {0x043d, "yi_001"} +}; + ILCID_POSIX_ELEMENT_ARRAY(0x046a, yo, yo_NG) // Windows & ICU tend to different names for some of these @@ -986,7 +1015,7 @@ static const char* getPosixID(const ILcidPosixMap *this_0, uint32_t hostID) { uint32_t i; - for (i = 0; i <= this_0->numRegions; i++) + for (i = 0; i < this_0->numRegions; i++) { if (this_0->regionMaps[i].hostID == hostID) { @@ -1033,6 +1062,8 @@ uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UEr const char *pPosixID = NULL; #ifdef USE_WINDOWS_LCID_MAPPING_API + char locName[LOCALE_NAME_MAX_LENGTH] = {}; // ICU name can't be longer than Windows name + // Note: Windows primary lang ID 0x92 in LCID is used for Central Kurdish and // GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for // Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot @@ -1040,7 +1071,6 @@ uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UEr if ((hostid & 0x3FF) != 0x92) { int32_t tmpLen = 0; UChar windowsLocaleName[LOCALE_NAME_MAX_LENGTH]; // ULOC_FULLNAME_CAPACITY > LOCALE_NAME_MAX_LENGTH - char locName[LOCALE_NAME_MAX_LENGTH]; // ICU name can't be longer than Windows name // Note: LOCALE_ALLOW_NEUTRAL_NAMES was enabled in Windows7+, prior versions did not handle neutral (no-region) locale names. tmpLen = LCIDToLocaleName(hostid, (PWSTR)windowsLocaleName, UPRV_LENGTHOF(windowsLocaleName), LOCALE_ALLOW_NEUTRAL_NAMES); @@ -1102,7 +1132,7 @@ uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UEr } if (pPosixID) { - int32_t resLen = uprv_strlen(pPosixID); + int32_t resLen = static_cast(uprv_strlen(pPosixID)); int32_t copyLen = resLen <= posixIDCapacity ? resLen : posixIDCapacity; uprv_memcpy(posixID, pPosixID, copyLen); if (resLen < posixIDCapacity) { @@ -1176,7 +1206,7 @@ uprv_convertToLCIDPlatform(const char* localeID) char asciiBCP47Tag[LOCALE_NAME_MAX_LENGTH] = {}; // this will change it from de_DE@collation=phonebook to de-DE-u-co-phonebk form - int32_t bcp47Len = uloc_toLanguageTag(mylocaleID, asciiBCP47Tag, UPRV_LENGTHOF(asciiBCP47Tag), FALSE, &myStatus); + (void)uloc_toLanguageTag(mylocaleID, asciiBCP47Tag, UPRV_LENGTHOF(asciiBCP47Tag), FALSE, &myStatus); if (U_SUCCESS(myStatus)) { @@ -1213,6 +1243,8 @@ uprv_convertToLCIDPlatform(const char* localeID) } } } +#else + (void)localeID; // Suppress unused variable warning. #endif /* USE_WINDOWS_LCID_MAPPING_API */ // No found, or not implemented on platforms without native name->lcid conversion diff --git a/icuSources/common/norm2_nfc_data.h b/icuSources/common/norm2_nfc_data.h index 55a20617..c8bf440a 100644 --- a/icuSources/common/norm2_nfc_data.h +++ b/icuSources/common/norm2_nfc_data.h @@ -11,625 +11,642 @@ #ifdef INCLUDED_FROM_NORMALIZER2_CPP -static const UVersionInfo norm2_nfc_data_formatVersion={2,0,0,0}; -static const UVersionInfo norm2_nfc_data_dataVersion={0xa,0,0,0}; +static const UVersionInfo norm2_nfc_data_formatVersion={3,0,0,0}; +static const UVersionInfo norm2_nfc_data_dataVersion={0xb,0,0,0}; static const int32_t norm2_nfc_data_indexes[Normalizer2Impl::IX_COUNT]={ -0x40,0x4c48,0x889c,0x899c,0x899c,0x899c,0x899c,0x899c,0xc0,0x300,0x56e,0x14e7,0x1e2a,0xfe00,0x941,0 +0x50,0x4e50,0x8aa8,0x8ba8,0x8ba8,0x8ba8,0x8ba8,0x8ba8,0xc0,0x300,0xadc,0x29d0,0x3c56,0xfc00,0x1282,0x3b8c, +0x3c24,0x3c56,0x300,0 }; -static const uint16_t norm2_nfc_data_trieIndex[9724]={ -0x2a8,0x2b0,0x2b8,0x2c0,0x2ce,0x2d6,0x2de,0x2e6,0x2ee,0x2f6,0x2fe,0x306,0x30e,0x316,0x31c,0x324, -0x32c,0x334,0x2c7,0x2cf,0x339,0x341,0x2c7,0x2cf,0x349,0x351,0x359,0x361,0x369,0x371,0x379,0x381, -0x389,0x391,0x399,0x3a1,0x3a9,0x3b1,0x3b9,0x3c1,0x2c7,0x2cf,0x2c7,0x2cf,0x3c8,0x3d0,0x3d8,0x3e0, -0x3e4,0x3ec,0x3f2,0x3fa,0x2c7,0x2cf,0x402,0x40a,0x40e,0x416,0x41e,0x426,0x2c7,0x2cf,0x424,0x42c, -0x431,0x438,0x43c,0x2c7,0x2c7,0x2c7,0x443,0x44b,0x2c7,0x453,0x45b,0x2c7,0x2c7,0x463,0x46b,0x2c7, -0x2c7,0x473,0x47b,0x2c7,0x2c7,0x483,0x48b,0x2c7,0x2c7,0x463,0x492,0x2c7,0x49a,0x4a0,0x4a8,0x2c7, -0x2c7,0x2c7,0x4af,0x2c7,0x2c7,0x4b5,0x4bd,0x2c7,0x2c7,0x4c3,0x4cb,0x2c7,0x2c7,0x2c7,0x4d1,0x2c7, -0x2c7,0x4d9,0x4e0,0x2c7,0x2c7,0x4e3,0x4ea,0x2c7,0x4ed,0x4f4,0x4fc,0x504,0x50c,0x514,0x51b,0x2c7, -0x2c7,0x522,0x2c7,0x2c7,0x529,0x2c7,0x2c7,0x2c7,0x93b,0x2c7,0x2c7,0x943,0x2c7,0x949,0x951,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x52d,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x535,0x535,0x2c7,0x2c7,0x2c7,0x2c7,0x53b,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x543,0x2c7,0x2c7,0x2c7,0x546,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x54d,0x2c7,0x2c7,0x555,0x2c7,0x55d,0x2c7,0x2c7,0x565,0x56a,0x572,0x578,0x2c7,0x57e,0x2c7,0x585, -0x2c7,0x58a,0x2c7,0x2c7,0x2c7,0x2c7,0x590,0x598,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x5a0,0x5a5, -0x5ad,0x5b5,0x5bd,0x5c5,0x5cd,0x5d5,0x5dd,0x5e5,0x5ed,0x5f5,0x5fd,0x605,0x60d,0x615,0x61d,0x625, -0x62d,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x631,0x639,0x2c7,0x640,0x2c7,0x2c7,0x644,0x64b,0x650,0x2c7, -0x658,0x660,0x668,0x670,0x678,0x680,0x2c7,0x688,0x2c7,0x68e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x691,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x699,0x2c7,0x2c7,0x2c7,0x69e,0x2c7,0x2c7,0x2c7,0x6a6, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x6ae,0x6b5,0x6bd,0x6c5,0x6cd,0x6d5,0x6dd,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x6e5,0x6ed,0x2c7,0x2c7,0x6f5,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x6fc,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x703,0x70b,0x2c7,0x711,0x715,0x2c7,0x2c7,0x58b,0x71d,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x721,0x729,0x72c,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x48b, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959, -0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x959,0x960,0x2c7,0x2c7, -0x968,0x96f,0x2a8,0x976,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8, -0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x734,0x73c,0x744,0x74c,0x754,0x75c,0x764,0x76c, -0x774,0x77c,0x784,0x78c,0x794,0x79c,0x7a4,0x2c7,0x7ab,0x7b3,0x7bb,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x7c3,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0xb20,0xb20,0xb38,0xb78,0xbb8,0xbf8,0xc38,0xc70,0xcb0,0xb1c,0xce4,0xb1c,0xd24,0xd64,0xda4,0xde4, -0xe24,0xe64,0xea4,0xee4,0xb1c,0xb1c,0xf20,0xf60,0xf90,0xfc8,0xb1c,0x1008,0x1038,0x1078,0xb1c,0x1090, -0x880,0x8b0,0x8ee,0x928,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x953,0x188,0x188, -0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x96f,0x188,0x188,0x9a5,0x188,0x9e5,0xa1f,0x188,0x188, +static const uint16_t norm2_nfc_data_trieIndex[9976]={ +0x2aa,0x2b2,0x2ba,0x2c2,0x2d0,0x2d8,0x2e0,0x2e8,0x2f0,0x2f8,0x300,0x308,0x310,0x318,0x31e,0x326, +0x32e,0x336,0x2c9,0x2d1,0x33b,0x343,0x2c9,0x2d1,0x34b,0x353,0x35b,0x363,0x36b,0x373,0x37b,0x383, +0x38b,0x393,0x39b,0x3a3,0x3ab,0x3b3,0x3bb,0x3c3,0x2c9,0x2d1,0x2c9,0x2d1,0x3ca,0x3d2,0x3da,0x3e2, +0x3e6,0x3ee,0x3f4,0x3fc,0x2c9,0x2d1,0x404,0x40c,0x410,0x418,0x420,0x428,0x2c9,0x2d1,0x426,0x42e, +0x436,0x43d,0x441,0x2c9,0x2c9,0x2c9,0x448,0x450,0x2c9,0x458,0x460,0x2c9,0x2c9,0x468,0x470,0x478, +0x2c9,0x480,0x488,0x2c9,0x2c9,0x490,0x498,0x2c9,0x2c9,0x468,0x49f,0x2c9,0x4a7,0x4ad,0x4b5,0x2c9, +0x2c9,0x2c9,0x4bc,0x2c9,0x2c9,0x4c2,0x4ca,0x2c9,0x2c9,0x4d0,0x4d8,0x2c9,0x2c9,0x2c9,0x4de,0x2c9, +0x2c9,0x4e6,0x4ed,0x2c9,0x2c9,0x4f0,0x4f7,0x2c9,0x4fa,0x501,0x509,0x511,0x519,0x521,0x528,0x2c9, +0x2c9,0x52f,0x2c9,0x2c9,0x536,0x2c9,0x2c9,0x2c9,0x96d,0x2c9,0x2c9,0x975,0x2c9,0x97b,0x983,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x53a,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x542,0x542,0x2c9,0x2c9,0x2c9,0x2c9,0x548,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x550,0x2c9,0x2c9,0x2c9,0x553,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x55a,0x2c9,0x2c9,0x562,0x2c9,0x56a,0x2c9,0x2c9,0x572,0x577,0x57f,0x585,0x2c9,0x58b,0x2c9,0x592, +0x2c9,0x597,0x2c9,0x2c9,0x2c9,0x2c9,0x59d,0x5a5,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x5ad,0x5b2, +0x5ba,0x5c2,0x5ca,0x5d2,0x5da,0x5e2,0x5ea,0x5f2,0x5fa,0x602,0x60a,0x612,0x61a,0x622,0x62a,0x632, +0x63a,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x63e,0x646,0x2c9,0x64d,0x2c9,0x2c9,0x651,0x658,0x65d,0x2c9, +0x665,0x66d,0x675,0x67d,0x685,0x68d,0x2c9,0x695,0x2c9,0x69b,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x69e,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x6a6,0x2c9,0x2c9,0x2c9,0x6ab,0x2c9,0x2c9,0x2c9,0x6b3, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x6bb,0x6c2,0x6ca,0x6d2,0x6da,0x6e2,0x6ea,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x6f2,0x6fa,0x2c9,0x2c9,0x702,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x709,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x710,0x718,0x2c9,0x71e,0x722,0x2c9,0x2c9,0x598,0x72a,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x72e,0x736,0x739,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x498, +0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c, +0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e, +0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990, +0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b, +0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d, +0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f, +0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f, +0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c, +0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e, +0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990, +0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b, +0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d, +0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f, +0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f, +0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c, +0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e, +0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990, +0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b, +0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d, +0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f, +0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f, +0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x99f,0x98b,0x98c,0x98d,0x98e,0x98f,0x990,0x997,0x2c9,0x2c9, +0x9a7,0x9ae,0x2aa,0x9b5,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa, +0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa,0x2aa, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x741,0x749,0x751,0x759,0x761,0x769,0x771,0x779, +0x781,0x789,0x791,0x799,0x7a1,0x7a9,0x7b1,0x2c9,0x7b8,0x7c0,0x7c8,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x7d0,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0xb28,0xb28,0xb40,0xb80,0xbc0,0xc00,0xc40,0xc78,0xcb8,0xb24,0xcec,0xb24,0xd2c,0xd6c,0xdac,0xdec, +0xe2c,0xe6c,0xeac,0xeec,0xb24,0xb24,0xf28,0xf68,0xf98,0xfd0,0xb24,0x1010,0x1040,0x1080,0xb24,0x1098, +0x880,0x8b0,0x8ee,0x92d,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x95a,0x188,0x188, +0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x976,0x188,0x188,0x9ac,0x188,0x9ec,0xa26,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, -0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xa5f, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7cf,0x2c7,0x2c7,0x2c7,0x7d2,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x7d9,0x7dd,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7e5,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x6fc,0x69e,0x7e7,0x7ef,0x2c7,0x2c7,0x7f7,0x7fe,0x2c7,0x58b,0x2c7,0x2c7,0x806,0x2c7,0x2c7,0x809, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x80f,0x2c7,0x463,0x816,0x81d,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x825,0x2c7,0x2c7,0x829,0x831,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x836,0x83e,0x2c7,0x2c7,0x69e, -0x2c7,0x2c7,0x2c7,0x841,0x2c7,0x2c7,0x2c7,0x847,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x535,0x848,0x2c7,0x84a,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x69e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x852,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x856,0x2c7,0x85c,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x862,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x86a, -0x872,0x87a,0x880,0x888,0x2c7,0x2c7,0x2c7,0x890,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x898,0x8a0,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x8a4,0x2c7,0x2c7,0x2c7,0x8ab,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x8b3, -0x8bb,0x8c3,0x8cb,0x8d3,0x8db,0x8e3,0x8eb,0x8f3,0x8fb,0x903,0x90b,0x913,0x91b,0x923,0x92b,0x933, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, -0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2a7, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,2,4,6,0, -0,8,0x28,0x2e,0x38,0x44,0x66,0x68,0x76,0x84,0xa2,0xa4,0xae,0xba,0xc0,0xd2, -0xf2,0,0xf6,0x106,0x114,0x122,0x148,0x14c,0x158,0x15c,0x16e,0,0,0,0,0, -0,0x17a,0x19a,0x1a0,0x1aa,0x1b6,0x1d8,0x1da,0x1e8,0x1f8,0x214,0x218,0x222,0x22e,0x234,0x246, -0x266,0,0x26a,0x27a,0x288,0x298,0x2be,0x2c2,0x2d0,0x2d4,0x2e8,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x2f4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x941,0x944,0x56f,0x947,0x57a,0x57f,0x2fa,0x584, -0x94a,0x94d,0x589,0x950,0x953,0x956,0x959,0x594,0,0x95c,0x95f,0x962,0x599,0x5a4,0x5ad,0, -0x2fe,0x965,0x968,0x96b,0x5b2,0x96e,0,0,0x971,0x974,0x5bd,0x977,0x5c8,0x5cd,0x300,0x5d2, -0x97a,0x97d,0x5d7,0x980,0x983,0x986,0x989,0x5e2,0,0x98c,0x98f,0x992,0x5e7,0x5f2,0x5fb,0, -0x304,0x995,0x998,0x99b,0x600,0x99e,0,0x9a1,0x9a4,0x9a7,0x60b,0x616,0x9aa,0x9ad,0x9b0,0x9b3, -0x9b6,0x9b9,0x9bc,0x9bf,0x9c2,0x9c5,0x9c8,0x9cb,0,0,0x621,0x628,0x9ce,0x9d1,0x9d4,0x9d7, -0x9da,0x9dd,0x9e0,0x9e3,0x9e6,0x9e9,0x9ec,0x9ef,0x9f2,0x9f5,0x9f8,0x9fb,0x9fe,0xa01,0,0, -0xa04,0xa07,0xa0a,0xa0d,0xa10,0xa13,0xa16,0xa19,0xa1c,0,0,0,0xa1f,0xa22,0xa25,0xa28, -0,0xa2b,0xa2e,0xa31,0xa34,0xa37,0xa3a,0,0,0,0,0xa3d,0xa40,0xa43,0xa46,0xa49, -0xa4c,0,0,0,0x62f,0x636,0xa4f,0xa52,0xa55,0xa58,0,0,0xa5b,0xa5e,0xa61,0xa64, -0xa67,0xa6a,0x63d,0x642,0xa6d,0xa70,0xa73,0xa76,0x647,0x64c,0xa79,0xa7c,0xa7f,0xa82,0,0, -0x651,0x656,0x65b,0x660,0xa85,0xa88,0xa8b,0xa8e,0xa91,0xa94,0xa97,0xa9a,0xa9d,0xaa0,0xaa3,0xaa6, -0xaa9,0xaac,0xaaf,0xab2,0xab5,0xab8,0xabb,0x306,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x665,0x672,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x67f,0x68c,0,0,0,0,0,0,0x308, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xabe,0xac1,0xac4, -0xac7,0xaca,0xacd,0xad0,0xad3,0xad7,0xadc,0xae1,0xae6,0xaeb,0xaf0,0xaf5,0xafa,0,0xaff,0xb04, -0xb09,0xb0e,0xb12,0xb15,0,0,0xb18,0xb1b,0xb1e,0xb21,0x699,0x69e,0xb25,0xb2a,0xb2e,0xb31, -0xb34,0,0,0,0xb37,0xb3a,0,0,0xb3d,0xb40,0xb44,0xb49,0xb4d,0xb50,0xb53,0xb56, -0xb59,0xb5c,0xb5f,0xb62,0xb65,0xb68,0xb6b,0xb6e,0xb71,0xb74,0xb77,0xb7a,0xb7d,0xb80,0xb83,0xb86, -0xb89,0xb8c,0xb8f,0xb92,0xb95,0xb98,0xb9b,0xb9e,0xba1,0xba4,0xba7,0xbaa,0,0,0xbad,0xbb0, -0,0,0,0,0,0,0x6a3,0x6a8,0x6ad,0x6b2,0xbb4,0xbb9,0xbbe,0xbc3,0x6b7,0x6bc, -0xbc8,0xbcd,0xbd1,0xbd4,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x30a,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xffe6,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6, -0xfee6,0xffe6,0xffe6,0xfee6,0xffe6,0xfee6,0xffe6,0xfee6,0xfee6,0xffe8,0xffdc,0xffdc,0xffdc,0xffdc,0xffe8,0xfed8, -0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffca,0xffca,0xfedc,0xfedc,0xfedc,0xfedc,0xfeca,0xfeca,0xffdc,0xffdc,0xffdc, -0xffdc,0xfedc,0xfedc,0xffdc,0xfedc,0xfedc,0xffdc,0xffdc,0xff01,0xff01,0xff01,0xff01,0xfe01,0xffdc,0xffdc,0xffdc, -0xffdc,0xffe6,0xffe6,0xffe6,0x14e8,0x14eb,0xfee6,0x14ee,0x14f1,0xfef0,0xffe6,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6, -0xffe6,0xffdc,0xffdc,0,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe8,0xffdc,0xffdc,0xffe6, -0xffe9,0xffea,0xffea,0xffe9,0xffea,0xffea,0xffe9,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0x14f4,0,0,0,0,0,0,0, -0,0,0x14f6,0,0,0,0,0,0,0xbd7,0xbda,0x14f8,0xbdd,0xbe0,0xbe3,0, -0xbe6,0,0xbe9,0xbec,0xbf0,0x30c,0,0,0,0x31a,0,0x322,0,0x32c,0,0, -0,0,0,0x33a,0,0x342,0,0,0,0x344,0,0,0,0x350,0xbf4,0xbf7, -0x6c1,0xbfa,0x6c6,0xbfd,0xc01,0x35a,0,0,0,0x36a,0,0x372,0,0x37e,0,0, -0,0,0,0x38e,0,0x396,0,0,0,0x39a,0,0,0,0x3aa,0x6cb,0x6d4, -0xc05,0xc08,0x6dd,0,0,0,0x3b6,0xc0b,0xc0e,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xc11,0xc14,0,0xc17,0,0,0x3ba,0xc1a,0,0,0,0, -0xc1d,0xc20,0xc23,0,0x3bc,0,0,0x3c0,0,0x3c2,0x3c8,0x3cc,0x3ce,0xc26,0x3d6,0, -0,0,0x3d8,0,0,0,0,0x3da,0,0,0,0x3e2,0,0,0,0x3e4, -0,0x3e6,0,0,0x3e8,0,0,0x3ec,0,0x3ee,0x3f4,0x3f8,0x3fa,0xc29,0x402,0, -0,0,0x404,0,0,0,0,0x406,0,0,0,0x40e,0,0,0,0x410, -0,0x412,0,0,0xc2c,0xc2f,0,0xc32,0,0,0x414,0xc35,0,0,0,0, -0xc38,0xc3b,0xc3e,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x416,0x418,0xc41,0xc44,0,0,0,0, -0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xc47,0xc4a,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xc4d,0xc50,0xc53,0xc56,0,0,0xc59,0xc5c,0x41a,0x41c,0xc5f,0xc62, -0xc65,0xc68,0xc6b,0xc6e,0,0,0xc71,0xc74,0xc77,0xc7a,0xc7d,0xc80,0x41e,0x420,0xc83,0xc86, -0xc89,0xc8c,0xc8f,0xc92,0xc95,0xc98,0xc9b,0xc9e,0xca1,0xca4,0,0,0xca7,0xcaa,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffde,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffde,0xffe4,0xffe6, -0xff0a,0xff0b,0xff0c,0xff0d,0xff0e,0xff0f,0xff10,0xff11,0xff12,0xff13,0xff13,0xff14,0xff15,0xff16,0,0xff17, -0,0xff18,0xff19,0,0xffe6,0xffdc,0,0xff12,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xff1e,0xff1f,0xff20,0,0,0,0,0, -0,0,0xcad,0xcb0,0xcb3,0xcb6,0xcb9,0x422,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x428,0,0x42a,0xff1b,0xff1c,0xff1d,0xff1e,0xff1f,0xff20,0xff21,0xff22,0xfee6,0xfee6,0xfedc,0xffdc,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xff23,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xcbc,0x42c,0xcbf,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x42e,0xcc2,0,0x430,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0,0,0xffe6, -0xffe6,0,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xff24,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc, -0xffdc,0xffdc,0xffe6,0xffdc,0xffdc,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffdc,0xffe6,0xffdc,0xffe6, -0xffdc,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffdc,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffdc, -0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xff1b,0xff1c,0xff1d,0xffe6, -0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0, -0,0,0,0,0x432,0xcc5,0,0,0,0,0,0,0x434,0xcc8,0,0x436, -0xccb,0,0,0,0,0,0,0,0xfe07,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0xffe6,0xffdc,0xffe6, -0xffe6,0,0,0,0x14fa,0x14fd,0x1500,0x1503,0x1506,0x1509,0x150c,0x150f,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xff07,0,0xfe00,0,0,0,0,0, -0,0,0,0x438,0,0,0,0xcce,0xcd1,0xff09,0,0,0,0,0,0, -0,0,0,0xfe00,0,0,0,0,0x1512,0x1515,0,0x1518,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x151b, -0,0,0x151e,0,0,0,0,0,0xff07,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0, -0,0,0,0,0,0x1521,0x1524,0x1527,0,0,0x152a,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xff07,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x43c, -0xcd4,0,0,0xcd7,0xcda,0xff09,0,0,0,0,0,0,0,0,0xfe00,0xfe00, -0,0,0,0,0x152d,0x1530,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x442,0,0xcdd,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xfe00,0, -0,0,0,0,0,0,0x444,0x448,0,0,0xce0,0xce3,0xce6,0xff09,0,0, -0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0, -0,0,0x44a,0,0xce9,0,0,0,0,0xff09,0,0,0,0,0,0, -0,0xff54,0xfe5b,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xff07,0,0,0x44c,0xcec,0,0xfe00,0,0,0,0x44e,0xcef,0xcf2,0,0x6e2,0xcf6, -0,0xff09,0,0,0,0,0,0,0,0xfe00,0xfe00,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xff09,0xff09,0,0xfe00,0,0,0,0,0, -0,0,0x454,0x458,0,0,0xcfa,0xcfd,0xd00,0xff09,0,0,0,0,0,0, -0,0,0,0xfe00,0,0,0,0,0,0,0,0,0,0,0xfe09,0, -0,0,0,0xfe00,0,0,0,0,0,0,0,0,0,0x45a,0xd03,0, -0x6e7,0xd07,0xd0b,0xfe00,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xff67,0xff67,0xff09,0, -0,0,0,0,0,0,0,0,0xff6b,0xff6b,0xff6b,0xff6b,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xff76,0xff76,0,0,0,0,0,0,0,0,0,0, -0xff7a,0xff7a,0xff7a,0xff7a,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xffdc,0xffdc,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xffdc,0,0xffdc,0,0xffd8,0,0,0,0,0,0, -0,0,0,0x1533,0,0,0,0,0,0,0,0,0,0x1536,0,0, -0,0,0x1539,0,0,0,0,0x153c,0,0,0,0,0x153f,0,0,0, -0,0,0,0,0,0,0,0,0,0x1542,0,0,0,0,0,0, -0,0xff81,0xff82,0x1546,0xff84,0x154a,0x154d,0,0x1550,0,0xff82,0xff82,0xff82,0xff82,0,0, -0xff82,0x1554,0xffe6,0xffe6,0xff09,0,0xffe6,0xffe6,0,0,0,0,0,0,0,0, -0,0,0,0x1557,0,0,0,0,0,0,0,0,0,0x155a,0,0, -0,0,0x155d,0,0,0,0,0x1560,0,0,0,0,0x1563,0,0,0, -0,0,0,0,0,0,0,0,0,0x1566,0,0,0,0,0,0, -0,0,0xffdc,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0x460,0xd0e,0, -0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0,0xff07, -0,0xff09,0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xffdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0, -0,0,0,0,0,0,0,0,0,0xffe6,0,0,0,0,0,0, -0,0,0,0,0,0xffe4,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xffde,0xffe6,0xffdc,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffdc,0,0,0, -0,0,0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0,0,0xffdc,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6, -0xffe6,0xffdc,0,0,0,0,0,0,0,0x462,0xd11,0x464,0xd14,0x466,0xd17,0x468, -0xd1a,0x46a,0xd1d,0,0,0x46c,0xd20,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xff07,0xfe00,0,0, -0,0,0x46e,0xd23,0x470,0xd26,0x472,0x474,0xd29,0xd2c,0x476,0xd2f,0xff09,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xff09,0xff09,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xff07,0,0,0,0,0, -0,0,0,0,0,0,0xff09,0xff09,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff07, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0xffe6,0xffe6,0,0xff01,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc, -0xffe6,0,0xff01,0xff01,0xff01,0xff01,0xff01,0xff01,0xff01,0,0,0,0,0xffdc,0,0, -0,0,0,0,0xffe6,0,0,0,0xffe6,0xffe6,0,0,0,0,0,0, -0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffea,0xffd6,0xffdc, -0xffca,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe8,0xffe4,0xffe4,0xffdc,0,0xffe6, -0xffe9,0xffdc,0xffe6,0xffdc,0xd32,0xd35,0xd38,0xd3b,0xd3e,0xd41,0xd44,0xd47,0xd4b,0xd50,0xd54,0xd57, -0xd5a,0xd5d,0xd60,0xd63,0xd66,0xd69,0xd6c,0xd6f,0xd73,0xd78,0xd7d,0xd82,0xd86,0xd89,0xd8c,0xd8f, -0xd93,0xd98,0xd9c,0xd9f,0xda2,0xda5,0xda8,0xdab,0xdae,0xdb1,0xdb4,0xdb7,0xdba,0xdbd,0xdc0,0xdc3, -0xdc6,0xdc9,0xdcd,0xdd2,0xdd6,0xdd9,0xddc,0xddf,0xde2,0xde5,0x6ec,0x6f1,0xde9,0xdee,0xdf2,0xdf5, -0xdf8,0xdfb,0xdfe,0xe01,0xe04,0xe07,0xe0a,0xe0d,0xe10,0xe13,0xe16,0xe19,0xe1c,0xe1f,0xe22,0xe25, -0xe29,0xe2e,0xe33,0xe38,0xe3d,0xe42,0xe47,0xe4c,0xe50,0xe53,0xe56,0xe59,0xe5c,0xe5f,0x6f6,0x6fb, -0xe63,0xe68,0xe6c,0xe6f,0xe72,0xe75,0x700,0x705,0xe79,0xe7e,0xe83,0xe88,0xe8d,0xe92,0xe96,0xe99, -0xe9c,0xe9f,0xea2,0xea5,0xea8,0xeab,0xeae,0xeb1,0xeb4,0xeb7,0xeba,0xebd,0xec1,0xec6,0xecb,0xed0, -0xed4,0xed7,0xeda,0xedd,0xee0,0xee3,0xee6,0xee9,0xeec,0xeef,0xef2,0xef5,0xef8,0xefb,0xefe,0xf01, -0xf04,0xf07,0xf0a,0xf0d,0xf10,0xf13,0xf16,0xf19,0xf1c,0xf1f,0xf22,0xf25,0xf28,0xf2b,0,0xf2e, -0,0,0,0,0x70a,0x711,0xf31,0xf34,0xf38,0xf3d,0xf42,0xf47,0xf4c,0xf51,0xf56,0xf5b, -0xf60,0xf65,0xf6a,0xf6f,0xf74,0xf79,0xf7e,0xf83,0xf88,0xf8d,0xf92,0xf97,0x718,0x71d,0xf9b,0xf9e, -0xfa1,0xfa4,0xfa8,0xfad,0xfb2,0xfb7,0xfbc,0xfc1,0xfc6,0xfcb,0xfd0,0xfd5,0xfd9,0xfdc,0xfdf,0xfe2, -0x722,0x727,0xfe5,0xfe8,0xfec,0xff1,0xff6,0xffb,0x1000,0x1005,0x100a,0x100f,0x1014,0x1019,0x101e,0x1023, -0x1028,0x102d,0x1032,0x1037,0x103c,0x1041,0x1046,0x104b,0x104f,0x1052,0x1055,0x1058,0x105c,0x1061,0x1066,0x106b, -0x1070,0x1075,0x107a,0x107f,0x1084,0x1089,0x108d,0x1090,0x1093,0x1096,0x1099,0x109c,0x109f,0x10a2,0,0, -0,0,0,0,0x72c,0x737,0x743,0x74a,0x751,0x758,0x75f,0x766,0x76c,0x777,0x783,0x78a, -0x791,0x798,0x79f,0x7a6,0x7ac,0x7b3,0x10a6,0x10ab,0x10b0,0x10b5,0,0,0x7ba,0x7c1,0x10ba,0x10bf, -0x10c4,0x10c9,0,0,0x7c8,0x7d3,0x7df,0x7e6,0x7ed,0x7f4,0x7fb,0x802,0x808,0x813,0x81f,0x826, -0x82d,0x834,0x83b,0x842,0x848,0x851,0x10ce,0x10d3,0x10d8,0x10dd,0x10e2,0x10e7,0x85a,0x863,0x10ec,0x10f1, -0x10f6,0x10fb,0x1100,0x1105,0x86c,0x873,0x110a,0x110f,0x1114,0x1119,0,0,0x87a,0x881,0x111e,0x1123, -0x1128,0x112d,0,0,0x888,0x891,0x1132,0x1137,0x113c,0x1141,0x1146,0x114b,0,0x89a,0,0x1150, -0,0x1155,0,0x115a,0x8a3,0x8ae,0x8ba,0x8c1,0x8c8,0x8cf,0x8d6,0x8dd,0x8e3,0x8ee,0x8fa,0x901, -0x908,0x90f,0x916,0x91d,0x923,0x156a,0x115e,0x156e,0x928,0x1572,0x1161,0x1576,0x1164,0x157a,0x1167,0x157e, -0x92d,0x1582,0,0,0x116b,0x1170,0x1177,0x117f,0x1187,0x118f,0x1197,0x119f,0x11a5,0x11aa,0x11b1,0x11b9, -0x11c1,0x11c9,0x11d1,0x11d9,0x11df,0x11e4,0x11eb,0x11f3,0x11fb,0x1203,0x120b,0x1213,0x1219,0x121e,0x1225,0x122d, -0x1235,0x123d,0x1245,0x124d,0x1253,0x1258,0x125f,0x1267,0x126f,0x1277,0x127f,0x1287,0x128d,0x1292,0x1299,0x12a1, -0x12a9,0x12b1,0x12b9,0x12c1,0x12c6,0x12c9,0x12cd,0x12d1,0x12d5,0,0x932,0x12da,0x12de,0x12e1,0x12e4,0x1586, -0x12e7,0,0x1589,0x478,0,0x12ea,0x12ee,0x12f2,0x12f6,0,0x937,0x12fb,0x12ff,0x158c,0x1302,0x1590, -0x1305,0x1308,0x130b,0x130e,0x1311,0x1314,0x1318,0x1595,0,0,0x131c,0x1320,0x1324,0x1327,0x132a,0x159a, -0,0x132d,0x1330,0x1333,0x1336,0x1339,0x133d,0x159f,0x1341,0x1344,0x1347,0x134b,0x134f,0x1352,0x1355,0x15a4, -0x1358,0x135b,0x15a8,0x15ab,0,0,0x135f,0x1363,0x1367,0,0x93c,0x136c,0x1370,0x15ae,0x1373,0x15b2, -0x1376,0x15b5,0x47e,0,0xfdc1,0xfdc1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xffe6,0xffe6,0xff01,0xff01,0xffe6,0xffe6,0xffe6,0xffe6,0xff01,0xff01,0xff01,0xffe6, -0xffe6,0,0,0,0,0xffe6,0,0,0,0xff01,0xff01,0xffe6,0xffdc,0xffe6,0xff01,0xff01, -0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x15b7,0,0,0,0x15b9,0x15bc,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x484,0,0x486,0,0x488,0,0,0,0,0,0x1379,0x137c,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x137f,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0x1382,0x1385,0x1388, -0x48a,0,0x48c,0,0x48e,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0x490,0x138b,0,0,0,0x492,0x138e,0,0x494,0x1391,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0x496,0x1394,0x498,0x1397,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x49a,0,0,0, -0,0x139a,0,0x49c,0x139d,0x49e,0,0x13a0,0x4a0,0x13a3,0,0,0,0x4a2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x13a6,0x4a4,0x13a9,0,0x4a6,0x4a8,0,0,0,0,0,0,0,0x13ac,0x13af,0x13b2, -0x13b5,0x13b8,0x4aa,0x4ac,0x13bb,0x13be,0x4ae,0x4b0,0x13c1,0x13c4,0x4b2,0x4b4,0x4b6,0x4b8,0,0, -0x13c7,0x13ca,0x4ba,0x4bc,0x13cd,0x13d0,0x4be,0x4c0,0x13d3,0x13d6,0,0,0,0,0,0, -0,0x4c2,0x4c4,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0x4c6,0,0,0,0,0,0x4c8,0x4ca,0,0x4cc,0x13d9,0x13dc,0x13df,0x13e2, -0,0,0x4ce,0x4d0,0x4d2,0x4d4,0,0,0,0,0,0,0,0,0,0, -0x13e5,0x13e8,0x13eb,0x13ee,0,0,0,0,0,0,0x13f1,0x13f4,0x13f7,0x13fa,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0x15bf,0x15c1,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x15c3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xff09,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0, -0,0,0xffda,0xffe4,0xffe8,0xffde,0xffe0,0xffe0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x4d6,0,0,0,0,0x4d8, -0x13fd,0x4da,0x1400,0x4dc,0x1403,0x4de,0x1406,0x4e0,0x1409,0x4e2,0x140c,0x4e4,0x140f,0x4e6,0x1412,0x4e8, -0x1415,0x4ea,0x1418,0x4ec,0x141b,0x4ee,0x141e,0,0x4f0,0x1421,0x4f2,0x1424,0x4f4,0x1427,0,0, -0,0,0,0x4f6,0x142a,0x142d,0x4fa,0x1430,0x1433,0x4fe,0x1436,0x1439,0x502,0x143c,0x143f,0x506, -0x1442,0x1445,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x1448,0,0,0,0,0xfe08,0xfe08,0, -0,0x50a,0x144b,0,0,0,0,0,0,0,0x50c,0,0,0,0,0x50e, -0x144e,0x510,0x1451,0x512,0x1454,0x514,0x1457,0x516,0x145a,0x518,0x145d,0x51a,0x1460,0x51c,0x1463,0x51e, -0x1466,0x520,0x1469,0x522,0x146c,0x524,0x146f,0,0x526,0x1472,0x528,0x1475,0x52a,0x1478,0,0, -0,0,0,0x52c,0x147b,0x147e,0x530,0x1481,0x1484,0x534,0x1487,0x148a,0x538,0x148d,0x1490,0x53c, -0x1493,0x1496,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0x540,0x542,0x544,0x546,0,0x1499,0,0,0x149c,0x149f,0x14a2,0x14a5,0, -0,0x548,0x14a8,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xffe6,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffdc, -0xffdc,0xffdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0,0, -0,0,0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xffe6,0,0xffe6,0xffe6,0xffdc,0,0,0xffe6,0xffe6,0,0,0, -0,0,0xffe6,0xffe6,0,0xffe6,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0,0,0, -0x15c6,0x15c8,0x15ca,0x15cc,0x15ce,0x15d0,0x15d2,0x15d4,0x15d4,0x15d6,0x15d8,0x15da,0x15dc,0x15de,0x15e0,0x15e2, -0x15e4,0x15e6,0x15e8,0x15ea,0x15ec,0x15ee,0x15f0,0x15f2,0x15f4,0x15f6,0x15f8,0x15fa,0x15fc,0x15fe,0x1600,0x1602, -0x1604,0x1606,0x1608,0x160a,0x160c,0x160e,0x1610,0x1612,0x1614,0x1616,0x1618,0x161a,0x161c,0x161e,0x1620,0x1622, -0x1624,0x1626,0x1628,0x162a,0x162c,0x162e,0x1630,0x1632,0x1634,0x1636,0x1638,0x163a,0x163c,0x163e,0x1640,0x1642, -0x1644,0x1646,0x1648,0x164a,0x164c,0x164e,0x1650,0x1652,0x1654,0x1656,0x1658,0x165a,0x165c,0x165e,0x1660,0x1662, -0x1664,0x1666,0x1668,0x166a,0x166c,0x166e,0x1670,0x1672,0x1674,0x1676,0x1678,0x167a,0x15ec,0x167c,0x167e,0x1680, -0x1682,0x1684,0x1686,0x1688,0x168a,0x168c,0x168e,0x1690,0x1692,0x1694,0x1696,0x1698,0x169a,0x169c,0x169e,0x16a0, -0x16a2,0x16a4,0x16a6,0x16a8,0x16aa,0x16ac,0x16ae,0x16b0,0x16b2,0x16b4,0x16b6,0x16b8,0x16ba,0x16bc,0x16be,0x16c0, -0x16c2,0x16c4,0x16c6,0x16c8,0x16ca,0x16cc,0x16ce,0x16d0,0x16d2,0x16d4,0x16d6,0x16d8,0x16da,0x16dc,0x16de,0x16e0, -0x16e2,0x16e4,0x16e6,0x16e8,0x16ea,0x16ec,0x16ee,0x16f0,0x16f2,0x16f4,0x16f6,0x16f8,0x16fa,0x16fc,0x16fe,0x1700, -0x1702,0x16a0,0x1704,0x1706,0x1708,0x170a,0x170c,0x170e,0x1710,0x1712,0x1680,0x1714,0x1716,0x1718,0x171a,0x171c, -0x171e,0x1720,0x1722,0x1724,0x1726,0x1728,0x172a,0x172c,0x172e,0x1730,0x1732,0x1734,0x1736,0x1738,0x173a,0x15ec, -0x173c,0x173e,0x1740,0x1742,0x1744,0x1746,0x1748,0x174a,0x174c,0x174e,0x1750,0x1752,0x1754,0x1756,0x1758,0x175a, -0x175c,0x175e,0x1760,0x1762,0x1764,0x1766,0x1768,0x176a,0x176c,0x176e,0x1770,0x1684,0x1772,0x1774,0x1776,0x1778, -0x177a,0x177c,0x177e,0x1780,0x1782,0x1784,0x1786,0x1788,0x178a,0x178c,0x178e,0x1790,0x1792,0x1794,0x1796,0x1798, -0x179a,0x179c,0x179e,0x17a0,0x17a2,0x17a4,0x17a6,0x17a8,0x17aa,0x17ac,0x17ae,0x17b0,0x17b2,0x17b4,0x17b6,0x17b8, -0x17ba,0x17bc,0x17be,0x17c0,0x17c2,0x17c4,0x17c6,0x17c8,0x17ca,0x17cc,0x17ce,0x17d0,0x17d2,0x17d4,0,0, -0x17d6,0,0x17d8,0,0,0x17da,0x17dc,0x17de,0x17e0,0x17e2,0x17e4,0x17e6,0x17e8,0x17ea,0x17ec,0, -0x17ee,0,0x17f0,0,0,0x17f2,0x17f4,0,0,0,0x17f6,0x17f8,0x17fa,0x17fc,0x17fe,0x1800, -0x1802,0x1804,0x1806,0x1808,0x180a,0x180c,0x180e,0x1810,0x1812,0x1814,0x1816,0x1818,0x181a,0x181c,0x181e,0x1820, -0x1822,0x1824,0x1826,0x1828,0x182a,0x182c,0x182e,0x1830,0x1832,0x1834,0x1836,0x1838,0x183a,0x183c,0x183e,0x1840, -0x1842,0x1844,0x1846,0x1848,0x184a,0x184c,0x184e,0x16ee,0x1850,0x1852,0x1854,0x1856,0x1858,0x185a,0x185a,0x185c, -0x185e,0x1860,0x1862,0x1864,0x1866,0x1868,0x186a,0x17f2,0x186c,0x186e,0x1870,0x1872,0x1874,0x1877,0,0, -0x1879,0x187b,0x187d,0x187f,0x1881,0x1883,0x1885,0x1887,0x180e,0x1889,0x188b,0x188d,0x17d6,0x188f,0x1891,0x1893, -0x1895,0x1897,0x1899,0x189b,0x189d,0x189f,0x18a1,0x18a3,0x18a5,0x1820,0x18a7,0x1822,0x18a9,0x18ab,0x18ad,0x18af, -0x18b1,0x17d8,0x1616,0x18b3,0x18b5,0x18b7,0x16a2,0x1750,0x18b9,0x18bb,0x1830,0x18bd,0x1832,0x18bf,0x18c1,0x18c3, -0x17dc,0x18c5,0x18c7,0x18c9,0x18cb,0x18cd,0x17de,0x18cf,0x18d1,0x18d3,0x18d5,0x18d7,0x18d9,0x184e,0x18db,0x18dd, -0x16ee,0x18df,0x1856,0x18e1,0x18e3,0x18e5,0x18e7,0x18e9,0x1860,0x18eb,0x17f0,0x18ed,0x1862,0x167c,0x18ef,0x1864, -0x18f1,0x1868,0x18f3,0x18f5,0x18f7,0x18f9,0x18fb,0x186c,0x17e8,0x18fd,0x186e,0x18ff,0x1870,0x1901,0x15d4,0x1903, -0x1906,0x1909,0x190c,0x190e,0x1910,0x1912,0x1915,0x1918,0x191b,0x191d,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0x191f,0xff1a,0x1922,0,0,0,0, -0,0,0,0,0,0,0x1925,0x1928,0x192c,0x1931,0x1935,0x1938,0x193b,0x193e,0x1941,0x1944, -0x1947,0x194a,0x194d,0,0x1950,0x1953,0x1956,0x1959,0x195c,0,0x195f,0,0x1962,0x1965,0,0x1968, -0x196b,0,0x196e,0x1971,0x1974,0x1977,0x197a,0x197d,0x1980,0x1983,0x1986,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xffdc,0,0,0xffdc,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xffdc,0,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xff01,0xffdc,0, -0,0,0,0xff09,0,0,0,0,0,0xffe6,0xffdc,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0x54a,0x14ab,0x54d,0x14b0,0,0,0,0,0,0,0, -0,0x550,0,0,0,0,0,0x14b5,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xff09,0xfe07,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xfe00, -0,0,0,0,0,0,0x14ba,0x14bf,0,0x553,0x556,0xff09,0xff09,0,0,0, -0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0, -0,0,0xff07,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xff09,0xff07,0,0,0,0,0, -0,0,0,0,0,0xff07,0xff09,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x559, -0,0,0,0x14c4,0x14c9,0xff09,0,0,0,0,0,0,0,0,0,0xfe00, -0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xff09,0,0,0,0xff07,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xfe00,0,0,0,0,0,0,0,0,0x55f,0xfe00,0x14ce, -0x14d3,0xfe00,0x14d8,0,0,0,0xff09,0xff07,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0, -0x568,0x56b,0x14dd,0x14e2,0,0,0,0xff09,0xff07,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xff09,0xff07,0,0,0,0, -0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xff09,0,0,0,0,0,0,0,0,0xff07,0,0xff09,0xff09,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xff01,0xff01,0xff01,0xff01,0xff01,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xff01,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x1989,0x198e,0x1998,0x19a4,0x19b0,0x19bc,0x19c8,0xffd8,0xffd8,0xff01, -0xff01,0xff01,0,0,0,0xffe2,0xffd8,0xffd8,0xffd8,0xffd8,0xffd8,0,0,0,0,0, -0,0,0,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0,0,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffdc,0xffdc,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0,0, -0,0,0,0,0,0,0,0,0,0,0,0x19cf,0x19d4,0x19de,0x19ea,0x19f6, -0x1a02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0,0,0,0,0,0,0,0,0, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xff07,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x1a09,0x1a0b,0x1a0d,0x1a0f, -0x1a12,0x1802,0x1a14,0x1a16,0x1a18,0x1a1a,0x1804,0x1a1c,0x1a1e,0x1a20,0x1806,0x1a23,0x1a25,0x1a27,0x1a29,0x1a2c, -0x1a2e,0x1a30,0x1a32,0x1a35,0x1a37,0x1a39,0x1a3b,0x187b,0x1a3d,0x1a40,0x1a42,0x1a44,0x1a46,0x1a48,0x1a4a,0x1a4c, -0x1a4e,0x1885,0x1808,0x180a,0x1887,0x1a50,0x1a52,0x1688,0x1a54,0x180c,0x1a56,0x1a58,0x1a5a,0x1a5c,0x1a5c,0x1a5c, -0x1a5e,0x1a61,0x1a63,0x1a65,0x1a67,0x1a6a,0x1a6c,0x1a6e,0x1a70,0x1a72,0x1a74,0x1a76,0x1a78,0x1a7a,0x1a7c,0x1a7e, -0x1a80,0x1a82,0x1a82,0x188b,0x1a84,0x1a86,0x1a88,0x1a8a,0x1810,0x1a8c,0x1a8e,0x1a90,0x17ba,0x1a92,0x1a94,0x1a96, -0x1a98,0x1a9a,0x1a9c,0x1a9e,0x1aa0,0x1aa2,0x1aa5,0x1aa7,0x1aa9,0x1aab,0x1aad,0x1aaf,0x1ab1,0x1ab4,0x1ab7,0x1ab9, -0x1abb,0x1abd,0x1abf,0x1ac1,0x1ac3,0x1ac5,0x1ac7,0x1ac7,0x1ac9,0x1acc,0x1ace,0x1680,0x1ad0,0x1ad2,0x1ad5,0x1ad7, -0x1ad9,0x1adb,0x1add,0x1adf,0x181a,0x1ae1,0x1ae3,0x1ae5,0x1ae8,0x1aea,0x1aed,0x1aef,0x1af1,0x1af3,0x1af5,0x1af7, -0x1af9,0x1afb,0x1afd,0x1aff,0x1b01,0x1b03,0x1b06,0x1b08,0x1b0a,0x1b0c,0x1614,0x1b0e,0x1b11,0x1b13,0x1b13,0x1b16, -0x1b18,0x1b18,0x1b1a,0x1b1c,0x1b1f,0x1b22,0x1b24,0x1b26,0x1b28,0x1b2a,0x1b2c,0x1b2e,0x1b30,0x1b32,0x1b34,0x181c, -0x1b36,0x1b39,0x1b3b,0x1b3d,0x18a3,0x1b3d,0x1b3f,0x1820,0x1b41,0x1b43,0x1b45,0x1b47,0x1822,0x15de,0x1b49,0x1b4b, -0x1b4d,0x1b4f,0x1b51,0x1b53,0x1b55,0x1b58,0x1b5a,0x1b5c,0x1b5e,0x1b60,0x1b62,0x1b65,0x1b67,0x1b69,0x1b6b,0x1b6d, -0x1b6f,0x1b71,0x1b73,0x1b75,0x1824,0x1b77,0x1b79,0x1b7c,0x1b7e,0x1b80,0x1b82,0x1828,0x1b84,0x1b86,0x1b88,0x1b8a, -0x1b8c,0x1b8e,0x1b90,0x1b92,0x1616,0x18b3,0x1b94,0x1b96,0x1b98,0x1b9a,0x1b9d,0x1b9f,0x1ba1,0x1ba3,0x182a,0x1ba5, -0x1ba8,0x1baa,0x1bac,0x190c,0x1bae,0x1bb0,0x1bb2,0x1bb4,0x1bb6,0x1bb9,0x1bbb,0x1bbd,0x1bbf,0x1bc2,0x1bc4,0x1bc6, -0x1bc8,0x16a2,0x1bca,0x1bcc,0x1bcf,0x1bd2,0x1bd5,0x1bd7,0x1bda,0x1bdc,0x1bde,0x1be0,0x1be2,0x182c,0x1750,0x1be4, -0x1be6,0x1be8,0x1bea,0x1bed,0x1bef,0x1bf1,0x1bf3,0x18bb,0x1bf5,0x1bf7,0x1bfa,0x1bfc,0x1bfe,0x1c01,0x1c04,0x1c06, -0x18bd,0x1c08,0x1c0a,0x1c0c,0x1c0e,0x1c10,0x1c12,0x1c14,0x1c17,0x1c19,0x1c1c,0x1c1e,0x1c21,0x18c1,0x1c23,0x1c25, -0x1c28,0x1c2a,0x1c2c,0x1c2f,0x1c32,0x1c34,0x1c36,0x1c38,0x1c3a,0x1c3a,0x1c3c,0x1c3e,0x18c5,0x1c40,0x1c42,0x1c44, -0x1c46,0x1c48,0x1c4b,0x1c4d,0x1686,0x1c50,0x1c53,0x1c55,0x1c58,0x1c5b,0x1c5e,0x1c60,0x18d1,0x1c62,0x1c65,0x1c68, -0x1c6b,0x1c6e,0x1c70,0x1c70,0x18d3,0x1910,0x1c72,0x1c74,0x1c76,0x1c78,0x1c7b,0x163a,0x18d7,0x1c7d,0x1c7f,0x1842, -0x1c82,0x1c85,0x17e6,0x1c88,0x1c8a,0x184a,0x1c8c,0x1c8e,0x1c90,0x1c93,0x1c93,0x1c96,0x1c98,0x1c9a,0x1c9d,0x1c9f, -0x1ca1,0x1ca3,0x1ca6,0x1ca8,0x1caa,0x1cac,0x1cae,0x1cb0,0x1cb3,0x1cb5,0x1cb7,0x1cb9,0x1cbb,0x1cbd,0x1cbf,0x1cc2, -0x1cc5,0x1cc7,0x1cca,0x1ccc,0x1ccf,0x1cd1,0x1856,0x1cd3,0x1cd6,0x1cd9,0x1cdb,0x1cde,0x1ce0,0x1ce3,0x1ce5,0x1ce7, -0x1ce9,0x1ceb,0x1ced,0x1cef,0x1cf2,0x1cf5,0x1cf8,0x1b16,0x1cfb,0x1cfd,0x1cff,0x1d01,0x1d03,0x1d05,0x1d07,0x1d09, -0x1d0b,0x1d0d,0x1d0f,0x1d11,0x16aa,0x1d14,0x1d16,0x1d18,0x1d1a,0x1d1c,0x1d1e,0x185c,0x1d20,0x1d22,0x1d24,0x1d26, -0x1d28,0x1d2b,0x1d2e,0x1d31,0x1d33,0x1d35,0x1d37,0x1d39,0x1d3c,0x1d3e,0x1d41,0x1d43,0x1d45,0x1d48,0x1d4b,0x1d4d, -0x1630,0x1d4f,0x1d51,0x1d53,0x1d55,0x1d57,0x1d59,0x18e5,0x1d5b,0x1d5d,0x1d5f,0x1d61,0x1d63,0x1d65,0x1d67,0x1d69, -0x1d6b,0x1d6d,0x1d70,0x1d72,0x1d74,0x1d76,0x1d78,0x1d7a,0x1d7d,0x1d80,0x1d82,0x1d84,0x18ef,0x18f1,0x1d86,0x1d88, -0x1d8b,0x1d8d,0x1d8f,0x1d91,0x1d93,0x1d96,0x1d99,0x1d9b,0x1d9d,0x1d9f,0x1da2,0x18f3,0x1da4,0x1da7,0x1daa,0x1dac, -0x1dae,0x1db0,0x1db3,0x1db5,0x1db7,0x1db9,0x1dbb,0x1dbd,0x1dbf,0x1dc1,0x1dc4,0x1dc6,0x1dc8,0x1dca,0x1dcd,0x1dcf, -0x1dd1,0x1dd3,0x1dd5,0x1dd8,0x1ddb,0x1ddd,0x1ddf,0x1de1,0x1de4,0x1de6,0x18ff,0x18ff,0x1de9,0x1deb,0x1dee,0x1df0, -0x1df2,0x1df4,0x1df6,0x1df8,0x1dfa,0x1dfc,0x1901,0x1dff,0x1e01,0x1e03,0x1e05,0x1e07,0x1e09,0x1e0c,0x1e0e,0x1e11, -0x1e14,0x1e17,0x1e19,0x1e1b,0x1e1d,0x1e1f,0x1e21,0x1e23,0x1e25,0x1e27,0,0,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xff00,0xff00,0xff00, -0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00, -0xff00,0xff00,0,0,0,0,0,0,0,0,0,0,0xff00,0xff00,0xff00,0xff00, -0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00, -0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e, -0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e, -0x56e,0x56e,0x56e,0x56e,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1e29,0,0x1e29,0,0x1e29,0x1e29,0x1e29,0x1e29,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x1e29,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0x1e29,0,0,0,0, -0x1e29,0,0,0,0x1e29,0,0x1e29,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x1e27,0,0,0,0,0 +0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xa66, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x7d4, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x7dc,0x2c9,0x2c9,0x2c9,0x7df,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x7e6,0x7ea,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x7f2,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x7f9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x800,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x709,0x6ab,0x805,0x80d,0x2c9,0x2c9,0x815,0x81c,0x2c9,0x598,0x2c9,0x2c9,0x824,0x2c9,0x2c9,0x827, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x82d,0x2c9,0x830,0x838,0x83f,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x847,0x2c9,0x2c9,0x84f,0x857,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x85c,0x864,0x2c9,0x2c9,0x6ab, +0x2c9,0x2c9,0x2c9,0x867,0x2c9,0x2c9,0x2c9,0x86d,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x870,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x542,0x86e, +0x2c9,0x877,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x6ab,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x87f,0x2c9,0x882,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x888,0x2c9,0x88e,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x894,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x89c,0x8a4,0x8ac,0x8b2,0x8ba,0x2c9,0x2c9,0x2c9,0x8c2,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x8ca,0x8d2,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x8d6,0x2c9,0x2c9,0x2c9, +0x8dd,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x8e5,0x8ed,0x8f5,0x8fd,0x905,0x90d,0x915,0x91d,0x925,0x92d, +0x935,0x93d,0x945,0x94d,0x955,0x95d,0x965,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9, +0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2c9,0x2a9,0x2a9,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,4,8,0xc,1,1,0x10,0x50,0x5c,0x70,0x88,0xcc,0xd0, +0xec,0x108,0x144,0x148,0x15c,0x174,0x180,0x1a4,0x1e4,1,0x1ec,0x20c,0x228,0x244,0x290,0x298, +0x2b0,0x2b8,0x2dc,1,1,1,1,1,1,0x2f4,0x334,0x340,0x354,0x36c,0x3b0,0x3b4, +0x3d0,0x3f0,0x428,0x430,0x444,0x45c,0x468,0x48c,0x4cc,1,0x4d4,0x4f4,0x510,0x530,0x57c,0x584, +0x5a0,0x5a8,0x5d0,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0x5e8,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0x1284,0x128a,0xade,0x1290,0xaf4,0xafe,0x5f4,0xb08,0x1296,0x129c,0xb12,0x12a2,0x12a8,0x12ae,0x12b4,0xb28, +1,0x12ba,0x12c0,0x12c6,0xb32,0xb48,0xb5a,1,0x5fc,0x12cc,0x12d2,0x12d8,0xb64,0x12de,1,1, +0x12e4,0x12ea,0xb7a,0x12f0,0xb90,0xb9a,0x600,0xba4,0x12f6,0x12fc,0xbae,0x1302,0x1308,0x130e,0x1314,0xbc4, +1,0x131a,0x1320,0x1326,0xbce,0xbe4,0xbf6,1,0x608,0x132c,0x1332,0x1338,0xc00,0x133e,1,0x1344, +0x134a,0x1350,0xc16,0xc2c,0x1357,0x135d,0x1362,0x1368,0x136e,0x1374,0x137a,0x1380,0x1386,0x138c,0x1392,0x1398, +1,1,0xc42,0xc50,0x139e,0x13a4,0x13aa,0x13b0,0x13b7,0x13bd,0x13c2,0x13c8,0x13ce,0x13d4,0x13da,0x13e0, +0x13e6,0x13ec,0x13f3,0x13f9,0x13fe,0x1404,1,1,0x140a,0x1410,0x1416,0x141c,0x1422,0x1428,0x142f,0x1435, +0x143a,1,1,1,0x1441,0x1447,0x144d,0x1453,1,0x1458,0x145e,0x1465,0x146b,0x1470,0x1476,1, +1,1,1,0x147c,0x1482,0x1489,0x148f,0x1494,0x149a,1,1,1,0xc5e,0xc6c,0x14a0,0x14a6, +0x14ac,0x14b2,1,1,0x14b8,0x14be,0x14c5,0x14cb,0x14d0,0x14d6,0xc7a,0xc84,0x14dc,0x14e2,0x14e9,0x14ef, +0xc8e,0xc98,0x14f5,0x14fb,0x1500,0x1506,1,1,0xca2,0xcac,0xcb6,0xcc0,0x150c,0x1512,0x1518,0x151e, +0x1524,0x152a,0x1531,0x1537,0x153c,0x1542,0x1548,0x154e,0x1554,0x155a,0x1560,0x1566,0x156c,0x1572,0x1578,0x60c, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xcca,0xce4,1,1,1,1,1,1,1,1,1,1,1,1,1,0xcfe, +0xd18,1,1,1,1,1,1,0x610,1,1,1,1,1,1,1,1, +1,1,1,1,1,0x157e,0x1584,0x158a,0x1590,0x1596,0x159c,0x15a2,0x15a8,0x15b0,0x15ba,0x15c4, +0x15ce,0x15d8,0x15e2,0x15ec,0x15f6,1,0x1600,0x160a,0x1614,0x161e,0x1627,0x162d,1,1,0x1632,0x1638, +0x163e,0x1644,0xd32,0xd3c,0x164d,0x1657,0x165f,0x1665,0x166b,1,1,1,0x1670,0x1676,1,1, +0x167c,0x1682,0x168a,0x1694,0x169d,0x16a3,0x16a9,0x16af,0x16b4,0x16ba,0x16c0,0x16c6,0x16cc,0x16d2,0x16d8,0x16de, +0x16e4,0x16ea,0x16f0,0x16f6,0x16fc,0x1702,0x1708,0x170e,0x1714,0x171a,0x1720,0x1726,0x172c,0x1732,0x1738,0x173e, +0x1744,0x174a,0x1750,0x1756,1,1,0x175c,0x1762,1,1,1,1,1,1,0xd46,0xd50, +0xd5a,0xd64,0x176a,0x1774,0x177e,0x1788,0xd6e,0xd78,0x1792,0x179c,0x17a4,0x17aa,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x614,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0xfdcc,0xfdcc,0xfdcc,0xfdcc, +0xfdcc,0xffcc,0xfdcc,0xfdcc,0xfdcc,0xfdcc,0xfdcc,0xfdcc,0xfdcc,0xffcc,0xffcc,0xfdcc,0xffcc,0xfdcc,0xffcc,0xfdcc, +0xfdcc,0xffd0,0xffb8,0xffb8,0xffb8,0xffb8,0xffd0,0xfdb0,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xff94,0xff94,0xfdb8, +0xfdb8,0xfdb8,0xfdb8,0xfd94,0xfd94,0xffb8,0xffb8,0xffb8,0xffb8,0xfdb8,0xfdb8,0xffb8,0xfdb8,0xfdb8,0xffb8,0xffb8, +0xfe02,0xfe02,0xfe02,0xfe02,0xfc02,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0x3c26,0x3c2c,0xfdcc,0x3c32, +0x3c38,0xfde0,0xffcc,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,1,0xffcc,0xffcc,0xffcc,0xffb8, +0xffb8,0xffb8,0xffb8,0xffcc,0xffd0,0xffb8,0xffb8,0xffcc,0xffd2,0xffd4,0xffd4,0xffd2,0xffd4,0xffd4,0xffd2,0xffcc, +0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1, +0x29d1,1,1,1,1,1,1,1,1,1,0x29d5,1,1,1,1,1, +1,0x17b1,0x17b7,0x29d9,0x17bd,0x17c3,0x17c9,1,0x17cf,1,0x17d5,0x17db,0x17e3,0x618,1,1, +1,0x634,1,0x644,1,0x658,1,1,1,1,1,0x674,1,0x684,1,1, +1,0x688,1,1,1,0x6a0,0x17eb,0x17f1,0xd82,0x17f7,0xd8c,0x17fd,0x1805,0x6b4,1,1, +1,0x6d4,1,0x6e4,1,0x6fc,1,1,1,1,1,0x71c,1,0x72c,1,1, +1,0x734,1,1,1,0x754,0xd96,0xda8,0x180d,0x1813,0xdba,1,1,1,0x76c,0x1819, +0x181f,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0x1825,0x182b,1,0x1831, +1,1,0x774,0x1837,1,1,1,1,0x183d,0x1843,0x1849,1,0x778,1,1,0x780, +1,0x784,0x790,0x798,0x79c,0x184f,0x7ac,1,1,1,0x7b0,1,1,1,1,0x7b4, +1,1,1,0x7c4,1,1,1,0x7c8,1,0x7cc,1,1,0x7d0,1,1,0x7d8, +1,0x7dc,0x7e8,0x7f0,0x7f4,0x1855,0x804,1,1,1,0x808,1,1,1,1,0x80c, +1,1,1,0x81c,1,1,1,0x820,1,0x824,1,1,0x185b,0x1861,1,0x1867, +1,1,0x828,0x186d,1,1,1,1,0x1873,0x1879,0x187f,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0x82c,0x830,0x1885,0x188b,1,1,1,1,1,1,1,1,1,1,1,0xffcc, +0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,0x1891,0x1897,1, +1,1,1,1,1,1,1,1,1,1,1,1,0x189d,0x18a3,0x18a9,0x18af, +1,1,0x18b5,0x18bb,0x834,0x838,0x18c1,0x18c7,0x18cd,0x18d3,0x18d9,0x18df,1,1,0x18e5,0x18eb, +0x18f1,0x18f7,0x18fd,0x1903,0x83c,0x840,0x1909,0x190f,0x1915,0x191b,0x1921,0x1927,0x192d,0x1933,0x1939,0x193f, +0x1945,0x194b,1,1,0x1951,0x1957,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc, +0xffcc,0xffcc,0xffbc,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8, +0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffbc,0xffc8,0xffcc,0xfe14,0xfe16,0xfe18,0xfe1a,0xfe1c,0xfe1e,0xfe20,0xfe22, +0xfe24,0xfe26,0xfe26,0xfe28,0xfe2a,0xfe2c,1,0xfe2e,1,0xfe30,0xfe32,1,0xffcc,0xffb8,1,0xfe24, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc, +0xfe3c,0xfe3e,0xfe40,1,1,1,1,1,1,1,0x195c,0x1962,0x1969,0x196f,0x1975,0x844, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0x850,1,0x854,0xfe36,0xfe38,0xfe3a,0xfe3c,0xfe3e, +0xfe40,0xfe42,0xfe44,0xfdcc,0xfdcc,0xfdb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xfe46,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0x197b,0x858,0x1981,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,0x85c,0x1987,1,0x860,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,0xffcc, +0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,1,1,0xffcc,0xffcc,1,0xffb8,0xffcc,0xffcc,0xffb8,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,0xfe48,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffcc,0xffb8,0xffb8,0xffcc,0xffb8,0xffcc, +0xffcc,0xffcc,0xffb8,0xffcc,0xffb8,0xffcc,0xffb8,0xffcc,0xffb8,0xffcc,0xffcc,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,1,1,1,1, +1,1,1,1,1,0xffb8,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc, +0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc, +0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,0xffb8,0xffb8,0xffb8, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc, +0xffcc,0xffcc,1,0xffb8,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8, +0xfe36,0xfe38,0xfe3a,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc, +1,1,1,1,1,1,1,1,0x864,0x198d,1,1,1,1,1,1, +0x868,0x1993,1,0x86c,0x1999,1,1,1,1,1,1,1,0xfc0e,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,1, +1,0xffcc,0xffb8,0xffcc,0xffcc,1,1,1,0x29dc,0x29e2,0x29e8,0x29ee,0x29f4,0x29fa,0x2a00,0x2a06, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0xfe0e,1,0xfc00,1, +1,1,1,1,1,1,1,0x870,1,1,1,0x199f,0x19a5,0xfe12,1,1, +1,1,1,1,1,1,1,0xfc00,1,1,1,1,0x2a0c,0x2a12,1,0x2a18, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,0x2a1e,1,1,0x2a24,1,1,1,1,1,0xfe0e,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,1, +1,1,1,1,1,1,1,1,1,0x2a2a,0x2a30,0x2a36,1,1,0x2a3c,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0xfe0e,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,0x878,0x19ab,1,1,0x19b1,0x19b7,0xfe12,1,1,1,1,1,1, +1,1,0xfc00,0xfc00,1,1,1,1,0x2a42,0x2a48,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x884,1, +0x19bd,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,0xfc00,1,1,1,1,1,1,1,0x888,0x890,1,1,0x19c3,0x19c9, +0x19cf,0xfe12,1,1,1,1,1,1,1,1,1,0xfc00,1,1,1,1, +1,1,1,1,1,1,0x894,1,0x19d5,1,1,1,1,0xfe12,1,1, +1,1,1,1,1,0xfea8,0xfcb6,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0xfe0e,1,1,0x898,0x19db,1,0xfc00,1,1,1,0x89c,0x19e1, +0x19e7,1,0xdc4,0x19ef,1,0xfe12,1,1,1,1,1,1,1,0xfc00,0xfc00,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,0xfe12,0xfe12,1,0xfc00,1, +1,1,1,1,1,1,0x8a8,0x8b0,1,1,0x19f7,0x19fd,0x1a03,0xfe12,1,1, +1,1,1,1,1,1,1,0xfc00,1,1,1,1,1,1,1,1, +1,1,0xfc12,1,1,1,1,0xfc00,1,1,1,1,1,1,1,1, +1,0x8b4,0x1a09,1,0xdce,0x1a11,0x1a19,0xfc00,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xfece,0xfece,0xfe12,1,1,1,1,1,1,1,1,1,0xfed6,0xfed6,0xfed6,0xfed6, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xfeec,0xfeec,1,1,1,1,1,1, +1,1,1,1,0xfef4,0xfef4,0xfef4,0xfef4,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,0xffb8,1,0xffb8,1,0xffb0,1,1, +1,1,1,1,1,1,1,0x2a4f,1,1,1,1,1,1,1,1, +1,0x2a55,1,1,1,1,0x2a5b,1,1,1,1,0x2a61,1,1,1,1, +0x2a67,1,1,1,1,1,1,1,1,1,1,1,1,0x2a6d,1,1, +1,1,1,1,1,0xff02,0xff04,0x3c40,0xff08,0x3c48,0x2a72,1,0x2a78,1,0xff04,0xff04, +0xff04,0xff04,1,1,0xff04,0x3c50,0xffcc,0xffcc,0xfe12,1,0xffcc,0xffcc,1,1,1,1, +1,1,1,1,1,1,1,0x2a7f,1,1,1,1,1,1,1,1, +1,0x2a85,1,1,1,1,0x2a8b,1,1,1,1,0x2a91,1,1,1,1, +0x2a97,1,1,1,1,1,1,1,1,1,1,1,1,0x2a9d,1,1, +1,1,1,1,1,1,0xffb8,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,0x8c0,0x1a1f,1,1,1,1,1,1,1,0xfc00,1,1,1,1,1, +1,1,1,0xfe0e,1,0xfe12,0xfe12,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0xffb8,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,0xfe12,1,1,1,1,1,1,1,1,1,1,0xffcc,1,1, +1,1,1,1,1,1,1,1,1,0xffc8,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0xffbc,0xffcc,0xffb8,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc, +0xffb8,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc, +0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,0xffb8,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8, +0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,0xffb8,1,1,1,1,1,1,1,0x8c4,0x1a25,0x8c8, +0x1a2b,0x8cc,0x1a31,0x8d0,0x1a37,0x8d4,0x1a3d,1,1,0x8d8,0x1a43,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xfe0e,0xfc00,1,1,1,1,0x8dc,0x1a49,0x8e0,0x1a4f,0x8e4,0x8e8,0x1a55,0x1a5b,0x8ec,0x1a61, +0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc, +0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,0xfe12,0xfe12,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe0e,1, +1,1,1,1,1,1,1,1,1,1,0xfe12,0xfe12,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,0xfe0e,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0xffcc,0xffcc,0xffcc,1,0xfe02,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc, +0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,1,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,1,1,1, +1,0xffb8,1,1,1,1,1,1,0xffcc,1,1,1,0xffcc,0xffcc,1,1, +1,1,1,1,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc, +0xffcc,0xffd4,0xffac,0xffb8,0xff94,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc, +0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffd0,0xffc8, +0xffc8,0xffb8,1,0xffcc,0xffd2,0xffb8,0xffcc,0xffb8,0x1a66,0x1a6c,0x1a72,0x1a78,0x1a7f,0x1a85,0x1a8b,0x1a91, +0x1a99,0x1aa3,0x1aaa,0x1ab0,0x1ab6,0x1abc,0x1ac2,0x1ac8,0x1acf,0x1ad5,0x1ada,0x1ae0,0x1ae8,0x1af2,0x1afc,0x1b06, +0x1b0e,0x1b14,0x1b1a,0x1b20,0x1b29,0x1b33,0x1b3b,0x1b41,0x1b46,0x1b4c,0x1b52,0x1b58,0x1b5e,0x1b64,0x1b6a,0x1b70, +0x1b77,0x1b7d,0x1b82,0x1b88,0x1b8e,0x1b94,0x1b9c,0x1ba6,0x1bae,0x1bb4,0x1bba,0x1bc0,0x1bc6,0x1bcc,0xdd8,0xde2, +0x1bd4,0x1bde,0x1be6,0x1bec,0x1bf2,0x1bf8,0x1bfe,0x1c04,0x1c0a,0x1c10,0x1c17,0x1c1d,0x1c22,0x1c28,0x1c2e,0x1c34, +0x1c3a,0x1c40,0x1c46,0x1c4c,0x1c54,0x1c5e,0x1c68,0x1c72,0x1c7c,0x1c86,0x1c90,0x1c9a,0x1ca3,0x1ca9,0x1caf,0x1cb5, +0x1cba,0x1cc0,0xdec,0xdf6,0x1cc8,0x1cd2,0x1cda,0x1ce0,0x1ce6,0x1cec,0xe00,0xe0a,0x1cf4,0x1cfe,0x1d08,0x1d12, +0x1d1c,0x1d26,0x1d2e,0x1d34,0x1d3a,0x1d40,0x1d46,0x1d4c,0x1d52,0x1d58,0x1d5e,0x1d64,0x1d6a,0x1d70,0x1d76,0x1d7c, +0x1d84,0x1d8e,0x1d98,0x1da2,0x1daa,0x1db0,0x1db7,0x1dbd,0x1dc2,0x1dc8,0x1dce,0x1dd4,0x1dda,0x1de0,0x1de6,0x1dec, +0x1df3,0x1df9,0x1dff,0x1e05,0x1e0b,0x1e11,0x1e16,0x1e1c,0x1e22,0x1e28,0x1e2f,0x1e35,0x1e3b,0x1e41,0x1e46,0x1e4c, +0x1e52,0x1e58,1,0x1e5f,1,1,1,1,0xe14,0xe22,0x1e64,0x1e6a,0x1e72,0x1e7c,0x1e86,0x1e90, +0x1e9a,0x1ea4,0x1eae,0x1eb8,0x1ec2,0x1ecc,0x1ed6,0x1ee0,0x1eea,0x1ef4,0x1efe,0x1f08,0x1f12,0x1f1c,0x1f26,0x1f30, +0xe30,0xe3a,0x1f38,0x1f3e,0x1f44,0x1f4a,0x1f52,0x1f5c,0x1f66,0x1f70,0x1f7a,0x1f84,0x1f8e,0x1f98,0x1fa2,0x1fac, +0x1fb4,0x1fba,0x1fc0,0x1fc6,0xe44,0xe4e,0x1fcc,0x1fd2,0x1fda,0x1fe4,0x1fee,0x1ff8,0x2002,0x200c,0x2016,0x2020, +0x202a,0x2034,0x203e,0x2048,0x2052,0x205c,0x2066,0x2070,0x207a,0x2084,0x208e,0x2098,0x20a0,0x20a6,0x20ac,0x20b2, +0x20ba,0x20c4,0x20ce,0x20d8,0x20e2,0x20ec,0x20f6,0x2100,0x210a,0x2114,0x211c,0x2122,0x2129,0x212f,0x2134,0x213a, +0x2140,0x2146,1,1,1,1,1,1,0xe58,0xe6e,0xe86,0xe94,0xea2,0xeb0,0xebe,0xecc, +0xed8,0xeee,0xf06,0xf14,0xf22,0xf30,0xf3e,0xf4c,0xf58,0xf66,0x214f,0x2159,0x2163,0x216d,1,1, +0xf74,0xf82,0x2177,0x2181,0x218b,0x2195,1,1,0xf90,0xfa6,0xfbe,0xfcc,0xfda,0xfe8,0xff6,0x1004, +0x1010,0x1026,0x103e,0x104c,0x105a,0x1068,0x1076,0x1084,0x1090,0x10a2,0x219f,0x21a9,0x21b3,0x21bd,0x21c7,0x21d1, +0x10b4,0x10c6,0x21db,0x21e5,0x21ef,0x21f9,0x2203,0x220d,0x10d8,0x10e6,0x2217,0x2221,0x222b,0x2235,1,1, +0x10f4,0x1102,0x223f,0x2249,0x2253,0x225d,1,1,0x1110,0x1122,0x2267,0x2271,0x227b,0x2285,0x228f,0x2299, +1,0x1134,1,0x22a3,1,0x22ad,1,0x22b7,0x1146,0x115c,0x1174,0x1182,0x1190,0x119e,0x11ac,0x11ba, +0x11c6,0x11dc,0x11f4,0x1202,0x1210,0x121e,0x122c,0x123a,0x1246,0x3b8e,0x22bf,0x3b96,0x1250,0x3b9e,0x22c5,0x3ba6, +0x22cb,0x3bae,0x22d1,0x3bb6,0x125a,0x3bbe,1,1,0x22d8,0x22e2,0x22f1,0x2301,0x2311,0x2321,0x2331,0x2341, +0x234c,0x2356,0x2365,0x2375,0x2385,0x2395,0x23a5,0x23b5,0x23c0,0x23ca,0x23d9,0x23e9,0x23f9,0x2409,0x2419,0x2429, +0x2434,0x243e,0x244d,0x245d,0x246d,0x247d,0x248d,0x249d,0x24a8,0x24b2,0x24c1,0x24d1,0x24e1,0x24f1,0x2501,0x2511, +0x251c,0x2526,0x2535,0x2545,0x2555,0x2565,0x2575,0x2585,0x258f,0x2595,0x259d,0x25a4,0x25ad,1,0x1264,0x25b7, +0x25bf,0x25c5,0x25cb,0x3bc6,0x25d0,1,0x2aa2,0x8f0,1,0x25d7,0x25df,0x25e6,0x25ef,1,0x126e,0x25f9, +0x2601,0x3bce,0x2607,0x3bd6,0x260c,0x2613,0x2619,0x261f,0x2625,0x262b,0x2633,0x3be0,1,1,0x263b,0x2643, +0x264b,0x2651,0x2657,0x3bea,1,0x265d,0x2663,0x2669,0x266f,0x2675,0x267d,0x3bf4,0x2685,0x268b,0x2691,0x2699, +0x26a1,0x26a7,0x26ad,0x3bfe,0x26b3,0x26b9,0x3c06,0x2aa7,1,1,0x26c1,0x26c8,0x26d1,1,0x1278,0x26db, +0x26e3,0x3c0e,0x26e9,0x3c16,0x26ee,0x2aab,0x8fc,1,0xfa09,0xfa09,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xfe02,0xfe02,0xffcc,0xffcc,0xffcc,0xffcc, +0xfe02,0xfe02,0xfe02,0xffcc,0xffcc,1,1,1,1,0xffcc,1,1,1,0xfe02,0xfe02,0xffcc, +0xffb8,0xffcc,0xfe02,0xfe02,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0x2aae,1,1,1,0x2ab2,0x3c1e, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0x908,1,0x90c,1,0x910,1,1,1,1,1,0x26f5,0x26fb, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x2701,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,0x2707,0x270d,0x2713,0x914,1,0x918,1,0x91c,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,0x920,0x2719,1,1,1,0x924,0x271f,1,0x928, +0x2725,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,0x92c,0x272b,0x930,0x2731,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0x934,1,1,1,1,0x2737,1,0x938,0x273d,0x93c,1,0x2743,0x940,0x2749,1,1, +1,0x944,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0x274f,0x948,0x2755,1,0x94c,0x950,1,1,1,1,1,1, +1,0x275b,0x2761,0x2767,0x276d,0x2773,0x954,0x958,0x2779,0x277f,0x95c,0x960,0x2785,0x278b,0x964,0x968, +0x96c,0x970,1,1,0x2791,0x2797,0x974,0x978,0x279d,0x27a3,0x97c,0x980,0x27a9,0x27af,1,1, +1,1,1,1,1,0x984,0x988,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,0x98c,1,1,1,1,1,0x990,0x994,1,0x998, +0x27b5,0x27bb,0x27c1,0x27c7,1,1,0x99c,0x9a0,0x9a4,0x9a8,1,1,1,1,1,1, +1,1,1,1,0x27cd,0x27d3,0x27d9,0x27df,1,1,1,1,1,1,0x27e5,0x27eb, +0x27f1,0x27f7,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0x2ab7,0x2abb,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0x2abf,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,0xfe12,0xffcc,0xffcc,0xffcc,0xffcc, +0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc, +0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1, +1,1,1,1,1,1,0xffb4,0xffc8,0xffd0,0xffbc,0xffc0,0xffc0,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x9ac,1, +1,1,1,0x9b0,0x27fd,0x9b4,0x2803,0x9b8,0x2809,0x9bc,0x280f,0x9c0,0x2815,0x9c4,0x281b,0x9c8, +0x2821,0x9cc,0x2827,0x9d0,0x282d,0x9d4,0x2833,0x9d8,0x2839,0x9dc,0x283f,1,0x9e0,0x2845,0x9e4,0x284b, +0x9e8,0x2851,1,1,1,1,1,0x9ec,0x2857,0x285d,0x9f4,0x2863,0x2869,0x9fc,0x286f,0x2875, +0xa04,0x287b,0x2881,0xa0c,0x2887,0x288d,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0x2893,1,1,1, +1,0xfc10,0xfc10,1,1,0xa14,0x2899,1,1,1,1,1,1,1,0xa18,1, +1,1,1,0xa1c,0x289f,0xa20,0x28a5,0xa24,0x28ab,0xa28,0x28b1,0xa2c,0x28b7,0xa30,0x28bd,0xa34, +0x28c3,0xa38,0x28c9,0xa3c,0x28cf,0xa40,0x28d5,0xa44,0x28db,0xa48,0x28e1,1,0xa4c,0x28e7,0xa50,0x28ed, +0xa54,0x28f3,1,1,1,1,1,0xa58,0x28f9,0x28ff,0xa60,0x2905,0x290b,0xa68,0x2911,0x2917, +0xa70,0x291d,0x2923,0xa78,0x2929,0x292f,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,0xa80,0xa84,0xa88,0xa8c,1,0x2935,1,1,0x293b, +0x2941,0x2947,0x294d,1,1,0xa90,0x2953,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,0xffcc,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc, +0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,0xffcc,0xffcc,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xffcc,0xffcc,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc, +0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,0xffb8,0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,1,1,1, +1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xffcc,1,0xffcc,0xffcc,0xffb8,1,1,0xffcc, +0xffcc,1,1,1,1,1,0xffcc,0xffcc,1,0xffcc,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1, +1,1,1,1,0x2ac5,0x2ac9,0x2acd,0x2ad1,0x2ad5,0x2ad9,0x2add,0x2ae1,0x2ae1,0x2ae5,0x2ae9,0x2aed, +0x2af1,0x2af5,0x2af9,0x2afd,0x2b01,0x2b05,0x2b09,0x2b0d,0x2b11,0x2b15,0x2b19,0x2b1d,0x2b21,0x2b25,0x2b29,0x2b2d, +0x2b31,0x2b35,0x2b39,0x2b3d,0x2b41,0x2b45,0x2b49,0x2b4d,0x2b51,0x2b55,0x2b59,0x2b5d,0x2b61,0x2b65,0x2b69,0x2b6d, +0x2b71,0x2b75,0x2b79,0x2b7d,0x2b81,0x2b85,0x2b89,0x2b8d,0x2b91,0x2b95,0x2b99,0x2b9d,0x2ba1,0x2ba5,0x2ba9,0x2bad, +0x2bb1,0x2bb5,0x2bb9,0x2bbd,0x2bc1,0x2bc5,0x2bc9,0x2bcd,0x2bd1,0x2bd5,0x2bd9,0x2bdd,0x2be1,0x2be5,0x2be9,0x2bed, +0x2bf1,0x2bf5,0x2bf9,0x2bfd,0x2c01,0x2c05,0x2c09,0x2c0d,0x2c11,0x2c15,0x2c19,0x2c1d,0x2c21,0x2c25,0x2c29,0x2c2d, +0x2b11,0x2c31,0x2c35,0x2c39,0x2c3d,0x2c41,0x2c45,0x2c49,0x2c4d,0x2c51,0x2c55,0x2c59,0x2c5d,0x2c61,0x2c65,0x2c69, +0x2c6d,0x2c71,0x2c75,0x2c79,0x2c7d,0x2c81,0x2c85,0x2c89,0x2c8d,0x2c91,0x2c95,0x2c99,0x2c9d,0x2ca1,0x2ca5,0x2ca9, +0x2cad,0x2cb1,0x2cb5,0x2cb9,0x2cbd,0x2cc1,0x2cc5,0x2cc9,0x2ccd,0x2cd1,0x2cd5,0x2cd9,0x2cdd,0x2ce1,0x2ce5,0x2ce9, +0x2ced,0x2cf1,0x2cf5,0x2cf9,0x2cfd,0x2d01,0x2d05,0x2d09,0x2d0d,0x2d11,0x2d15,0x2d19,0x2d1d,0x2d21,0x2d25,0x2d29, +0x2d2d,0x2d31,0x2d35,0x2d39,0x2d3d,0x2c79,0x2d41,0x2d45,0x2d49,0x2d4d,0x2d51,0x2d55,0x2d59,0x2d5d,0x2c39,0x2d61, +0x2d65,0x2d69,0x2d6d,0x2d71,0x2d75,0x2d79,0x2d7d,0x2d81,0x2d85,0x2d89,0x2d8d,0x2d91,0x2d95,0x2d99,0x2d9d,0x2da1, +0x2da5,0x2da9,0x2dad,0x2b11,0x2db1,0x2db5,0x2db9,0x2dbd,0x2dc1,0x2dc5,0x2dc9,0x2dcd,0x2dd1,0x2dd5,0x2dd9,0x2ddd, +0x2de1,0x2de5,0x2de9,0x2ded,0x2df1,0x2df5,0x2df9,0x2dfd,0x2e01,0x2e05,0x2e09,0x2e0d,0x2e11,0x2e15,0x2e19,0x2c41, +0x2e1d,0x2e21,0x2e25,0x2e29,0x2e2d,0x2e31,0x2e35,0x2e39,0x2e3d,0x2e41,0x2e45,0x2e49,0x2e4d,0x2e51,0x2e55,0x2e59, +0x2e5d,0x2e61,0x2e65,0x2e69,0x2e6d,0x2e71,0x2e75,0x2e79,0x2e7d,0x2e81,0x2e85,0x2e89,0x2e8d,0x2e91,0x2e95,0x2e99, +0x2e9d,0x2ea1,0x2ea5,0x2ea9,0x2ead,0x2eb1,0x2eb5,0x2eb9,0x2ebd,0x2ec1,0x2ec5,0x2ec9,0x2ecd,0x2ed1,0x2ed5,0x2ed9, +0x2edd,0x2ee1,1,1,0x2ee5,1,0x2ee9,1,1,0x2eed,0x2ef1,0x2ef5,0x2ef9,0x2efd,0x2f01,0x2f05, +0x2f09,0x2f0d,0x2f11,1,0x2f15,1,0x2f19,1,1,0x2f1d,0x2f21,1,1,1,0x2f25,0x2f29, +0x2f2d,0x2f31,0x2f35,0x2f39,0x2f3d,0x2f41,0x2f45,0x2f49,0x2f4d,0x2f51,0x2f55,0x2f59,0x2f5d,0x2f61,0x2f65,0x2f69, +0x2f6d,0x2f71,0x2f75,0x2f79,0x2f7d,0x2f81,0x2f85,0x2f89,0x2f8d,0x2f91,0x2f95,0x2f99,0x2f9d,0x2fa1,0x2fa5,0x2fa9, +0x2fad,0x2fb1,0x2fb5,0x2fb9,0x2fbd,0x2fc1,0x2fc5,0x2fc9,0x2fcd,0x2fd1,0x2fd5,0x2d15,0x2fd9,0x2fdd,0x2fe1,0x2fe5, +0x2fe9,0x2fed,0x2fed,0x2ff1,0x2ff5,0x2ff9,0x2ffd,0x3001,0x3005,0x3009,0x300d,0x2f1d,0x3011,0x3015,0x3019,0x301d, +0x3021,0x3027,1,1,0x302b,0x302f,0x3033,0x3037,0x303b,0x303f,0x3043,0x3047,0x2f55,0x304b,0x304f,0x3053, +0x2ee5,0x3057,0x305b,0x305f,0x3063,0x3067,0x306b,0x306f,0x3073,0x3077,0x307b,0x307f,0x3083,0x2f79,0x3087,0x2f7d, +0x308b,0x308f,0x3093,0x3097,0x309b,0x2ee9,0x2b65,0x309f,0x30a3,0x30a7,0x2c7d,0x2dd9,0x30ab,0x30af,0x2f99,0x30b3, +0x2f9d,0x30b7,0x30bb,0x30bf,0x2ef1,0x30c3,0x30c7,0x30cb,0x30cf,0x30d3,0x2ef5,0x30d7,0x30db,0x30df,0x30e3,0x30e7, +0x30eb,0x2fd5,0x30ef,0x30f3,0x2d15,0x30f7,0x2fe5,0x30fb,0x30ff,0x3103,0x3107,0x310b,0x2ff9,0x310f,0x2f19,0x3113, +0x2ffd,0x2c31,0x3117,0x3001,0x311b,0x3009,0x311f,0x3123,0x3127,0x312b,0x312f,0x3011,0x2f09,0x3133,0x3015,0x3137, +0x3019,0x313b,0x2ae1,0x313f,0x3145,0x314b,0x3151,0x3155,0x3159,0x315d,0x3163,0x3169,0x316f,0x3173,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,0x3176,0xfe34,0x317c, +1,1,1,1,1,1,1,1,1,1,0x3182,0x3188,0x3190,0x319a,0x31a2,0x31a8, +0x31ae,0x31b4,0x31ba,0x31c0,0x31c6,0x31cc,0x31d2,1,0x31d8,0x31de,0x31e4,0x31ea,0x31f0,1,0x31f6,1, +0x31fc,0x3202,1,0x3208,0x320e,1,0x3214,0x321a,0x3220,0x3226,0x322c,0x3232,0x3238,0x323e,0x3244,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,0xffb8,1,1, +0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0xffb8,1,0xffcc,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xffcc,0xfe02,0xffb8,1,1,1,1,0xfe12,1,1,1,1,1,0xffcc,0xffb8,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffb8,0xffb8,0xffb8, +0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,0xa94,0x2959,0xa9a, +0x2963,1,1,1,1,1,1,1,1,0xaa0,1,1,1,1,1,0x296d, +1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,0xfc0e,1, +1,1,1,1,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,0xfc00,1,1,1,1,1,1,0x2977,0x2981, +1,0xaa6,0xaac,0xfe12,0xfe12,1,1,1,1,1,1,1,1,1,1,1, +0xfe12,1,1,1,1,1,1,1,1,1,0xfe0e,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,1,1,0xfe0e,0xfe12,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,0xfe0e,0xfe0e,1,0xfc00,1, +1,1,1,1,1,1,1,0xab2,1,1,1,0x298b,0x2995,0xfe12,1,1, +1,1,1,1,1,1,1,0xfc00,1,1,1,1,1,1,1,1, +1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc, +0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1, +1,1,0xfe0e,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0xffcc,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0xfc00,1,1,1, +1,1,1,1,1,0xabe,0xfc00,0x299f,0x29a9,0xfc00,0x29b3,1,1,1,0xfe12,0xfe0e, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfc00, +1,1,1,1,1,1,1,1,0xad0,0xad6,0x29bd,0x29c7,1,1,1,0xfe12, +0xfe0e,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,1,1,1,0xfe12, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,0xfe12,0xfe0e,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,0xfe0e,1, +0xfe12,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe02,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x324a,0x3254, +0x3268,0x3280,0x3298,0x32b0,0x32c8,0xffb0,0xffb0,0xfe02,0xfe02,0xfe02,1,1,1,0xffc4,0xffb0,0xffb0, +0xffb0,0xffb0,0xffb0,1,1,1,1,1,1,1,1,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8, +0xffb8,0xffb8,0xffb8,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1, +1,1,1,0x32d6,0x32e0,0x32f4,0x330c,0x3324,0x333c,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1, +0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc, +0xffcc,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,1,0xffcc,0xffcc, +0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,1, +1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xfe0e,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0x334b,0x334f,0x3353,0x3357,0x335d,0x2f3d,0x3361,0x3365,0x3369,0x336d,0x2f41,0x3371, +0x3375,0x3379,0x2f45,0x337f,0x3383,0x3387,0x338b,0x3391,0x3395,0x3399,0x339d,0x33a3,0x33a7,0x33ab,0x33af,0x302f, +0x33b3,0x33b9,0x33bd,0x33c1,0x33c5,0x33c9,0x33cd,0x33d1,0x33d5,0x3043,0x2f49,0x2f4d,0x3047,0x33d9,0x33dd,0x2c49, +0x33e1,0x2f51,0x33e5,0x33e9,0x33ed,0x33f1,0x33f1,0x33f1,0x33f5,0x33fb,0x33ff,0x3403,0x3407,0x340d,0x3411,0x3415, +0x3419,0x341d,0x3421,0x3425,0x3429,0x342d,0x3431,0x3435,0x3439,0x343d,0x343d,0x304f,0x3441,0x3445,0x3449,0x344d, +0x2f59,0x3451,0x3455,0x3459,0x2ead,0x345d,0x3461,0x3465,0x3469,0x346d,0x3471,0x3475,0x3479,0x347d,0x3483,0x3487, +0x348b,0x348f,0x3493,0x3497,0x349b,0x34a1,0x34a7,0x34ab,0x34af,0x34b3,0x34b7,0x34bb,0x34bf,0x34c3,0x34c7,0x34c7, +0x34cb,0x34d1,0x34d5,0x2c39,0x34d9,0x34dd,0x34e3,0x34e7,0x34eb,0x34ef,0x34f3,0x34f7,0x2f6d,0x34fb,0x34ff,0x3503, +0x3509,0x350d,0x3513,0x3517,0x351b,0x351f,0x3523,0x3527,0x352b,0x352f,0x3533,0x3537,0x353b,0x353f,0x3545,0x3549, +0x354d,0x3551,0x2b61,0x3555,0x355b,0x355f,0x355f,0x3565,0x3569,0x3569,0x356d,0x3571,0x3577,0x357d,0x3581,0x3585, +0x3589,0x358d,0x3591,0x3595,0x3599,0x359d,0x35a1,0x2f71,0x35a5,0x35ab,0x35af,0x35b3,0x307f,0x35b3,0x35b7,0x2f79, +0x35bb,0x35bf,0x35c3,0x35c7,0x2f7d,0x2af5,0x35cb,0x35cf,0x35d3,0x35d7,0x35db,0x35df,0x35e3,0x35e9,0x35ed,0x35f1, +0x35f5,0x35f9,0x35fd,0x3603,0x3607,0x360b,0x360f,0x3613,0x3617,0x361b,0x361f,0x3623,0x2f81,0x3627,0x362b,0x3631, +0x3635,0x3639,0x363d,0x2f89,0x3641,0x3645,0x3649,0x364d,0x3651,0x3655,0x3659,0x365d,0x2b65,0x309f,0x3661,0x3665, +0x3669,0x366d,0x3673,0x3677,0x367b,0x367f,0x2f8d,0x3683,0x3689,0x368d,0x3691,0x3151,0x3695,0x3699,0x369d,0x36a1, +0x36a5,0x36ab,0x36af,0x36b3,0x36b7,0x36bd,0x36c1,0x36c5,0x36c9,0x2c7d,0x36cd,0x36d1,0x36d7,0x36dd,0x36e3,0x36e7, +0x36ed,0x36f1,0x36f5,0x36f9,0x36fd,0x2f91,0x2dd9,0x3701,0x3705,0x3709,0x370d,0x3713,0x3717,0x371b,0x371f,0x30af, +0x3723,0x3727,0x372d,0x3731,0x3735,0x373b,0x3741,0x3745,0x30b3,0x3749,0x374d,0x3751,0x3755,0x3759,0x375d,0x3761, +0x3767,0x376b,0x3771,0x3775,0x377b,0x30bb,0x377f,0x3783,0x3789,0x378d,0x3791,0x3797,0x379d,0x37a1,0x37a5,0x37a9, +0x37ad,0x37ad,0x37b1,0x37b5,0x30c3,0x37b9,0x37bd,0x37c1,0x37c5,0x37c9,0x37cf,0x37d3,0x2c45,0x37d9,0x37df,0x37e3, +0x37e9,0x37ef,0x37f5,0x37f9,0x30db,0x37fd,0x3803,0x3809,0x380f,0x3815,0x3819,0x3819,0x30df,0x3159,0x381d,0x3821, +0x3825,0x3829,0x382f,0x2bad,0x30e7,0x3833,0x3837,0x2fbd,0x383d,0x3843,0x2f05,0x3849,0x384d,0x2fcd,0x3851,0x3855, +0x3859,0x385f,0x385f,0x3865,0x3869,0x386d,0x3873,0x3877,0x387b,0x387f,0x3885,0x3889,0x388d,0x3891,0x3895,0x3899, +0x389f,0x38a3,0x38a7,0x38ab,0x38af,0x38b3,0x38b7,0x38bd,0x38c3,0x38c7,0x38cd,0x38d1,0x38d7,0x38db,0x2fe5,0x38df, +0x38e5,0x38eb,0x38ef,0x38f5,0x38f9,0x38ff,0x3903,0x3907,0x390b,0x390f,0x3913,0x3917,0x391d,0x3923,0x3929,0x3565, +0x392f,0x3933,0x3937,0x393b,0x393f,0x3943,0x3947,0x394b,0x394f,0x3953,0x3957,0x395b,0x2c8d,0x3961,0x3965,0x3969, +0x396d,0x3971,0x3975,0x2ff1,0x3979,0x397d,0x3981,0x3985,0x3989,0x398f,0x3995,0x399b,0x399f,0x39a3,0x39a7,0x39ab, +0x39b1,0x39b5,0x39bb,0x39bf,0x39c3,0x39c9,0x39cf,0x39d3,0x2b99,0x39d7,0x39db,0x39df,0x39e3,0x39e7,0x39eb,0x3103, +0x39ef,0x39f3,0x39f7,0x39fb,0x39ff,0x3a03,0x3a07,0x3a0b,0x3a0f,0x3a13,0x3a19,0x3a1d,0x3a21,0x3a25,0x3a29,0x3a2d, +0x3a33,0x3a39,0x3a3d,0x3a41,0x3117,0x311b,0x3a45,0x3a49,0x3a4f,0x3a53,0x3a57,0x3a5b,0x3a5f,0x3a65,0x3a6b,0x3a6f, +0x3a73,0x3a77,0x3a7d,0x311f,0x3a81,0x3a87,0x3a8d,0x3a91,0x3a95,0x3a99,0x3a9f,0x3aa3,0x3aa7,0x3aab,0x3aaf,0x3ab3, +0x3ab7,0x3abb,0x3ac1,0x3ac5,0x3ac9,0x3acd,0x3ad3,0x3ad7,0x3adb,0x3adf,0x3ae3,0x3ae9,0x3aef,0x3af3,0x3af7,0x3afb, +0x3b01,0x3b05,0x3137,0x3137,0x3b0b,0x3b0f,0x3b15,0x3b19,0x3b1d,0x3b21,0x3b25,0x3b29,0x3b2d,0x3b31,0x313b,0x3b37, +0x3b3b,0x3b3f,0x3b43,0x3b47,0x3b4b,0x3b51,0x3b55,0x3b5b,0x3b61,0x3b67,0x3b6b,0x3b6f,0x3b73,0x3b77,0x3b7b,0x3b7f, +0x3b83,0x3b87,1,1,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00, +0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,1,1,1,1,1,1, +1,1,1,1,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00, +0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0xadc,0x1283,0x1283,0x1283, +0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283, +0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0xadc,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283, +0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0x1283,0x1283,0x1283,0x1283, +0xadc,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283, +0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x3c54,1,0x3c54,0x3c54, +0x3c54,0x3c54,0x3c54,0x3c54,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,0x3c54,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,0x3c54,1,1,1,1,0x3c54,1,1,1, +0x3c54,1,0x3c54,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,0x3b87,1,1,1,1,1 }; -static const uint16_t norm2_nfc_data_extraData[7722]={ +static const uint16_t norm2_nfc_data_extraData[7724]={ 0xffff,0xffff,0x8670,0x44dc,0x8670,0x44c0,0x8670,0x44de,0x600,0x180,0x602,0x182,0x604,0x185,0x606,0x186, 0x608,0x200,0x60c,0x205,0x60e,0x44d,0x610,0x189,0x612,0x3d44,0x614,0x18b,0x618,0x39a,0x61e,0x400, 0x622,0x404,0x646,0x3d41,0x64a,0x3c00,0x8650,0x208,0x60e,0x3c04,0x646,0x3c08,0x8662,0x3c0c,0x602,0x20c, @@ -716,407 +733,407 @@ static const uint16_t norm2_nfc_data_extraData[7722]={ 0x6132,0x61a6,0xe134,0x61a8,0x6132,0x61ac,0xe134,0x61ae,0x6132,0x61b2,0xe134,0x61b4,0x6132,0x61b8,0xe134,0x61ba, 0xe132,0x61ee,0xe132,0x61f0,0xe132,0x61f2,0xe132,0x61f4,0xe132,0x61fc,0xb489,0x2e82,0x2134,0xb489,0x2e82,0x2138, 0xb489,0x2e82,0x2156,0xb489,0x49c2,0x225c,0xb489,0x49c2,0x225e,0x3489,0xcf82,0x2696,0xb489,0xd5c2,0x2698,0x348b, -0x2c02,0x2978,0x348b,0x2e82,0x2976,0xb48b,0x2f42,0x297c,0xb48b,0x6bc2,0x2b74,0xb48b,0x6bc2,0x2b76,0,0xe622, -0x41,0x302,0x600,0x3d4c,0x602,0x3d48,0x606,0x3d54,0x8612,0x3d50,0xe622,0x41,0x308,0x8608,0x3bc,0xe622, -0x41,0x30a,0x8602,0x3f4,0xca22,0x43,0x327,0x8602,0x3c10,0xe622,0x45,0x302,0x600,0x3d80,0x602,0x3d7c, -0x606,0x3d88,0x8612,0x3d84,0xe622,0x49,0x308,0x8602,0x3c5c,0xe622,0x4f,0x302,0x600,0x3da4,0x602,0x3da0, -0x606,0x3dac,0x8612,0x3da8,0xe622,0x4f,0x303,0x602,0x3c98,0x608,0x458,0x8610,0x3c9c,0xe622,0x4f,0x308, -0x8608,0x454,0xe622,0x55,0x308,0x600,0x3b6,0x602,0x3ae,0x608,0x3aa,0x8618,0x3b2,0xe622,0x61,0x302, -0x600,0x3d4e,0x602,0x3d4a,0x606,0x3d56,0x8612,0x3d52,0xe622,0x61,0x308,0x8608,0x3be,0xe622,0x61,0x30a, -0x8602,0x3f6,0xca22,0x63,0x327,0x8602,0x3c12,0xe622,0x65,0x302,0x600,0x3d82,0x602,0x3d7e,0x606,0x3d8a, -0x8612,0x3d86,0xe622,0x69,0x308,0x8602,0x3c5e,0xe622,0x6f,0x302,0x600,0x3da6,0x602,0x3da2,0x606,0x3dae, -0x8612,0x3daa,0xe622,0x6f,0x303,0x602,0x3c9a,0x608,0x45a,0x8610,0x3c9e,0xe622,0x6f,0x308,0x8608,0x456, -0xe622,0x75,0x308,0x600,0x3b8,0x602,0x3b0,0x608,0x3ac,0x8618,0x3b4,0xe622,0x41,0x306,0x600,0x3d60, -0x602,0x3d5c,0x606,0x3d68,0x8612,0x3d64,0xe622,0x61,0x306,0x600,0x3d62,0x602,0x3d5e,0x606,0x3d6a,0x8612, -0x3d66,0xe622,0x45,0x304,0x600,0x3c28,0x8602,0x3c2c,0xe622,0x65,0x304,0x600,0x3c2a,0x8602,0x3c2e,0xe622, -0x4f,0x304,0x600,0x3ca0,0x8602,0x3ca4,0xe622,0x6f,0x304,0x600,0x3ca2,0x8602,0x3ca6,0xe622,0x53,0x301, -0x860e,0x3cc8,0xe622,0x73,0x301,0x860e,0x3cca,0xe622,0x53,0x30c,0x860e,0x3ccc,0xe622,0x73,0x30c,0x860e, -0x3cce,0xe622,0x55,0x303,0x8602,0x3cf0,0xe622,0x75,0x303,0x8602,0x3cf2,0xe622,0x55,0x304,0x8610,0x3cf4, -0xe622,0x75,0x304,0x8610,0x3cf6,0xd822,0x4f,0x31b,0x600,0x3db8,0x602,0x3db4,0x606,0x3dc0,0x612,0x3dbc, -0x8646,0x3dc4,0xd822,0x6f,0x31b,0x600,0x3dba,0x602,0x3db6,0x606,0x3dc2,0x612,0x3dbe,0x8646,0x3dc6,0xd822, -0x55,0x31b,0x600,0x3dd4,0x602,0x3dd0,0x606,0x3ddc,0x612,0x3dd8,0x8646,0x3de0,0xd822,0x75,0x31b,0x600, -0x3dd6,0x602,0x3dd2,0x606,0x3dde,0x612,0x3dda,0x8646,0x3de2,0xca22,0x4f,0x328,0x8608,0x3d8,0xca22,0x6f, -0x328,0x8608,0x3da,0xe622,0x41,0x307,0x8608,0x3c0,0xe622,0x61,0x307,0x8608,0x3c2,0xca22,0x45,0x327, -0x860c,0x3c38,0xca22,0x65,0x327,0x860c,0x3c3a,0xe622,0x4f,0x307,0x8608,0x460,0xe622,0x6f,0x307,0x8608, -0x462,0xe622,0x3b1,0x301,0x868a,0x3f68,0xe622,0x3b7,0x301,0x868a,0x3f88,0xe622,0x3b9,0x308,0x600,0x3fa4, -0x602,0x720,0x8684,0x3fae,0xe622,0x3c5,0x308,0x600,0x3fc4,0x602,0x760,0x8684,0x3fce,0xe622,0x3c9,0x301, -0x868a,0x3fe8,0x22,0xcc6,0xcc2,0x99aa,0x1996,0x22,0xdd9,0xdcf,0x9b94,0x1bba,0xdc22,0x4c,0x323,0x8608, -0x3c70,0xdc22,0x6c,0x323,0x8608,0x3c72,0xdc22,0x52,0x323,0x8608,0x3cb8,0xdc22,0x72,0x323,0x8608,0x3cba, -0xdc22,0x53,0x323,0x860e,0x3cd0,0xdc22,0x73,0x323,0x860e,0x3cd2,0xdc22,0x41,0x323,0x604,0x3d58,0x860c, -0x3d6c,0xdc22,0x61,0x323,0x604,0x3d5a,0x860c,0x3d6e,0xdc22,0x45,0x323,0x8604,0x3d8c,0xdc22,0x65,0x323, -0x8604,0x3d8e,0xdc22,0x4f,0x323,0x8604,0x3db0,0xdc22,0x6f,0x323,0x8604,0x3db2,0xe622,0x3b1,0x313,0x600, -0x3e05,0x602,0x3e09,0x684,0x3e0d,0x868a,0x3f00,0xe622,0x3b1,0x314,0x600,0x3e07,0x602,0x3e0b,0x684,0x3e0f, -0x868a,0x3f02,0x1f00,0xe663,0x3b1,0x313,0x300,0x868a,0x3f04,0x1f01,0xe663,0x3b1,0x314,0x300,0x868a,0x3f06, -0x1f00,0xe663,0x3b1,0x313,0x301,0x868a,0x3f08,0x1f01,0xe663,0x3b1,0x314,0x301,0x868a,0x3f0a,0x1f00,0xe663, -0x3b1,0x313,0x342,0x868a,0x3f0c,0x1f01,0xe663,0x3b1,0x314,0x342,0x868a,0x3f0e,0xe622,0x391,0x313,0x600, -0x3e15,0x602,0x3e19,0x684,0x3e1d,0x868a,0x3f10,0xe622,0x391,0x314,0x600,0x3e17,0x602,0x3e1b,0x684,0x3e1f, -0x868a,0x3f12,0x1f08,0xe663,0x391,0x313,0x300,0x868a,0x3f14,0x1f09,0xe663,0x391,0x314,0x300,0x868a,0x3f16, -0x1f08,0xe663,0x391,0x313,0x301,0x868a,0x3f18,0x1f09,0xe663,0x391,0x314,0x301,0x868a,0x3f1a,0x1f08,0xe663, -0x391,0x313,0x342,0x868a,0x3f1c,0x1f09,0xe663,0x391,0x314,0x342,0x868a,0x3f1e,0xe622,0x3b5,0x313,0x600, -0x3e24,0x8602,0x3e28,0xe622,0x3b5,0x314,0x600,0x3e26,0x8602,0x3e2a,0xe622,0x395,0x313,0x600,0x3e34,0x8602, -0x3e38,0xe622,0x395,0x314,0x600,0x3e36,0x8602,0x3e3a,0xe622,0x3b7,0x313,0x600,0x3e45,0x602,0x3e49,0x684, -0x3e4d,0x868a,0x3f20,0xe622,0x3b7,0x314,0x600,0x3e47,0x602,0x3e4b,0x684,0x3e4f,0x868a,0x3f22,0x1f20,0xe663, -0x3b7,0x313,0x300,0x868a,0x3f24,0x1f21,0xe663,0x3b7,0x314,0x300,0x868a,0x3f26,0x1f20,0xe663,0x3b7,0x313, -0x301,0x868a,0x3f28,0x1f21,0xe663,0x3b7,0x314,0x301,0x868a,0x3f2a,0x1f20,0xe663,0x3b7,0x313,0x342,0x868a, -0x3f2c,0x1f21,0xe663,0x3b7,0x314,0x342,0x868a,0x3f2e,0xe622,0x397,0x313,0x600,0x3e55,0x602,0x3e59,0x684, -0x3e5d,0x868a,0x3f30,0xe622,0x397,0x314,0x600,0x3e57,0x602,0x3e5b,0x684,0x3e5f,0x868a,0x3f32,0x1f28,0xe663, -0x397,0x313,0x300,0x868a,0x3f34,0x1f29,0xe663,0x397,0x314,0x300,0x868a,0x3f36,0x1f28,0xe663,0x397,0x313, -0x301,0x868a,0x3f38,0x1f29,0xe663,0x397,0x314,0x301,0x868a,0x3f3a,0x1f28,0xe663,0x397,0x313,0x342,0x868a, -0x3f3c,0x1f29,0xe663,0x397,0x314,0x342,0x868a,0x3f3e,0xe622,0x3b9,0x313,0x600,0x3e64,0x602,0x3e68,0x8684, -0x3e6c,0xe622,0x3b9,0x314,0x600,0x3e66,0x602,0x3e6a,0x8684,0x3e6e,0xe622,0x399,0x313,0x600,0x3e74,0x602, -0x3e78,0x8684,0x3e7c,0xe622,0x399,0x314,0x600,0x3e76,0x602,0x3e7a,0x8684,0x3e7e,0xe622,0x3bf,0x313,0x600, -0x3e84,0x8602,0x3e88,0xe622,0x3bf,0x314,0x600,0x3e86,0x8602,0x3e8a,0xe622,0x39f,0x313,0x600,0x3e94,0x8602, -0x3e98,0xe622,0x39f,0x314,0x600,0x3e96,0x8602,0x3e9a,0xe622,0x3c5,0x313,0x600,0x3ea4,0x602,0x3ea8,0x8684, -0x3eac,0xe622,0x3c5,0x314,0x600,0x3ea6,0x602,0x3eaa,0x8684,0x3eae,0xe622,0x3a5,0x314,0x600,0x3eb6,0x602, -0x3eba,0x8684,0x3ebe,0xe622,0x3c9,0x313,0x600,0x3ec5,0x602,0x3ec9,0x684,0x3ecd,0x868a,0x3f40,0xe622,0x3c9, -0x314,0x600,0x3ec7,0x602,0x3ecb,0x684,0x3ecf,0x868a,0x3f42,0x1f60,0xe663,0x3c9,0x313,0x300,0x868a,0x3f44, -0x1f61,0xe663,0x3c9,0x314,0x300,0x868a,0x3f46,0x1f60,0xe663,0x3c9,0x313,0x301,0x868a,0x3f48,0x1f61,0xe663, -0x3c9,0x314,0x301,0x868a,0x3f4a,0x1f60,0xe663,0x3c9,0x313,0x342,0x868a,0x3f4c,0x1f61,0xe663,0x3c9,0x314, -0x342,0x868a,0x3f4e,0xe622,0x3a9,0x313,0x600,0x3ed5,0x602,0x3ed9,0x684,0x3edd,0x868a,0x3f50,0xe622,0x3a9, -0x314,0x600,0x3ed7,0x602,0x3edb,0x684,0x3edf,0x868a,0x3f52,0x1f68,0xe663,0x3a9,0x313,0x300,0x868a,0x3f54, -0x1f69,0xe663,0x3a9,0x314,0x300,0x868a,0x3f56,0x1f68,0xe663,0x3a9,0x313,0x301,0x868a,0x3f58,0x1f69,0xe663, -0x3a9,0x314,0x301,0x868a,0x3f5a,0x1f68,0xe663,0x3a9,0x313,0x342,0x868a,0x3f5c,0x1f69,0xe663,0x3a9,0x314, -0x342,0x868a,0x3f5e,0xe622,0x3b1,0x300,0x868a,0x3f64,0xe622,0x3b7,0x300,0x868a,0x3f84,0xe622,0x3c9,0x300, -0x868a,0x3fe4,0xe622,0x3b1,0x342,0x868a,0x3f6e,0xe622,0x3b7,0x342,0x868a,0x3f8e,0xe622,0x3c9,0x342,0x868a, -0x3fee,0xe622,0x41,0x300,0xe622,0x41,0x301,0xe622,0x41,0x303,0xe622,0x45,0x300,0xe622,0x45,0x301, -0xe622,0x45,0x308,0xe622,0x49,0x300,0xe622,0x49,0x301,0xe622,0x49,0x302,0xe622,0x4e,0x303,0xe622, -0x4f,0x300,0xe622,0x4f,0x301,0xe622,0x55,0x300,0xe622,0x55,0x301,0xe622,0x55,0x302,0xe622,0x59, -0x301,0xe622,0x61,0x300,0xe622,0x61,0x301,0xe622,0x61,0x303,0xe622,0x65,0x300,0xe622,0x65,0x301, -0xe622,0x65,0x308,0xe622,0x69,0x300,0xe622,0x69,0x301,0xe622,0x69,0x302,0xe622,0x6e,0x303,0xe622, -0x6f,0x300,0xe622,0x6f,0x301,0xe622,0x75,0x300,0xe622,0x75,0x301,0xe622,0x75,0x302,0xe622,0x79, -0x301,0xe622,0x79,0x308,0xe622,0x41,0x304,0xe622,0x61,0x304,0xca02,0x41,0x328,0xca02,0x61,0x328, -0xe622,0x43,0x301,0xe622,0x63,0x301,0xe622,0x43,0x302,0xe622,0x63,0x302,0xe622,0x43,0x307,0xe622, -0x63,0x307,0xe622,0x43,0x30c,0xe622,0x63,0x30c,0xe622,0x44,0x30c,0xe622,0x64,0x30c,0xe622,0x45, -0x306,0xe622,0x65,0x306,0xe622,0x45,0x307,0xe622,0x65,0x307,0xca02,0x45,0x328,0xca02,0x65,0x328, -0xe622,0x45,0x30c,0xe622,0x65,0x30c,0xe622,0x47,0x302,0xe622,0x67,0x302,0xe622,0x47,0x306,0xe622, -0x67,0x306,0xe622,0x47,0x307,0xe622,0x67,0x307,0xca02,0x47,0x327,0xca02,0x67,0x327,0xe622,0x48, -0x302,0xe622,0x68,0x302,0xe622,0x49,0x303,0xe622,0x69,0x303,0xe622,0x49,0x304,0xe622,0x69,0x304, -0xe622,0x49,0x306,0xe622,0x69,0x306,0xca02,0x49,0x328,0xca02,0x69,0x328,0xe622,0x49,0x307,0xe602, -0x4a,0x302,0xe602,0x6a,0x302,0xca02,0x4b,0x327,0xca02,0x6b,0x327,0xe622,0x4c,0x301,0xe622,0x6c, -0x301,0xca02,0x4c,0x327,0xca02,0x6c,0x327,0xe622,0x4c,0x30c,0xe622,0x6c,0x30c,0xe622,0x4e,0x301, -0xe622,0x6e,0x301,0xca02,0x4e,0x327,0xca02,0x6e,0x327,0xe622,0x4e,0x30c,0xe622,0x6e,0x30c,0xe622, -0x4f,0x306,0xe622,0x6f,0x306,0xe622,0x4f,0x30b,0xe622,0x6f,0x30b,0xe622,0x52,0x301,0xe622,0x72, -0x301,0xca02,0x52,0x327,0xca02,0x72,0x327,0xe622,0x52,0x30c,0xe622,0x72,0x30c,0xe622,0x53,0x302, -0xe622,0x73,0x302,0xca02,0x53,0x327,0xca02,0x73,0x327,0xca02,0x54,0x327,0xca02,0x74,0x327,0xe622, -0x54,0x30c,0xe622,0x74,0x30c,0xe622,0x55,0x306,0xe622,0x75,0x306,0xe622,0x55,0x30a,0xe622,0x75, -0x30a,0xe622,0x55,0x30b,0xe622,0x75,0x30b,0xca02,0x55,0x328,0xca02,0x75,0x328,0xe622,0x57,0x302, -0xe622,0x77,0x302,0xe622,0x59,0x302,0xe622,0x79,0x302,0xe622,0x59,0x308,0xe622,0x5a,0x301,0xe622, -0x7a,0x301,0xe622,0x5a,0x307,0xe622,0x7a,0x307,0xe622,0x5a,0x30c,0xe622,0x7a,0x30c,0xe622,0x41, -0x30c,0xe622,0x61,0x30c,0xe622,0x49,0x30c,0xe622,0x69,0x30c,0xe622,0x4f,0x30c,0xe622,0x6f,0x30c, -0xe622,0x55,0x30c,0xe622,0x75,0x30c,0xdc,0xe663,0x55,0x308,0x304,0xfc,0xe663,0x75,0x308,0x304, -0xdc,0xe663,0x55,0x308,0x301,0xfc,0xe663,0x75,0x308,0x301,0xdc,0xe663,0x55,0x308,0x30c,0xfc, -0xe663,0x75,0x308,0x30c,0xdc,0xe663,0x55,0x308,0x300,0xfc,0xe663,0x75,0x308,0x300,0xc4,0xe663, -0x41,0x308,0x304,0xe4,0xe663,0x61,0x308,0x304,0x226,0xe663,0x41,0x307,0x304,0x227,0xe663,0x61, -0x307,0x304,0xe602,0xc6,0x304,0xe602,0xe6,0x304,0xe622,0x47,0x30c,0xe622,0x67,0x30c,0xe622,0x4b, -0x30c,0xe622,0x6b,0x30c,0x1ea,0xe643,0x4f,0x328,0x304,0x1eb,0xe643,0x6f,0x328,0x304,0xe602,0x1b7, -0x30c,0xe602,0x292,0x30c,0xe602,0x6a,0x30c,0xe622,0x47,0x301,0xe622,0x67,0x301,0xe622,0x4e,0x300, -0xe622,0x6e,0x300,0xc5,0xe663,0x41,0x30a,0x301,0xe5,0xe663,0x61,0x30a,0x301,0xe602,0xc6,0x301, -0xe602,0xe6,0x301,0xe602,0xd8,0x301,0xe602,0xf8,0x301,0xe622,0x41,0x30f,0xe622,0x61,0x30f,0xe622, -0x41,0x311,0xe622,0x61,0x311,0xe622,0x45,0x30f,0xe622,0x65,0x30f,0xe622,0x45,0x311,0xe622,0x65, -0x311,0xe622,0x49,0x30f,0xe622,0x69,0x30f,0xe622,0x49,0x311,0xe622,0x69,0x311,0xe622,0x4f,0x30f, -0xe622,0x6f,0x30f,0xe622,0x4f,0x311,0xe622,0x6f,0x311,0xe622,0x52,0x30f,0xe622,0x72,0x30f,0xe622, -0x52,0x311,0xe622,0x72,0x311,0xe622,0x55,0x30f,0xe622,0x75,0x30f,0xe622,0x55,0x311,0xe622,0x75, -0x311,0xdc22,0x53,0x326,0xdc22,0x73,0x326,0xdc22,0x54,0x326,0xdc22,0x74,0x326,0xe622,0x48,0x30c, -0xe622,0x68,0x30c,0xd6,0xe663,0x4f,0x308,0x304,0xf6,0xe663,0x6f,0x308,0x304,0xd5,0xe663,0x4f, -0x303,0x304,0xf5,0xe663,0x6f,0x303,0x304,0x22e,0xe663,0x4f,0x307,0x304,0x22f,0xe663,0x6f,0x307, -0x304,0xe622,0x59,0x304,0xe622,0x79,0x304,0xe602,0xa8,0x301,0xe602,0x391,0x301,0xe602,0x395,0x301, -0xe602,0x397,0x301,0xe602,0x399,0x301,0xe602,0x39f,0x301,0xe602,0x3a5,0x301,0xe602,0x3a9,0x301,0x3ca, -0xe643,0x3b9,0x308,0x301,0xe602,0x399,0x308,0xe602,0x3a5,0x308,0xe602,0x3b5,0x301,0xe602,0x3b9,0x301, -0x3cb,0xe643,0x3c5,0x308,0x301,0xe602,0x3bf,0x301,0xe602,0x3c5,0x301,0xe602,0x3d2,0x301,0xe602,0x3d2, -0x308,0xe602,0x415,0x300,0xe602,0x415,0x308,0xe602,0x413,0x301,0xe602,0x406,0x308,0xe602,0x41a,0x301, -0xe602,0x418,0x300,0xe602,0x423,0x306,0xe602,0x418,0x306,0xe602,0x438,0x306,0xe602,0x435,0x300,0xe602, -0x435,0x308,0xe602,0x433,0x301,0xe602,0x456,0x308,0xe602,0x43a,0x301,0xe602,0x438,0x300,0xe602,0x443, -0x306,0xe602,0x474,0x30f,0xe602,0x475,0x30f,0xe602,0x416,0x306,0xe602,0x436,0x306,0xe602,0x410,0x306, -0xe602,0x430,0x306,0xe602,0x410,0x308,0xe602,0x430,0x308,0xe602,0x415,0x306,0xe602,0x435,0x306,0xe602, -0x4d8,0x308,0xe602,0x4d9,0x308,0xe602,0x416,0x308,0xe602,0x436,0x308,0xe602,0x417,0x308,0xe602,0x437, -0x308,0xe602,0x418,0x304,0xe602,0x438,0x304,0xe602,0x418,0x308,0xe602,0x438,0x308,0xe602,0x41e,0x308, -0xe602,0x43e,0x308,0xe602,0x4e8,0x308,0xe602,0x4e9,0x308,0xe602,0x42d,0x308,0xe602,0x44d,0x308,0xe602, -0x423,0x304,0xe602,0x443,0x304,0xe602,0x423,0x308,0xe602,0x443,0x308,0xe602,0x423,0x30b,0xe602,0x443, -0x30b,0xe602,0x427,0x308,0xe602,0x447,0x308,0xe602,0x42b,0x308,0xe602,0x44b,0x308,0xe622,0x627,0x653, -0xe622,0x627,0x654,0xe602,0x648,0x654,0xdc02,0x627,0x655,0xe602,0x64a,0x654,0xe602,0x6d5,0x654,0xe602, -0x6c1,0x654,0xe602,0x6d2,0x654,0x702,0x928,0x93c,0x702,0x930,0x93c,0x702,0x933,0x93c,2,0x9c7, -0x9be,2,0x9c7,0x9d7,2,0xb47,0xb56,2,0xb47,0xb3e,2,0xb47,0xb57,2,0xb92,0xbd7, -2,0xbc6,0xbbe,2,0xbc7,0xbbe,2,0xbc6,0xbd7,0x5b02,0xc46,0xc56,2,0xcbf,0xcd5,2, -0xcc6,0xcd5,2,0xcc6,0xcd6,0xcca,0x43,0xcc6,0xcc2,0xcd5,2,0xd46,0xd3e,2,0xd47,0xd3e, -2,0xd46,0xd57,0x902,0xdd9,0xdca,0xddc,0x943,0xdd9,0xdcf,0xdca,2,0xdd9,0xddf,2,0x1025, -0x102e,2,0x1b05,0x1b35,2,0x1b07,0x1b35,2,0x1b09,0x1b35,2,0x1b0b,0x1b35,2,0x1b0d,0x1b35, -2,0x1b11,0x1b35,2,0x1b3a,0x1b35,2,0x1b3c,0x1b35,2,0x1b3e,0x1b35,2,0x1b3f,0x1b35,2, -0x1b42,0x1b35,0xdc22,0x41,0x325,0xdc22,0x61,0x325,0xe622,0x42,0x307,0xe622,0x62,0x307,0xdc02,0x42, -0x323,0xdc02,0x62,0x323,0xdc02,0x42,0x331,0xdc02,0x62,0x331,0xc7,0xe643,0x43,0x327,0x301,0xe7, -0xe643,0x63,0x327,0x301,0xe622,0x44,0x307,0xe622,0x64,0x307,0xdc22,0x44,0x323,0xdc22,0x64,0x323, -0xdc22,0x44,0x331,0xdc22,0x64,0x331,0xca02,0x44,0x327,0xca02,0x64,0x327,0xdc22,0x44,0x32d,0xdc22, -0x64,0x32d,0x112,0xe663,0x45,0x304,0x300,0x113,0xe663,0x65,0x304,0x300,0x112,0xe663,0x45,0x304, -0x301,0x113,0xe663,0x65,0x304,0x301,0xdc22,0x45,0x32d,0xdc22,0x65,0x32d,0xdc22,0x45,0x330,0xdc22, -0x65,0x330,0x228,0xe643,0x45,0x327,0x306,0x229,0xe643,0x65,0x327,0x306,0xe602,0x46,0x307,0xe602, -0x66,0x307,0xe622,0x47,0x304,0xe622,0x67,0x304,0xe622,0x48,0x307,0xe622,0x68,0x307,0xdc22,0x48, -0x323,0xdc22,0x68,0x323,0xe622,0x48,0x308,0xe622,0x68,0x308,0xca02,0x48,0x327,0xca02,0x68,0x327, -0xdc22,0x48,0x32e,0xdc22,0x68,0x32e,0xdc22,0x49,0x330,0xdc22,0x69,0x330,0xcf,0xe663,0x49,0x308, -0x301,0xef,0xe663,0x69,0x308,0x301,0xe622,0x4b,0x301,0xe622,0x6b,0x301,0xdc22,0x4b,0x323,0xdc22, -0x6b,0x323,0xdc22,0x4b,0x331,0xdc22,0x6b,0x331,0x1e36,0xe663,0x4c,0x323,0x304,0x1e37,0xe663,0x6c, -0x323,0x304,0xdc22,0x4c,0x331,0xdc22,0x6c,0x331,0xdc22,0x4c,0x32d,0xdc22,0x6c,0x32d,0xe622,0x4d, -0x301,0xe622,0x6d,0x301,0xe622,0x4d,0x307,0xe622,0x6d,0x307,0xdc02,0x4d,0x323,0xdc02,0x6d,0x323, -0xe622,0x4e,0x307,0xe622,0x6e,0x307,0xdc22,0x4e,0x323,0xdc22,0x6e,0x323,0xdc22,0x4e,0x331,0xdc22, -0x6e,0x331,0xdc22,0x4e,0x32d,0xdc22,0x6e,0x32d,0xd5,0xe663,0x4f,0x303,0x301,0xf5,0xe663,0x6f, -0x303,0x301,0xd5,0xe663,0x4f,0x303,0x308,0xf5,0xe663,0x6f,0x303,0x308,0x14c,0xe663,0x4f,0x304, -0x300,0x14d,0xe663,0x6f,0x304,0x300,0x14c,0xe663,0x4f,0x304,0x301,0x14d,0xe663,0x6f,0x304,0x301, -0xe602,0x50,0x301,0xe602,0x70,0x301,0xe602,0x50,0x307,0xe602,0x70,0x307,0xe622,0x52,0x307,0xe622, -0x72,0x307,0x1e5a,0xe663,0x52,0x323,0x304,0x1e5b,0xe663,0x72,0x323,0x304,0xdc22,0x52,0x331,0xdc22, -0x72,0x331,0xe622,0x53,0x307,0xe622,0x73,0x307,0x15a,0xe663,0x53,0x301,0x307,0x15b,0xe663,0x73, -0x301,0x307,0x160,0xe663,0x53,0x30c,0x307,0x161,0xe663,0x73,0x30c,0x307,0x1e62,0xe663,0x53,0x323, -0x307,0x1e63,0xe663,0x73,0x323,0x307,0xe622,0x54,0x307,0xe622,0x74,0x307,0xdc22,0x54,0x323,0xdc22, -0x74,0x323,0xdc22,0x54,0x331,0xdc22,0x74,0x331,0xdc22,0x54,0x32d,0xdc22,0x74,0x32d,0xdc22,0x55, -0x324,0xdc22,0x75,0x324,0xdc22,0x55,0x330,0xdc22,0x75,0x330,0xdc22,0x55,0x32d,0xdc22,0x75,0x32d, -0x168,0xe663,0x55,0x303,0x301,0x169,0xe663,0x75,0x303,0x301,0x16a,0xe663,0x55,0x304,0x308,0x16b, -0xe663,0x75,0x304,0x308,0xe622,0x56,0x303,0xe622,0x76,0x303,0xdc02,0x56,0x323,0xdc02,0x76,0x323, -0xe622,0x57,0x300,0xe622,0x77,0x300,0xe622,0x57,0x301,0xe622,0x77,0x301,0xe622,0x57,0x308,0xe622, -0x77,0x308,0xe622,0x57,0x307,0xe622,0x77,0x307,0xdc02,0x57,0x323,0xdc02,0x77,0x323,0xe602,0x58, -0x307,0xe602,0x78,0x307,0xe602,0x58,0x308,0xe602,0x78,0x308,0xe622,0x59,0x307,0xe622,0x79,0x307, -0xe622,0x5a,0x302,0xe622,0x7a,0x302,0xdc02,0x5a,0x323,0xdc02,0x7a,0x323,0xdc02,0x5a,0x331,0xdc02, -0x7a,0x331,0xdc22,0x68,0x331,0xe622,0x74,0x308,0xe622,0x77,0x30a,0xe622,0x79,0x30a,0xe602,0x17f, -0x307,0xe622,0x41,0x309,0xe622,0x61,0x309,0xc2,0xe663,0x41,0x302,0x301,0xe2,0xe663,0x61,0x302, -0x301,0xc2,0xe663,0x41,0x302,0x300,0xe2,0xe663,0x61,0x302,0x300,0xc2,0xe663,0x41,0x302,0x309, -0xe2,0xe663,0x61,0x302,0x309,0xc2,0xe663,0x41,0x302,0x303,0xe2,0xe663,0x61,0x302,0x303,0x1ea0, -0xe663,0x41,0x323,0x302,0x1ea1,0xe663,0x61,0x323,0x302,0x102,0xe663,0x41,0x306,0x301,0x103,0xe663, -0x61,0x306,0x301,0x102,0xe663,0x41,0x306,0x300,0x103,0xe663,0x61,0x306,0x300,0x102,0xe663,0x41, -0x306,0x309,0x103,0xe663,0x61,0x306,0x309,0x102,0xe663,0x41,0x306,0x303,0x103,0xe663,0x61,0x306, -0x303,0x1ea0,0xe663,0x41,0x323,0x306,0x1ea1,0xe663,0x61,0x323,0x306,0xe622,0x45,0x309,0xe622,0x65, -0x309,0xe622,0x45,0x303,0xe622,0x65,0x303,0xca,0xe663,0x45,0x302,0x301,0xea,0xe663,0x65,0x302, -0x301,0xca,0xe663,0x45,0x302,0x300,0xea,0xe663,0x65,0x302,0x300,0xca,0xe663,0x45,0x302,0x309, -0xea,0xe663,0x65,0x302,0x309,0xca,0xe663,0x45,0x302,0x303,0xea,0xe663,0x65,0x302,0x303,0x1eb8, -0xe663,0x45,0x323,0x302,0x1eb9,0xe663,0x65,0x323,0x302,0xe622,0x49,0x309,0xe622,0x69,0x309,0xdc22, -0x49,0x323,0xdc22,0x69,0x323,0xe622,0x4f,0x309,0xe622,0x6f,0x309,0xd4,0xe663,0x4f,0x302,0x301, -0xf4,0xe663,0x6f,0x302,0x301,0xd4,0xe663,0x4f,0x302,0x300,0xf4,0xe663,0x6f,0x302,0x300,0xd4, -0xe663,0x4f,0x302,0x309,0xf4,0xe663,0x6f,0x302,0x309,0xd4,0xe663,0x4f,0x302,0x303,0xf4,0xe663, -0x6f,0x302,0x303,0x1ecc,0xe663,0x4f,0x323,0x302,0x1ecd,0xe663,0x6f,0x323,0x302,0x1a0,0xe663,0x4f, -0x31b,0x301,0x1a1,0xe663,0x6f,0x31b,0x301,0x1a0,0xe663,0x4f,0x31b,0x300,0x1a1,0xe663,0x6f,0x31b, -0x300,0x1a0,0xe663,0x4f,0x31b,0x309,0x1a1,0xe663,0x6f,0x31b,0x309,0x1a0,0xe663,0x4f,0x31b,0x303, -0x1a1,0xe663,0x6f,0x31b,0x303,0x1a0,0xdc63,0x4f,0x31b,0x323,0x1a1,0xdc63,0x6f,0x31b,0x323,0xdc22, -0x55,0x323,0xdc22,0x75,0x323,0xe622,0x55,0x309,0xe622,0x75,0x309,0x1af,0xe663,0x55,0x31b,0x301, -0x1b0,0xe663,0x75,0x31b,0x301,0x1af,0xe663,0x55,0x31b,0x300,0x1b0,0xe663,0x75,0x31b,0x300,0x1af, -0xe663,0x55,0x31b,0x309,0x1b0,0xe663,0x75,0x31b,0x309,0x1af,0xe663,0x55,0x31b,0x303,0x1b0,0xe663, -0x75,0x31b,0x303,0x1af,0xdc63,0x55,0x31b,0x323,0x1b0,0xdc63,0x75,0x31b,0x323,0xe622,0x59,0x300, -0xe622,0x79,0x300,0xdc02,0x59,0x323,0xdc02,0x79,0x323,0xe622,0x59,0x309,0xe622,0x79,0x309,0xe622, -0x59,0x303,0xe622,0x79,0x303,0x1f10,0xe643,0x3b5,0x313,0x300,0x1f11,0xe643,0x3b5,0x314,0x300,0x1f10, -0xe643,0x3b5,0x313,0x301,0x1f11,0xe643,0x3b5,0x314,0x301,0x1f18,0xe643,0x395,0x313,0x300,0x1f19,0xe643, -0x395,0x314,0x300,0x1f18,0xe643,0x395,0x313,0x301,0x1f19,0xe643,0x395,0x314,0x301,0x1f30,0xe643,0x3b9, -0x313,0x300,0x1f31,0xe643,0x3b9,0x314,0x300,0x1f30,0xe643,0x3b9,0x313,0x301,0x1f31,0xe643,0x3b9,0x314, -0x301,0x1f30,0xe643,0x3b9,0x313,0x342,0x1f31,0xe643,0x3b9,0x314,0x342,0x1f38,0xe643,0x399,0x313,0x300, -0x1f39,0xe643,0x399,0x314,0x300,0x1f38,0xe643,0x399,0x313,0x301,0x1f39,0xe643,0x399,0x314,0x301,0x1f38, -0xe643,0x399,0x313,0x342,0x1f39,0xe643,0x399,0x314,0x342,0x1f40,0xe643,0x3bf,0x313,0x300,0x1f41,0xe643, -0x3bf,0x314,0x300,0x1f40,0xe643,0x3bf,0x313,0x301,0x1f41,0xe643,0x3bf,0x314,0x301,0x1f48,0xe643,0x39f, -0x313,0x300,0x1f49,0xe643,0x39f,0x314,0x300,0x1f48,0xe643,0x39f,0x313,0x301,0x1f49,0xe643,0x39f,0x314, -0x301,0x1f50,0xe643,0x3c5,0x313,0x300,0x1f51,0xe643,0x3c5,0x314,0x300,0x1f50,0xe643,0x3c5,0x313,0x301, -0x1f51,0xe643,0x3c5,0x314,0x301,0x1f50,0xe643,0x3c5,0x313,0x342,0x1f51,0xe643,0x3c5,0x314,0x342,0x1f59, -0xe643,0x3a5,0x314,0x300,0x1f59,0xe643,0x3a5,0x314,0x301,0x1f59,0xe643,0x3a5,0x314,0x342,0xe602,0x3b5, -0x300,0xe602,0x3b9,0x300,0xe602,0x3bf,0x300,0xe602,0x3c5,0x300,0x1f00,0xf063,0x3b1,0x313,0x345,0x1f01, -0xf063,0x3b1,0x314,0x345,0x1f02,0x345,2,0xf044,0x3b1,0x313,0x300,0x345,0x1f03,0x345,2,0xf044, -0x3b1,0x314,0x300,0x345,0x1f04,0x345,2,0xf044,0x3b1,0x313,0x301,0x345,0x1f05,0x345,2,0xf044, -0x3b1,0x314,0x301,0x345,0x1f06,0x345,2,0xf044,0x3b1,0x313,0x342,0x345,0x1f07,0x345,2,0xf044, -0x3b1,0x314,0x342,0x345,0x1f08,0xf063,0x391,0x313,0x345,0x1f09,0xf063,0x391,0x314,0x345,0x1f0a,0x345, -2,0xf044,0x391,0x313,0x300,0x345,0x1f0b,0x345,2,0xf044,0x391,0x314,0x300,0x345,0x1f0c,0x345, -2,0xf044,0x391,0x313,0x301,0x345,0x1f0d,0x345,2,0xf044,0x391,0x314,0x301,0x345,0x1f0e,0x345, -2,0xf044,0x391,0x313,0x342,0x345,0x1f0f,0x345,2,0xf044,0x391,0x314,0x342,0x345,0x1f20,0xf063, -0x3b7,0x313,0x345,0x1f21,0xf063,0x3b7,0x314,0x345,0x1f22,0x345,2,0xf044,0x3b7,0x313,0x300,0x345, -0x1f23,0x345,2,0xf044,0x3b7,0x314,0x300,0x345,0x1f24,0x345,2,0xf044,0x3b7,0x313,0x301,0x345, -0x1f25,0x345,2,0xf044,0x3b7,0x314,0x301,0x345,0x1f26,0x345,2,0xf044,0x3b7,0x313,0x342,0x345, -0x1f27,0x345,2,0xf044,0x3b7,0x314,0x342,0x345,0x1f28,0xf063,0x397,0x313,0x345,0x1f29,0xf063,0x397, -0x314,0x345,0x1f2a,0x345,2,0xf044,0x397,0x313,0x300,0x345,0x1f2b,0x345,2,0xf044,0x397,0x314, -0x300,0x345,0x1f2c,0x345,2,0xf044,0x397,0x313,0x301,0x345,0x1f2d,0x345,2,0xf044,0x397,0x314, -0x301,0x345,0x1f2e,0x345,2,0xf044,0x397,0x313,0x342,0x345,0x1f2f,0x345,2,0xf044,0x397,0x314, -0x342,0x345,0x1f60,0xf063,0x3c9,0x313,0x345,0x1f61,0xf063,0x3c9,0x314,0x345,0x1f62,0x345,2,0xf044, -0x3c9,0x313,0x300,0x345,0x1f63,0x345,2,0xf044,0x3c9,0x314,0x300,0x345,0x1f64,0x345,2,0xf044, -0x3c9,0x313,0x301,0x345,0x1f65,0x345,2,0xf044,0x3c9,0x314,0x301,0x345,0x1f66,0x345,2,0xf044, -0x3c9,0x313,0x342,0x345,0x1f67,0x345,2,0xf044,0x3c9,0x314,0x342,0x345,0x1f68,0xf063,0x3a9,0x313, -0x345,0x1f69,0xf063,0x3a9,0x314,0x345,0x1f6a,0x345,2,0xf044,0x3a9,0x313,0x300,0x345,0x1f6b,0x345, -2,0xf044,0x3a9,0x314,0x300,0x345,0x1f6c,0x345,2,0xf044,0x3a9,0x313,0x301,0x345,0x1f6d,0x345, -2,0xf044,0x3a9,0x314,0x301,0x345,0x1f6e,0x345,2,0xf044,0x3a9,0x313,0x342,0x345,0x1f6f,0x345, -2,0xf044,0x3a9,0x314,0x342,0x345,0xe602,0x3b1,0x306,0xe602,0x3b1,0x304,0x1f70,0xf043,0x3b1,0x300, -0x345,0xf022,0x3b1,0x345,0x3ac,0xf043,0x3b1,0x301,0x345,0x1fb6,0xf043,0x3b1,0x342,0x345,0xe602,0x391, -0x306,0xe602,0x391,0x304,0xe602,0x391,0x300,0xf022,0x391,0x345,0xe602,0xa8,0x342,0x1f74,0xf043,0x3b7, -0x300,0x345,0xf022,0x3b7,0x345,0x3ae,0xf043,0x3b7,0x301,0x345,0x1fc6,0xf043,0x3b7,0x342,0x345,0xe602, -0x395,0x300,0xe602,0x397,0x300,0xf022,0x397,0x345,0xe602,0x1fbf,0x300,0xe602,0x1fbf,0x301,0xe602,0x1fbf, -0x342,0xe602,0x3b9,0x306,0xe602,0x3b9,0x304,0x3ca,0xe643,0x3b9,0x308,0x300,0xe602,0x3b9,0x342,0x3ca, -0xe643,0x3b9,0x308,0x342,0xe602,0x399,0x306,0xe602,0x399,0x304,0xe602,0x399,0x300,0xe602,0x1ffe,0x300, -0xe602,0x1ffe,0x301,0xe602,0x1ffe,0x342,0xe602,0x3c5,0x306,0xe602,0x3c5,0x304,0x3cb,0xe643,0x3c5,0x308, -0x300,0xe602,0x3c1,0x313,0xe602,0x3c1,0x314,0xe602,0x3c5,0x342,0x3cb,0xe643,0x3c5,0x308,0x342,0xe602, -0x3a5,0x306,0xe602,0x3a5,0x304,0xe602,0x3a5,0x300,0xe602,0x3a1,0x314,0xe602,0xa8,0x300,0x1f7c,0xf043, -0x3c9,0x300,0x345,0xf022,0x3c9,0x345,0x3ce,0xf043,0x3c9,0x301,0x345,0x1ff6,0xf043,0x3c9,0x342,0x345, -0xe602,0x39f,0x300,0xe602,0x3a9,0x300,0xf022,0x3a9,0x345,0x102,0x2190,0x338,0x102,0x2192,0x338,0x102, -0x2194,0x338,0x102,0x21d0,0x338,0x102,0x21d4,0x338,0x102,0x21d2,0x338,0x102,0x2203,0x338,0x102,0x2208, -0x338,0x102,0x220b,0x338,0x102,0x2223,0x338,0x102,0x2225,0x338,0x102,0x223c,0x338,0x102,0x2243,0x338, -0x102,0x2245,0x338,0x102,0x2248,0x338,0x102,0x3d,0x338,0x102,0x2261,0x338,0x102,0x224d,0x338,0x102, -0x3c,0x338,0x102,0x3e,0x338,0x102,0x2264,0x338,0x102,0x2265,0x338,0x102,0x2272,0x338,0x102,0x2273, -0x338,0x102,0x2276,0x338,0x102,0x2277,0x338,0x102,0x227a,0x338,0x102,0x227b,0x338,0x102,0x2282,0x338, -0x102,0x2283,0x338,0x102,0x2286,0x338,0x102,0x2287,0x338,0x102,0x22a2,0x338,0x102,0x22a8,0x338,0x102, -0x22a9,0x338,0x102,0x22ab,0x338,0x102,0x227c,0x338,0x102,0x227d,0x338,0x102,0x2291,0x338,0x102,0x2292, -0x338,0x102,0x22b2,0x338,0x102,0x22b3,0x338,0x102,0x22b4,0x338,0x102,0x22b5,0x338,0x802,0x304b,0x3099, -0x802,0x304d,0x3099,0x802,0x304f,0x3099,0x802,0x3051,0x3099,0x802,0x3053,0x3099,0x802,0x3055,0x3099,0x802, -0x3057,0x3099,0x802,0x3059,0x3099,0x802,0x305b,0x3099,0x802,0x305d,0x3099,0x802,0x305f,0x3099,0x802,0x3061, -0x3099,0x802,0x3064,0x3099,0x802,0x3066,0x3099,0x802,0x3068,0x3099,0x802,0x306f,0x3099,0x802,0x306f,0x309a, -0x802,0x3072,0x3099,0x802,0x3072,0x309a,0x802,0x3075,0x3099,0x802,0x3075,0x309a,0x802,0x3078,0x3099,0x802, -0x3078,0x309a,0x802,0x307b,0x3099,0x802,0x307b,0x309a,0x802,0x3046,0x3099,0x802,0x309d,0x3099,0x802,0x30ab, -0x3099,0x802,0x30ad,0x3099,0x802,0x30af,0x3099,0x802,0x30b1,0x3099,0x802,0x30b3,0x3099,0x802,0x30b5,0x3099, -0x802,0x30b7,0x3099,0x802,0x30b9,0x3099,0x802,0x30bb,0x3099,0x802,0x30bd,0x3099,0x802,0x30bf,0x3099,0x802, -0x30c1,0x3099,0x802,0x30c4,0x3099,0x802,0x30c6,0x3099,0x802,0x30c8,0x3099,0x802,0x30cf,0x3099,0x802,0x30cf, -0x309a,0x802,0x30d2,0x3099,0x802,0x30d2,0x309a,0x802,0x30d5,0x3099,0x802,0x30d5,0x309a,0x802,0x30d8,0x3099, -0x802,0x30d8,0x309a,0x802,0x30db,0x3099,0x802,0x30db,0x309a,0x802,0x30a6,0x3099,0x802,0x30ef,0x3099,0x802, -0x30f0,0x3099,0x802,0x30f1,0x3099,0x802,0x30f2,0x3099,0x802,0x30fd,0x3099,0x704,0xd804,0xdc99,0xd804,0xdcba, -0x704,0xd804,0xdc9b,0xd804,0xdcba,0x704,0xd804,0xdca5,0xd804,0xdcba,4,0xd804,0xdd31,0xd804,0xdd27,4, -0xd804,0xdd32,0xd804,0xdd27,4,0xd804,0xdf47,0xd804,0xdf3e,4,0xd804,0xdf47,0xd804,0xdf57,4,0xd805, -0xdcb9,0xd805,0xdcba,4,0xd805,0xdcb9,0xd805,0xdcb0,4,0xd805,0xdcb9,0xd805,0xdcbd,4,0xd805,0xddb8, -0xd805,0xddaf,4,0xd805,0xddb9,0xd805,0xddaf,0xe6e6,0xe6a1,0x300,0xe6e6,0xe6a1,0x301,0xe6e6,0xe6a1,0x313, -0xe6e6,0xe6a2,0x308,0x301,1,0x2b9,1,0x3b,1,0xb7,0x702,0x915,0x93c,0x702,0x916,0x93c, -0x702,0x917,0x93c,0x702,0x91c,0x93c,0x702,0x921,0x93c,0x702,0x922,0x93c,0x702,0x92b,0x93c,0x702, -0x92f,0x93c,0x702,0x9a1,0x9bc,0x702,0x9a2,0x9bc,0x702,0x9af,0x9bc,0x702,0xa32,0xa3c,0x702,0xa38, -0xa3c,0x702,0xa16,0xa3c,0x702,0xa17,0xa3c,0x702,0xa1c,0xa3c,0x702,0xa2b,0xa3c,0x702,0xb21,0xb3c, -0x702,0xb22,0xb3c,2,0xf42,0xfb7,2,0xf4c,0xfb7,2,0xf51,0xfb7,2,0xf56,0xfb7,2, -0xf5b,0xfb7,2,0xf40,0xfb5,0x8100,0x82a2,0xf71,0xf72,0x8100,0x84a2,0xf71,0xf74,0x8202,0xfb2,0xf80, -0x8202,0xfb3,0xf80,0x8100,0x82a2,0xf71,0xf80,2,0xf92,0xfb7,2,0xf9c,0xfb7,2,0xfa1,0xfb7, -2,0xfa6,0xfb7,2,0xfab,0xfb7,2,0xf90,0xfb5,0x3ac,0xe662,0x3b1,0x301,0x3ad,0xe642,0x3b5, -0x301,0x3ae,0xe662,0x3b7,0x301,0x3af,0xe642,0x3b9,0x301,0x3cc,0xe642,0x3bf,0x301,0x3cd,0xe642,0x3c5, -0x301,0x3ce,0xe662,0x3c9,0x301,0x386,0xe642,0x391,0x301,0x21,0x3b9,0x388,0xe642,0x395,0x301,0x389, -0xe642,0x397,0x301,0x390,1,0xe643,0x3b9,0x308,0x301,0x38a,0xe642,0x399,0x301,0x3b0,1,0xe643, -0x3c5,0x308,0x301,0x38e,0xe642,0x3a5,0x301,0x385,0xe642,0xa8,0x301,1,0x60,0x38c,0xe642,0x39f, -0x301,0x38f,0xe642,0x3a9,0x301,1,0xb4,0x21,0x3a9,0x21,0x4b,0xc5,0xe662,0x41,0x30a,1, -0x3008,1,0x3009,0x102,0x2add,0x338,1,0x8c48,1,0x66f4,1,0x8eca,1,0x8cc8,1,0x6ed1, -1,0x4e32,1,0x53e5,1,0x9f9c,1,0x5951,1,0x91d1,1,0x5587,1,0x5948,1,0x61f6, -1,0x7669,1,0x7f85,1,0x863f,1,0x87ba,1,0x88f8,1,0x908f,1,0x6a02,1,0x6d1b, -1,0x70d9,1,0x73de,1,0x843d,1,0x916a,1,0x99f1,1,0x4e82,1,0x5375,1,0x6b04, -1,0x721b,1,0x862d,1,0x9e1e,1,0x5d50,1,0x6feb,1,0x85cd,1,0x8964,1,0x62c9, -1,0x81d8,1,0x881f,1,0x5eca,1,0x6717,1,0x6d6a,1,0x72fc,1,0x90ce,1,0x4f86, -1,0x51b7,1,0x52de,1,0x64c4,1,0x6ad3,1,0x7210,1,0x76e7,1,0x8001,1,0x8606, -1,0x865c,1,0x8def,1,0x9732,1,0x9b6f,1,0x9dfa,1,0x788c,1,0x797f,1,0x7da0, -1,0x83c9,1,0x9304,1,0x9e7f,1,0x8ad6,1,0x58df,1,0x5f04,1,0x7c60,1,0x807e, -1,0x7262,1,0x78ca,1,0x8cc2,1,0x96f7,1,0x58d8,1,0x5c62,1,0x6a13,1,0x6dda, -1,0x6f0f,1,0x7d2f,1,0x7e37,1,0x964b,1,0x52d2,1,0x808b,1,0x51dc,1,0x51cc, -1,0x7a1c,1,0x7dbe,1,0x83f1,1,0x9675,1,0x8b80,1,0x62cf,1,0x8afe,1,0x4e39, -1,0x5be7,1,0x6012,1,0x7387,1,0x7570,1,0x5317,1,0x78fb,1,0x4fbf,1,0x5fa9, -1,0x4e0d,1,0x6ccc,1,0x6578,1,0x7d22,1,0x53c3,1,0x585e,1,0x7701,1,0x8449, -1,0x8aaa,1,0x6bba,1,0x8fb0,1,0x6c88,1,0x62fe,1,0x82e5,1,0x63a0,1,0x7565, -1,0x4eae,1,0x5169,1,0x51c9,1,0x6881,1,0x7ce7,1,0x826f,1,0x8ad2,1,0x91cf, -1,0x52f5,1,0x5442,1,0x5973,1,0x5eec,1,0x65c5,1,0x6ffe,1,0x792a,1,0x95ad, -1,0x9a6a,1,0x9e97,1,0x9ece,1,0x529b,1,0x66c6,1,0x6b77,1,0x8f62,1,0x5e74, -1,0x6190,1,0x6200,1,0x649a,1,0x6f23,1,0x7149,1,0x7489,1,0x79ca,1,0x7df4, -1,0x806f,1,0x8f26,1,0x84ee,1,0x9023,1,0x934a,1,0x5217,1,0x52a3,1,0x54bd, -1,0x70c8,1,0x88c2,1,0x5ec9,1,0x5ff5,1,0x637b,1,0x6bae,1,0x7c3e,1,0x7375, -1,0x4ee4,1,0x56f9,1,0x5dba,1,0x601c,1,0x73b2,1,0x7469,1,0x7f9a,1,0x8046, -1,0x9234,1,0x96f6,1,0x9748,1,0x9818,1,0x4f8b,1,0x79ae,1,0x91b4,1,0x96b8, -1,0x60e1,1,0x4e86,1,0x50da,1,0x5bee,1,0x5c3f,1,0x6599,1,0x71ce,1,0x7642, -1,0x84fc,1,0x907c,1,0x9f8d,1,0x6688,1,0x962e,1,0x5289,1,0x677b,1,0x67f3, -1,0x6d41,1,0x6e9c,1,0x7409,1,0x7559,1,0x786b,1,0x7d10,1,0x985e,1,0x516d, -1,0x622e,1,0x9678,1,0x502b,1,0x5d19,1,0x6dea,1,0x8f2a,1,0x5f8b,1,0x6144, -1,0x6817,1,0x9686,1,0x5229,1,0x540f,1,0x5c65,1,0x6613,1,0x674e,1,0x68a8, -1,0x6ce5,1,0x7406,1,0x75e2,1,0x7f79,1,0x88cf,1,0x88e1,1,0x91cc,1,0x96e2, -1,0x533f,1,0x6eba,1,0x541d,1,0x71d0,1,0x7498,1,0x85fa,1,0x96a3,1,0x9c57, -1,0x9e9f,1,0x6797,1,0x6dcb,1,0x81e8,1,0x7acb,1,0x7b20,1,0x7c92,1,0x72c0, -1,0x7099,1,0x8b58,1,0x4ec0,1,0x8336,1,0x523a,1,0x5207,1,0x5ea6,1,0x62d3, -1,0x7cd6,1,0x5b85,1,0x6d1e,1,0x66b4,1,0x8f3b,1,0x884c,1,0x964d,1,0x898b, -1,0x5ed3,1,0x5140,1,0x55c0,1,0x585a,1,0x6674,1,0x51de,1,0x732a,1,0x76ca, -1,0x793c,1,0x795e,1,0x7965,1,0x798f,1,0x9756,1,0x7cbe,1,0x7fbd,1,0x8612, -1,0x8af8,1,0x9038,1,0x90fd,1,0x98ef,1,0x98fc,1,0x9928,1,0x9db4,1,0x90de, -1,0x96b7,1,0x4fae,1,0x50e7,1,0x514d,1,0x52c9,1,0x52e4,1,0x5351,1,0x559d, -1,0x5606,1,0x5668,1,0x5840,1,0x58a8,1,0x5c64,1,0x5c6e,1,0x6094,1,0x6168, -1,0x618e,1,0x61f2,1,0x654f,1,0x65e2,1,0x6691,1,0x6885,1,0x6d77,1,0x6e1a, -1,0x6f22,1,0x716e,1,0x722b,1,0x7422,1,0x7891,1,0x793e,1,0x7949,1,0x7948, -1,0x7950,1,0x7956,1,0x795d,1,0x798d,1,0x798e,1,0x7a40,1,0x7a81,1,0x7bc0, -1,0x7e09,1,0x7e41,1,0x7f72,1,0x8005,1,0x81ed,1,0x8279,1,0x8457,1,0x8910, -1,0x8996,1,0x8b01,1,0x8b39,1,0x8cd3,1,0x8d08,1,0x8fb6,1,0x96e3,1,0x97ff, -1,0x983b,1,0x6075,2,0xd850,0xdeee,1,0x8218,1,0x4e26,1,0x51b5,1,0x5168,1, -0x4f80,1,0x5145,1,0x5180,1,0x52c7,1,0x52fa,1,0x5555,1,0x5599,1,0x55e2,1, -0x58b3,1,0x5944,1,0x5954,1,0x5a62,1,0x5b28,1,0x5ed2,1,0x5ed9,1,0x5f69,1, -0x5fad,1,0x60d8,1,0x614e,1,0x6108,1,0x6160,1,0x6234,1,0x63c4,1,0x641c,1, -0x6452,1,0x6556,1,0x671b,1,0x6756,1,0x6b79,1,0x6edb,1,0x6ecb,1,0x701e,1, -0x77a7,1,0x7235,1,0x72af,1,0x7471,1,0x7506,1,0x753b,1,0x761d,1,0x761f,1, -0x76db,1,0x76f4,1,0x774a,1,0x7740,1,0x78cc,1,0x7ab1,1,0x7c7b,1,0x7d5b,1, -0x7f3e,1,0x8352,1,0x83ef,1,0x8779,1,0x8941,1,0x8986,1,0x8abf,1,0x8acb,1, -0x8aed,1,0x8b8a,1,0x8f38,1,0x9072,1,0x9199,1,0x9276,1,0x967c,1,0x97db,1, -0x980b,1,0x9b12,2,0xd84a,0xdc4a,2,0xd84a,0xdc44,2,0xd84c,0xdfd5,1,0x3b9d,1,0x4018, -1,0x4039,2,0xd854,0xde49,2,0xd857,0xdcd0,2,0xd85f,0xded3,1,0x9f43,1,0x9f8e,0xe02, -0x5d9,0x5b4,0x1102,0x5f2,0x5b7,0x1802,0x5e9,0x5c1,0x1902,0x5e9,0x5c2,0xfb49,0x1843,0x5e9,0x5bc,0x5c1, -0xfb49,0x1943,0x5e9,0x5bc,0x5c2,0x1102,0x5d0,0x5b7,0x1202,0x5d0,0x5b8,0x1502,0x5d0,0x5bc,0x1502,0x5d1, -0x5bc,0x1502,0x5d2,0x5bc,0x1502,0x5d3,0x5bc,0x1502,0x5d4,0x5bc,0x1502,0x5d5,0x5bc,0x1502,0x5d6,0x5bc, -0x1502,0x5d8,0x5bc,0x1502,0x5d9,0x5bc,0x1502,0x5da,0x5bc,0x1502,0x5db,0x5bc,0x1502,0x5dc,0x5bc,0x1502, -0x5de,0x5bc,0x1502,0x5e0,0x5bc,0x1502,0x5e1,0x5bc,0x1502,0x5e3,0x5bc,0x1502,0x5e4,0x5bc,0x1502,0x5e6, -0x5bc,0x1502,0x5e7,0x5bc,0x1502,0x5e8,0x5bc,0x1502,0x5e9,0x5bc,0x1502,0x5ea,0x5bc,0x1302,0x5d5,0x5b9, -0x1702,0x5d1,0x5bf,0x1702,0x5db,0x5bf,0x1702,0x5e4,0x5bf,0xd804,0xd834,0xdd57,0xd834,0xdd65,0xd804,0xd834, -0xdd58,0xd834,0xdd65,0xd834,0xdd5f,0xd834,0xdd6e,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6e,0xd834, -0xdd5f,0xd834,0xdd6f,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6f,0xd834,0xdd5f,0xd834,0xdd70,4, -0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd70,0xd834,0xdd5f,0xd834,0xdd71,4,0xd846,0xd834,0xdd58,0xd834, -0xdd65,0xd834,0xdd71,0xd834,0xdd5f,0xd834,0xdd72,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd72,0xd804, -0xd834,0xddb9,0xd834,0xdd65,0xd804,0xd834,0xddba,0xd834,0xdd65,0xd834,0xddbb,0xd834,0xdd6e,4,0xd846,0xd834, -0xddb9,0xd834,0xdd65,0xd834,0xdd6e,0xd834,0xddbc,0xd834,0xdd6e,4,0xd846,0xd834,0xddba,0xd834,0xdd65,0xd834, -0xdd6e,0xd834,0xddbb,0xd834,0xdd6f,4,0xd846,0xd834,0xddb9,0xd834,0xdd65,0xd834,0xdd6f,0xd834,0xddbc,0xd834, -0xdd6f,4,0xd846,0xd834,0xddba,0xd834,0xdd65,0xd834,0xdd6f,1,0x4e3d,1,0x4e38,1,0x4e41,2, -0xd840,0xdd22,1,0x4f60,1,0x4fbb,1,0x5002,1,0x507a,1,0x5099,1,0x50cf,1,0x349e, -2,0xd841,0xde3a,1,0x5154,1,0x5164,1,0x5177,2,0xd841,0xdd1c,1,0x34b9,1,0x5167, -1,0x518d,2,0xd841,0xdd4b,1,0x5197,1,0x51a4,1,0x4ecc,1,0x51ac,2,0xd864,0xdddf, -1,0x51f5,1,0x5203,1,0x34df,1,0x523b,1,0x5246,1,0x5272,1,0x5277,1,0x3515, -1,0x5305,1,0x5306,1,0x5349,1,0x535a,1,0x5373,1,0x537d,1,0x537f,2,0xd842, -0xde2c,1,0x7070,1,0x53ca,1,0x53df,2,0xd842,0xdf63,1,0x53eb,1,0x53f1,1,0x5406, -1,0x549e,1,0x5438,1,0x5448,1,0x5468,1,0x54a2,1,0x54f6,1,0x5510,1,0x5553, -1,0x5563,1,0x5584,1,0x55ab,1,0x55b3,1,0x55c2,1,0x5716,1,0x5717,1,0x5651, -1,0x5674,1,0x58ee,1,0x57ce,1,0x57f4,1,0x580d,1,0x578b,1,0x5832,1,0x5831, -1,0x58ac,2,0xd845,0xdce4,1,0x58f2,1,0x58f7,1,0x5906,1,0x591a,1,0x5922,1, -0x5962,2,0xd845,0xdea8,2,0xd845,0xdeea,1,0x59ec,1,0x5a1b,1,0x5a27,1,0x59d8,1, -0x5a66,1,0x36ee,1,0x36fc,1,0x5b08,1,0x5b3e,2,0xd846,0xddc8,1,0x5bc3,1,0x5bd8, -1,0x5bf3,2,0xd846,0xdf18,1,0x5bff,1,0x5c06,1,0x5f53,1,0x5c22,1,0x3781,1, -0x5c60,1,0x5cc0,1,0x5c8d,2,0xd847,0xdde4,1,0x5d43,2,0xd847,0xdde6,1,0x5d6e,1, -0x5d6b,1,0x5d7c,1,0x5de1,1,0x5de2,1,0x382f,1,0x5dfd,1,0x5e28,1,0x5e3d,1, -0x5e69,1,0x3862,2,0xd848,0xdd83,1,0x387c,1,0x5eb0,1,0x5eb3,1,0x5eb6,2,0xd868, -0xdf92,1,0x5efe,2,0xd848,0xdf31,1,0x8201,1,0x5f22,1,0x38c7,2,0xd84c,0xdeb8,2, -0xd858,0xddda,1,0x5f62,1,0x5f6b,1,0x38e3,1,0x5f9a,1,0x5fcd,1,0x5fd7,1,0x5ff9, -1,0x6081,1,0x393a,1,0x391c,2,0xd849,0xded4,1,0x60c7,1,0x6148,1,0x614c,1, -0x617a,1,0x61b2,1,0x61a4,1,0x61af,1,0x61de,1,0x6210,1,0x621b,1,0x625d,1, -0x62b1,1,0x62d4,1,0x6350,2,0xd84a,0xdf0c,1,0x633d,1,0x62fc,1,0x6368,1,0x6383, -1,0x63e4,2,0xd84a,0xdff1,1,0x6422,1,0x63c5,1,0x63a9,1,0x3a2e,1,0x6469,1, -0x647e,1,0x649d,1,0x6477,1,0x3a6c,1,0x656c,2,0xd84c,0xdc0a,1,0x65e3,1,0x66f8, -1,0x6649,1,0x3b19,1,0x3b08,1,0x3ae4,1,0x5192,1,0x5195,1,0x6700,1,0x669c, -1,0x80ad,1,0x43d9,1,0x6721,1,0x675e,1,0x6753,2,0xd84c,0xdfc3,1,0x3b49,1, -0x67fa,1,0x6785,1,0x6852,2,0xd84d,0xdc6d,1,0x688e,1,0x681f,1,0x6914,1,0x6942, -1,0x69a3,1,0x69ea,1,0x6aa8,2,0xd84d,0xdea3,1,0x6adb,1,0x3c18,1,0x6b21,2, -0xd84e,0xdca7,1,0x6b54,1,0x3c4e,1,0x6b72,1,0x6b9f,1,0x6bbb,2,0xd84e,0xde8d,2, -0xd847,0xdd0b,2,0xd84e,0xdefa,1,0x6c4e,2,0xd84f,0xdcbc,1,0x6cbf,1,0x6ccd,1,0x6c67, -1,0x6d16,1,0x6d3e,1,0x6d69,1,0x6d78,1,0x6d85,2,0xd84f,0xdd1e,1,0x6d34,1, -0x6e2f,1,0x6e6e,1,0x3d33,1,0x6ec7,2,0xd84f,0xded1,1,0x6df9,1,0x6f6e,2,0xd84f, -0xdf5e,2,0xd84f,0xdf8e,1,0x6fc6,1,0x7039,1,0x701b,1,0x3d96,1,0x704a,1,0x707d, -1,0x7077,1,0x70ad,2,0xd841,0xdd25,1,0x7145,2,0xd850,0xde63,1,0x719c,2,0xd850, -0xdfab,1,0x7228,1,0x7250,2,0xd851,0xde08,1,0x7280,1,0x7295,2,0xd851,0xdf35,2, -0xd852,0xdc14,1,0x737a,1,0x738b,1,0x3eac,1,0x73a5,1,0x3eb8,1,0x7447,1,0x745c, -1,0x7485,1,0x74ca,1,0x3f1b,1,0x7524,2,0xd853,0xdc36,1,0x753e,2,0xd853,0xdc92, -2,0xd848,0xdd9f,1,0x7610,2,0xd853,0xdfa1,2,0xd853,0xdfb8,2,0xd854,0xdc44,1,0x3ffc, -1,0x4008,2,0xd854,0xdcf3,2,0xd854,0xdcf2,2,0xd854,0xdd19,2,0xd854,0xdd33,1,0x771e, -1,0x771f,1,0x778b,1,0x4046,1,0x4096,2,0xd855,0xdc1d,1,0x784e,1,0x40e3,2, -0xd855,0xde26,2,0xd855,0xde9a,2,0xd855,0xdec5,1,0x79eb,1,0x412f,1,0x7a4a,1,0x7a4f, -2,0xd856,0xdd7c,2,0xd856,0xdea7,1,0x7aee,1,0x4202,2,0xd856,0xdfab,1,0x7bc6,1, -0x7bc9,1,0x4227,2,0xd857,0xdc80,1,0x7cd2,1,0x42a0,1,0x7ce8,1,0x7ce3,1,0x7d00, -2,0xd857,0xdf86,1,0x7d63,1,0x4301,1,0x7dc7,1,0x7e02,1,0x7e45,1,0x4334,2, -0xd858,0xde28,2,0xd858,0xde47,1,0x4359,2,0xd858,0xded9,1,0x7f7a,2,0xd858,0xdf3e,1, -0x7f95,1,0x7ffa,2,0xd859,0xdcda,2,0xd859,0xdd23,1,0x8060,2,0xd859,0xdda8,1,0x8070, -2,0xd84c,0xdf5f,1,0x43d5,1,0x80b2,1,0x8103,1,0x440b,1,0x813e,1,0x5ab5,2, -0xd859,0xdfa7,2,0xd859,0xdfb5,2,0xd84c,0xdf93,2,0xd84c,0xdf9c,1,0x8204,1,0x8f9e,1, -0x446b,1,0x8291,1,0x828b,1,0x829d,1,0x52b3,1,0x82b1,1,0x82b3,1,0x82bd,1, -0x82e6,2,0xd85a,0xdf3c,1,0x831d,1,0x8363,1,0x83ad,1,0x8323,1,0x83bd,1,0x83e7, -1,0x8353,1,0x83ca,1,0x83cc,1,0x83dc,2,0xd85b,0xdc36,2,0xd85b,0xdd6b,2,0xd85b, -0xdcd5,1,0x452b,1,0x84f1,1,0x84f3,1,0x8516,2,0xd85c,0xdfca,1,0x8564,2,0xd85b, -0xdf2c,1,0x455d,1,0x4561,2,0xd85b,0xdfb1,2,0xd85c,0xdcd2,1,0x456b,1,0x8650,1, -0x8667,1,0x8669,1,0x86a9,1,0x8688,1,0x870e,1,0x86e2,1,0x8728,1,0x876b,1, -0x8786,1,0x45d7,1,0x87e1,1,0x8801,1,0x45f9,1,0x8860,1,0x8863,2,0xd85d,0xde67, -1,0x88d7,1,0x88de,1,0x4635,1,0x88fa,1,0x34bb,2,0xd85e,0xdcae,2,0xd85e,0xdd66, -1,0x46be,1,0x46c7,1,0x8aa0,1,0x8c55,2,0xd85f,0xdca8,1,0x8cab,1,0x8cc1,1, -0x8d1b,1,0x8d77,2,0xd85f,0xdf2f,2,0xd842,0xdc04,1,0x8dcb,1,0x8dbc,1,0x8df0,2, -0xd842,0xdcde,1,0x8ed4,2,0xd861,0xddd2,2,0xd861,0xdded,1,0x9094,1,0x90f1,1,0x9111, -2,0xd861,0xdf2e,1,0x911b,1,0x9238,1,0x92d7,1,0x92d8,1,0x927c,1,0x93f9,1, -0x9415,2,0xd862,0xdffa,1,0x958b,1,0x4995,1,0x95b7,2,0xd863,0xdd77,1,0x49e6,1, -0x96c3,1,0x5db2,1,0x9723,2,0xd864,0xdd45,2,0xd864,0xde1a,1,0x4a6e,1,0x4a76,1, -0x97e0,2,0xd865,0xdc0a,1,0x4ab2,2,0xd865,0xdc96,1,0x9829,2,0xd865,0xddb6,1,0x98e2, -1,0x4b33,1,0x9929,1,0x99a7,1,0x99c2,1,0x99fe,1,0x4bce,2,0xd866,0xdf30,1, -0x9c40,1,0x9cfd,1,0x4cce,1,0x4ced,1,0x9d67,2,0xd868,0xdcce,1,0x4cf8,2,0xd868, -0xdd05,2,0xd868,0xde0e,2,0xd868,0xde91,1,0x9ebb,1,0x4d56,1,0x9ef9,1,0x9efe,1, -0x9f05,1,0x9f0f,1,0x9f16,1,0x9f3b,2,0xd869,0xde00 +0x2c02,0x2978,0x348b,0x2e82,0x2976,0xb48b,0x2f42,0x297c,0xb48b,0x6bc2,0x2b74,0xb48b,0x6bc2,0x2b76,2,0xe602, +0x41,0x302,0x600,0x3d4c,0x602,0x3d48,0x606,0x3d54,0x8612,0x3d50,0xe602,0x41,0x308,0x8608,0x3bc,0xe602, +0x41,0x30a,0x8602,0x3f4,0xca02,0x43,0x327,0x8602,0x3c10,0xe602,0x45,0x302,0x600,0x3d80,0x602,0x3d7c, +0x606,0x3d88,0x8612,0x3d84,0xe602,0x49,0x308,0x8602,0x3c5c,0xe602,0x4f,0x302,0x600,0x3da4,0x602,0x3da0, +0x606,0x3dac,0x8612,0x3da8,0xe602,0x4f,0x303,0x602,0x3c98,0x608,0x458,0x8610,0x3c9c,0xe602,0x4f,0x308, +0x8608,0x454,0xe602,0x55,0x308,0x600,0x3b6,0x602,0x3ae,0x608,0x3aa,0x8618,0x3b2,0xe602,0x61,0x302, +0x600,0x3d4e,0x602,0x3d4a,0x606,0x3d56,0x8612,0x3d52,0xe602,0x61,0x308,0x8608,0x3be,0xe602,0x61,0x30a, +0x8602,0x3f6,0xca02,0x63,0x327,0x8602,0x3c12,0xe602,0x65,0x302,0x600,0x3d82,0x602,0x3d7e,0x606,0x3d8a, +0x8612,0x3d86,0xe602,0x69,0x308,0x8602,0x3c5e,0xe602,0x6f,0x302,0x600,0x3da6,0x602,0x3da2,0x606,0x3dae, +0x8612,0x3daa,0xe602,0x6f,0x303,0x602,0x3c9a,0x608,0x45a,0x8610,0x3c9e,0xe602,0x6f,0x308,0x8608,0x456, +0xe602,0x75,0x308,0x600,0x3b8,0x602,0x3b0,0x608,0x3ac,0x8618,0x3b4,0xe602,0x41,0x306,0x600,0x3d60, +0x602,0x3d5c,0x606,0x3d68,0x8612,0x3d64,0xe602,0x61,0x306,0x600,0x3d62,0x602,0x3d5e,0x606,0x3d6a,0x8612, +0x3d66,0xe602,0x45,0x304,0x600,0x3c28,0x8602,0x3c2c,0xe602,0x65,0x304,0x600,0x3c2a,0x8602,0x3c2e,0xe602, +0x4f,0x304,0x600,0x3ca0,0x8602,0x3ca4,0xe602,0x6f,0x304,0x600,0x3ca2,0x8602,0x3ca6,0xe602,0x53,0x301, +0x860e,0x3cc8,0xe602,0x73,0x301,0x860e,0x3cca,0xe602,0x53,0x30c,0x860e,0x3ccc,0xe602,0x73,0x30c,0x860e, +0x3cce,0xe602,0x55,0x303,0x8602,0x3cf0,0xe602,0x75,0x303,0x8602,0x3cf2,0xe602,0x55,0x304,0x8610,0x3cf4, +0xe602,0x75,0x304,0x8610,0x3cf6,0xd802,0x4f,0x31b,0x600,0x3db8,0x602,0x3db4,0x606,0x3dc0,0x612,0x3dbc, +0x8646,0x3dc4,0xd802,0x6f,0x31b,0x600,0x3dba,0x602,0x3db6,0x606,0x3dc2,0x612,0x3dbe,0x8646,0x3dc6,0xd802, +0x55,0x31b,0x600,0x3dd4,0x602,0x3dd0,0x606,0x3ddc,0x612,0x3dd8,0x8646,0x3de0,0xd802,0x75,0x31b,0x600, +0x3dd6,0x602,0x3dd2,0x606,0x3dde,0x612,0x3dda,0x8646,0x3de2,0xca02,0x4f,0x328,0x8608,0x3d8,0xca02,0x6f, +0x328,0x8608,0x3da,0xe602,0x41,0x307,0x8608,0x3c0,0xe602,0x61,0x307,0x8608,0x3c2,0xca02,0x45,0x327, +0x860c,0x3c38,0xca02,0x65,0x327,0x860c,0x3c3a,0xe602,0x4f,0x307,0x8608,0x460,0xe602,0x6f,0x307,0x8608, +0x462,0xe602,0x3b1,0x301,0x868a,0x3f68,0xe602,0x3b7,0x301,0x868a,0x3f88,0xe602,0x3b9,0x308,0x600,0x3fa4, +0x602,0x720,0x8684,0x3fae,0xe602,0x3c5,0x308,0x600,0x3fc4,0x602,0x760,0x8684,0x3fce,0xe602,0x3c9,0x301, +0x868a,0x3fe8,2,0xcc6,0xcc2,0x99aa,0x1996,2,0xdd9,0xdcf,0x9b94,0x1bba,0xdc02,0x4c,0x323,0x8608, +0x3c70,0xdc02,0x6c,0x323,0x8608,0x3c72,0xdc02,0x52,0x323,0x8608,0x3cb8,0xdc02,0x72,0x323,0x8608,0x3cba, +0xdc02,0x53,0x323,0x860e,0x3cd0,0xdc02,0x73,0x323,0x860e,0x3cd2,0xdc02,0x41,0x323,0x604,0x3d58,0x860c, +0x3d6c,0xdc02,0x61,0x323,0x604,0x3d5a,0x860c,0x3d6e,0xdc02,0x45,0x323,0x8604,0x3d8c,0xdc02,0x65,0x323, +0x8604,0x3d8e,0xdc02,0x4f,0x323,0x8604,0x3db0,0xdc02,0x6f,0x323,0x8604,0x3db2,0xe602,0x3b1,0x313,0x600, +0x3e05,0x602,0x3e09,0x684,0x3e0d,0x868a,0x3f00,0xe602,0x3b1,0x314,0x600,0x3e07,0x602,0x3e0b,0x684,0x3e0f, +0x868a,0x3f02,0x1f00,0xe643,0x3b1,0x313,0x300,0x868a,0x3f04,0x1f01,0xe643,0x3b1,0x314,0x300,0x868a,0x3f06, +0x1f00,0xe643,0x3b1,0x313,0x301,0x868a,0x3f08,0x1f01,0xe643,0x3b1,0x314,0x301,0x868a,0x3f0a,0x1f00,0xe643, +0x3b1,0x313,0x342,0x868a,0x3f0c,0x1f01,0xe643,0x3b1,0x314,0x342,0x868a,0x3f0e,0xe602,0x391,0x313,0x600, +0x3e15,0x602,0x3e19,0x684,0x3e1d,0x868a,0x3f10,0xe602,0x391,0x314,0x600,0x3e17,0x602,0x3e1b,0x684,0x3e1f, +0x868a,0x3f12,0x1f08,0xe643,0x391,0x313,0x300,0x868a,0x3f14,0x1f09,0xe643,0x391,0x314,0x300,0x868a,0x3f16, +0x1f08,0xe643,0x391,0x313,0x301,0x868a,0x3f18,0x1f09,0xe643,0x391,0x314,0x301,0x868a,0x3f1a,0x1f08,0xe643, +0x391,0x313,0x342,0x868a,0x3f1c,0x1f09,0xe643,0x391,0x314,0x342,0x868a,0x3f1e,0xe602,0x3b5,0x313,0x600, +0x3e24,0x8602,0x3e28,0xe602,0x3b5,0x314,0x600,0x3e26,0x8602,0x3e2a,0xe602,0x395,0x313,0x600,0x3e34,0x8602, +0x3e38,0xe602,0x395,0x314,0x600,0x3e36,0x8602,0x3e3a,0xe602,0x3b7,0x313,0x600,0x3e45,0x602,0x3e49,0x684, +0x3e4d,0x868a,0x3f20,0xe602,0x3b7,0x314,0x600,0x3e47,0x602,0x3e4b,0x684,0x3e4f,0x868a,0x3f22,0x1f20,0xe643, +0x3b7,0x313,0x300,0x868a,0x3f24,0x1f21,0xe643,0x3b7,0x314,0x300,0x868a,0x3f26,0x1f20,0xe643,0x3b7,0x313, +0x301,0x868a,0x3f28,0x1f21,0xe643,0x3b7,0x314,0x301,0x868a,0x3f2a,0x1f20,0xe643,0x3b7,0x313,0x342,0x868a, +0x3f2c,0x1f21,0xe643,0x3b7,0x314,0x342,0x868a,0x3f2e,0xe602,0x397,0x313,0x600,0x3e55,0x602,0x3e59,0x684, +0x3e5d,0x868a,0x3f30,0xe602,0x397,0x314,0x600,0x3e57,0x602,0x3e5b,0x684,0x3e5f,0x868a,0x3f32,0x1f28,0xe643, +0x397,0x313,0x300,0x868a,0x3f34,0x1f29,0xe643,0x397,0x314,0x300,0x868a,0x3f36,0x1f28,0xe643,0x397,0x313, +0x301,0x868a,0x3f38,0x1f29,0xe643,0x397,0x314,0x301,0x868a,0x3f3a,0x1f28,0xe643,0x397,0x313,0x342,0x868a, +0x3f3c,0x1f29,0xe643,0x397,0x314,0x342,0x868a,0x3f3e,0xe602,0x3b9,0x313,0x600,0x3e64,0x602,0x3e68,0x8684, +0x3e6c,0xe602,0x3b9,0x314,0x600,0x3e66,0x602,0x3e6a,0x8684,0x3e6e,0xe602,0x399,0x313,0x600,0x3e74,0x602, +0x3e78,0x8684,0x3e7c,0xe602,0x399,0x314,0x600,0x3e76,0x602,0x3e7a,0x8684,0x3e7e,0xe602,0x3bf,0x313,0x600, +0x3e84,0x8602,0x3e88,0xe602,0x3bf,0x314,0x600,0x3e86,0x8602,0x3e8a,0xe602,0x39f,0x313,0x600,0x3e94,0x8602, +0x3e98,0xe602,0x39f,0x314,0x600,0x3e96,0x8602,0x3e9a,0xe602,0x3c5,0x313,0x600,0x3ea4,0x602,0x3ea8,0x8684, +0x3eac,0xe602,0x3c5,0x314,0x600,0x3ea6,0x602,0x3eaa,0x8684,0x3eae,0xe602,0x3a5,0x314,0x600,0x3eb6,0x602, +0x3eba,0x8684,0x3ebe,0xe602,0x3c9,0x313,0x600,0x3ec5,0x602,0x3ec9,0x684,0x3ecd,0x868a,0x3f40,0xe602,0x3c9, +0x314,0x600,0x3ec7,0x602,0x3ecb,0x684,0x3ecf,0x868a,0x3f42,0x1f60,0xe643,0x3c9,0x313,0x300,0x868a,0x3f44, +0x1f61,0xe643,0x3c9,0x314,0x300,0x868a,0x3f46,0x1f60,0xe643,0x3c9,0x313,0x301,0x868a,0x3f48,0x1f61,0xe643, +0x3c9,0x314,0x301,0x868a,0x3f4a,0x1f60,0xe643,0x3c9,0x313,0x342,0x868a,0x3f4c,0x1f61,0xe643,0x3c9,0x314, +0x342,0x868a,0x3f4e,0xe602,0x3a9,0x313,0x600,0x3ed5,0x602,0x3ed9,0x684,0x3edd,0x868a,0x3f50,0xe602,0x3a9, +0x314,0x600,0x3ed7,0x602,0x3edb,0x684,0x3edf,0x868a,0x3f52,0x1f68,0xe643,0x3a9,0x313,0x300,0x868a,0x3f54, +0x1f69,0xe643,0x3a9,0x314,0x300,0x868a,0x3f56,0x1f68,0xe643,0x3a9,0x313,0x301,0x868a,0x3f58,0x1f69,0xe643, +0x3a9,0x314,0x301,0x868a,0x3f5a,0x1f68,0xe643,0x3a9,0x313,0x342,0x868a,0x3f5c,0x1f69,0xe643,0x3a9,0x314, +0x342,0x868a,0x3f5e,0xe602,0x3b1,0x300,0x868a,0x3f64,0xe602,0x3b7,0x300,0x868a,0x3f84,0xe602,0x3c9,0x300, +0x868a,0x3fe4,0xe602,0x3b1,0x342,0x868a,0x3f6e,0xe602,0x3b7,0x342,0x868a,0x3f8e,0xe602,0x3c9,0x342,0x868a, +0x3fee,3,0xe602,0x41,0x300,0xe602,0x41,0x301,0xe602,0x41,0x303,0xe602,0x45,0x300,0xe602,0x45, +0x301,0xe602,0x45,0x308,0xe602,0x49,0x300,0xe602,0x49,0x301,0xe602,0x49,0x302,0xe602,0x4e,0x303, +0xe602,0x4f,0x300,0xe602,0x4f,0x301,0xe602,0x55,0x300,0xe602,0x55,0x301,0xe602,0x55,0x302,0xe602, +0x59,0x301,0xe602,0x61,0x300,0xe602,0x61,0x301,0xe602,0x61,0x303,0xe602,0x65,0x300,0xe602,0x65, +0x301,0xe602,0x65,0x308,0xe602,0x69,0x300,0xe602,0x69,0x301,0xe602,0x69,0x302,0xe602,0x6e,0x303, +0xe602,0x6f,0x300,0xe602,0x6f,0x301,0xe602,0x75,0x300,0xe602,0x75,0x301,0xe602,0x75,0x302,0xe602, +0x79,0x301,0xe602,0x79,0x308,0xe602,0x41,0x304,0xe602,0x61,0x304,0xca02,0x41,0x328,0xca02,0x61, +0x328,0xe602,0x43,0x301,0xe602,0x63,0x301,0xe602,0x43,0x302,0xe602,0x63,0x302,0xe602,0x43,0x307, +0xe602,0x63,0x307,0xe602,0x43,0x30c,0xe602,0x63,0x30c,0xe602,0x44,0x30c,0xe602,0x64,0x30c,0xe602, +0x45,0x306,0xe602,0x65,0x306,0xe602,0x45,0x307,0xe602,0x65,0x307,0xca02,0x45,0x328,0xca02,0x65, +0x328,0xe602,0x45,0x30c,0xe602,0x65,0x30c,0xe602,0x47,0x302,0xe602,0x67,0x302,0xe602,0x47,0x306, +0xe602,0x67,0x306,0xe602,0x47,0x307,0xe602,0x67,0x307,0xca02,0x47,0x327,0xca02,0x67,0x327,0xe602, +0x48,0x302,0xe602,0x68,0x302,0xe602,0x49,0x303,0xe602,0x69,0x303,0xe602,0x49,0x304,0xe602,0x69, +0x304,0xe602,0x49,0x306,0xe602,0x69,0x306,0xca02,0x49,0x328,0xca02,0x69,0x328,0xe602,0x49,0x307, +0xe602,0x4a,0x302,0xe602,0x6a,0x302,0xca02,0x4b,0x327,0xca02,0x6b,0x327,0xe602,0x4c,0x301,0xe602, +0x6c,0x301,0xca02,0x4c,0x327,0xca02,0x6c,0x327,0xe602,0x4c,0x30c,0xe602,0x6c,0x30c,0xe602,0x4e, +0x301,0xe602,0x6e,0x301,0xca02,0x4e,0x327,0xca02,0x6e,0x327,0xe602,0x4e,0x30c,0xe602,0x6e,0x30c, +0xe602,0x4f,0x306,0xe602,0x6f,0x306,0xe602,0x4f,0x30b,0xe602,0x6f,0x30b,0xe602,0x52,0x301,0xe602, +0x72,0x301,0xca02,0x52,0x327,0xca02,0x72,0x327,0xe602,0x52,0x30c,0xe602,0x72,0x30c,0xe602,0x53, +0x302,0xe602,0x73,0x302,0xca02,0x53,0x327,0xca02,0x73,0x327,0xca02,0x54,0x327,0xca02,0x74,0x327, +0xe602,0x54,0x30c,0xe602,0x74,0x30c,0xe602,0x55,0x306,0xe602,0x75,0x306,0xe602,0x55,0x30a,0xe602, +0x75,0x30a,0xe602,0x55,0x30b,0xe602,0x75,0x30b,0xca02,0x55,0x328,0xca02,0x75,0x328,0xe602,0x57, +0x302,0xe602,0x77,0x302,0xe602,0x59,0x302,0xe602,0x79,0x302,0xe602,0x59,0x308,0xe602,0x5a,0x301, +0xe602,0x7a,0x301,0xe602,0x5a,0x307,0xe602,0x7a,0x307,0xe602,0x5a,0x30c,0xe602,0x7a,0x30c,0xe602, +0x41,0x30c,0xe602,0x61,0x30c,0xe602,0x49,0x30c,0xe602,0x69,0x30c,0xe602,0x4f,0x30c,0xe602,0x6f, +0x30c,0xe602,0x55,0x30c,0xe602,0x75,0x30c,0xdc,0xe643,0x55,0x308,0x304,0xfc,0xe643,0x75,0x308, +0x304,0xdc,0xe643,0x55,0x308,0x301,0xfc,0xe643,0x75,0x308,0x301,0xdc,0xe643,0x55,0x308,0x30c, +0xfc,0xe643,0x75,0x308,0x30c,0xdc,0xe643,0x55,0x308,0x300,0xfc,0xe643,0x75,0x308,0x300,0xc4, +0xe643,0x41,0x308,0x304,0xe4,0xe643,0x61,0x308,0x304,0x226,0xe643,0x41,0x307,0x304,0x227,0xe643, +0x61,0x307,0x304,0xe602,0xc6,0x304,0xe602,0xe6,0x304,0xe602,0x47,0x30c,0xe602,0x67,0x30c,0xe602, +0x4b,0x30c,0xe602,0x6b,0x30c,0x1ea,0xe643,0x4f,0x328,0x304,0x1eb,0xe643,0x6f,0x328,0x304,0xe602, +0x1b7,0x30c,0xe602,0x292,0x30c,0xe602,0x6a,0x30c,0xe602,0x47,0x301,0xe602,0x67,0x301,0xe602,0x4e, +0x300,0xe602,0x6e,0x300,0xc5,0xe643,0x41,0x30a,0x301,0xe5,0xe643,0x61,0x30a,0x301,0xe602,0xc6, +0x301,0xe602,0xe6,0x301,0xe602,0xd8,0x301,0xe602,0xf8,0x301,0xe602,0x41,0x30f,0xe602,0x61,0x30f, +0xe602,0x41,0x311,0xe602,0x61,0x311,0xe602,0x45,0x30f,0xe602,0x65,0x30f,0xe602,0x45,0x311,0xe602, +0x65,0x311,0xe602,0x49,0x30f,0xe602,0x69,0x30f,0xe602,0x49,0x311,0xe602,0x69,0x311,0xe602,0x4f, +0x30f,0xe602,0x6f,0x30f,0xe602,0x4f,0x311,0xe602,0x6f,0x311,0xe602,0x52,0x30f,0xe602,0x72,0x30f, +0xe602,0x52,0x311,0xe602,0x72,0x311,0xe602,0x55,0x30f,0xe602,0x75,0x30f,0xe602,0x55,0x311,0xe602, +0x75,0x311,0xdc02,0x53,0x326,0xdc02,0x73,0x326,0xdc02,0x54,0x326,0xdc02,0x74,0x326,0xe602,0x48, +0x30c,0xe602,0x68,0x30c,0xd6,0xe643,0x4f,0x308,0x304,0xf6,0xe643,0x6f,0x308,0x304,0xd5,0xe643, +0x4f,0x303,0x304,0xf5,0xe643,0x6f,0x303,0x304,0x22e,0xe643,0x4f,0x307,0x304,0x22f,0xe643,0x6f, +0x307,0x304,0xe602,0x59,0x304,0xe602,0x79,0x304,0xe602,0xa8,0x301,0xe602,0x391,0x301,0xe602,0x395, +0x301,0xe602,0x397,0x301,0xe602,0x399,0x301,0xe602,0x39f,0x301,0xe602,0x3a5,0x301,0xe602,0x3a9,0x301, +0x3ca,0xe643,0x3b9,0x308,0x301,0xe602,0x399,0x308,0xe602,0x3a5,0x308,0xe602,0x3b5,0x301,0xe602,0x3b9, +0x301,0x3cb,0xe643,0x3c5,0x308,0x301,0xe602,0x3bf,0x301,0xe602,0x3c5,0x301,0xe602,0x3d2,0x301,0xe602, +0x3d2,0x308,0xe602,0x415,0x300,0xe602,0x415,0x308,0xe602,0x413,0x301,0xe602,0x406,0x308,0xe602,0x41a, +0x301,0xe602,0x418,0x300,0xe602,0x423,0x306,0xe602,0x418,0x306,0xe602,0x438,0x306,0xe602,0x435,0x300, +0xe602,0x435,0x308,0xe602,0x433,0x301,0xe602,0x456,0x308,0xe602,0x43a,0x301,0xe602,0x438,0x300,0xe602, +0x443,0x306,0xe602,0x474,0x30f,0xe602,0x475,0x30f,0xe602,0x416,0x306,0xe602,0x436,0x306,0xe602,0x410, +0x306,0xe602,0x430,0x306,0xe602,0x410,0x308,0xe602,0x430,0x308,0xe602,0x415,0x306,0xe602,0x435,0x306, +0xe602,0x4d8,0x308,0xe602,0x4d9,0x308,0xe602,0x416,0x308,0xe602,0x436,0x308,0xe602,0x417,0x308,0xe602, +0x437,0x308,0xe602,0x418,0x304,0xe602,0x438,0x304,0xe602,0x418,0x308,0xe602,0x438,0x308,0xe602,0x41e, +0x308,0xe602,0x43e,0x308,0xe602,0x4e8,0x308,0xe602,0x4e9,0x308,0xe602,0x42d,0x308,0xe602,0x44d,0x308, +0xe602,0x423,0x304,0xe602,0x443,0x304,0xe602,0x423,0x308,0xe602,0x443,0x308,0xe602,0x423,0x30b,0xe602, +0x443,0x30b,0xe602,0x427,0x308,0xe602,0x447,0x308,0xe602,0x42b,0x308,0xe602,0x44b,0x308,0xe602,0x627, +0x653,0xe602,0x627,0x654,0xe602,0x648,0x654,0xdc02,0x627,0x655,0xe602,0x64a,0x654,0xe602,0x6d5,0x654, +0xe602,0x6c1,0x654,0xe602,0x6d2,0x654,0x702,0x928,0x93c,0x702,0x930,0x93c,0x702,0x933,0x93c,2, +0x9c7,0x9be,2,0x9c7,0x9d7,2,0xb47,0xb56,2,0xb47,0xb3e,2,0xb47,0xb57,2,0xb92, +0xbd7,2,0xbc6,0xbbe,2,0xbc7,0xbbe,2,0xbc6,0xbd7,0x5b02,0xc46,0xc56,2,0xcbf,0xcd5, +2,0xcc6,0xcd5,2,0xcc6,0xcd6,0xcca,0x43,0xcc6,0xcc2,0xcd5,2,0xd46,0xd3e,2,0xd47, +0xd3e,2,0xd46,0xd57,0x902,0xdd9,0xdca,0xddc,0x943,0xdd9,0xdcf,0xdca,2,0xdd9,0xddf,2, +0x1025,0x102e,2,0x1b05,0x1b35,2,0x1b07,0x1b35,2,0x1b09,0x1b35,2,0x1b0b,0x1b35,2,0x1b0d, +0x1b35,2,0x1b11,0x1b35,2,0x1b3a,0x1b35,2,0x1b3c,0x1b35,2,0x1b3e,0x1b35,2,0x1b3f,0x1b35, +2,0x1b42,0x1b35,0xdc02,0x41,0x325,0xdc02,0x61,0x325,0xe602,0x42,0x307,0xe602,0x62,0x307,0xdc02, +0x42,0x323,0xdc02,0x62,0x323,0xdc02,0x42,0x331,0xdc02,0x62,0x331,0xc7,0xe643,0x43,0x327,0x301, +0xe7,0xe643,0x63,0x327,0x301,0xe602,0x44,0x307,0xe602,0x64,0x307,0xdc02,0x44,0x323,0xdc02,0x64, +0x323,0xdc02,0x44,0x331,0xdc02,0x64,0x331,0xca02,0x44,0x327,0xca02,0x64,0x327,0xdc02,0x44,0x32d, +0xdc02,0x64,0x32d,0x112,0xe643,0x45,0x304,0x300,0x113,0xe643,0x65,0x304,0x300,0x112,0xe643,0x45, +0x304,0x301,0x113,0xe643,0x65,0x304,0x301,0xdc02,0x45,0x32d,0xdc02,0x65,0x32d,0xdc02,0x45,0x330, +0xdc02,0x65,0x330,0x228,0xe643,0x45,0x327,0x306,0x229,0xe643,0x65,0x327,0x306,0xe602,0x46,0x307, +0xe602,0x66,0x307,0xe602,0x47,0x304,0xe602,0x67,0x304,0xe602,0x48,0x307,0xe602,0x68,0x307,0xdc02, +0x48,0x323,0xdc02,0x68,0x323,0xe602,0x48,0x308,0xe602,0x68,0x308,0xca02,0x48,0x327,0xca02,0x68, +0x327,0xdc02,0x48,0x32e,0xdc02,0x68,0x32e,0xdc02,0x49,0x330,0xdc02,0x69,0x330,0xcf,0xe643,0x49, +0x308,0x301,0xef,0xe643,0x69,0x308,0x301,0xe602,0x4b,0x301,0xe602,0x6b,0x301,0xdc02,0x4b,0x323, +0xdc02,0x6b,0x323,0xdc02,0x4b,0x331,0xdc02,0x6b,0x331,0x1e36,0xe643,0x4c,0x323,0x304,0x1e37,0xe643, +0x6c,0x323,0x304,0xdc02,0x4c,0x331,0xdc02,0x6c,0x331,0xdc02,0x4c,0x32d,0xdc02,0x6c,0x32d,0xe602, +0x4d,0x301,0xe602,0x6d,0x301,0xe602,0x4d,0x307,0xe602,0x6d,0x307,0xdc02,0x4d,0x323,0xdc02,0x6d, +0x323,0xe602,0x4e,0x307,0xe602,0x6e,0x307,0xdc02,0x4e,0x323,0xdc02,0x6e,0x323,0xdc02,0x4e,0x331, +0xdc02,0x6e,0x331,0xdc02,0x4e,0x32d,0xdc02,0x6e,0x32d,0xd5,0xe643,0x4f,0x303,0x301,0xf5,0xe643, +0x6f,0x303,0x301,0xd5,0xe643,0x4f,0x303,0x308,0xf5,0xe643,0x6f,0x303,0x308,0x14c,0xe643,0x4f, +0x304,0x300,0x14d,0xe643,0x6f,0x304,0x300,0x14c,0xe643,0x4f,0x304,0x301,0x14d,0xe643,0x6f,0x304, +0x301,0xe602,0x50,0x301,0xe602,0x70,0x301,0xe602,0x50,0x307,0xe602,0x70,0x307,0xe602,0x52,0x307, +0xe602,0x72,0x307,0x1e5a,0xe643,0x52,0x323,0x304,0x1e5b,0xe643,0x72,0x323,0x304,0xdc02,0x52,0x331, +0xdc02,0x72,0x331,0xe602,0x53,0x307,0xe602,0x73,0x307,0x15a,0xe643,0x53,0x301,0x307,0x15b,0xe643, +0x73,0x301,0x307,0x160,0xe643,0x53,0x30c,0x307,0x161,0xe643,0x73,0x30c,0x307,0x1e62,0xe643,0x53, +0x323,0x307,0x1e63,0xe643,0x73,0x323,0x307,0xe602,0x54,0x307,0xe602,0x74,0x307,0xdc02,0x54,0x323, +0xdc02,0x74,0x323,0xdc02,0x54,0x331,0xdc02,0x74,0x331,0xdc02,0x54,0x32d,0xdc02,0x74,0x32d,0xdc02, +0x55,0x324,0xdc02,0x75,0x324,0xdc02,0x55,0x330,0xdc02,0x75,0x330,0xdc02,0x55,0x32d,0xdc02,0x75, +0x32d,0x168,0xe643,0x55,0x303,0x301,0x169,0xe643,0x75,0x303,0x301,0x16a,0xe643,0x55,0x304,0x308, +0x16b,0xe643,0x75,0x304,0x308,0xe602,0x56,0x303,0xe602,0x76,0x303,0xdc02,0x56,0x323,0xdc02,0x76, +0x323,0xe602,0x57,0x300,0xe602,0x77,0x300,0xe602,0x57,0x301,0xe602,0x77,0x301,0xe602,0x57,0x308, +0xe602,0x77,0x308,0xe602,0x57,0x307,0xe602,0x77,0x307,0xdc02,0x57,0x323,0xdc02,0x77,0x323,0xe602, +0x58,0x307,0xe602,0x78,0x307,0xe602,0x58,0x308,0xe602,0x78,0x308,0xe602,0x59,0x307,0xe602,0x79, +0x307,0xe602,0x5a,0x302,0xe602,0x7a,0x302,0xdc02,0x5a,0x323,0xdc02,0x7a,0x323,0xdc02,0x5a,0x331, +0xdc02,0x7a,0x331,0xdc02,0x68,0x331,0xe602,0x74,0x308,0xe602,0x77,0x30a,0xe602,0x79,0x30a,0xe602, +0x17f,0x307,0xe602,0x41,0x309,0xe602,0x61,0x309,0xc2,0xe643,0x41,0x302,0x301,0xe2,0xe643,0x61, +0x302,0x301,0xc2,0xe643,0x41,0x302,0x300,0xe2,0xe643,0x61,0x302,0x300,0xc2,0xe643,0x41,0x302, +0x309,0xe2,0xe643,0x61,0x302,0x309,0xc2,0xe643,0x41,0x302,0x303,0xe2,0xe643,0x61,0x302,0x303, +0x1ea0,0xe643,0x41,0x323,0x302,0x1ea1,0xe643,0x61,0x323,0x302,0x102,0xe643,0x41,0x306,0x301,0x103, +0xe643,0x61,0x306,0x301,0x102,0xe643,0x41,0x306,0x300,0x103,0xe643,0x61,0x306,0x300,0x102,0xe643, +0x41,0x306,0x309,0x103,0xe643,0x61,0x306,0x309,0x102,0xe643,0x41,0x306,0x303,0x103,0xe643,0x61, +0x306,0x303,0x1ea0,0xe643,0x41,0x323,0x306,0x1ea1,0xe643,0x61,0x323,0x306,0xe602,0x45,0x309,0xe602, +0x65,0x309,0xe602,0x45,0x303,0xe602,0x65,0x303,0xca,0xe643,0x45,0x302,0x301,0xea,0xe643,0x65, +0x302,0x301,0xca,0xe643,0x45,0x302,0x300,0xea,0xe643,0x65,0x302,0x300,0xca,0xe643,0x45,0x302, +0x309,0xea,0xe643,0x65,0x302,0x309,0xca,0xe643,0x45,0x302,0x303,0xea,0xe643,0x65,0x302,0x303, +0x1eb8,0xe643,0x45,0x323,0x302,0x1eb9,0xe643,0x65,0x323,0x302,0xe602,0x49,0x309,0xe602,0x69,0x309, +0xdc02,0x49,0x323,0xdc02,0x69,0x323,0xe602,0x4f,0x309,0xe602,0x6f,0x309,0xd4,0xe643,0x4f,0x302, +0x301,0xf4,0xe643,0x6f,0x302,0x301,0xd4,0xe643,0x4f,0x302,0x300,0xf4,0xe643,0x6f,0x302,0x300, +0xd4,0xe643,0x4f,0x302,0x309,0xf4,0xe643,0x6f,0x302,0x309,0xd4,0xe643,0x4f,0x302,0x303,0xf4, +0xe643,0x6f,0x302,0x303,0x1ecc,0xe643,0x4f,0x323,0x302,0x1ecd,0xe643,0x6f,0x323,0x302,0x1a0,0xe643, +0x4f,0x31b,0x301,0x1a1,0xe643,0x6f,0x31b,0x301,0x1a0,0xe643,0x4f,0x31b,0x300,0x1a1,0xe643,0x6f, +0x31b,0x300,0x1a0,0xe643,0x4f,0x31b,0x309,0x1a1,0xe643,0x6f,0x31b,0x309,0x1a0,0xe643,0x4f,0x31b, +0x303,0x1a1,0xe643,0x6f,0x31b,0x303,0x1a0,0xdc43,0x4f,0x31b,0x323,0x1a1,0xdc43,0x6f,0x31b,0x323, +0xdc02,0x55,0x323,0xdc02,0x75,0x323,0xe602,0x55,0x309,0xe602,0x75,0x309,0x1af,0xe643,0x55,0x31b, +0x301,0x1b0,0xe643,0x75,0x31b,0x301,0x1af,0xe643,0x55,0x31b,0x300,0x1b0,0xe643,0x75,0x31b,0x300, +0x1af,0xe643,0x55,0x31b,0x309,0x1b0,0xe643,0x75,0x31b,0x309,0x1af,0xe643,0x55,0x31b,0x303,0x1b0, +0xe643,0x75,0x31b,0x303,0x1af,0xdc43,0x55,0x31b,0x323,0x1b0,0xdc43,0x75,0x31b,0x323,0xe602,0x59, +0x300,0xe602,0x79,0x300,0xdc02,0x59,0x323,0xdc02,0x79,0x323,0xe602,0x59,0x309,0xe602,0x79,0x309, +0xe602,0x59,0x303,0xe602,0x79,0x303,0x1f10,0xe643,0x3b5,0x313,0x300,0x1f11,0xe643,0x3b5,0x314,0x300, +0x1f10,0xe643,0x3b5,0x313,0x301,0x1f11,0xe643,0x3b5,0x314,0x301,0x1f18,0xe643,0x395,0x313,0x300,0x1f19, +0xe643,0x395,0x314,0x300,0x1f18,0xe643,0x395,0x313,0x301,0x1f19,0xe643,0x395,0x314,0x301,0x1f30,0xe643, +0x3b9,0x313,0x300,0x1f31,0xe643,0x3b9,0x314,0x300,0x1f30,0xe643,0x3b9,0x313,0x301,0x1f31,0xe643,0x3b9, +0x314,0x301,0x1f30,0xe643,0x3b9,0x313,0x342,0x1f31,0xe643,0x3b9,0x314,0x342,0x1f38,0xe643,0x399,0x313, +0x300,0x1f39,0xe643,0x399,0x314,0x300,0x1f38,0xe643,0x399,0x313,0x301,0x1f39,0xe643,0x399,0x314,0x301, +0x1f38,0xe643,0x399,0x313,0x342,0x1f39,0xe643,0x399,0x314,0x342,0x1f40,0xe643,0x3bf,0x313,0x300,0x1f41, +0xe643,0x3bf,0x314,0x300,0x1f40,0xe643,0x3bf,0x313,0x301,0x1f41,0xe643,0x3bf,0x314,0x301,0x1f48,0xe643, +0x39f,0x313,0x300,0x1f49,0xe643,0x39f,0x314,0x300,0x1f48,0xe643,0x39f,0x313,0x301,0x1f49,0xe643,0x39f, +0x314,0x301,0x1f50,0xe643,0x3c5,0x313,0x300,0x1f51,0xe643,0x3c5,0x314,0x300,0x1f50,0xe643,0x3c5,0x313, +0x301,0x1f51,0xe643,0x3c5,0x314,0x301,0x1f50,0xe643,0x3c5,0x313,0x342,0x1f51,0xe643,0x3c5,0x314,0x342, +0x1f59,0xe643,0x3a5,0x314,0x300,0x1f59,0xe643,0x3a5,0x314,0x301,0x1f59,0xe643,0x3a5,0x314,0x342,0xe602, +0x3b5,0x300,0xe602,0x3b9,0x300,0xe602,0x3bf,0x300,0xe602,0x3c5,0x300,0x1f00,0xf043,0x3b1,0x313,0x345, +0x1f01,0xf043,0x3b1,0x314,0x345,0x1f02,0x345,2,0xf044,0x3b1,0x313,0x300,0x345,0x1f03,0x345,2, +0xf044,0x3b1,0x314,0x300,0x345,0x1f04,0x345,2,0xf044,0x3b1,0x313,0x301,0x345,0x1f05,0x345,2, +0xf044,0x3b1,0x314,0x301,0x345,0x1f06,0x345,2,0xf044,0x3b1,0x313,0x342,0x345,0x1f07,0x345,2, +0xf044,0x3b1,0x314,0x342,0x345,0x1f08,0xf043,0x391,0x313,0x345,0x1f09,0xf043,0x391,0x314,0x345,0x1f0a, +0x345,2,0xf044,0x391,0x313,0x300,0x345,0x1f0b,0x345,2,0xf044,0x391,0x314,0x300,0x345,0x1f0c, +0x345,2,0xf044,0x391,0x313,0x301,0x345,0x1f0d,0x345,2,0xf044,0x391,0x314,0x301,0x345,0x1f0e, +0x345,2,0xf044,0x391,0x313,0x342,0x345,0x1f0f,0x345,2,0xf044,0x391,0x314,0x342,0x345,0x1f20, +0xf043,0x3b7,0x313,0x345,0x1f21,0xf043,0x3b7,0x314,0x345,0x1f22,0x345,2,0xf044,0x3b7,0x313,0x300, +0x345,0x1f23,0x345,2,0xf044,0x3b7,0x314,0x300,0x345,0x1f24,0x345,2,0xf044,0x3b7,0x313,0x301, +0x345,0x1f25,0x345,2,0xf044,0x3b7,0x314,0x301,0x345,0x1f26,0x345,2,0xf044,0x3b7,0x313,0x342, +0x345,0x1f27,0x345,2,0xf044,0x3b7,0x314,0x342,0x345,0x1f28,0xf043,0x397,0x313,0x345,0x1f29,0xf043, +0x397,0x314,0x345,0x1f2a,0x345,2,0xf044,0x397,0x313,0x300,0x345,0x1f2b,0x345,2,0xf044,0x397, +0x314,0x300,0x345,0x1f2c,0x345,2,0xf044,0x397,0x313,0x301,0x345,0x1f2d,0x345,2,0xf044,0x397, +0x314,0x301,0x345,0x1f2e,0x345,2,0xf044,0x397,0x313,0x342,0x345,0x1f2f,0x345,2,0xf044,0x397, +0x314,0x342,0x345,0x1f60,0xf043,0x3c9,0x313,0x345,0x1f61,0xf043,0x3c9,0x314,0x345,0x1f62,0x345,2, +0xf044,0x3c9,0x313,0x300,0x345,0x1f63,0x345,2,0xf044,0x3c9,0x314,0x300,0x345,0x1f64,0x345,2, +0xf044,0x3c9,0x313,0x301,0x345,0x1f65,0x345,2,0xf044,0x3c9,0x314,0x301,0x345,0x1f66,0x345,2, +0xf044,0x3c9,0x313,0x342,0x345,0x1f67,0x345,2,0xf044,0x3c9,0x314,0x342,0x345,0x1f68,0xf043,0x3a9, +0x313,0x345,0x1f69,0xf043,0x3a9,0x314,0x345,0x1f6a,0x345,2,0xf044,0x3a9,0x313,0x300,0x345,0x1f6b, +0x345,2,0xf044,0x3a9,0x314,0x300,0x345,0x1f6c,0x345,2,0xf044,0x3a9,0x313,0x301,0x345,0x1f6d, +0x345,2,0xf044,0x3a9,0x314,0x301,0x345,0x1f6e,0x345,2,0xf044,0x3a9,0x313,0x342,0x345,0x1f6f, +0x345,2,0xf044,0x3a9,0x314,0x342,0x345,0xe602,0x3b1,0x306,0xe602,0x3b1,0x304,0x1f70,0xf043,0x3b1, +0x300,0x345,0xf002,0x3b1,0x345,0x3ac,0xf043,0x3b1,0x301,0x345,0x1fb6,0xf043,0x3b1,0x342,0x345,0xe602, +0x391,0x306,0xe602,0x391,0x304,0xe602,0x391,0x300,0xf002,0x391,0x345,0xe602,0xa8,0x342,0x1f74,0xf043, +0x3b7,0x300,0x345,0xf002,0x3b7,0x345,0x3ae,0xf043,0x3b7,0x301,0x345,0x1fc6,0xf043,0x3b7,0x342,0x345, +0xe602,0x395,0x300,0xe602,0x397,0x300,0xf002,0x397,0x345,0xe602,0x1fbf,0x300,0xe602,0x1fbf,0x301,0xe602, +0x1fbf,0x342,0xe602,0x3b9,0x306,0xe602,0x3b9,0x304,0x3ca,0xe643,0x3b9,0x308,0x300,0xe602,0x3b9,0x342, +0x3ca,0xe643,0x3b9,0x308,0x342,0xe602,0x399,0x306,0xe602,0x399,0x304,0xe602,0x399,0x300,0xe602,0x1ffe, +0x300,0xe602,0x1ffe,0x301,0xe602,0x1ffe,0x342,0xe602,0x3c5,0x306,0xe602,0x3c5,0x304,0x3cb,0xe643,0x3c5, +0x308,0x300,0xe602,0x3c1,0x313,0xe602,0x3c1,0x314,0xe602,0x3c5,0x342,0x3cb,0xe643,0x3c5,0x308,0x342, +0xe602,0x3a5,0x306,0xe602,0x3a5,0x304,0xe602,0x3a5,0x300,0xe602,0x3a1,0x314,0xe602,0xa8,0x300,0x1f7c, +0xf043,0x3c9,0x300,0x345,0xf002,0x3c9,0x345,0x3ce,0xf043,0x3c9,0x301,0x345,0x1ff6,0xf043,0x3c9,0x342, +0x345,0xe602,0x39f,0x300,0xe602,0x3a9,0x300,0xf002,0x3a9,0x345,0x102,0x2190,0x338,0x102,0x2192,0x338, +0x102,0x2194,0x338,0x102,0x21d0,0x338,0x102,0x21d4,0x338,0x102,0x21d2,0x338,0x102,0x2203,0x338,0x102, +0x2208,0x338,0x102,0x220b,0x338,0x102,0x2223,0x338,0x102,0x2225,0x338,0x102,0x223c,0x338,0x102,0x2243, +0x338,0x102,0x2245,0x338,0x102,0x2248,0x338,0x102,0x3d,0x338,0x102,0x2261,0x338,0x102,0x224d,0x338, +0x102,0x3c,0x338,0x102,0x3e,0x338,0x102,0x2264,0x338,0x102,0x2265,0x338,0x102,0x2272,0x338,0x102, +0x2273,0x338,0x102,0x2276,0x338,0x102,0x2277,0x338,0x102,0x227a,0x338,0x102,0x227b,0x338,0x102,0x2282, +0x338,0x102,0x2283,0x338,0x102,0x2286,0x338,0x102,0x2287,0x338,0x102,0x22a2,0x338,0x102,0x22a8,0x338, +0x102,0x22a9,0x338,0x102,0x22ab,0x338,0x102,0x227c,0x338,0x102,0x227d,0x338,0x102,0x2291,0x338,0x102, +0x2292,0x338,0x102,0x22b2,0x338,0x102,0x22b3,0x338,0x102,0x22b4,0x338,0x102,0x22b5,0x338,0x802,0x304b, +0x3099,0x802,0x304d,0x3099,0x802,0x304f,0x3099,0x802,0x3051,0x3099,0x802,0x3053,0x3099,0x802,0x3055,0x3099, +0x802,0x3057,0x3099,0x802,0x3059,0x3099,0x802,0x305b,0x3099,0x802,0x305d,0x3099,0x802,0x305f,0x3099,0x802, +0x3061,0x3099,0x802,0x3064,0x3099,0x802,0x3066,0x3099,0x802,0x3068,0x3099,0x802,0x306f,0x3099,0x802,0x306f, +0x309a,0x802,0x3072,0x3099,0x802,0x3072,0x309a,0x802,0x3075,0x3099,0x802,0x3075,0x309a,0x802,0x3078,0x3099, +0x802,0x3078,0x309a,0x802,0x307b,0x3099,0x802,0x307b,0x309a,0x802,0x3046,0x3099,0x802,0x309d,0x3099,0x802, +0x30ab,0x3099,0x802,0x30ad,0x3099,0x802,0x30af,0x3099,0x802,0x30b1,0x3099,0x802,0x30b3,0x3099,0x802,0x30b5, +0x3099,0x802,0x30b7,0x3099,0x802,0x30b9,0x3099,0x802,0x30bb,0x3099,0x802,0x30bd,0x3099,0x802,0x30bf,0x3099, +0x802,0x30c1,0x3099,0x802,0x30c4,0x3099,0x802,0x30c6,0x3099,0x802,0x30c8,0x3099,0x802,0x30cf,0x3099,0x802, +0x30cf,0x309a,0x802,0x30d2,0x3099,0x802,0x30d2,0x309a,0x802,0x30d5,0x3099,0x802,0x30d5,0x309a,0x802,0x30d8, +0x3099,0x802,0x30d8,0x309a,0x802,0x30db,0x3099,0x802,0x30db,0x309a,0x802,0x30a6,0x3099,0x802,0x30ef,0x3099, +0x802,0x30f0,0x3099,0x802,0x30f1,0x3099,0x802,0x30f2,0x3099,0x802,0x30fd,0x3099,0x704,0xd804,0xdc99,0xd804, +0xdcba,0x704,0xd804,0xdc9b,0xd804,0xdcba,0x704,0xd804,0xdca5,0xd804,0xdcba,4,0xd804,0xdd31,0xd804,0xdd27, +4,0xd804,0xdd32,0xd804,0xdd27,4,0xd804,0xdf47,0xd804,0xdf3e,4,0xd804,0xdf47,0xd804,0xdf57,4, +0xd805,0xdcb9,0xd805,0xdcba,4,0xd805,0xdcb9,0xd805,0xdcb0,4,0xd805,0xdcb9,0xd805,0xdcbd,4,0xd805, +0xddb8,0xd805,0xddaf,4,0xd805,0xddb9,0xd805,0xddaf,1,0x2b9,1,0x3b,1,0xb7,0x702,0x915, +0x93c,0x702,0x916,0x93c,0x702,0x917,0x93c,0x702,0x91c,0x93c,0x702,0x921,0x93c,0x702,0x922,0x93c, +0x702,0x92b,0x93c,0x702,0x92f,0x93c,0x702,0x9a1,0x9bc,0x702,0x9a2,0x9bc,0x702,0x9af,0x9bc,0x702, +0xa32,0xa3c,0x702,0xa38,0xa3c,0x702,0xa16,0xa3c,0x702,0xa17,0xa3c,0x702,0xa1c,0xa3c,0x702,0xa2b, +0xa3c,0x702,0xb21,0xb3c,0x702,0xb22,0xb3c,2,0xf42,0xfb7,2,0xf4c,0xfb7,2,0xf51,0xfb7, +2,0xf56,0xfb7,2,0xf5b,0xfb7,2,0xf40,0xfb5,0x8202,0xfb2,0xf80,0x8202,0xfb3,0xf80,2, +0xf92,0xfb7,2,0xf9c,0xfb7,2,0xfa1,0xfb7,2,0xfa6,0xfb7,2,0xfab,0xfb7,2,0xf90, +0xfb5,1,0x3b9,1,0x60,1,0xb4,1,0x3a9,1,0x4b,1,0x3008,1,0x3009,0x102, +0x2add,0x338,1,0x8c48,1,0x66f4,1,0x8eca,1,0x8cc8,1,0x6ed1,1,0x4e32,1,0x53e5, +1,0x9f9c,1,0x5951,1,0x91d1,1,0x5587,1,0x5948,1,0x61f6,1,0x7669,1,0x7f85, +1,0x863f,1,0x87ba,1,0x88f8,1,0x908f,1,0x6a02,1,0x6d1b,1,0x70d9,1,0x73de, +1,0x843d,1,0x916a,1,0x99f1,1,0x4e82,1,0x5375,1,0x6b04,1,0x721b,1,0x862d, +1,0x9e1e,1,0x5d50,1,0x6feb,1,0x85cd,1,0x8964,1,0x62c9,1,0x81d8,1,0x881f, +1,0x5eca,1,0x6717,1,0x6d6a,1,0x72fc,1,0x90ce,1,0x4f86,1,0x51b7,1,0x52de, +1,0x64c4,1,0x6ad3,1,0x7210,1,0x76e7,1,0x8001,1,0x8606,1,0x865c,1,0x8def, +1,0x9732,1,0x9b6f,1,0x9dfa,1,0x788c,1,0x797f,1,0x7da0,1,0x83c9,1,0x9304, +1,0x9e7f,1,0x8ad6,1,0x58df,1,0x5f04,1,0x7c60,1,0x807e,1,0x7262,1,0x78ca, +1,0x8cc2,1,0x96f7,1,0x58d8,1,0x5c62,1,0x6a13,1,0x6dda,1,0x6f0f,1,0x7d2f, +1,0x7e37,1,0x964b,1,0x52d2,1,0x808b,1,0x51dc,1,0x51cc,1,0x7a1c,1,0x7dbe, +1,0x83f1,1,0x9675,1,0x8b80,1,0x62cf,1,0x8afe,1,0x4e39,1,0x5be7,1,0x6012, +1,0x7387,1,0x7570,1,0x5317,1,0x78fb,1,0x4fbf,1,0x5fa9,1,0x4e0d,1,0x6ccc, +1,0x6578,1,0x7d22,1,0x53c3,1,0x585e,1,0x7701,1,0x8449,1,0x8aaa,1,0x6bba, +1,0x8fb0,1,0x6c88,1,0x62fe,1,0x82e5,1,0x63a0,1,0x7565,1,0x4eae,1,0x5169, +1,0x51c9,1,0x6881,1,0x7ce7,1,0x826f,1,0x8ad2,1,0x91cf,1,0x52f5,1,0x5442, +1,0x5973,1,0x5eec,1,0x65c5,1,0x6ffe,1,0x792a,1,0x95ad,1,0x9a6a,1,0x9e97, +1,0x9ece,1,0x529b,1,0x66c6,1,0x6b77,1,0x8f62,1,0x5e74,1,0x6190,1,0x6200, +1,0x649a,1,0x6f23,1,0x7149,1,0x7489,1,0x79ca,1,0x7df4,1,0x806f,1,0x8f26, +1,0x84ee,1,0x9023,1,0x934a,1,0x5217,1,0x52a3,1,0x54bd,1,0x70c8,1,0x88c2, +1,0x5ec9,1,0x5ff5,1,0x637b,1,0x6bae,1,0x7c3e,1,0x7375,1,0x4ee4,1,0x56f9, +1,0x5dba,1,0x601c,1,0x73b2,1,0x7469,1,0x7f9a,1,0x8046,1,0x9234,1,0x96f6, +1,0x9748,1,0x9818,1,0x4f8b,1,0x79ae,1,0x91b4,1,0x96b8,1,0x60e1,1,0x4e86, +1,0x50da,1,0x5bee,1,0x5c3f,1,0x6599,1,0x71ce,1,0x7642,1,0x84fc,1,0x907c, +1,0x9f8d,1,0x6688,1,0x962e,1,0x5289,1,0x677b,1,0x67f3,1,0x6d41,1,0x6e9c, +1,0x7409,1,0x7559,1,0x786b,1,0x7d10,1,0x985e,1,0x516d,1,0x622e,1,0x9678, +1,0x502b,1,0x5d19,1,0x6dea,1,0x8f2a,1,0x5f8b,1,0x6144,1,0x6817,1,0x9686, +1,0x5229,1,0x540f,1,0x5c65,1,0x6613,1,0x674e,1,0x68a8,1,0x6ce5,1,0x7406, +1,0x75e2,1,0x7f79,1,0x88cf,1,0x88e1,1,0x91cc,1,0x96e2,1,0x533f,1,0x6eba, +1,0x541d,1,0x71d0,1,0x7498,1,0x85fa,1,0x96a3,1,0x9c57,1,0x9e9f,1,0x6797, +1,0x6dcb,1,0x81e8,1,0x7acb,1,0x7b20,1,0x7c92,1,0x72c0,1,0x7099,1,0x8b58, +1,0x4ec0,1,0x8336,1,0x523a,1,0x5207,1,0x5ea6,1,0x62d3,1,0x7cd6,1,0x5b85, +1,0x6d1e,1,0x66b4,1,0x8f3b,1,0x884c,1,0x964d,1,0x898b,1,0x5ed3,1,0x5140, +1,0x55c0,1,0x585a,1,0x6674,1,0x51de,1,0x732a,1,0x76ca,1,0x793c,1,0x795e, +1,0x7965,1,0x798f,1,0x9756,1,0x7cbe,1,0x7fbd,1,0x8612,1,0x8af8,1,0x9038, +1,0x90fd,1,0x98ef,1,0x98fc,1,0x9928,1,0x9db4,1,0x90de,1,0x96b7,1,0x4fae, +1,0x50e7,1,0x514d,1,0x52c9,1,0x52e4,1,0x5351,1,0x559d,1,0x5606,1,0x5668, +1,0x5840,1,0x58a8,1,0x5c64,1,0x5c6e,1,0x6094,1,0x6168,1,0x618e,1,0x61f2, +1,0x654f,1,0x65e2,1,0x6691,1,0x6885,1,0x6d77,1,0x6e1a,1,0x6f22,1,0x716e, +1,0x722b,1,0x7422,1,0x7891,1,0x793e,1,0x7949,1,0x7948,1,0x7950,1,0x7956, +1,0x795d,1,0x798d,1,0x798e,1,0x7a40,1,0x7a81,1,0x7bc0,1,0x7e09,1,0x7e41, +1,0x7f72,1,0x8005,1,0x81ed,1,0x8279,1,0x8457,1,0x8910,1,0x8996,1,0x8b01, +1,0x8b39,1,0x8cd3,1,0x8d08,1,0x8fb6,1,0x96e3,1,0x97ff,1,0x983b,1,0x6075, +2,0xd850,0xdeee,1,0x8218,1,0x4e26,1,0x51b5,1,0x5168,1,0x4f80,1,0x5145,1, +0x5180,1,0x52c7,1,0x52fa,1,0x5555,1,0x5599,1,0x55e2,1,0x58b3,1,0x5944,1, +0x5954,1,0x5a62,1,0x5b28,1,0x5ed2,1,0x5ed9,1,0x5f69,1,0x5fad,1,0x60d8,1, +0x614e,1,0x6108,1,0x6160,1,0x6234,1,0x63c4,1,0x641c,1,0x6452,1,0x6556,1, +0x671b,1,0x6756,1,0x6b79,1,0x6edb,1,0x6ecb,1,0x701e,1,0x77a7,1,0x7235,1, +0x72af,1,0x7471,1,0x7506,1,0x753b,1,0x761d,1,0x761f,1,0x76db,1,0x76f4,1, +0x774a,1,0x7740,1,0x78cc,1,0x7ab1,1,0x7c7b,1,0x7d5b,1,0x7f3e,1,0x8352,1, +0x83ef,1,0x8779,1,0x8941,1,0x8986,1,0x8abf,1,0x8acb,1,0x8aed,1,0x8b8a,1, +0x8f38,1,0x9072,1,0x9199,1,0x9276,1,0x967c,1,0x97db,1,0x980b,1,0x9b12,2, +0xd84a,0xdc4a,2,0xd84a,0xdc44,2,0xd84c,0xdfd5,1,0x3b9d,1,0x4018,1,0x4039,2,0xd854, +0xde49,2,0xd857,0xdcd0,2,0xd85f,0xded3,1,0x9f43,1,0x9f8e,0xe02,0x5d9,0x5b4,0x1102,0x5f2, +0x5b7,0x1802,0x5e9,0x5c1,0x1902,0x5e9,0x5c2,0xfb49,0x1843,0x5e9,0x5bc,0x5c1,0xfb49,0x1943,0x5e9,0x5bc, +0x5c2,0x1102,0x5d0,0x5b7,0x1202,0x5d0,0x5b8,0x1502,0x5d0,0x5bc,0x1502,0x5d1,0x5bc,0x1502,0x5d2,0x5bc, +0x1502,0x5d3,0x5bc,0x1502,0x5d4,0x5bc,0x1502,0x5d5,0x5bc,0x1502,0x5d6,0x5bc,0x1502,0x5d8,0x5bc,0x1502, +0x5d9,0x5bc,0x1502,0x5da,0x5bc,0x1502,0x5db,0x5bc,0x1502,0x5dc,0x5bc,0x1502,0x5de,0x5bc,0x1502,0x5e0, +0x5bc,0x1502,0x5e1,0x5bc,0x1502,0x5e3,0x5bc,0x1502,0x5e4,0x5bc,0x1502,0x5e6,0x5bc,0x1502,0x5e7,0x5bc, +0x1502,0x5e8,0x5bc,0x1502,0x5e9,0x5bc,0x1502,0x5ea,0x5bc,0x1302,0x5d5,0x5b9,0x1702,0x5d1,0x5bf,0x1702, +0x5db,0x5bf,0x1702,0x5e4,0x5bf,0xd804,0xd834,0xdd57,0xd834,0xdd65,0xd804,0xd834,0xdd58,0xd834,0xdd65,0xd834, +0xdd5f,0xd834,0xdd6e,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6e,0xd834,0xdd5f,0xd834,0xdd6f,4, +0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6f,0xd834,0xdd5f,0xd834,0xdd70,4,0xd846,0xd834,0xdd58,0xd834, +0xdd65,0xd834,0xdd70,0xd834,0xdd5f,0xd834,0xdd71,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd71,0xd834, +0xdd5f,0xd834,0xdd72,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd72,0xd804,0xd834,0xddb9,0xd834,0xdd65, +0xd804,0xd834,0xddba,0xd834,0xdd65,0xd834,0xddbb,0xd834,0xdd6e,4,0xd846,0xd834,0xddb9,0xd834,0xdd65,0xd834, +0xdd6e,0xd834,0xddbc,0xd834,0xdd6e,4,0xd846,0xd834,0xddba,0xd834,0xdd65,0xd834,0xdd6e,0xd834,0xddbb,0xd834, +0xdd6f,4,0xd846,0xd834,0xddb9,0xd834,0xdd65,0xd834,0xdd6f,0xd834,0xddbc,0xd834,0xdd6f,4,0xd846,0xd834, +0xddba,0xd834,0xdd65,0xd834,0xdd6f,1,0x4e3d,1,0x4e38,1,0x4e41,2,0xd840,0xdd22,1,0x4f60, +1,0x4fbb,1,0x5002,1,0x507a,1,0x5099,1,0x50cf,1,0x349e,2,0xd841,0xde3a,1, +0x5154,1,0x5164,1,0x5177,2,0xd841,0xdd1c,1,0x34b9,1,0x5167,1,0x518d,2,0xd841, +0xdd4b,1,0x5197,1,0x51a4,1,0x4ecc,1,0x51ac,2,0xd864,0xdddf,1,0x51f5,1,0x5203, +1,0x34df,1,0x523b,1,0x5246,1,0x5272,1,0x5277,1,0x3515,1,0x5305,1,0x5306, +1,0x5349,1,0x535a,1,0x5373,1,0x537d,1,0x537f,2,0xd842,0xde2c,1,0x7070,1, +0x53ca,1,0x53df,2,0xd842,0xdf63,1,0x53eb,1,0x53f1,1,0x5406,1,0x549e,1,0x5438, +1,0x5448,1,0x5468,1,0x54a2,1,0x54f6,1,0x5510,1,0x5553,1,0x5563,1,0x5584, +1,0x55ab,1,0x55b3,1,0x55c2,1,0x5716,1,0x5717,1,0x5651,1,0x5674,1,0x58ee, +1,0x57ce,1,0x57f4,1,0x580d,1,0x578b,1,0x5832,1,0x5831,1,0x58ac,2,0xd845, +0xdce4,1,0x58f2,1,0x58f7,1,0x5906,1,0x591a,1,0x5922,1,0x5962,2,0xd845,0xdea8, +2,0xd845,0xdeea,1,0x59ec,1,0x5a1b,1,0x5a27,1,0x59d8,1,0x5a66,1,0x36ee,1, +0x36fc,1,0x5b08,1,0x5b3e,2,0xd846,0xddc8,1,0x5bc3,1,0x5bd8,1,0x5bf3,2,0xd846, +0xdf18,1,0x5bff,1,0x5c06,1,0x5f53,1,0x5c22,1,0x3781,1,0x5c60,1,0x5cc0,1, +0x5c8d,2,0xd847,0xdde4,1,0x5d43,2,0xd847,0xdde6,1,0x5d6e,1,0x5d6b,1,0x5d7c,1, +0x5de1,1,0x5de2,1,0x382f,1,0x5dfd,1,0x5e28,1,0x5e3d,1,0x5e69,1,0x3862,2, +0xd848,0xdd83,1,0x387c,1,0x5eb0,1,0x5eb3,1,0x5eb6,2,0xd868,0xdf92,1,0x5efe,2, +0xd848,0xdf31,1,0x8201,1,0x5f22,1,0x38c7,2,0xd84c,0xdeb8,2,0xd858,0xddda,1,0x5f62, +1,0x5f6b,1,0x38e3,1,0x5f9a,1,0x5fcd,1,0x5fd7,1,0x5ff9,1,0x6081,1,0x393a, +1,0x391c,2,0xd849,0xded4,1,0x60c7,1,0x6148,1,0x614c,1,0x617a,1,0x61b2,1, +0x61a4,1,0x61af,1,0x61de,1,0x6210,1,0x621b,1,0x625d,1,0x62b1,1,0x62d4,1, +0x6350,2,0xd84a,0xdf0c,1,0x633d,1,0x62fc,1,0x6368,1,0x6383,1,0x63e4,2,0xd84a, +0xdff1,1,0x6422,1,0x63c5,1,0x63a9,1,0x3a2e,1,0x6469,1,0x647e,1,0x649d,1, +0x6477,1,0x3a6c,1,0x656c,2,0xd84c,0xdc0a,1,0x65e3,1,0x66f8,1,0x6649,1,0x3b19, +1,0x3b08,1,0x3ae4,1,0x5192,1,0x5195,1,0x6700,1,0x669c,1,0x80ad,1,0x43d9, +1,0x6721,1,0x675e,1,0x6753,2,0xd84c,0xdfc3,1,0x3b49,1,0x67fa,1,0x6785,1, +0x6852,2,0xd84d,0xdc6d,1,0x688e,1,0x681f,1,0x6914,1,0x6942,1,0x69a3,1,0x69ea, +1,0x6aa8,2,0xd84d,0xdea3,1,0x6adb,1,0x3c18,1,0x6b21,2,0xd84e,0xdca7,1,0x6b54, +1,0x3c4e,1,0x6b72,1,0x6b9f,1,0x6bbb,2,0xd84e,0xde8d,2,0xd847,0xdd0b,2,0xd84e, +0xdefa,1,0x6c4e,2,0xd84f,0xdcbc,1,0x6cbf,1,0x6ccd,1,0x6c67,1,0x6d16,1,0x6d3e, +1,0x6d69,1,0x6d78,1,0x6d85,2,0xd84f,0xdd1e,1,0x6d34,1,0x6e2f,1,0x6e6e,1, +0x3d33,1,0x6ec7,2,0xd84f,0xded1,1,0x6df9,1,0x6f6e,2,0xd84f,0xdf5e,2,0xd84f,0xdf8e, +1,0x6fc6,1,0x7039,1,0x701b,1,0x3d96,1,0x704a,1,0x707d,1,0x7077,1,0x70ad, +2,0xd841,0xdd25,1,0x7145,2,0xd850,0xde63,1,0x719c,2,0xd850,0xdfab,1,0x7228,1, +0x7250,2,0xd851,0xde08,1,0x7280,1,0x7295,2,0xd851,0xdf35,2,0xd852,0xdc14,1,0x737a, +1,0x738b,1,0x3eac,1,0x73a5,1,0x3eb8,1,0x7447,1,0x745c,1,0x7485,1,0x74ca, +1,0x3f1b,1,0x7524,2,0xd853,0xdc36,1,0x753e,2,0xd853,0xdc92,2,0xd848,0xdd9f,1, +0x7610,2,0xd853,0xdfa1,2,0xd853,0xdfb8,2,0xd854,0xdc44,1,0x3ffc,1,0x4008,2,0xd854, +0xdcf3,2,0xd854,0xdcf2,2,0xd854,0xdd19,2,0xd854,0xdd33,1,0x771e,1,0x771f,1,0x778b, +1,0x4046,1,0x4096,2,0xd855,0xdc1d,1,0x784e,1,0x40e3,2,0xd855,0xde26,2,0xd855, +0xde9a,2,0xd855,0xdec5,1,0x79eb,1,0x412f,1,0x7a4a,1,0x7a4f,2,0xd856,0xdd7c,2, +0xd856,0xdea7,1,0x7aee,1,0x4202,2,0xd856,0xdfab,1,0x7bc6,1,0x7bc9,1,0x4227,2, +0xd857,0xdc80,1,0x7cd2,1,0x42a0,1,0x7ce8,1,0x7ce3,1,0x7d00,2,0xd857,0xdf86,1, +0x7d63,1,0x4301,1,0x7dc7,1,0x7e02,1,0x7e45,1,0x4334,2,0xd858,0xde28,2,0xd858, +0xde47,1,0x4359,2,0xd858,0xded9,1,0x7f7a,2,0xd858,0xdf3e,1,0x7f95,1,0x7ffa,2, +0xd859,0xdcda,2,0xd859,0xdd23,1,0x8060,2,0xd859,0xdda8,1,0x8070,2,0xd84c,0xdf5f,1, +0x43d5,1,0x80b2,1,0x8103,1,0x440b,1,0x813e,1,0x5ab5,2,0xd859,0xdfa7,2,0xd859, +0xdfb5,2,0xd84c,0xdf93,2,0xd84c,0xdf9c,1,0x8204,1,0x8f9e,1,0x446b,1,0x8291,1, +0x828b,1,0x829d,1,0x52b3,1,0x82b1,1,0x82b3,1,0x82bd,1,0x82e6,2,0xd85a,0xdf3c, +1,0x831d,1,0x8363,1,0x83ad,1,0x8323,1,0x83bd,1,0x83e7,1,0x8353,1,0x83ca, +1,0x83cc,1,0x83dc,2,0xd85b,0xdc36,2,0xd85b,0xdd6b,2,0xd85b,0xdcd5,1,0x452b,1, +0x84f1,1,0x84f3,1,0x8516,2,0xd85c,0xdfca,1,0x8564,2,0xd85b,0xdf2c,1,0x455d,1, +0x4561,2,0xd85b,0xdfb1,2,0xd85c,0xdcd2,1,0x456b,1,0x8650,1,0x8667,1,0x8669,1, +0x86a9,1,0x8688,1,0x870e,1,0x86e2,1,0x8728,1,0x876b,1,0x8786,1,0x45d7,1, +0x87e1,1,0x8801,1,0x45f9,1,0x8860,1,0x8863,2,0xd85d,0xde67,1,0x88d7,1,0x88de, +1,0x4635,1,0x88fa,1,0x34bb,2,0xd85e,0xdcae,2,0xd85e,0xdd66,1,0x46be,1,0x46c7, +1,0x8aa0,1,0x8c55,2,0xd85f,0xdca8,1,0x8cab,1,0x8cc1,1,0x8d1b,1,0x8d77,2, +0xd85f,0xdf2f,2,0xd842,0xdc04,1,0x8dcb,1,0x8dbc,1,0x8df0,2,0xd842,0xdcde,1,0x8ed4, +2,0xd861,0xddd2,2,0xd861,0xdded,1,0x9094,1,0x90f1,1,0x9111,2,0xd861,0xdf2e,1, +0x911b,1,0x9238,1,0x92d7,1,0x92d8,1,0x927c,1,0x93f9,1,0x9415,2,0xd862,0xdffa, +1,0x958b,1,0x4995,1,0x95b7,2,0xd863,0xdd77,1,0x49e6,1,0x96c3,1,0x5db2,1, +0x9723,2,0xd864,0xdd45,2,0xd864,0xde1a,1,0x4a6e,1,0x4a76,1,0x97e0,2,0xd865,0xdc0a, +1,0x4ab2,2,0xd865,0xdc96,1,0x9829,2,0xd865,0xddb6,1,0x98e2,1,0x4b33,1,0x9929, +1,0x99a7,1,0x99c2,1,0x99fe,1,0x4bce,2,0xd866,0xdf30,1,0x9c40,1,0x9cfd,1, +0x4cce,1,0x4ced,1,0x9d67,2,0xd868,0xdcce,1,0x4cf8,2,0xd868,0xdd05,2,0xd868,0xde0e, +2,0xd868,0xde91,1,0x9ebb,1,0x4d56,1,0x9ef9,1,0x9efe,1,0x9f05,1,0x9f0f,1, +0x9f16,1,0x9f3b,2,0xd869,0xde00,0x3ac,0xe642,0x3b1,0x301,0x3ad,0xe642,0x3b5,0x301,0x3ae,0xe642, +0x3b7,0x301,0x3af,0xe642,0x3b9,0x301,0x3cc,0xe642,0x3bf,0x301,0x3cd,0xe642,0x3c5,0x301,0x3ce,0xe642, +0x3c9,0x301,0x386,0xe642,0x391,0x301,0x388,0xe642,0x395,0x301,0x389,0xe642,0x397,0x301,0x390,1, +0xe643,0x3b9,0x308,0x301,0x38a,0xe642,0x399,0x301,0x3b0,1,0xe643,0x3c5,0x308,0x301,0x38e,0xe642, +0x3a5,0x301,0x385,0xe642,0xa8,0x301,0x38c,0xe642,0x39f,0x301,0x38f,0xe642,0x3a9,0x301,0xc5,0xe642, +0x41,0x30a,0xe6e6,0xe681,0x300,0xe6e6,0xe681,0x301,0xe6e6,0xe681,0x313,0xe6e6,0xe682,0x308,0x301,0x8100, +0x8282,0xf71,0xf72,0x8100,0x8482,0xf71,0xf74,0x8100,0x8282,0xf71,0xf80,0 }; static const uint8_t norm2_nfc_data_smallFCD[256]={ -0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0xc7,0x66,0x66,0x46,0x64,0x46,0x66,0x5b, +0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0xc7,0xe6,0x66,0x46,0x64,0x46,0x66,0x5b, 0x12,0,0,4,0,0,0,0x43,0x20,2,0x29,0xae,0xc2,0xc0,0xff,0xff, 0xc0,0x72,0xbf,0,0,0,0,0,0,0,0x40,0,0x80,0x88,0,0, 0xfe,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -1136,16 +1153,16 @@ static const uint8_t norm2_nfc_data_smallFCD[256]={ static const UTrie2 norm2_nfc_data_trie={ norm2_nfc_data_trieIndex, - norm2_nfc_data_trieIndex+2720, + norm2_nfc_data_trieIndex+2728, NULL, - 2720, - 7004, + 2728, + 7248, 0x188, - 0xb1c, - 0x0, - 0x0, + 0xb24, + 0x1, + 0x1, 0x30000, - 0x25f8, + 0x26f4, NULL, 0, FALSE, FALSE, 0, NULL }; diff --git a/icuSources/common/norm2allmodes.h b/icuSources/common/norm2allmodes.h index 9516817e..682ece28 100644 --- a/icuSources/common/norm2allmodes.h +++ b/icuSources/common/norm2allmodes.h @@ -5,7 +5,7 @@ * Copyright (C) 2014, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* -* loadednormalizer2impl.h +* norm2allmodes.h * * created on: 2014sep07 * created by: Markus W. Scherer @@ -18,7 +18,9 @@ #if !UCONFIG_NO_NORMALIZATION +#include "unicode/edits.h" #include "unicode/normalizer2.h" +#include "unicode/stringoptions.h" #include "unicode/unistr.h" #include "cpputils.h" #include "normalizer2impl.h" @@ -210,8 +212,8 @@ private: virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const { return impl.isDecompYes(impl.getNorm16(c)) ? UNORM_YES : UNORM_NO; } - virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasDecompBoundary(c, TRUE); } - virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasDecompBoundary(c, FALSE); } + virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasDecompBoundaryBefore(c); } + virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasDecompBoundaryAfter(c); } virtual UBool isInert(UChar32 c) const { return impl.isDecompInert(c); } }; @@ -224,19 +226,35 @@ public: private: virtual void normalize(const UChar *src, const UChar *limit, - ReorderingBuffer &buffer, UErrorCode &errorCode) const { + ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE { impl.compose(src, limit, onlyContiguous, TRUE, buffer, errorCode); } using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function. + + void + normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink, + Edits *edits, UErrorCode &errorCode) const U_OVERRIDE { + if (U_FAILURE(errorCode)) { + return; + } + if (edits != nullptr && (options & U_EDITS_NO_RESET) == 0) { + edits->reset(); + } + const uint8_t *s = reinterpret_cast(src.data()); + impl.composeUTF8(options, onlyContiguous, s, s + src.length(), + &sink, edits, errorCode); + sink.Flush(); + } + virtual void normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize, UnicodeString &safeMiddle, - ReorderingBuffer &buffer, UErrorCode &errorCode) const { + ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE { impl.composeAndAppend(src, limit, doNormalize, onlyContiguous, safeMiddle, buffer, errorCode); } virtual UBool - isNormalized(const UnicodeString &s, UErrorCode &errorCode) const { + isNormalized(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE { if(U_FAILURE(errorCode)) { return FALSE; } @@ -252,8 +270,16 @@ private: } return impl.compose(sArray, sArray+s.length(), onlyContiguous, FALSE, buffer, errorCode); } + virtual UBool + isNormalizedUTF8(StringPiece sp, UErrorCode &errorCode) const U_OVERRIDE { + if(U_FAILURE(errorCode)) { + return FALSE; + } + const uint8_t *s = reinterpret_cast(sp.data()); + return impl.composeUTF8(0, onlyContiguous, s, s + sp.length(), nullptr, nullptr, errorCode); + } virtual UNormalizationCheckResult - quickCheck(const UnicodeString &s, UErrorCode &errorCode) const { + quickCheck(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE { if(U_FAILURE(errorCode)) { return UNORM_MAYBE; } @@ -267,21 +293,21 @@ private: return qcResult; } virtual const UChar * - spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &) const { + spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &) const U_OVERRIDE { return impl.composeQuickCheck(src, limit, onlyContiguous, NULL); } using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function. - virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const { + virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const U_OVERRIDE { return impl.getCompQuickCheck(impl.getNorm16(c)); } - virtual UBool hasBoundaryBefore(UChar32 c) const { + virtual UBool hasBoundaryBefore(UChar32 c) const U_OVERRIDE { return impl.hasCompBoundaryBefore(c); } - virtual UBool hasBoundaryAfter(UChar32 c) const { - return impl.hasCompBoundaryAfter(c, onlyContiguous, FALSE); + virtual UBool hasBoundaryAfter(UChar32 c) const U_OVERRIDE { + return impl.hasCompBoundaryAfter(c, onlyContiguous); } - virtual UBool isInert(UChar32 c) const { - return impl.hasCompBoundaryAfter(c, onlyContiguous, TRUE); + virtual UBool isInert(UChar32 c) const U_OVERRIDE { + return impl.isCompInert(c, onlyContiguous); } const UBool onlyContiguous; diff --git a/icuSources/common/normalizer2.cpp b/icuSources/common/normalizer2.cpp index 77f6e273..0f12dfcf 100644 --- a/icuSources/common/normalizer2.cpp +++ b/icuSources/common/normalizer2.cpp @@ -20,7 +20,9 @@ #if !UCONFIG_NO_NORMALIZATION +#include "unicode/edits.h" #include "unicode/normalizer2.h" +#include "unicode/stringoptions.h" #include "unicode/unistr.h" #include "unicode/unorm.h" #include "cstring.h" @@ -42,6 +44,20 @@ U_NAMESPACE_BEGIN Normalizer2::~Normalizer2() {} +void +Normalizer2::normalizeUTF8(uint32_t /*options*/, StringPiece src, ByteSink &sink, + Edits *edits, UErrorCode &errorCode) const { + if (U_FAILURE(errorCode)) { + return; + } + if (edits != nullptr) { + errorCode = U_UNSUPPORTED_ERROR; + return; + } + UnicodeString src16 = UnicodeString::fromUTF8(src); + normalize(src16, errorCode).toUTF8(sink); +} + UBool Normalizer2::getRawDecomposition(UChar32, UnicodeString &) const { return FALSE; @@ -57,6 +73,11 @@ Normalizer2::getCombiningClass(UChar32 /*c*/) const { return 0; } +UBool +Normalizer2::isNormalizedUTF8(StringPiece s, UErrorCode &errorCode) const { + return U_SUCCESS(errorCode) && isNormalized(UnicodeString::fromUTF8(s), errorCode); +} + // Normalizer2 implementation for the old UNORM_NONE. class NoopNormalizer2 : public Normalizer2 { virtual ~NoopNormalizer2(); @@ -64,7 +85,7 @@ class NoopNormalizer2 : public Normalizer2 { virtual UnicodeString & normalize(const UnicodeString &src, UnicodeString &dest, - UErrorCode &errorCode) const { + UErrorCode &errorCode) const U_OVERRIDE { if(U_SUCCESS(errorCode)) { if(&dest!=&src) { dest=src; @@ -74,10 +95,27 @@ class NoopNormalizer2 : public Normalizer2 { } return dest; } + virtual void + normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink, + Edits *edits, UErrorCode &errorCode) const U_OVERRIDE { + if(U_SUCCESS(errorCode)) { + if (edits != nullptr) { + if ((options & U_EDITS_NO_RESET) == 0) { + edits->reset(); + } + edits->addUnchanged(src.length()); + } + if ((options & U_OMIT_UNCHANGED_TEXT) == 0) { + sink.Append(src.data(), src.length()); + } + sink.Flush(); + } + } + virtual UnicodeString & normalizeSecondAndAppend(UnicodeString &first, const UnicodeString &second, - UErrorCode &errorCode) const { + UErrorCode &errorCode) const U_OVERRIDE { if(U_SUCCESS(errorCode)) { if(&first!=&second) { first.append(second); @@ -90,7 +128,7 @@ class NoopNormalizer2 : public Normalizer2 { virtual UnicodeString & append(UnicodeString &first, const UnicodeString &second, - UErrorCode &errorCode) const { + UErrorCode &errorCode) const U_OVERRIDE { if(U_SUCCESS(errorCode)) { if(&first!=&second) { first.append(second); @@ -101,25 +139,29 @@ class NoopNormalizer2 : public Normalizer2 { return first; } virtual UBool - getDecomposition(UChar32, UnicodeString &) const { + getDecomposition(UChar32, UnicodeString &) const U_OVERRIDE { return FALSE; } - // No need to override the default getRawDecomposition(). + // No need to U_OVERRIDE the default getRawDecomposition(). + virtual UBool + isNormalized(const UnicodeString &, UErrorCode &errorCode) const U_OVERRIDE { + return U_SUCCESS(errorCode); + } virtual UBool - isNormalized(const UnicodeString &, UErrorCode &) const { - return TRUE; + isNormalizedUTF8(StringPiece, UErrorCode &errorCode) const U_OVERRIDE { + return U_SUCCESS(errorCode); } virtual UNormalizationCheckResult - quickCheck(const UnicodeString &, UErrorCode &) const { + quickCheck(const UnicodeString &, UErrorCode &) const U_OVERRIDE { return UNORM_YES; } virtual int32_t - spanQuickCheckYes(const UnicodeString &s, UErrorCode &) const { + spanQuickCheckYes(const UnicodeString &s, UErrorCode &) const U_OVERRIDE { return s.length(); } - virtual UBool hasBoundaryBefore(UChar32) const { return TRUE; } - virtual UBool hasBoundaryAfter(UChar32) const { return TRUE; } - virtual UBool isInert(UChar32) const { return TRUE; } + virtual UBool hasBoundaryBefore(UChar32) const U_OVERRIDE { return TRUE; } + virtual UBool hasBoundaryAfter(UChar32) const U_OVERRIDE { return TRUE; } + virtual UBool isInert(UChar32) const U_OVERRIDE { return TRUE; } }; NoopNormalizer2::~NoopNormalizer2() {} diff --git a/icuSources/common/normalizer2impl.cpp b/icuSources/common/normalizer2impl.cpp index 67f4c1c2..15b4a528 100644 --- a/icuSources/common/normalizer2impl.cpp +++ b/icuSources/common/normalizer2impl.cpp @@ -20,10 +20,15 @@ #if !UCONFIG_NO_NORMALIZATION +#include "unicode/bytestream.h" +#include "unicode/edits.h" #include "unicode/normalizer2.h" +#include "unicode/stringoptions.h" #include "unicode/udata.h" #include "unicode/ustring.h" #include "unicode/utf16.h" +#include "unicode/utf8.h" +#include "bytesinkutil.h" #include "cmemory.h" #include "mutex.h" #include "normalizer2impl.h" @@ -35,8 +40,142 @@ U_NAMESPACE_BEGIN +namespace { + +/** + * UTF-8 lead byte for minNoMaybeCP. + * Can be lower than the actual lead byte for c. + * Typically U+0300 for NFC/NFD, U+00A0 for NFKC/NFKD, U+0041 for NFKC_Casefold. + */ +inline uint8_t leadByteForCP(UChar32 c) { + if (c <= 0x7f) { + return (uint8_t)c; + } else if (c <= 0x7ff) { + return (uint8_t)(0xc0+(c>>6)); + } else { + // Should not occur because ccc(U+0300)!=0. + return 0xe0; + } +} + +/** + * Returns the code point from one single well-formed UTF-8 byte sequence + * between cpStart and cpLimit. + * + * UTrie2 UTF-8 macros do not assemble whole code points (for efficiency). + * When we do need the code point, we call this function. + * We should not need it for normalization-inert data (norm16==0). + * Illegal sequences yield the error value norm16==0 just like real normalization-inert code points. + */ +UChar32 codePointFromValidUTF8(const uint8_t *cpStart, const uint8_t *cpLimit) { + // Similar to U8_NEXT_UNSAFE(s, i, c). + U_ASSERT(cpStart < cpLimit); + uint8_t c = *cpStart; + switch(cpLimit-cpStart) { + case 1: + return c; + case 2: + return ((c&0x1f)<<6) | (cpStart[1]&0x3f); + case 3: + // no need for (c&0xf) because the upper bits are truncated after <<12 in the cast to (UChar) + return (UChar)((c<<12) | ((cpStart[1]&0x3f)<<6) | (cpStart[2]&0x3f)); + case 4: + return ((c&7)<<18) | ((cpStart[1]&0x3f)<<12) | ((cpStart[2]&0x3f)<<6) | (cpStart[3]&0x3f); + default: + U_ASSERT(FALSE); // Should not occur. + return U_SENTINEL; + } +} + +/** + * Returns the last code point in [start, p[ if it is valid and in U+1000..U+D7FF. + * Otherwise returns a negative value. + */ +UChar32 previousHangulOrJamo(const uint8_t *start, const uint8_t *p) { + if ((p - start) >= 3) { + p -= 3; + uint8_t l = *p; + uint8_t t1, t2; + if (0xe1 <= l && l <= 0xed && + (t1 = (uint8_t)(p[1] - 0x80)) <= 0x3f && + (t2 = (uint8_t)(p[2] - 0x80)) <= 0x3f && + (l < 0xed || t1 <= 0x1f)) { + return ((l & 0xf) << 12) | (t1 << 6) | t2; + } + } + return U_SENTINEL; +} + +/** + * Returns the offset from the Jamo T base if [src, limit[ starts with a single Jamo T code point. + * Otherwise returns a negative value. + */ +int32_t getJamoTMinusBase(const uint8_t *src, const uint8_t *limit) { + // Jamo T: E1 86 A8..E1 87 82 + if ((limit - src) >= 3 && *src == 0xe1) { + if (src[1] == 0x86) { + uint8_t t = src[2]; + // The first Jamo T is U+11A8 but JAMO_T_BASE is 11A7. + // Offset 0 does not correspond to any conjoining Jamo. + if (0xa8 <= t && t <= 0xbf) { + return t - 0xa7; + } + } else if (src[1] == 0x87) { + uint8_t t = src[2]; + if ((int8_t)t <= (int8_t)0x82) { + return t - (0xa7 - 0x40); + } + } + } + return -1; +} + +void +appendCodePointDelta(const uint8_t *cpStart, const uint8_t *cpLimit, int32_t delta, + ByteSink &sink, Edits *edits) { + char buffer[U8_MAX_LENGTH]; + int32_t length; + int32_t cpLength = (int32_t)(cpLimit - cpStart); + if (cpLength == 1) { + // The builder makes ASCII map to ASCII. + buffer[0] = (uint8_t)(*cpStart + delta); + length = 1; + } else { + int32_t trail = *(cpLimit-1) + delta; + if (0x80 <= trail && trail <= 0xbf) { + // The delta only changes the last trail byte. + --cpLimit; + length = 0; + do { buffer[length++] = *cpStart++; } while (cpStart < cpLimit); + buffer[length++] = (uint8_t)trail; + } else { + // Decode the code point, add the delta, re-encode. + UChar32 c = codePointFromValidUTF8(cpStart, cpLimit) + delta; + length = 0; + U8_APPEND_UNSAFE(buffer, length, c); + } + } + if (edits != nullptr) { + edits->addReplace(cpLength, length); + } + sink.Append(buffer, length); +} + +} // namespace + // ReorderingBuffer -------------------------------------------------------- *** +ReorderingBuffer::ReorderingBuffer(const Normalizer2Impl &ni, UnicodeString &dest, + UErrorCode &errorCode) : + impl(ni), str(dest), + start(str.getBuffer(8)), reorderStart(start), limit(start), + remainingCapacity(str.getCapacity()), lastCC(0) { + if (start == nullptr && U_SUCCESS(errorCode)) { + // getBuffer() already did str.setToBogus() + errorCode = U_MEMORY_ALLOCATION_ERROR; + } +} + UBool ReorderingBuffer::init(int32_t destCapacity, UErrorCode &errorCode) { int32_t length=str.length(); start=str.getBuffer(destCapacity); @@ -69,6 +208,32 @@ UBool ReorderingBuffer::equals(const UChar *otherStart, const UChar *otherLimit) 0==u_memcmp(start, otherStart, length); } +UBool ReorderingBuffer::equals(const uint8_t *otherStart, const uint8_t *otherLimit) const { + U_ASSERT((otherLimit - otherStart) <= INT32_MAX); // ensured by caller + int32_t length = (int32_t)(limit - start); + int32_t otherLength = (int32_t)(otherLimit - otherStart); + // For equal strings, UTF-8 is at least as long as UTF-16, and at most three times as long. + if (otherLength < length || (otherLength / 3) > length) { + return FALSE; + } + // Compare valid strings from between normalization boundaries. + // (Invalid sequences are normalization-inert.) + for (int32_t i = 0, j = 0;;) { + if (i >= length) { + return j >= otherLength; + } else if (j >= otherLength) { + return FALSE; + } + // Not at the end of either string yet. + UChar32 c, other; + U16_NEXT_UNSAFE(start, i, c); + U8_NEXT_UNSAFE(otherStart, j, other); + if (c != other) { + return FALSE; + } + } +} + UBool ReorderingBuffer::appendSupplementary(UChar32 c, uint8_t cc, UErrorCode &errorCode) { if(remainingCapacity<2 && !resize(2, errorCode)) { return FALSE; @@ -216,16 +381,12 @@ uint8_t ReorderingBuffer::previousCC() { return 0; } UChar32 c=*--codePointStart; - if(c>DELTA_SHIFT)-MAX_DELTA-1; normTrie=inTrie; maybeYesCompositions=inExtraData; - extraData=maybeYesCompositions+(MIN_NORMAL_MAYBE_YES-minMaybeYes); + extraData=maybeYesCompositions+((MIN_NORMAL_MAYBE_YES-minMaybeYes)>>OFFSET_SHIFT); smallFCD=inSmallFCD; - - // Build tccc180[]. - // gennorm2 enforces lccc=0 for c>=1) { - if((c&0xff)==0) { - bits=smallFCD[c>>8]; // one byte per 0x100 code points - } - if(bits&1) { - for(int i=0; i<0x20; ++i, ++c) { - tccc180[c]=(uint8_t)getFCD16FromNormData(c); - } - } else { - uprv_memset(tccc180+c, 0, 0x20); - c+=0x20; - } - } -} - -uint8_t Normalizer2Impl::getTrailCCFromCompYesAndZeroCC(const UChar *cpStart, const UChar *cpLimit) const { - UChar32 c; - if(cpStart==(cpLimit-1)) { - c=*cpStart; - } else { - c=U16_GET_SUPPLEMENTARY(cpStart[0], cpStart[1]); - } - uint16_t prevNorm16=getNorm16(c); - if(prevNorm16<=minYesNo) { - return 0; // yesYes and Hangul LV/LVT have ccc=tccc=0 - } else { - return (uint8_t)(*getMapping(prevNorm16)>>8); // tccc from yesNo - } } -namespace { - class LcccContext { public: LcccContext(const Normalizer2Impl &ni, UnicodeSet &s) : impl(ni), set(s) {} void handleRange(UChar32 start, UChar32 end, uint16_t norm16) { - if(impl.isAlgorithmicNoNo(norm16)) { - // Range of code points with same-norm16-value algorithmic decompositions. - // They might have different non-zero FCD16 values. - do { - uint16_t fcd16=impl.getFCD16(start); - if(fcd16>0xff) { set.add(start); } - } while(++start<=end); - } else { + if (norm16 > Normalizer2Impl::MIN_NORMAL_MAYBE_YES && + norm16 != Normalizer2Impl::JAMO_VT) { + set.add(start, end); + } else if (impl.minNoNoCompNoMaybeCC <= norm16 && norm16 < impl.limitNoNo) { uint16_t fcd16=impl.getFCD16(start); if(fcd16>0xff) { set.add(start, end); } } @@ -335,6 +464,8 @@ private: UnicodeSet &set; }; +namespace { + struct PropertyStartsContext { PropertyStartsContext(const Normalizer2Impl &ni, const USetAdder *adder) : impl(ni), sa(adder) {} @@ -359,7 +490,8 @@ enumNorm16PropertyStartsRange(const void *context, UChar32 start, UChar32 end, u const PropertyStartsContext *ctx=(const PropertyStartsContext *)context; const USetAdder *sa=ctx->sa; sa->add(sa->set, start); - if(start!=end && ctx->impl.isAlgorithmicNoNo((uint16_t)value)) { + if (start != end && ctx->impl.isAlgorithmicNoNo((uint16_t)value) && + (value & Normalizer2Impl::DELTA_TCCC_MASK) > Normalizer2Impl::DELTA_TCCC_1) { // Range of code points with same-norm16-value algorithmic decompositions. // They might have different non-zero FCD16 values. uint16_t prevFCD16=ctx->impl.getFCD16(start); @@ -391,7 +523,6 @@ U_CDECL_END void Normalizer2Impl::addLcccChars(UnicodeSet &set) const { - /* add the start code point of each same-value range of each trie */ LcccContext context(*this, set); utrie2_enum(normTrie, NULL, enumLcccRange, &context); } @@ -568,77 +699,174 @@ Normalizer2Impl::decompose(const UChar *src, const UChar *limit, // fail the quick check loop and/or where the quick check loop's overhead // is unlikely to be amortized. // Called by the compose() and makeFCD() implementations. -UBool Normalizer2Impl::decomposeShort(const UChar *src, const UChar *limit, - ReorderingBuffer &buffer, - UErrorCode &errorCode) const { +const UChar * +Normalizer2Impl::decomposeShort(const UChar *src, const UChar *limit, + UBool stopAtCompBoundary, UBool onlyContiguous, + ReorderingBuffer &buffer, UErrorCode &errorCode) const { + if (U_FAILURE(errorCode)) { + return nullptr; + } while(src= limitNoNo) { + if (isMaybeOrNonZeroCC(norm16)) { return buffer.append(c, getCCFromYesOrMaybe(norm16), errorCode); - } else if(isHangul(norm16)) { + } + // Maps to an isCompYesAndZeroCC. + c=mapAlgorithmic(c, norm16); + norm16=getNorm16(c); + } + if (norm16 < minYesNo) { + // c does not decompose + return buffer.append(c, 0, errorCode); + } else if(isHangulLV(norm16) || isHangulLVT(norm16)) { + // Hangul syllable: decompose algorithmically + UChar jamos[3]; + return buffer.appendZeroCC(jamos, jamos+Hangul::decompose(c, jamos), errorCode); + } + // c decomposes, get everything from the variable-length extra data + const uint16_t *mapping=getMapping(norm16); + uint16_t firstUnit=*mapping; + int32_t length=firstUnit&MAPPING_LENGTH_MASK; + uint8_t leadCC, trailCC; + trailCC=(uint8_t)(firstUnit>>8); + if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) { + leadCC=(uint8_t)(*(mapping-1)>>8); + } else { + leadCC=0; + } + return buffer.append((const UChar *)mapping+1, length, leadCC, trailCC, errorCode); +} + +const uint8_t * +Normalizer2Impl::decomposeShort(const uint8_t *src, const uint8_t *limit, + UBool stopAtCompBoundary, UBool onlyContiguous, + ReorderingBuffer &buffer, UErrorCode &errorCode) const { + if (U_FAILURE(errorCode)) { + return nullptr; + } + while (src < limit) { + const uint8_t *prevSrc = src; + uint16_t norm16; + UTRIE2_U8_NEXT16(normTrie, src, limit, norm16); + // Get the decomposition and the lead and trail cc's. + UChar32 c = U_SENTINEL; + if (norm16 >= limitNoNo) { + if (isMaybeOrNonZeroCC(norm16)) { + // No boundaries around this character. + c = codePointFromValidUTF8(prevSrc, src); + if (!buffer.append(c, getCCFromYesOrMaybe(norm16), errorCode)) { + return nullptr; + } + continue; + } + // Maps to an isCompYesAndZeroCC. + if (stopAtCompBoundary) { + return prevSrc; + } + c = codePointFromValidUTF8(prevSrc, src); + c = mapAlgorithmic(c, norm16); + norm16 = getNorm16(c); + } else if (stopAtCompBoundary && norm16 < minNoNoCompNoMaybeCC) { + return prevSrc; + } + // norm16!=INERT guarantees that [prevSrc, src[ is valid UTF-8. + // We do not see invalid UTF-8 here because + // its norm16==INERT is normalization-inert, + // so it gets copied unchanged in the fast path, + // and we stop the slow path where invalid UTF-8 begins. + U_ASSERT(norm16 != INERT); + if (norm16 < minYesNo) { + if (c < 0) { + c = codePointFromValidUTF8(prevSrc, src); + } + // does not decompose + if (!buffer.append(c, 0, errorCode)) { + return nullptr; + } + } else if (isHangulLV(norm16) || isHangulLVT(norm16)) { // Hangul syllable: decompose algorithmically - UChar jamos[3]; - return buffer.appendZeroCC(jamos, jamos+Hangul::decompose(c, jamos), errorCode); - } else if(isDecompNoAlgorithmic(norm16)) { - c=mapAlgorithmic(c, norm16); - norm16=getNorm16(c); + if (c < 0) { + c = codePointFromValidUTF8(prevSrc, src); + } + char16_t jamos[3]; + if (!buffer.appendZeroCC(jamos, jamos+Hangul::decompose(c, jamos), errorCode)) { + return nullptr; + } } else { - // c decomposes, get everything from the variable-length extra data - const uint16_t *mapping=getMapping(norm16); - uint16_t firstUnit=*mapping; - int32_t length=firstUnit&MAPPING_LENGTH_MASK; - uint8_t leadCC, trailCC; - trailCC=(uint8_t)(firstUnit>>8); - if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) { - leadCC=(uint8_t)(*(mapping-1)>>8); + // The character decomposes, get everything from the variable-length extra data. + const uint16_t *mapping = getMapping(norm16); + uint16_t firstUnit = *mapping; + int32_t length = firstUnit & MAPPING_LENGTH_MASK; + uint8_t trailCC = (uint8_t)(firstUnit >> 8); + uint8_t leadCC; + if (firstUnit & MAPPING_HAS_CCC_LCCC_WORD) { + leadCC = (uint8_t)(*(mapping-1) >> 8); } else { - leadCC=0; + leadCC = 0; + } + if (!buffer.append((const char16_t *)mapping+1, length, leadCC, trailCC, errorCode)) { + return nullptr; } - return buffer.append((const UChar *)mapping+1, length, leadCC, trailCC, errorCode); + } + if (stopAtCompBoundary && norm16HasCompBoundaryAfter(norm16, onlyContiguous)) { + return src; } } + return src; } const UChar * Normalizer2Impl::getDecomposition(UChar32 c, UChar buffer[4], int32_t &length) const { - const UChar *decomp=NULL; uint16_t norm16; - for(;;) { - if(c>7)&1)-1; - uint16_t rm0=*rawMapping; - if(rm0<=MAPPING_LENGTH_MASK) { - length=rm0; - return (const UChar *)rawMapping-rm0; - } else { - // Copy the normal mapping and replace its first two code units with rm0. - buffer[0]=(UChar)rm0; - u_memcpy(buffer+1, (const UChar *)mapping+1+2, mLength-2); - length=mLength-1; - return buffer; - } + } + // c decomposes, get everything from the variable-length extra data + const uint16_t *mapping=getMapping(norm16); + uint16_t firstUnit=*mapping; + int32_t mLength=firstUnit&MAPPING_LENGTH_MASK; // length of normal mapping + if(firstUnit&MAPPING_HAS_RAW_MAPPING) { + // Read the raw mapping from before the firstUnit and before the optional ccc/lccc word. + // Bit 7=MAPPING_HAS_CCC_LCCC_WORD + const uint16_t *rawMapping=mapping-((firstUnit>>7)&1)-1; + uint16_t rm0=*rawMapping; + if(rm0<=MAPPING_LENGTH_MASK) { + length=rm0; + return (const UChar *)rawMapping-rm0; } else { - length=mLength; - return (const UChar *)mapping+1; + // Copy the normal mapping and replace its first two code units with rm0. + buffer[0]=(UChar)rm0; + u_memcpy(buffer+1, (const UChar *)mapping+1+2, mLength-2); + length=mLength-1; + return buffer; } + } else { + length=mLength; + return (const UChar *)mapping+1; } } @@ -717,43 +942,60 @@ void Normalizer2Impl::decomposeAndAppend(const UChar *src, const UChar *limit, } } -// Note: hasDecompBoundary() could be implemented as aliases to -// hasFCDBoundaryBefore() and hasFCDBoundaryAfter() -// at the cost of building the FCD trie for a decomposition normalizer. -UBool Normalizer2Impl::hasDecompBoundary(UChar32 c, UBool before) const { - for(;;) { - if(cMIN_NORMAL_MAYBE_YES) { - return FALSE; // ccc!=0 - } else if(isDecompNoAlgorithmic(norm16)) { - c=mapAlgorithmic(c, norm16); - } else { - // c decomposes, get everything from the variable-length extra data - const uint16_t *mapping=getMapping(norm16); - uint16_t firstUnit=*mapping; - if((firstUnit&MAPPING_LENGTH_MASK)==0) { - return FALSE; - } - if(!before) { - // decomp after-boundary: same as hasFCDBoundaryAfter(), - // fcd16<=1 || trailCC==0 - if(firstUnit>0x1ff) { - return FALSE; // trailCC>1 - } - if(firstUnit<=0xff) { - return TRUE; // trailCC==0 - } - // if(trailCC==1) test leadCC==0, same as checking for before-boundary - } - // TRUE if leadCC==0 (hasFCDBoundaryBefore()) - return (firstUnit&MAPPING_HAS_CCC_LCCC_WORD)==0 || (*(mapping-1)&0xff00)==0; - } +UBool Normalizer2Impl::hasDecompBoundaryBefore(UChar32 c) const { + return c < minLcccCP || (c <= 0xffff && !singleLeadMightHaveNonZeroFCD16(c)) || + norm16HasDecompBoundaryBefore(getNorm16(c)); +} + +UBool Normalizer2Impl::norm16HasDecompBoundaryBefore(uint16_t norm16) const { + if (norm16 < minNoNoCompNoMaybeCC) { + return TRUE; } + if (norm16 >= limitNoNo) { + return norm16 <= MIN_NORMAL_MAYBE_YES || norm16 == JAMO_VT; + } + // c decomposes, get everything from the variable-length extra data + const uint16_t *mapping=getMapping(norm16); + uint16_t firstUnit=*mapping; + // TRUE if leadCC==0 (hasFCDBoundaryBefore()) + return (firstUnit&MAPPING_HAS_CCC_LCCC_WORD)==0 || (*(mapping-1)&0xff00)==0; +} + +UBool Normalizer2Impl::hasDecompBoundaryAfter(UChar32 c) const { + if (c < minDecompNoCP) { + return TRUE; + } + if (c <= 0xffff && !singleLeadMightHaveNonZeroFCD16(c)) { + return TRUE; + } + return norm16HasDecompBoundaryAfter(getNorm16(c)); +} + +UBool Normalizer2Impl::norm16HasDecompBoundaryAfter(uint16_t norm16) const { + if(norm16 <= minYesNo || isHangulLVT(norm16)) { + return TRUE; + } + if (norm16 >= limitNoNo) { + if (isMaybeOrNonZeroCC(norm16)) { + return norm16 <= MIN_NORMAL_MAYBE_YES || norm16 == JAMO_VT; + } + // Maps to an isCompYesAndZeroCC. + return (norm16 & DELTA_TCCC_MASK) <= DELTA_TCCC_1; + } + // c decomposes, get everything from the variable-length extra data + const uint16_t *mapping=getMapping(norm16); + uint16_t firstUnit=*mapping; + // decomp after-boundary: same as hasFCDBoundaryAfter(), + // fcd16<=1 || trailCC==0 + if(firstUnit>0x1ff) { + return FALSE; // trailCC>1 + } + if(firstUnit<=0xff) { + return TRUE; // trailCC==0 + } + // if(trailCC==1) test leadCC==0, same as checking for before-boundary + // TRUE if leadCC==0 (hasFCDBoundaryBefore()) + return (firstUnit&MAPPING_HAS_CCC_LCCC_WORD)==0 || (*(mapping-1)&0xff00)==0; } /* @@ -1031,6 +1273,7 @@ Normalizer2Impl::composePair(UChar32 a, UChar32 b) const { if(isInert(norm16)) { return U_SENTINEL; } else if(norm16minYesNo) { // composite 'a' has both mapping & compositions list list+= // mapping pointer - 1+ // +1 to skip the first unit with the mapping lenth + 1+ // +1 to skip the first unit with the mapping length (*list&MAPPING_LENGTH_MASK); // + mapping length } } } else if(norm16=minNoNo. + // The current character is either a "noNo" (has a mapping) + // or a "maybeYes" (combines backward) + // or a "yesYes" with ccc!=0. + // It is not a Hangul syllable or Jamo L because those have "yes" properties. + + // Medium-fast path: Handle cases that do not require full decomposition and recomposition. + if (!isMaybeOrNonZeroCC(norm16)) { // minNoNo <= norm16 < minMaybeYes + if (!doCompose) { + return FALSE; } - // Set prevBoundary to the last character in the quick check loop. - prevBoundary=src-1; - if( U16_IS_TRAIL(*prevBoundary) && prevSrc(getMapping(norm16)); + int32_t length = *mapping++ & MAPPING_LENGTH_MASK; + if(!buffer.appendZeroCC(mapping, mapping + length, errorCode)) { + break; + } + prevBoundary = src; + continue; + } + } else if (norm16 >= minNoNoEmpty) { + // The current character maps to nothing. + // Simply omit it from the output if there is a boundary before _or_ after it. + // The character itself implies no boundaries. + if (hasCompBoundaryBefore(src, limit) || + hasCompBoundaryAfter(prevBoundary, prevSrc, onlyContiguous)) { + if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) { + break; + } + prevBoundary = src; + continue; + } } - // The start of the current character (c). - prevSrc=src; - } else if(src==limit) { - break; - } - - src+=U16_LENGTH(c); - /* - * isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo. - * c is either a "noNo" (has a mapping) or a "maybeYes" (combines backward) - * or has ccc!=0. - * Check for Jamo V/T, then for regular characters. - * c is not a Hangul syllable or Jamo L because those have "yes" properties. - */ - if(isJamoVT(norm16) && prevBoundary!=prevSrc) { + // Other "noNo" type, or need to examine more text around this character: + // Fall through to the slow path. + } else if (isJamoVT(norm16) && prevBoundary != prevSrc) { UChar prev=*(prevSrc-1); - UBool needToDecompose=FALSE; if(c= 0) { + UChar32 syllable = Hangul::HANGUL_BASE + + (l*Hangul::JAMO_V_COUNT + (c-Hangul::JAMO_V_BASE)) * + Hangul::JAMO_T_COUNT + t; + --prevSrc; // Replace the Jamo L as well. + if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) { + break; + } + if(!buffer.appendBMP((UChar)syllable, 0, errorCode)) { + break; + } + prevBoundary = src; continue; } // If we see L+V+x where x!=T then we drop to the slow path, // decompose and recompose. // This is to deal with NFKC finding normal L and V but a - // compatibility variant of a T. We need to either fully compose that - // combination here (which would complicate the code and may not work - // with strange custom data) or use the slow path -- or else our replacing - // two input characters (L+V) with one output character (LV syllable) - // would violate the invariant that [prevBoundary..prevSrc[ has the same - // length as what we appended to the buffer since prevBoundary. - needToDecompose=TRUE; + // compatibility variant of a T. + // We need to either fully compose that combination here + // (which would complicate the code and may not work with strange custom data) + // or use the slow path. } - } else if(Hangul::isHangulWithoutJamoT(prev)) { - // c is a Jamo Trailing consonant, + } else if (Hangul::isHangulLV(prev)) { + // The current character is a Jamo Trailing consonant, // compose with previous Hangul LV that does not contain a Jamo T. - if(!doCompose) { + if (!doCompose) { return FALSE; } - buffer.setLastChar((UChar)(prev+c-Hangul::JAMO_T_BASE)); - prevBoundary=src; - continue; - } - if(!needToDecompose) { - // The Jamo V/T did not compose into a Hangul syllable. - if(doCompose) { - if(!buffer.appendBMP((UChar)c, 0, errorCode)) { - break; - } - } else { - prevCC=0; + UChar32 syllable = prev + c - Hangul::JAMO_T_BASE; + --prevSrc; // Replace the Hangul LV as well. + if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) { + break; + } + if(!buffer.appendBMP((UChar)syllable, 0, errorCode)) { + break; } + prevBoundary = src; continue; } - } - /* - * Source buffer pointers: - * - * all done quick check current char not yet - * "yes" but (c) processed - * may combine - * forward - * [-------------[-------------[-------------[-------------[ - * | | | | | - * orig. src prevBoundary prevSrc src limit - * - * - * Destination buffer pointers inside the ReorderingBuffer: - * - * all done might take not filled yet - * characters for - * reordering - * [-------------[-------------[-------------[ - * | | | | - * start reorderStart limit | - * +remainingCap.+ - */ - if(norm16>=MIN_YES_YES_WITH_CC) { - uint8_t cc=(uint8_t)norm16; // cc!=0 - if( onlyContiguous && // FCC - (doCompose ? buffer.getLastCC() : prevCC)==0 && - prevBoundarycc - ) { + // No matching context, or may need to decompose surrounding text first: + // Fall through to the slow path. + } else if (norm16 > JAMO_VT) { // norm16 >= MIN_YES_YES_WITH_CC + // One or more combining marks that do not combine-back: + // Check for canonical order, copy unchanged if ok and + // if followed by a character with a boundary-before. + uint8_t cc = getCCFromNormalYesOrMaybe(norm16); // cc!=0 + if (onlyContiguous /* FCC */ && getPreviousTrailCC(prevBoundary, prevSrc) > cc) { // Fails FCD test, need to decompose and contiguously recompose. - if(!doCompose) { + if (!doCompose) { return FALSE; } - } else if(doCompose) { - if(!buffer.append(c, cc, errorCode)) { - break; - } - continue; - } else if(prevCC<=cc) { - prevCC=cc; - continue; } else { - return FALSE; + // If !onlyContiguous (not FCC), then we ignore the tccc of + // the previous character which passed the quick check "yes && ccc==0" test. + const UChar *nextSrc; + uint16_t n16; + for (;;) { + if (src == limit) { + if (doCompose) { + buffer.appendZeroCC(prevBoundary, limit, errorCode); + } + return TRUE; + } + uint8_t prevCC = cc; + nextSrc = src; + UTRIE2_U16_NEXT16(normTrie, nextSrc, limit, c, n16); + if (n16 >= MIN_YES_YES_WITH_CC) { + cc = getCCFromNormalYesOrMaybe(n16); + if (prevCC > cc) { + if (!doCompose) { + return FALSE; + } + break; + } + } else { + break; + } + src = nextSrc; + } + // src is after the last in-order combining mark. + // If there is a boundary here, then we continue with no change. + if (norm16HasCompBoundaryBefore(n16)) { + if (isCompYesAndZeroCC(n16)) { + src = nextSrc; + } + continue; + } + // Use the slow path. There is no boundary in [prevSrc, src[. } - } else if(!doCompose && !isMaybeOrNonZeroCC(norm16)) { - return FALSE; } - /* - * Find appropriate boundaries around this character, - * decompose the source text from between the boundaries, - * and recompose it. - * - * We may need to remove the last few characters from the ReorderingBuffer - * to account for source text that was copied or appended - * but needs to take part in the recomposition. - */ - - /* - * Find the last composition boundary in [prevBoundary..src[. - * It is either the decomposition of the current character (at prevSrc), - * or prevBoundary. - */ - if(hasCompBoundaryBefore(c, norm16)) { - prevBoundary=prevSrc; - } else if(doCompose) { - buffer.removeSuffix((int32_t)(prevSrc-prevBoundary)); - } - - // Find the next composition boundary in [src..limit[ - - // modifies src to point to the next starter. - src=(UChar *)findNextCompBoundary(src, limit); - - // Decompose [prevBoundary..src[ into the buffer and then recompose that part of it. + // Slow path: Find the nearest boundaries around the current character, + // decompose and recompose. + if (prevBoundary != prevSrc && !norm16HasCompBoundaryBefore(norm16)) { + const UChar *p = prevSrc; + UTRIE2_U16_PREV16(normTrie, prevBoundary, p, c, norm16); + if (!norm16HasCompBoundaryAfter(norm16, onlyContiguous)) { + prevSrc = p; + } + } + if (doCompose && prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) { + break; + } int32_t recomposeStartIndex=buffer.length(); - if(!decomposeShort(prevBoundary, src, buffer, errorCode)) { + // We know there is not a boundary here. + decomposeShort(prevSrc, src, FALSE /* !stopAtCompBoundary */, onlyContiguous, + buffer, errorCode); + // Decompose until the next boundary. + src = decomposeShort(src, limit, TRUE /* stopAtCompBoundary */, onlyContiguous, + buffer, errorCode); + if (U_FAILURE(errorCode)) { break; } + if ((src - prevSrc) > INT32_MAX) { // guard before buffer.equals() + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + return TRUE; + } recompose(buffer, recomposeStartIndex, onlyContiguous); if(!doCompose) { - if(!buffer.equals(prevBoundary, src)) { + if(!buffer.equals(prevSrc, src)) { return FALSE; } buffer.remove(); - prevCC=0; } - - // Move to the next starter. We never need to look back before this point again. prevBoundary=src; } return TRUE; @@ -1340,30 +1600,28 @@ const UChar * Normalizer2Impl::composeQuickCheck(const UChar *src, const UChar *limit, UBool onlyContiguous, UNormalizationCheckResult *pQCResult) const { - /* - * prevBoundary points to the last character before the current one - * that has a composition boundary before it with ccc==0 and quick check "yes". - */ const UChar *prevBoundary=src; UChar32 minNoMaybeCP=minCompNoMaybeCP; if(limit==NULL) { UErrorCode errorCode=U_ZERO_ERROR; src=copyLowPrefixFromNulTerminated(src, minNoMaybeCP, NULL, errorCode); - if(prevBoundary=minNoNo. + // The current character is either a "noNo" (has a mapping) + // or a "maybeYes" (combines backward) + // or a "yesYes" with ccc!=0. + // It is not a Hangul syllable or Jamo L because those have "yes" properties. + + uint16_t prevNorm16 = INERT; + if (prevBoundary != prevSrc) { + if (norm16HasCompBoundaryBefore(norm16)) { + prevBoundary = prevSrc; + } else { + const UChar *p = prevSrc; + uint16_t n16; + UTRIE2_U16_PREV16(normTrie, prevBoundary, p, c, n16); + if (norm16HasCompBoundaryAfter(n16, onlyContiguous)) { + prevBoundary = prevSrc; + } else { + prevBoundary = p; + prevNorm16 = n16; + } } - prevCC=0; - // The start of the current character (c). - prevSrc=src; } - src+=U16_LENGTH(c); - /* - * isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo. - * c is either a "noNo" (has a mapping) or a "maybeYes" (combines backward) - * or has ccc!=0. - */ if(isMaybeOrNonZeroCC(norm16)) { uint8_t cc=getCCFromYesOrMaybe(norm16); - if( onlyContiguous && // FCC - cc!=0 && - prevCC==0 && - prevBoundarycc - ) { - // Fails FCD test. - } else if(prevCC<=cc || cc==0) { - prevCC=cc; - if(norm16 cc) { + // The [prevBoundary..prevSrc[ character + // passed the quick check "yes && ccc==0" test + // but is out of canonical order with the current combining mark. + } else { + // If !onlyContiguous (not FCC), then we ignore the tccc of + // the previous character which passed the quick check "yes && ccc==0" test. + const UChar *nextSrc; + for (;;) { + if (norm16 < MIN_YES_YES_WITH_CC) { + if (pQCResult != nullptr) { + *pQCResult = UNORM_MAYBE; + } else { + return prevBoundary; + } + } + if (src == limit) { + return src; + } + uint8_t prevCC = cc; + nextSrc = src; + UTRIE2_U16_NEXT16(normTrie, nextSrc, limit, c, norm16); + if (isMaybeOrNonZeroCC(norm16)) { + cc = getCCFromYesOrMaybe(norm16); + if (!(prevCC <= cc || cc == 0)) { + break; + } } else { - return prevBoundary; + break; } + src = nextSrc; + } + // src is after the last in-order combining mark. + if (isCompYesAndZeroCC(norm16)) { + prevBoundary = src; + src = nextSrc; + continue; } - continue; } } if(pQCResult!=NULL) { @@ -1453,10 +1732,10 @@ void Normalizer2Impl::composeAndAppend(const UChar *src, const UChar *limit, ReorderingBuffer &buffer, UErrorCode &errorCode) const { if(!buffer.isEmpty()) { - const UChar *firstStarterInSrc=findNextCompBoundary(src, limit); + const UChar *firstStarterInSrc=findNextCompBoundary(src, limit, onlyContiguous); if(src!=firstStarterInSrc) { const UChar *lastStarterInDest=findPreviousCompBoundary(buffer.getStart(), - buffer.getLimit()); + buffer.getLimit(), onlyContiguous); int32_t destSuffixLength=(int32_t)(buffer.getLimit()-lastStarterInDest); UnicodeString middle(lastStarterInDest, destSuffixLength); buffer.removeSuffix(destSuffixLength); @@ -1481,91 +1760,349 @@ void Normalizer2Impl::composeAndAppend(const UChar *src, const UChar *limit, } } -/** - * Does c have a composition boundary before it? - * True if its decomposition begins with a character that has - * ccc=0 && NFC_QC=Yes (isCompYesAndZeroCC()). - * As a shortcut, this is true if c itself has ccc=0 && NFC_QC=Yes - * (isCompYesAndZeroCC()) so we need not decompose. - */ -UBool Normalizer2Impl::hasCompBoundaryBefore(UChar32 c, uint16_t norm16) const { - for(;;) { - if(isCompYesAndZeroCC(norm16)) { +UBool +Normalizer2Impl::composeUTF8(uint32_t options, UBool onlyContiguous, + const uint8_t *src, const uint8_t *limit, + ByteSink *sink, Edits *edits, UErrorCode &errorCode) const { + U_ASSERT(limit != nullptr); + UnicodeString s16; + uint8_t minNoMaybeLead = leadByteForCP(minCompNoMaybeCP); + const uint8_t *prevBoundary = src; + + for (;;) { + // Fast path: Scan over a sequence of characters below the minimum "no or maybe" code point, + // or with (compYes && ccc==0) properties. + const uint8_t *prevSrc; + uint16_t norm16 = 0; + for (;;) { + if (src == limit) { + if (prevBoundary != limit && sink != nullptr) { + ByteSinkUtil::appendUnchanged(prevBoundary, limit, + *sink, options, edits, errorCode); + } + return TRUE; + } + if (*src < minNoMaybeLead) { + ++src; + } else { + prevSrc = src; + UTRIE2_U8_NEXT16(normTrie, src, limit, norm16); + if (!isCompYesAndZeroCC(norm16)) { + break; + } + } + } + // isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo. + // The current character is either a "noNo" (has a mapping) + // or a "maybeYes" (combines backward) + // or a "yesYes" with ccc!=0. + // It is not a Hangul syllable or Jamo L because those have "yes" properties. + + // Medium-fast path: Handle cases that do not require full decomposition and recomposition. + if (!isMaybeOrNonZeroCC(norm16)) { // minNoNo <= norm16 < minMaybeYes + if (sink == nullptr) { + return FALSE; + } + // Fast path for mapping a character that is immediately surrounded by boundaries. + // In this case, we need not decompose around the current character. + if (isDecompNoAlgorithmic(norm16)) { + // Maps to a single isCompYesAndZeroCC character + // which also implies hasCompBoundaryBefore. + if (norm16HasCompBoundaryAfter(norm16, onlyContiguous) || + hasCompBoundaryBefore(src, limit)) { + if (prevBoundary != prevSrc && + !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc, + *sink, options, edits, errorCode)) { + break; + } + appendCodePointDelta(prevSrc, src, getAlgorithmicDelta(norm16), *sink, edits); + prevBoundary = src; + continue; + } + } else if (norm16 < minNoNoCompBoundaryBefore) { + // The mapping is comp-normalized which also implies hasCompBoundaryBefore. + if (norm16HasCompBoundaryAfter(norm16, onlyContiguous) || + hasCompBoundaryBefore(src, limit)) { + if (prevBoundary != prevSrc && + !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc, + *sink, options, edits, errorCode)) { + break; + } + const uint16_t *mapping = getMapping(norm16); + int32_t length = *mapping++ & MAPPING_LENGTH_MASK; + if (!ByteSinkUtil::appendChange(prevSrc, src, (const UChar *)mapping, length, + *sink, edits, errorCode)) { + break; + } + prevBoundary = src; + continue; + } + } else if (norm16 >= minNoNoEmpty) { + // The current character maps to nothing. + // Simply omit it from the output if there is a boundary before _or_ after it. + // The character itself implies no boundaries. + if (hasCompBoundaryBefore(src, limit) || + hasCompBoundaryAfter(prevBoundary, prevSrc, onlyContiguous)) { + if (prevBoundary != prevSrc && + !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc, + *sink, options, edits, errorCode)) { + break; + } + if (edits != nullptr) { + edits->addReplace((int32_t)(src - prevSrc), 0); + } + prevBoundary = src; + continue; + } + } + // Other "noNo" type, or need to examine more text around this character: + // Fall through to the slow path. + } else if (isJamoVT(norm16)) { + // Jamo L: E1 84 80..92 + // Jamo V: E1 85 A1..B5 + // Jamo T: E1 86 A8..E1 87 82 + U_ASSERT((src - prevSrc) == 3 && *prevSrc == 0xe1); + UChar32 prev = previousHangulOrJamo(prevBoundary, prevSrc); + if (prevSrc[1] == 0x85) { + // The current character is a Jamo Vowel, + // compose with previous Jamo L and following Jamo T. + UChar32 l = prev - Hangul::JAMO_L_BASE; + if ((uint32_t)l < Hangul::JAMO_L_COUNT) { + if (sink == nullptr) { + return FALSE; + } + int32_t t = getJamoTMinusBase(src, limit); + if (t >= 0) { + // The next character is a Jamo T. + src += 3; + } else if (hasCompBoundaryBefore(src, limit)) { + // No Jamo T follows, not even via decomposition. + t = 0; + } + if (t >= 0) { + UChar32 syllable = Hangul::HANGUL_BASE + + (l*Hangul::JAMO_V_COUNT + (prevSrc[2]-0xa1)) * + Hangul::JAMO_T_COUNT + t; + prevSrc -= 3; // Replace the Jamo L as well. + if (prevBoundary != prevSrc && + !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc, + *sink, options, edits, errorCode)) { + break; + } + ByteSinkUtil::appendCodePoint(prevSrc, src, syllable, *sink, edits); + prevBoundary = src; + continue; + } + // If we see L+V+x where x!=T then we drop to the slow path, + // decompose and recompose. + // This is to deal with NFKC finding normal L and V but a + // compatibility variant of a T. + // We need to either fully compose that combination here + // (which would complicate the code and may not work with strange custom data) + // or use the slow path. + } + } else if (Hangul::isHangulLV(prev)) { + // The current character is a Jamo Trailing consonant, + // compose with previous Hangul LV that does not contain a Jamo T. + if (sink == nullptr) { + return FALSE; + } + UChar32 syllable = prev + getJamoTMinusBase(prevSrc, src); + prevSrc -= 3; // Replace the Hangul LV as well. + if (prevBoundary != prevSrc && + !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc, + *sink, options, edits, errorCode)) { + break; + } + ByteSinkUtil::appendCodePoint(prevSrc, src, syllable, *sink, edits); + prevBoundary = src; + continue; + } + // No matching context, or may need to decompose surrounding text first: + // Fall through to the slow path. + } else if (norm16 > JAMO_VT) { // norm16 >= MIN_YES_YES_WITH_CC + // One or more combining marks that do not combine-back: + // Check for canonical order, copy unchanged if ok and + // if followed by a character with a boundary-before. + uint8_t cc = getCCFromNormalYesOrMaybe(norm16); // cc!=0 + if (onlyContiguous /* FCC */ && getPreviousTrailCC(prevBoundary, prevSrc) > cc) { + // Fails FCD test, need to decompose and contiguously recompose. + if (sink == nullptr) { + return FALSE; + } + } else { + // If !onlyContiguous (not FCC), then we ignore the tccc of + // the previous character which passed the quick check "yes && ccc==0" test. + const uint8_t *nextSrc; + uint16_t n16; + for (;;) { + if (src == limit) { + if (sink != nullptr) { + ByteSinkUtil::appendUnchanged(prevBoundary, limit, + *sink, options, edits, errorCode); + } + return TRUE; + } + uint8_t prevCC = cc; + nextSrc = src; + UTRIE2_U8_NEXT16(normTrie, nextSrc, limit, n16); + if (n16 >= MIN_YES_YES_WITH_CC) { + cc = getCCFromNormalYesOrMaybe(n16); + if (prevCC > cc) { + if (sink == nullptr) { + return FALSE; + } + break; + } + } else { + break; + } + src = nextSrc; + } + // src is after the last in-order combining mark. + // If there is a boundary here, then we continue with no change. + if (norm16HasCompBoundaryBefore(n16)) { + if (isCompYesAndZeroCC(n16)) { + src = nextSrc; + } + continue; + } + // Use the slow path. There is no boundary in [prevSrc, src[. + } + } + + // Slow path: Find the nearest boundaries around the current character, + // decompose and recompose. + if (prevBoundary != prevSrc && !norm16HasCompBoundaryBefore(norm16)) { + const uint8_t *p = prevSrc; + UTRIE2_U8_PREV16(normTrie, prevBoundary, p, norm16); + if (!norm16HasCompBoundaryAfter(norm16, onlyContiguous)) { + prevSrc = p; + } + } + ReorderingBuffer buffer(*this, s16, errorCode); + if (U_FAILURE(errorCode)) { + break; + } + // We know there is not a boundary here. + decomposeShort(prevSrc, src, FALSE /* !stopAtCompBoundary */, onlyContiguous, + buffer, errorCode); + // Decompose until the next boundary. + src = decomposeShort(src, limit, TRUE /* stopAtCompBoundary */, onlyContiguous, + buffer, errorCode); + if (U_FAILURE(errorCode)) { + break; + } + if ((src - prevSrc) > INT32_MAX) { // guard before buffer.equals() + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; return TRUE; - } else if(isMaybeOrNonZeroCC(norm16)) { - return FALSE; - } else if(isDecompNoAlgorithmic(norm16)) { - c=mapAlgorithmic(c, norm16); - norm16=getNorm16(c); - } else { - // c decomposes, get everything from the variable-length extra data - const uint16_t *mapping=getMapping(norm16); - uint16_t firstUnit=*mapping; - if((firstUnit&MAPPING_LENGTH_MASK)==0) { + } + recompose(buffer, 0, onlyContiguous); + if (!buffer.equals(prevSrc, src)) { + if (sink == nullptr) { return FALSE; } - if((firstUnit&MAPPING_HAS_CCC_LCCC_WORD) && (*(mapping-1)&0xff00)) { - return FALSE; // non-zero leadCC + if (prevBoundary != prevSrc && + !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc, + *sink, options, edits, errorCode)) { + break; + } + if (!ByteSinkUtil::appendChange(prevSrc, src, buffer.getStart(), buffer.length(), + *sink, edits, errorCode)) { + break; } - int32_t i=1; // skip over the firstUnit - UChar32 c; - U16_NEXT_UNSAFE(mapping, i, c); - return isCompYesAndZeroCC(getNorm16(c)); + prevBoundary = src; } } + return TRUE; } -UBool Normalizer2Impl::hasCompBoundaryAfter(UChar32 c, UBool onlyContiguous, UBool testInert) const { - for(;;) { - uint16_t norm16=getNorm16(c); - if(isInert(norm16)) { - return TRUE; - } else if(norm16<=minYesNo) { - // Hangul: norm16==minYesNo - // Hangul LVT has a boundary after it. - // Hangul LV and non-inert yesYes characters combine forward. - return isHangul(norm16) && !Hangul::isHangulWithoutJamoT((UChar)c); - } else if(norm16>= (testInert ? minNoNo : minMaybeYes)) { - return FALSE; - } else if(isDecompNoAlgorithmic(norm16)) { - c=mapAlgorithmic(c, norm16); - } else { - // c decomposes, get everything from the variable-length extra data. - // If testInert, then c must be a yesNo character which has lccc=0, - // otherwise it could be a noNo. - const uint16_t *mapping=getMapping(norm16); - uint16_t firstUnit=*mapping; - // TRUE if - // not MAPPING_NO_COMP_BOUNDARY_AFTER - // (which is set if - // c is not deleted, and - // it and its decomposition do not combine forward, and it has a starter) - // and if FCC then trailCC<=1 - return - (firstUnit&MAPPING_NO_COMP_BOUNDARY_AFTER)==0 && - (!onlyContiguous || firstUnit<=0x1ff); - } +UBool Normalizer2Impl::hasCompBoundaryBefore(const UChar *src, const UChar *limit) const { + if (src == limit || *src < minCompNoMaybeCP) { + return TRUE; } + UChar32 c; + uint16_t norm16; + UTRIE2_U16_NEXT16(normTrie, src, limit, c, norm16); + return norm16HasCompBoundaryBefore(norm16); } -const UChar *Normalizer2Impl::findPreviousCompBoundary(const UChar *start, const UChar *p) const { - BackwardUTrie2StringIterator iter(normTrie, start, p); +UBool Normalizer2Impl::hasCompBoundaryBefore(const uint8_t *src, const uint8_t *limit) const { + if (src == limit) { + return TRUE; + } uint16_t norm16; - do { - norm16=iter.previous16(); - } while(!hasCompBoundaryBefore(iter.codePoint, norm16)); - // We could also test hasCompBoundaryAfter() and return iter.codePointLimit, - // but that's probably not worth the extra cost. - return iter.codePointStart; + UTRIE2_U8_NEXT16(normTrie, src, limit, norm16); + return norm16HasCompBoundaryBefore(norm16); } -const UChar *Normalizer2Impl::findNextCompBoundary(const UChar *p, const UChar *limit) const { - ForwardUTrie2StringIterator iter(normTrie, p, limit); +UBool Normalizer2Impl::hasCompBoundaryAfter(const UChar *start, const UChar *p, + UBool onlyContiguous) const { + if (start == p) { + return TRUE; + } + UChar32 c; uint16_t norm16; - do { - norm16=iter.next16(); - } while(!hasCompBoundaryBefore(iter.codePoint, norm16)); - return iter.codePointStart; + UTRIE2_U16_PREV16(normTrie, start, p, c, norm16); + return norm16HasCompBoundaryAfter(norm16, onlyContiguous); +} + +UBool Normalizer2Impl::hasCompBoundaryAfter(const uint8_t *start, const uint8_t *p, + UBool onlyContiguous) const { + if (start == p) { + return TRUE; + } + uint16_t norm16; + UTRIE2_U8_PREV16(normTrie, start, p, norm16); + return norm16HasCompBoundaryAfter(norm16, onlyContiguous); +} + +const UChar *Normalizer2Impl::findPreviousCompBoundary(const UChar *start, const UChar *p, + UBool onlyContiguous) const { + BackwardUTrie2StringIterator iter(normTrie, start, p); + for(;;) { + uint16_t norm16=iter.previous16(); + if (norm16HasCompBoundaryAfter(norm16, onlyContiguous)) { + return iter.codePointLimit; + } + if (hasCompBoundaryBefore(iter.codePoint, norm16)) { + return iter.codePointStart; + } + } +} + +const UChar *Normalizer2Impl::findNextCompBoundary(const UChar *p, const UChar *limit, + UBool onlyContiguous) const { + ForwardUTrie2StringIterator iter(normTrie, p, limit); + for(;;) { + uint16_t norm16=iter.next16(); + if (hasCompBoundaryBefore(iter.codePoint, norm16)) { + return iter.codePointStart; + } + if (norm16HasCompBoundaryAfter(norm16, onlyContiguous)) { + return iter.codePointLimit; + } + } +} + +uint8_t Normalizer2Impl::getPreviousTrailCC(const UChar *start, const UChar *p) const { + if (start == p) { + return 0; + } + int32_t i = (int32_t)(p - start); + UChar32 c; + U16_PREV(start, 0, i, c); + return (uint8_t)getFCD16(c); +} + +uint8_t Normalizer2Impl::getPreviousTrailCC(const uint8_t *start, const uint8_t *p) const { + if (start == p) { + return 0; + } + int32_t i = (int32_t)(p - start); + UChar32 c; + U8_PREV(start, 0, i, c); + return (uint8_t)getFCD16(c); } // Note: normalizer2impl.cpp r30982 (2011-nov-27) @@ -1573,43 +2110,41 @@ const UChar *Normalizer2Impl::findNextCompBoundary(const UChar *p, const UChar * // That provided faster access to FCD data than getFCD16FromNormData() // but required synchronization and consumed some 10kB of heap memory // in any process that uses FCD (e.g., via collation). -// tccc180[] and smallFCD[] are intended to help with any loss of performance, -// at least for Latin & CJK. +// minDecompNoCP etc. and smallFCD[] are intended to help with any loss of performance, +// at least for ASCII & CJK. // Gets the FCD value from the regular normalization data. uint16_t Normalizer2Impl::getFCD16FromNormData(UChar32 c) const { - // Only loops for 1:1 algorithmic mappings. - for(;;) { - uint16_t norm16=getNorm16(c); - if(norm16<=minYesNo) { - // no decomposition or Hangul syllable, all zeros - return 0; - } else if(norm16>=MIN_NORMAL_MAYBE_YES) { + uint16_t norm16=getNorm16(c); + if (norm16 >= limitNoNo) { + if(norm16>=MIN_NORMAL_MAYBE_YES) { // combining mark - norm16&=0xff; + norm16=getCCFromNormalYesOrMaybe(norm16); return norm16|(norm16<<8); } else if(norm16>=minMaybeYes) { return 0; - } else if(isDecompNoAlgorithmic(norm16)) { - c=mapAlgorithmic(c, norm16); - } else { - // c decomposes, get everything from the variable-length extra data - const uint16_t *mapping=getMapping(norm16); - uint16_t firstUnit=*mapping; - if((firstUnit&MAPPING_LENGTH_MASK)==0) { - // A character that is deleted (maps to an empty string) must - // get the worst-case lccc and tccc values because arbitrary - // characters on both sides will become adjacent. - return 0x1ff; - } else { - norm16=firstUnit>>8; // tccc - if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) { - norm16|=*(mapping-1)&0xff00; // lccc - } - return norm16; + } else { // isDecompNoAlgorithmic(norm16) + uint16_t deltaTrailCC = norm16 & DELTA_TCCC_MASK; + if (deltaTrailCC <= DELTA_TCCC_1) { + return deltaTrailCC >> OFFSET_SHIFT; } + // Maps to an isCompYesAndZeroCC. + c=mapAlgorithmic(c, norm16); + norm16=getNorm16(c); } } + if(norm16<=minYesNo || isHangulLVT(norm16)) { + // no decomposition or Hangul syllable, all zeros + return 0; + } + // c decomposes, get everything from the variable-length extra data + const uint16_t *mapping=getMapping(norm16); + uint16_t firstUnit=*mapping; + norm16=firstUnit>>8; // tccc + if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) { + norm16|=*(mapping-1)&0xff00; // lccc + } + return norm16; } // Dual functionality: @@ -1624,7 +2159,7 @@ Normalizer2Impl::makeFCD(const UChar *src, const UChar *limit, const UChar *prevBoundary=src; int32_t prevFCD16=0; if(limit==NULL) { - src=copyLowPrefixFromNulTerminated(src, MIN_CCC_LCCC_CP, buffer, errorCode); + src=copyLowPrefixFromNulTerminated(src, minLcccCP, buffer, errorCode); if(U_FAILURE(errorCode)) { return src; } @@ -1653,7 +2188,7 @@ Normalizer2Impl::makeFCD(const UChar *src, const UChar *limit, for(;;) { // count code units with lccc==0 for(prevSrc=src; src!=limit;) { - if((c=*src)1) { - --prevBoundary; + if(prev1) { + --prevBoundary; + } } } else { const UChar *p=src-1; @@ -1748,7 +2287,8 @@ Normalizer2Impl::makeFCD(const UChar *src, const UChar *limit, * The source text does not fulfill the conditions for FCD. * Decompose and reorder a limited piece of the text. */ - if(!decomposeShort(prevBoundary, src, *buffer, errorCode)) { + decomposeShort(prevBoundary, src, FALSE, FALSE, *buffer, errorCode); + if (U_FAILURE(errorCode)) { break; } prevBoundary=src; @@ -1792,16 +2332,33 @@ void Normalizer2Impl::makeFCDAndAppend(const UChar *src, const UChar *limit, } const UChar *Normalizer2Impl::findPreviousFCDBoundary(const UChar *start, const UChar *p) const { - while(start

0xff) {} + while(startmakeCanonIterDataFromNorm16( - start, end, (uint16_t)value, *impl->fCanonIterData, errorCode); + InitCanonIterData::handleRange(impl, start, end, (uint16_t)value, errorCode); } return U_SUCCESS(errorCode); } +U_CDECL_END - -// UInitOnce instantiation function for CanonIterData - -static void U_CALLCONV -initCanonIterData(Normalizer2Impl *impl, UErrorCode &errorCode) { +void InitCanonIterData::doInit(Normalizer2Impl *impl, UErrorCode &errorCode) { U_ASSERT(impl->fCanonIterData == NULL); impl->fCanonIterData = new CanonIterData(errorCode); if (impl->fCanonIterData == NULL) { errorCode=U_MEMORY_ALLOCATION_ERROR; } if (U_SUCCESS(errorCode)) { - utrie2_enum(impl->getNormTrie(), NULL, enumCIDRangeHandler, impl); + utrie2_enum(impl->normTrie, NULL, enumCIDRangeHandler, impl); utrie2_freeze(impl->fCanonIterData->trie, UTRIE2_32_VALUE_BITS, &errorCode); } if (U_FAILURE(errorCode)) { @@ -1881,12 +2447,15 @@ initCanonIterData(Normalizer2Impl *impl, UErrorCode &errorCode) { } } -U_CDECL_END +void InitCanonIterData::handleRange( + Normalizer2Impl *impl, UChar32 start, UChar32 end, uint16_t value, UErrorCode &errorCode) { + impl->makeCanonIterDataFromNorm16(start, end, value, *impl->fCanonIterData, errorCode); +} -void Normalizer2Impl::makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, uint16_t norm16, +void Normalizer2Impl::makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, const uint16_t norm16, CanonIterData &newData, UErrorCode &errorCode) const { - if(norm16==0 || (minYesNo<=norm16 && norm16=minMaybeYes) { + if(isMaybeOrNonZeroCC(norm16)) { // not a segment starter if it occurs in a decomposition or has cc!=0 newValue|=CANON_NOT_SEGMENT_STARTER; if(norm16 minYesNo) { // c decomposes, get everything from the variable-length extra data const uint16_t *mapping=getMapping(norm16_2); uint16_t firstUnit=*mapping; @@ -2017,7 +2590,7 @@ unorm2_swap(const UDataSwapper *ds, uint8_t *outBytes; const int32_t *inIndexes; - int32_t indexes[Normalizer2Impl::IX_MIN_MAYBE_YES+1]; + int32_t indexes[Normalizer2Impl::IX_TOTAL_SIZE+1]; int32_t i, offset, nextOffset, size; @@ -2029,12 +2602,13 @@ unorm2_swap(const UDataSwapper *ds, /* check data format and format version */ pInfo=(const UDataInfo *)((const char *)inData+4); + uint8_t formatVersion0=pInfo->formatVersion[0]; if(!( pInfo->dataFormat[0]==0x4e && /* dataFormat="Nrm2" */ pInfo->dataFormat[1]==0x72 && pInfo->dataFormat[2]==0x6d && pInfo->dataFormat[3]==0x32 && - (pInfo->formatVersion[0]==1 || pInfo->formatVersion[0]==2) + (1<=formatVersion0 && formatVersion0<=3) )) { udata_printError(ds, "unorm2_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized as Normalizer2 data\n", pInfo->dataFormat[0], pInfo->dataFormat[1], @@ -2048,10 +2622,18 @@ unorm2_swap(const UDataSwapper *ds, outBytes=(uint8_t *)outData+headerSize; inIndexes=(const int32_t *)inBytes; + int32_t minIndexesLength; + if(formatVersion0==1) { + minIndexesLength=Normalizer2Impl::IX_MIN_MAYBE_YES+1; + } else if(formatVersion0==2) { + minIndexesLength=Normalizer2Impl::IX_MIN_YES_NO_MAPPINGS_ONLY+1; + } else { + minIndexesLength=Normalizer2Impl::IX_MIN_LCCC_CP+1; + } if(length>=0) { length-=headerSize; - if(length<(int32_t)sizeof(indexes)) { + if(length=MIN_NORMAL_MAYBE_YES) { - return (uint8_t)norm16; + return getCCFromNormalYesOrMaybe(norm16); } if(norm16> OFFSET_SHIFT); + } static uint8_t getCCFromYesOrMaybe(uint16_t norm16) { - return norm16>=MIN_NORMAL_MAYBE_YES ? (uint8_t)norm16 : 0; + return norm16>=MIN_NORMAL_MAYBE_YES ? getCCFromNormalYesOrMaybe(norm16) : 0; + } + uint8_t getCCFromYesOrMaybeCP(UChar32 c) const { + if (c < minCompNoMaybeCP) { return 0; } + return getCCFromYesOrMaybe(getNorm16(c)); } /** @@ -272,10 +295,8 @@ public: * @return The lccc(c) in bits 15..8 and tccc(c) in bits 7..0. */ uint16_t getFCD16(UChar32 c) const { - if(c<0) { + if(c1) for quick FCC boundary-after tests. + DELTA_TCCC_0=0, + DELTA_TCCC_1=2, + DELTA_TCCC_GT_1=4, + DELTA_TCCC_MASK=6, + DELTA_SHIFT=3, - enum { - MIN_YES_YES_WITH_CC=0xff01, - JAMO_VT=0xff00, - MIN_NORMAL_MAYBE_YES=0xfe00, - JAMO_L=1, MAX_DELTA=0x40 }; @@ -394,21 +419,32 @@ public: IX_MIN_COMP_NO_MAYBE_CP, // Norm16 value thresholds for quick check combinations and types of extra data. - IX_MIN_YES_NO, // Mappings & compositions in [minYesNo..minYesNoMappingsOnly[. + + /** Mappings & compositions in [minYesNo..minYesNoMappingsOnly[. */ + IX_MIN_YES_NO, + /** Mappings are comp-normalized. */ IX_MIN_NO_NO, IX_LIMIT_NO_NO, IX_MIN_MAYBE_YES, - IX_MIN_YES_NO_MAPPINGS_ONLY, // Mappings only in [minYesNoMappingsOnly..minNoNo[. - - IX_RESERVED15, + /** Mappings only in [minYesNoMappingsOnly..minNoNo[. */ + IX_MIN_YES_NO_MAPPINGS_ONLY, + /** Mappings are not comp-normalized but have a comp boundary before. */ + IX_MIN_NO_NO_COMP_BOUNDARY_BEFORE, + /** Mappings do not have a comp boundary before. */ + IX_MIN_NO_NO_COMP_NO_MAYBE_CC, + /** Mappings to the empty string. */ + IX_MIN_NO_NO_EMPTY, + + IX_MIN_LCCC_CP, + IX_RESERVED19, IX_COUNT }; enum { MAPPING_HAS_CCC_LCCC_WORD=0x80, MAPPING_HAS_RAW_MAPPING=0x40, - MAPPING_NO_COMP_BOUNDARY_AFTER=0x20, + // unused bit 0x20, MAPPING_LENGTH_MASK=0x1f }; @@ -457,6 +493,12 @@ public: UnicodeString &safeMiddle, ReorderingBuffer &buffer, UErrorCode &errorCode) const; + + /** sink==nullptr: isNormalized() */ + UBool composeUTF8(uint32_t options, UBool onlyContiguous, + const uint8_t *src, const uint8_t *limit, + ByteSink *sink, icu::Edits *edits, UErrorCode &errorCode) const; + const UChar *makeFCD(const UChar *src, const UChar *limit, ReorderingBuffer *buffer, UErrorCode &errorCode) const; void makeFCDAndAppend(const UChar *src, const UChar *limit, @@ -465,27 +507,42 @@ public: ReorderingBuffer &buffer, UErrorCode &errorCode) const; - UBool hasDecompBoundary(UChar32 c, UBool before) const; + UBool hasDecompBoundaryBefore(UChar32 c) const; + UBool norm16HasDecompBoundaryBefore(uint16_t norm16) const; + UBool hasDecompBoundaryAfter(UChar32 c) const; + UBool norm16HasDecompBoundaryAfter(uint16_t norm16) const; UBool isDecompInert(UChar32 c) const { return isDecompYesAndZeroCC(getNorm16(c)); } UBool hasCompBoundaryBefore(UChar32 c) const { - return c=minMaybeYes; } - static UBool isInert(uint16_t norm16) { return norm16==0; } - static UBool isJamoL(uint16_t norm16) { return norm16==1; } + static UBool isInert(uint16_t norm16) { return norm16==INERT; } + static UBool isJamoL(uint16_t norm16) { return norm16==JAMO_L; } static UBool isJamoVT(uint16_t norm16) { return norm16==JAMO_VT; } - UBool isHangul(uint16_t norm16) const { return norm16==minYesNo; } + uint16_t hangulLVT() const { return minYesNoMappingsOnly|HAS_COMP_BOUNDARY_AFTER; } + UBool isHangulLV(uint16_t norm16) const { return norm16==minYesNo; } + UBool isHangulLVT(uint16_t norm16) const { + return norm16==hangulLVT(); + } UBool isCompYesAndZeroCC(uint16_t norm16) const { return norm16=MIN_YES_YES_WITH_CC || norm16=MIN_YES_YES_WITH_CC ? (uint8_t)norm16 : 0; + // return norm16>=MIN_YES_YES_WITH_CC ? getCCFromNormalYesOrMaybe(norm16) : 0; // } uint8_t getCCFromNoNo(uint16_t norm16) const { const uint16_t *mapping=getMapping(norm16); @@ -525,30 +582,47 @@ private: } } // requires that the [cpStart..cpLimit[ character passes isCompYesAndZeroCC() - uint8_t getTrailCCFromCompYesAndZeroCC(const UChar *cpStart, const UChar *cpLimit) const; + uint8_t getTrailCCFromCompYesAndZeroCC(uint16_t norm16) const { + if(norm16<=minYesNo) { + return 0; // yesYes and Hangul LV have ccc=tccc=0 + } else { + // For Hangul LVT we harmlessly fetch a firstUnit with tccc=0 here. + return (uint8_t)(*getMapping(norm16)>>8); // tccc from yesNo + } + } + uint8_t getPreviousTrailCC(const UChar *start, const UChar *p) const; + uint8_t getPreviousTrailCC(const uint8_t *start, const uint8_t *p) const; // Requires algorithmic-NoNo. UChar32 mapAlgorithmic(UChar32 c, uint16_t norm16) const { - return c+norm16-(minMaybeYes-MAX_DELTA-1); + return c+(norm16>>DELTA_SHIFT)-centerNoNoDelta; + } + UChar32 getAlgorithmicDelta(uint16_t norm16) const { + return (norm16>>DELTA_SHIFT)-centerNoNoDelta; } // Requires minYesNo>OFFSET_SHIFT); } const uint16_t *getCompositionsListForDecompYes(uint16_t norm16) const { - if(norm16==0 || MIN_NORMAL_MAYBE_YES<=norm16) { + if(norm16>OFFSET_SHIFT); + } /** * @param c code point must have compositions * @return compositions list pointer @@ -563,46 +637,78 @@ private: UChar32 minNeedDataCP, ReorderingBuffer *buffer, UErrorCode &errorCode) const; - UBool decomposeShort(const UChar *src, const UChar *limit, - ReorderingBuffer &buffer, UErrorCode &errorCode) const; + const UChar *decomposeShort(const UChar *src, const UChar *limit, + UBool stopAtCompBoundary, UBool onlyContiguous, + ReorderingBuffer &buffer, UErrorCode &errorCode) const; UBool decompose(UChar32 c, uint16_t norm16, ReorderingBuffer &buffer, UErrorCode &errorCode) const; + const uint8_t *decomposeShort(const uint8_t *src, const uint8_t *limit, + UBool stopAtCompBoundary, UBool onlyContiguous, + ReorderingBuffer &buffer, UErrorCode &errorCode) const; + static int32_t combine(const uint16_t *list, UChar32 trail); void addComposites(const uint16_t *list, UnicodeSet &set) const; void recompose(ReorderingBuffer &buffer, int32_t recomposeStartIndex, UBool onlyContiguous) const; - UBool hasCompBoundaryBefore(UChar32 c, uint16_t norm16) const; - const UChar *findPreviousCompBoundary(const UChar *start, const UChar *p) const; - const UChar *findNextCompBoundary(const UChar *p, const UChar *limit) const; + UBool hasCompBoundaryBefore(UChar32 c, uint16_t norm16) const { + return c -# include "unicode\uloc.h" +# include "unicode/uloc.h" #if U_PLATFORM_HAS_WINUWP_API == 0 # include "wintz.h" #else // U_PLATFORM_HAS_WINUWP_API typedef PVOID LPMSG; // TODO: figure out how to get rid of this typedef #include #include -#include -#include +#include +#include using namespace ABI::Windows::Foundation; using namespace Microsoft::WRL; @@ -533,6 +533,28 @@ uprv_fmin(double x, double y) return (x > y ? y : x); } +U_CAPI UBool U_EXPORT2 +uprv_add32_overflow(int32_t a, int32_t b, int32_t* res) { + // NOTE: Some compilers (GCC, Clang) have primitives available, like __builtin_add_overflow. + // This function could be optimized by calling one of those primitives. + auto a64 = static_cast(a); + auto b64 = static_cast(b); + int64_t res64 = a64 + b64; + *res = static_cast(res64); + return res64 != *res; +} + +U_CAPI UBool U_EXPORT2 +uprv_mul32_overflow(int32_t a, int32_t b, int32_t* res) { + // NOTE: Some compilers (GCC, Clang) have primitives available, like __builtin_mul_overflow. + // This function could be optimized by calling one of those primitives. + auto a64 = static_cast(a); + auto b64 = static_cast(b); + int64_t res64 = a64 * b64; + *res = static_cast(res64); + return res64 != *res; +} + /** * Truncates the given double. * trunc(3.3) = 3.0, trunc (-3.3) = -3.0 @@ -675,6 +697,16 @@ extern U_IMPORT char *U_TZNAME[]; #if !UCONFIG_NO_FILE_IO && ((U_PLATFORM_IS_DARWIN_BASED && (U_PLATFORM != U_PF_IPHONE || defined(U_TIMEZONE))) || U_PLATFORM_IS_LINUX_BASED || U_PLATFORM == U_PF_BSD || U_PLATFORM == U_PF_SOLARIS) /* These platforms are likely to use Olson timezone IDs. */ +/* common targets of the symbolic link at TZDEFAULT are: + * "/usr/share/zoneinfo/" default, older Linux distros, macOS to 10.12 + * "../usr/share/zoneinfo/" newer Linux distros: Red Hat Enterprise Linux 7, Ubuntu 16, SuSe Linux 12 + * "/usr/share/lib/zoneinfo/" Solaris + * "../usr/share/lib/zoneinfo/" Solaris + * "/var/db/timezone/zoneinfo/" macOS 10.13 + * To avoid checking lots of paths, just check that the target path + * before the ends with "/zoneinfo/", and the is valid. + */ + #define CHECK_LOCALTIME_LINK 1 #if U_PLATFORM_IS_DARWIN_BASED #include @@ -682,12 +714,12 @@ extern U_IMPORT char *U_TZNAME[]; #elif U_PLATFORM == U_PF_SOLARIS #define TZDEFAULT "/etc/localtime" #define TZZONEINFO "/usr/share/lib/zoneinfo/" -#define TZZONEINFO2 "../usr/share/lib/zoneinfo/" #define TZ_ENV_CHECK "localtime" #else #define TZDEFAULT "/etc/localtime" #define TZZONEINFO "/usr/share/zoneinfo/" #endif +#define TZZONEINFOTAIL "/zoneinfo/" #if U_HAVE_DIRENT_H #define TZFILE_SKIP "posixrules" /* tz file to skip when searching. */ /* Some Linux distributions have 'localtime' in /usr/share/zoneinfo @@ -939,30 +971,30 @@ static CharString *gSearchTZFileResult = NULL; * This function is not thread safe - it uses a global, gSearchTZFileResult, to hold its results. */ static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) { - DIR* dirp = opendir(path); - DIR* subDirp = NULL; + DIR* dirp = NULL; struct dirent* dirEntry = NULL; - char* result = NULL; + UErrorCode status = U_ZERO_ERROR; + + /* Save the current path */ + CharString curpath(path, -1, status); + if (U_FAILURE(status)) { + goto cleanupAndReturn; + } + + dirp = opendir(path); if (dirp == NULL) { - return result; + goto cleanupAndReturn; } if (gSearchTZFileResult == NULL) { gSearchTZFileResult = new CharString; if (gSearchTZFileResult == NULL) { - return NULL; + goto cleanupAndReturn; } ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup); } - /* Save the current path */ - UErrorCode status = U_ZERO_ERROR; - CharString curpath(path, -1, status); - if (U_FAILURE(status)) { - return NULL; - } - /* Check each entry in the directory. */ while((dirEntry = readdir(dirp)) != NULL) { const char* dirName = dirEntry->d_name; @@ -971,15 +1003,16 @@ static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) { CharString newpath(curpath, status); newpath.append(dirName, -1, status); if (U_FAILURE(status)) { - return NULL; + break; } + DIR* subDirp = NULL; if ((subDirp = opendir(newpath.data())) != NULL) { /* If this new path is a directory, make a recursive call with the newpath. */ closedir(subDirp); newpath.append('/', status); if (U_FAILURE(status)) { - return NULL; + break; } result = searchForTZFile(newpath.data(), tzInfo); /* @@ -1003,7 +1036,7 @@ static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) { gSearchTZFileResult->clear(); gSearchTZFileResult->append(zoneid, -1, status); if (U_FAILURE(status)) { - return NULL; + break; } result = gSearchTZFileResult->data(); /* Get out after the first one found. */ @@ -1012,7 +1045,11 @@ static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) { } } } - closedir(dirp); + + cleanupAndReturn: + if (dirp) { + closedir(dirp); + } return result; } #endif @@ -1045,7 +1082,7 @@ uprv_getWindowsTimeZone() hr = timezone->GetTimeZone(timezoneString.GetAddressOf()); if (SUCCEEDED(hr)) { - int32_t length = wcslen(timezoneString.GetRawBuffer(NULL)); + int32_t length = static_cast(wcslen(timezoneString.GetRawBuffer(NULL))); char* asciiId = (char*)uprv_calloc(length + 1, sizeof(char)); if (asciiId != nullptr) { @@ -1064,6 +1101,7 @@ uprv_getWindowsTimeZone() U_CAPI const char* U_EXPORT2 uprv_tzname(int n) { + (void)n; // Avoid unreferenced parameter warning. const char *tzid = NULL; #if U_PLATFORM_USES_ONLY_WIN32_API #if U_PLATFORM_HAS_WINUWP_API > 0 @@ -1125,24 +1163,15 @@ uprv_tzname(int n) */ int32_t ret = (int32_t)readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer)-1); if (0 < ret) { - int32_t tzZoneInfoLen = uprv_strlen(TZZONEINFO); + int32_t tzZoneInfoTailLen = uprv_strlen(TZZONEINFOTAIL); gTimeZoneBuffer[ret] = 0; - if (uprv_strncmp(gTimeZoneBuffer, TZZONEINFO, tzZoneInfoLen) == 0 - && isValidOlsonID(gTimeZoneBuffer + tzZoneInfoLen)) - { - return (gTimeZoneBufferPtr = gTimeZoneBuffer + tzZoneInfoLen); - } -#if U_PLATFORM == U_PF_SOLARIS - else + char * tzZoneInfoTailPtr = uprv_strstr(gTimeZoneBuffer, TZZONEINFOTAIL); + + if (tzZoneInfoTailPtr != NULL + && isValidOlsonID(tzZoneInfoTailPtr + tzZoneInfoTailLen)) { - tzZoneInfoLen = uprv_strlen(TZZONEINFO2); - if (uprv_strncmp(gTimeZoneBuffer, TZZONEINFO2, tzZoneInfoLen) == 0 - && isValidOlsonID(gTimeZoneBuffer + tzZoneInfoLen)) - { - return (gTimeZoneBufferPtr = gTimeZoneBuffer + tzZoneInfoLen); - } + return (gTimeZoneBufferPtr = tzZoneInfoTailPtr + tzZoneInfoTailLen); } -#endif } else { #if defined(SEARCH_TZFILE) DefaultTZInfo* tzInfo = (DefaultTZInfo*)uprv_malloc(sizeof(DefaultTZInfo)); @@ -1228,7 +1257,7 @@ UInitOnce gTimeZoneFilesInitOnce = U_INITONCE_INITIALIZER; static CharString *gTimeZoneFilesDirectory = NULL; #if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API - static char *gCorrectedPOSIXLocale = NULL; /* Sometimes heap allocated */ + static const char *gCorrectedPOSIXLocale = NULL; /* Sometimes heap allocated */ static bool gCorrectedPOSIXLocaleHeapAllocated = false; #endif @@ -1251,7 +1280,7 @@ static UBool U_CALLCONV putil_cleanup(void) #if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API if (gCorrectedPOSIXLocale && gCorrectedPOSIXLocaleHeapAllocated) { - uprv_free(gCorrectedPOSIXLocale); + uprv_free(const_cast(gCorrectedPOSIXLocale)); gCorrectedPOSIXLocale = NULL; gCorrectedPOSIXLocaleHeapAllocated = false; } @@ -1287,7 +1316,7 @@ u_setDataDirectory(const char *directory) { #if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) { char *p; - while(p = uprv_strchr(newDataDir, U_FILE_ALT_SEP_CHAR)) { + while((p = uprv_strchr(newDataDir, U_FILE_ALT_SEP_CHAR)) != NULL) { *p = U_FILE_SEP_CHAR; } } @@ -1445,7 +1474,7 @@ static void setTimeZoneFilesDir(const char *path, UErrorCode &status) { gTimeZoneFilesDirectory->append(path, status); #if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) char *p = gTimeZoneFilesDirectory->data(); - while (p = uprv_strchr(p, U_FILE_ALT_SEP_CHAR)) { + while ((p = uprv_strchr(p, U_FILE_ALT_SEP_CHAR)) != NULL) { *p = U_FILE_SEP_CHAR; } #endif @@ -1846,6 +1875,8 @@ The leftmost codepage (.xxx) wins. } // Now normalize the resulting name + correctedPOSIXLocale = static_cast(uprv_malloc(POSIX_LOCALE_CAPACITY + 1)); + /* TODO: Should we just exit on memory allocation failure? */ if (correctedPOSIXLocale) { int32_t posixLen = uloc_canonicalize(modifiedWindowsLocale, correctedPOSIXLocale, POSIX_LOCALE_CAPACITY, &status); @@ -2363,19 +2394,16 @@ u_getVersion(UVersionInfo versionArray) { * icucfg.h dependent code */ -#if U_ENABLE_DYLOAD - -#if HAVE_DLOPEN && !U_PLATFORM_USES_ONLY_WIN32_API +#if U_ENABLE_DYLOAD && HAVE_DLOPEN && !U_PLATFORM_USES_ONLY_WIN32_API #if HAVE_DLFCN_H - #ifdef __MVS__ #ifndef __SUSV3 #define __SUSV3 1 #endif #endif #include -#endif +#endif /* HAVE_DLFCN_H */ U_INTERNAL void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status) { @@ -2415,38 +2443,10 @@ uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { return uret.fp; } -#else - -/* null (nonexistent) implementation. */ - -U_INTERNAL void * U_EXPORT2 -uprv_dl_open(const char *libName, UErrorCode *status) { - if(U_FAILURE(*status)) return NULL; - *status = U_UNSUPPORTED_ERROR; - return NULL; -} - -U_INTERNAL void U_EXPORT2 -uprv_dl_close(void *lib, UErrorCode *status) { - if(U_FAILURE(*status)) return; - *status = U_UNSUPPORTED_ERROR; - return; -} - - -U_INTERNAL UVoidFunction* U_EXPORT2 -uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { - if(U_SUCCESS(*status)) { - *status = U_UNSUPPORTED_ERROR; - } - return (UVoidFunction*)NULL; -} - +#elif U_ENABLE_DYLOAD && U_PLATFORM_USES_ONLY_WIN32_API && !U_PLATFORM_HAS_WINUWP_API - -#endif - -#elif U_PLATFORM_USES_ONLY_WIN32_API +/* Windows API implementation. */ +// Note: UWP does not expose/allow these APIs, so the UWP version gets the null implementation. */ U_INTERNAL void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status) { @@ -2473,7 +2473,6 @@ uprv_dl_close(void *lib, UErrorCode *status) { return; } - U_INTERNAL UVoidFunction* U_EXPORT2 uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { HMODULE handle = (HMODULE)lib; @@ -2495,10 +2494,9 @@ uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { return addr; } - #else -/* No dynamic loading set. */ +/* No dynamic loading, null (nonexistent) implementation. */ U_INTERNAL void * U_EXPORT2 uprv_dl_open(const char *libName, UErrorCode *status) { @@ -2516,7 +2514,6 @@ uprv_dl_close(void *lib, UErrorCode *status) { return; } - U_INTERNAL UVoidFunction* U_EXPORT2 uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { (void)lib; @@ -2527,7 +2524,7 @@ uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) { return (UVoidFunction*)NULL; } -#endif /* U_ENABLE_DYLOAD */ +#endif /* * Hey, Emacs, please set the following: diff --git a/icuSources/common/putilimp.h b/icuSources/common/putilimp.h index e5473225..8b858df9 100644 --- a/icuSources/common/putilimp.h +++ b/icuSources/common/putilimp.h @@ -72,15 +72,6 @@ typedef size_t uintptr_t; #endif -/** - * \def U_HAVE_MSVC_2003_OR_EARLIER - * Flag for workaround of MSVC 2003 optimization bugs - * @internal - */ -#if !defined(U_HAVE_MSVC_2003_OR_EARLIER) && defined(_MSC_VER) && (_MSC_VER < 1400) -#define U_HAVE_MSVC_2003_OR_EARLIER -#endif - /*===========================================================================*/ /** @{ Information about POSIX support */ /*===========================================================================*/ @@ -120,15 +111,15 @@ typedef size_t uintptr_t; /* Use the predefined value. */ #elif U_PLATFORM == U_PF_ANDROID # define U_TIMEZONE timezone +#elif defined(__UCLIBC__) + // uClibc does not have __timezone or _timezone. +#elif defined(_NEWLIB_VERSION) +# define U_TIMEZONE _timezone +#elif defined(__GLIBC__) + // glibc +# define U_TIMEZONE __timezone #elif U_PLATFORM_IS_LINUX_BASED -# if defined(__UCLIBC__) - /* uClibc does not have __timezone or _timezone. */ -# elif defined(_NEWLIB_VERSION) -# define U_TIMEZONE _timezone -# elif defined(__GLIBC__) - /* glibc */ -# define U_TIMEZONE __timezone -# endif + // not defined #elif U_PLATFORM_USES_ONLY_WIN32_API # define U_TIMEZONE _timezone #elif U_PLATFORM == U_PF_BSD && !defined(__NetBSD__) @@ -214,7 +205,7 @@ typedef size_t uintptr_t; /** * \def U_HAVE_STD_ATOMICS * Defines whether the standard C++11 is available. - * ICU will use this when avialable, + * ICU will use this when available, * otherwise will fall back to compiler or platform specific alternatives. * @internal */ @@ -239,7 +230,7 @@ typedef size_t uintptr_t; /** * \def U_HAVE_CLANG_ATOMICS - * Defines whether Clang c11 style built-in atomics are avaialable. + * Defines whether Clang c11 style built-in atomics are available. * These are used in preference to gcc atomics when both are available. */ #ifdef U_HAVE_CLANG_ATOMICS @@ -277,7 +268,7 @@ typedef size_t uintptr_t; /** * Platform utilities isolates the platform dependencies of the - * libarary. For each platform which this code is ported to, these + * library. For each platform which this code is ported to, these * functions may have to be re-implemented. */ @@ -400,6 +391,32 @@ U_INTERNAL double U_EXPORT2 uprv_log(double d); */ U_INTERNAL double U_EXPORT2 uprv_round(double x); +/** + * Adds the signed integers a and b, storing the result in res. + * Checks for signed integer overflow. + * Similar to the GCC/Clang extension __builtin_add_overflow + * + * @param a The first operand. + * @param b The second operand. + * @param res a + b + * @return true if overflow occurred; false if no overflow occurred. + * @internal + */ +U_INTERNAL UBool U_EXPORT2 uprv_add32_overflow(int32_t a, int32_t b, int32_t* res); + +/** + * Multiplies the signed integers a and b, storing the result in res. + * Checks for signed integer overflow. + * Similar to the GCC/Clang extension __builtin_mul_overflow + * + * @param a The first multiplicand. + * @param b The second multiplicand. + * @param res a * b + * @return true if overflow occurred; false if no overflow occurred. + * @internal + */ +U_INTERNAL UBool U_EXPORT2 uprv_mul32_overflow(int32_t a, int32_t b, int32_t* res); + #if 0 /** * Returns the number of digits after the decimal point in a double number x. @@ -425,7 +442,7 @@ U_INTERNAL const char* U_EXPORT2 uprv_getDefaultCodepage(void); /** * Please use uloc_getDefault() instead. - * Return the default locale ID string by querying ths system, or + * Return the default locale ID string by querying the system, or * zero if one cannot be found. * This function can call setlocale() on Unix platforms. Please read the * platform documentation on setlocale() before calling this function. diff --git a/icuSources/common/rbbi.cpp b/icuSources/common/rbbi.cpp index 9adf8d40..eb83a420 100644 --- a/icuSources/common/rbbi.cpp +++ b/icuSources/common/rbbi.cpp @@ -7,7 +7,7 @@ *************************************************************************** */ // -// file: rbbi.c Contains the implementation of the rule based break iterator +// file: rbbi.cpp Contains the implementation of the rule based break iterator // runtime engine and the API implementation for // class RuleBasedBreakIterator // @@ -21,35 +21,39 @@ #include "unicode/rbbi.h" #include "unicode/schriter.h" #include "unicode/uchriter.h" -#include "unicode/udata.h" #include "unicode/uclean.h" -#include "rbbidata.h" -#include "rbbirb.h" +#include "unicode/udata.h" + +#include "brkeng.h" +#include "ucln_cmn.h" #include "cmemory.h" #include "cstring.h" -#include "umutex.h" -#include "ucln_cmn.h" -#include "brkeng.h" - +#include "rbbidata.h" +#include "rbbi_cache.h" +#include "rbbirb.h" #include "uassert.h" -#include "uvector.h" +#include "umutex.h" +#include "uvectr32.h" // if U_LOCAL_SERVICE_HOOK is defined, then localsvc.cpp is expected to be included. #if U_LOCAL_SERVICE_HOOK #include "localsvc.h" #endif +// Apple specific +//#include + #ifdef RBBI_DEBUG -static UBool fTrace = FALSE; +static UBool gTrace = FALSE; #endif U_NAMESPACE_BEGIN // The state number of the starting state -#define START_STATE 1 +constexpr int32_t START_STATE = 1; // The state-transition value indicating "stop" -#define STOP_STATE 0 +constexpr int32_t STOP_STATE = 0; UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RuleBasedBreakIterator) @@ -64,8 +68,9 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RuleBasedBreakIterator) * tables object that is passed in as a parameter. */ RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status) + : fSCharIter(UnicodeString()) { - init(); + init(status); fData = new RBBIDataWrapper(data, status); // status checked in constructor if (U_FAILURE(status)) {return;} if(fData == 0) { @@ -74,30 +79,16 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode } } -/** - * Same as above but does not adopt memory - * Open-source ICU eliminated this method in #12071, but Apple code needs it, so restore it. - */ -RuleBasedBreakIterator::RuleBasedBreakIterator(const RBBIDataHeader* data, enum EDontAdopt, UErrorCode &status) -{ - init(); - fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status); // status checked in constructor - if (U_FAILURE(status)) {return;} - if(fData == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } -} - - // // Construct from precompiled binary rules (tables). This constructor is public API, // taking the rules as a (const uint8_t *) to match the type produced by getBinaryRules(). // RuleBasedBreakIterator::RuleBasedBreakIterator(const uint8_t *compiledRules, uint32_t ruleLength, - UErrorCode &status) { - init(); + UErrorCode &status) + : fSCharIter(UnicodeString()) +{ + init(status); if (U_FAILURE(status)) { return; } @@ -110,13 +101,13 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(const uint8_t *compiledRules, status = U_ILLEGAL_ARGUMENT_ERROR; return; } - fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status); + fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status); if (U_FAILURE(status)) {return;} if(fData == 0) { status = U_MEMORY_ALLOCATION_ERROR; return; } -} +} //------------------------------------------------------------------------------- @@ -126,8 +117,9 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(const uint8_t *compiledRules, // //------------------------------------------------------------------------------- RuleBasedBreakIterator::RuleBasedBreakIterator(UDataMemory* udm, UErrorCode &status) + : fSCharIter(UnicodeString()) { - init(); + init(status); fData = new RBBIDataWrapper(udm, status); // status checked in constructor if (U_FAILURE(status)) {return;} if(fData == 0) { @@ -146,8 +138,9 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(UDataMemory* udm, UErrorCode &sta RuleBasedBreakIterator::RuleBasedBreakIterator( const UnicodeString &rules, UParseError &parseError, UErrorCode &status) + : fSCharIter(UnicodeString()) { - init(); + init(status); if (U_FAILURE(status)) {return;} RuleBasedBreakIterator *bi = (RuleBasedBreakIterator *) RBBIRuleBuilder::createRuleBasedBreakIterator(rules, &parseError, status); @@ -168,8 +161,11 @@ RuleBasedBreakIterator::RuleBasedBreakIterator( const UnicodeString &rules, // Used when creating a RuleBasedBreakIterator from a set // of rules. //------------------------------------------------------------------------------- -RuleBasedBreakIterator::RuleBasedBreakIterator() { - init(); +RuleBasedBreakIterator::RuleBasedBreakIterator() + : fSCharIter(UnicodeString()) +{ + UErrorCode status = U_ZERO_ERROR; + init(status); } @@ -180,9 +176,11 @@ RuleBasedBreakIterator::RuleBasedBreakIterator() { // //------------------------------------------------------------------------------- RuleBasedBreakIterator::RuleBasedBreakIterator(const RuleBasedBreakIterator& other) -: BreakIterator(other) +: BreakIterator(other), + fSCharIter(UnicodeString()) { - this->init(); + UErrorCode status = U_ZERO_ERROR; + this->init(status); *this = other; } @@ -191,34 +189,32 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(const RuleBasedBreakIterator& oth * Destructor */ RuleBasedBreakIterator::~RuleBasedBreakIterator() { - if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + if (fCharIter != &fSCharIter) { // fCharIter was adopted from the outside. delete fCharIter; } fCharIter = NULL; - delete fSCharIter; - fCharIter = NULL; - delete fDCharIter; - fDCharIter = NULL; - - utext_close(fText); + + utext_close(&fText); if (fData != NULL) { fData->removeReference(); fData = NULL; } - if (fCachedBreakPositions) { - uprv_free(fCachedBreakPositions); - fCachedBreakPositions = NULL; - } - if (fLanguageBreakEngines) { - delete fLanguageBreakEngines; - fLanguageBreakEngines = NULL; - } - if (fUnhandledBreakEngine) { - delete fUnhandledBreakEngine; - fUnhandledBreakEngine = NULL; - } + delete fBreakCache; + fBreakCache = NULL; + + delete fDictionaryCache; + fDictionaryCache = NULL; + + delete fLanguageBreakEngines; + fLanguageBreakEngines = NULL; + + delete fUnhandledBreakEngine; + fUnhandledBreakEngine = NULL; + + delete [] fLatin1Cat; + fLatin1Cat = NULL; } /** @@ -230,28 +226,32 @@ RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) { if (this == &that) { return *this; } - fKeepAll = that.fKeepAll; - reset(); // Delete break cache information - fBreakType = that.fBreakType; + BreakIterator::operator=(that); + fLineWordOpts = that.fLineWordOpts; + if (fLanguageBreakEngines != NULL) { delete fLanguageBreakEngines; fLanguageBreakEngines = NULL; // Just rebuild for now } // TODO: clone fLanguageBreakEngines from "that" UErrorCode status = U_ZERO_ERROR; - fText = utext_clone(fText, that.fText, FALSE, TRUE, &status); + utext_clone(&fText, &that.fText, FALSE, TRUE, &status); - if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + if (fCharIter != &fSCharIter) { delete fCharIter; } - fCharIter = NULL; + fCharIter = &fSCharIter; - if (that.fCharIter != NULL ) { + if (that.fCharIter != NULL && that.fCharIter != &that.fSCharIter) { // This is a little bit tricky - it will intially appear that // this->fCharIter is adopted, even if that->fCharIter was // not adopted. That's ok. fCharIter = that.fCharIter->clone(); } + fSCharIter = that.fSCharIter; + if (fCharIter == NULL) { + fCharIter = &fSCharIter; + } if (fData != NULL) { fData->removeReference(); @@ -261,6 +261,20 @@ RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) { fData = that.fData->addReference(); } + delete [] fLatin1Cat; + fLatin1Cat = NULL; + + fPosition = that.fPosition; + fRuleStatusIndex = that.fRuleStatusIndex; + fDone = that.fDone; + + // TODO: both the dictionary and the main cache need to be copied. + // Current position could be within a dictionary range. Trying to continue + // the iteration without the caches present would go to the rules, with + // the assumption that the current position is on a rule boundary. + fBreakCache->reset(fPosition, fRuleStatusIndex); + fDictionaryCache->reset(); + return *this; } @@ -272,33 +286,41 @@ RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) { // Initializes all fields, leaving the object in a consistent state. // //----------------------------------------------------------------------------- -void RuleBasedBreakIterator::init() { - UErrorCode status = U_ZERO_ERROR; - fText = utext_openUChars(NULL, NULL, 0, &status); +void RuleBasedBreakIterator::init(UErrorCode &status) { fCharIter = NULL; - fSCharIter = NULL; - fDCharIter = NULL; fData = NULL; - fLastRuleStatusIndex = 0; - fLastStatusIndexValid = TRUE; + fLatin1Cat = NULL; + fPosition = 0; + fRuleStatusIndex = 0; + fDone = false; fDictionaryCharCount = 0; - fBreakType = UBRK_WORD; // Defaulting BreakType to word gives reasonable - // dictionary behavior for Break Iterators that are - // built from rules. Even better would be the ability to - // declare the type in the rules. + fLanguageBreakEngines = NULL; + fUnhandledBreakEngine = NULL; + fBreakCache = NULL; + fDictionaryCache = NULL; - fCachedBreakPositions = NULL; - fLanguageBreakEngines = NULL; - fUnhandledBreakEngine = NULL; - fNumCachedBreakPositions = 0; - fPositionInCache = 0; + // Note: IBM xlC is unable to assign or initialize member fText from UTEXT_INITIALIZER. + // fText = UTEXT_INITIALIZER; + static const UText initializedUText = UTEXT_INITIALIZER; + uprv_memcpy(&fText, &initializedUText, sizeof(UText)); + + if (U_FAILURE(status)) { + return; + } + + utext_openUChars(&fText, NULL, 0, &status); + fDictionaryCache = new DictionaryCache(this, status); + fBreakCache = new BreakCache(this, status); + if (U_SUCCESS(status) && (fDictionaryCache == NULL || fBreakCache == NULL)) { + status = U_MEMORY_ALLOCATION_ERROR; + } #ifdef RBBI_DEBUG static UBool debugInitDone = FALSE; if (debugInitDone == FALSE) { char *debugEnv = getenv("U_RBBIDEBUG"); if (debugEnv && uprv_strstr(debugEnv, "trace")) { - fTrace = TRUE; + gTrace = TRUE; } debugInitDone = TRUE; } @@ -306,6 +328,12 @@ void RuleBasedBreakIterator::init() { } +void RuleBasedBreakIterator::initLatin1Cat(void) { + fLatin1Cat = new uint16_t[256]; + for (UChar32 c = 0; c < 256; ++c) { + fLatin1Cat[c] = UTRIE2_GET16(fData->fTrie, c); + } +} //----------------------------------------------------------------------------- // @@ -328,19 +356,31 @@ RuleBasedBreakIterator::operator==(const BreakIterator& that) const { if (typeid(*this) != typeid(that)) { return FALSE; } + if (this == &that) { + return TRUE; + } + + // The base class BreakIterator carries no state that participates in equality, + // and does not implement an equality function that would otherwise be + // checked at this point. const RuleBasedBreakIterator& that2 = (const RuleBasedBreakIterator&) that; - if (that2.fKeepAll != fKeepAll) { + if (that2.fLineWordOpts != fLineWordOpts) { return FALSE; } - if (!utext_equals(fText, that2.fText)) { + if (!utext_equals(&fText, &that2.fText)) { // The two break iterators are operating on different text, - // or have a different interation position. + // or have a different iteration position. + // Note that fText's position is always the same as the break iterator's position. return FALSE; }; - // TODO: need a check for when in a dictionary region at different offsets. + if (!(fPosition == that2.fPosition && + fRuleStatusIndex == that2.fRuleStatusIndex && + fDone == that2.fDone)) { + return FALSE; + } if (that2.fData == fData || (fData != NULL && that2.fData != NULL && *that2.fData == *fData)) { @@ -368,8 +408,9 @@ void RuleBasedBreakIterator::setText(UText *ut, UErrorCode &status) { if (U_FAILURE(status)) { return; } - reset(); - fText = utext_clone(fText, ut, FALSE, TRUE, &status); + fBreakCache->reset(); + fDictionaryCache->reset(); + utext_clone(&fText, ut, FALSE, TRUE, &status); // Set up a dummy CharacterIterator to be returned if anyone // calls getText(). With input from UText, there is no reasonable @@ -377,58 +418,30 @@ void RuleBasedBreakIterator::setText(UText *ut, UErrorCode &status) { // Return one over an empty string instead - this is the closest // we can come to signaling a failure. // (GetText() is obsolete, this failure is sort of OK) - if (fDCharIter == NULL) { - static const UChar c = 0; - fDCharIter = new UCharCharacterIterator(&c, 0); - if (fDCharIter == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - } + fSCharIter.setText(UnicodeString()); - if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + if (fCharIter != &fSCharIter) { // existing fCharIter was adopted from the outside. Delete it now. delete fCharIter; } - fCharIter = fDCharIter; + fCharIter = &fSCharIter; this->first(); } UText *RuleBasedBreakIterator::getUText(UText *fillIn, UErrorCode &status) const { - UText *result = utext_clone(fillIn, fText, FALSE, TRUE, &status); + UText *result = utext_clone(fillIn, &fText, FALSE, TRUE, &status); return result; } - -/** - * Returns the description used to create this iterator - */ -const UnicodeString& -RuleBasedBreakIterator::getRules() const { - if (fData != NULL) { - return fData->getRuleSourceString(); - } else { - static const UnicodeString *s; - if (s == NULL) { - // TODO: something more elegant here. - // perhaps API should return the string by value. - // Note: thread unsafe init & leak are semi-ok, better than - // what was before. Sould be cleaned up, though. - s = new UnicodeString; - } - return *s; - } -} - //======================================================================= // BreakIterator overrides //======================================================================= /** - * Return a CharacterIterator over the text being analyzed. + * Return a CharacterIterator over the text being analyzed. */ CharacterIterator& RuleBasedBreakIterator::getText() const { @@ -442,21 +455,22 @@ RuleBasedBreakIterator::getText() const { */ void RuleBasedBreakIterator::adoptText(CharacterIterator* newText) { - // If we are holding a CharacterIterator adopted from a + // If we are holding a CharacterIterator adopted from a // previous call to this function, delete it now. - if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + if (fCharIter != &fSCharIter) { delete fCharIter; } fCharIter = newText; UErrorCode status = U_ZERO_ERROR; - reset(); - if (newText==NULL || newText->startIndex() != 0) { + fBreakCache->reset(); + fDictionaryCache->reset(); + if (newText==NULL || newText->startIndex() != 0) { // startIndex !=0 wants to be an error, but there's no way to report it. // Make the iterator text be an empty string. - fText = utext_openUChars(fText, NULL, 0, &status); + utext_openUChars(&fText, NULL, 0, &status); } else { - fText = utext_openCharacterIterator(fText, newText, &status); + utext_openCharacterIterator(&fText, newText, &status); } this->first(); } @@ -469,24 +483,21 @@ RuleBasedBreakIterator::adoptText(CharacterIterator* newText) { void RuleBasedBreakIterator::setText(const UnicodeString& newText) { UErrorCode status = U_ZERO_ERROR; - reset(); - fText = utext_openConstUnicodeString(fText, &newText, &status); + fBreakCache->reset(); + fDictionaryCache->reset(); + utext_openConstUnicodeString(&fText, &newText, &status); - // Set up a character iterator on the string. + // Set up a character iterator on the string. // Needed in case someone calls getText(). // Can not, unfortunately, do this lazily on the (probably never) // call to getText(), because getText is const. - if (fSCharIter == NULL) { - fSCharIter = new StringCharacterIterator(newText); - } else { - fSCharIter->setText(newText); - } + fSCharIter.setText(newText); - if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + if (fCharIter != &fSCharIter) { // old fCharIter was adopted from the outside. Delete it. delete fCharIter; } - fCharIter = fSCharIter; + fCharIter = &fSCharIter; this->first(); } @@ -506,14 +517,14 @@ RuleBasedBreakIterator &RuleBasedBreakIterator::refreshInputText(UText *input, U status = U_ILLEGAL_ARGUMENT_ERROR; return *this; } - int64_t pos = utext_getNativeIndex(fText); + int64_t pos = utext_getNativeIndex(&fText); // Shallow read-only clone of the new UText into the existing input UText - fText = utext_clone(fText, input, FALSE, TRUE, &status); + utext_clone(&fText, input, FALSE, TRUE, &status); if (U_FAILURE(status)) { return *this; } - utext_setNativeIndex(fText, pos); - if (utext_getNativeIndex(fText) != pos) { + utext_setNativeIndex(&fText, pos); + if (utext_getNativeIndex(&fText) != pos) { // Sanity check. The new input utext is supposed to have the exact same // contents as the old. If we can't set to the same position, it doesn't. // The contents underlying the old utext might be invalid at this point, @@ -529,13 +540,12 @@ RuleBasedBreakIterator &RuleBasedBreakIterator::refreshInputText(UText *input, U * @return The new iterator position, which is zero. */ int32_t RuleBasedBreakIterator::first(void) { - reset(); - fLastRuleStatusIndex = 0; - fLastStatusIndexValid = TRUE; - //if (fText == NULL) - // return BreakIterator::DONE; - - utext_setNativeIndex(fText, 0); + UErrorCode status = U_ZERO_ERROR; + if (!fBreakCache->seek(0)) { + fBreakCache->populateNear(0, status); + } + fBreakCache->current(); + U_ASSERT(fPosition == 0); return 0; } @@ -544,17 +554,12 @@ int32_t RuleBasedBreakIterator::first(void) { * @return The text's past-the-end offset. */ int32_t RuleBasedBreakIterator::last(void) { - reset(); - if (fText == NULL) { - fLastRuleStatusIndex = 0; - fLastStatusIndexValid = TRUE; - return BreakIterator::DONE; - } - - fLastStatusIndexValid = FALSE; - int32_t pos = (int32_t)utext_nativeLength(fText); - utext_setNativeIndex(fText, pos); - return pos; + int32_t endPos = (int32_t)utext_nativeLength(&fText); + UBool endShouldBeBoundary = isBoundary(endPos); // Has side effect of setting iterator position. + (void)endShouldBeBoundary; + U_ASSERT(endShouldBeBoundary); + U_ASSERT(fPosition == endPos); + return endPos; } /** @@ -567,14 +572,17 @@ int32_t RuleBasedBreakIterator::last(void) { * the current one. */ int32_t RuleBasedBreakIterator::next(int32_t n) { - int32_t result = current(); - while (n > 0) { - result = next(); - --n; - } - while (n < 0) { - result = previous(); - ++n; + int32_t result = 0; + if (n > 0) { + for (; n > 0 && result != UBRK_DONE; --n) { + result = next(); + } + } else if (n < 0) { + for (; n < 0 && result != UBRK_DONE; ++n) { + result = previous(); + } + } else { + result = current(); } return result; } @@ -584,420 +592,120 @@ int32_t RuleBasedBreakIterator::next(int32_t n) { * @return The position of the first boundary after this one. */ int32_t RuleBasedBreakIterator::next(void) { - // if we have cached break positions and we're still in the range - // covered by them, just move one step forward in the cache - if (fCachedBreakPositions != NULL) { - if (fPositionInCache < fNumCachedBreakPositions - 1) { - ++fPositionInCache; - int32_t pos = fCachedBreakPositions[fPositionInCache]; - utext_setNativeIndex(fText, pos); - return pos; - } - else { - reset(); - } - } - - int32_t startPos = current(); - fDictionaryCharCount = 0; - int32_t result = handleNext(fData->fForwardTable); - while (fKeepAll) { - UChar32 prevChr = utext_char32At(fText, result-1); - UChar32 currChr = utext_char32At(fText, result); - if (currChr == U_SENTINEL || prevChr == U_SENTINEL || !u_isalpha(currChr) || !u_isalpha(prevChr)) { - break; - } - int32_t nextResult = handleNext(fData->fForwardTable); - if (nextResult <= result) { - break; - } - result = nextResult; - } - if (fDictionaryCharCount > 0) { - result = checkDictionary(startPos, result, FALSE); - } - return result; + fBreakCache->next(); + return fDone ? UBRK_DONE : fPosition; } /** - * Advances the iterator backwards, to the last boundary preceding this one. - * @return The position of the last boundary position preceding this one. + * Move the iterator backwards, to the boundary preceding the current one. + * + * Starts from the current position within fText. + * Starting position need not be on a boundary. + * + * @return The position of the boundary position immediately preceding the starting position. */ int32_t RuleBasedBreakIterator::previous(void) { - int32_t result; - int32_t startPos; - - // if we have cached break positions and we're still in the range - // covered by them, just move one step backward in the cache - if (fCachedBreakPositions != NULL) { - if (fPositionInCache > 0) { - --fPositionInCache; - // If we're at the beginning of the cache, need to reevaluate the - // rule status - if (fPositionInCache <= 0) { - fLastStatusIndexValid = FALSE; - } - int32_t pos = fCachedBreakPositions[fPositionInCache]; - utext_setNativeIndex(fText, pos); - return pos; - } - else { - reset(); - } - } - - // if we're already sitting at the beginning of the text, return DONE - if (fText == NULL || (startPos = current()) == 0) { - fLastRuleStatusIndex = 0; - fLastStatusIndexValid = TRUE; - return BreakIterator::DONE; - } - - if (fData->fSafeRevTable != NULL || fData->fSafeFwdTable != NULL) { - result = handlePrevious(fData->fReverseTable); - while (fKeepAll) { - UChar32 prevChr = utext_char32At(fText, result-1); - UChar32 currChr = utext_char32At(fText, result); - if (currChr == U_SENTINEL || prevChr == U_SENTINEL || !u_isalpha(currChr) || !u_isalpha(prevChr)) { - break; - } - int32_t prevResult = handlePrevious(fData->fReverseTable); - if (prevResult >= result) { - break; - } - result = prevResult; - } - if (fDictionaryCharCount > 0) { - result = checkDictionary(result, startPos, TRUE); - } - return result; - } - - // old rule syntax - // set things up. handlePrevious() will back us up to some valid - // break position before the current position (we back our internal - // iterator up one step to prevent handlePrevious() from returning - // the current position), but not necessarily the last one before - // where we started - - int32_t start = current(); - - (void)UTEXT_PREVIOUS32(fText); - int32_t lastResult = handlePrevious(fData->fReverseTable); - if (lastResult == UBRK_DONE) { - lastResult = 0; - utext_setNativeIndex(fText, 0); - } - result = lastResult; - int32_t lastTag = 0; - UBool breakTagValid = FALSE; - - // iterate forward from the known break position until we pass our - // starting point. The last break position before the starting - // point is our return value - - for (;;) { - result = next(); - if (result == BreakIterator::DONE || result >= start) { - break; - } - lastResult = result; - lastTag = fLastRuleStatusIndex; - breakTagValid = TRUE; - } - - // fLastBreakTag wants to have the value for section of text preceding - // the result position that we are to return (in lastResult.) If - // the backwards rules overshot and the above loop had to do two or more - // next()s to move up to the desired return position, we will have a valid - // tag value. But, if handlePrevious() took us to exactly the correct result position, - // we wont have a tag value for that position, which is only set by handleNext(). - - // Set the current iteration position to be the last break position - // before where we started, and then return that value. - utext_setNativeIndex(fText, lastResult); - fLastRuleStatusIndex = lastTag; // for use by getRuleStatus() - fLastStatusIndexValid = breakTagValid; - - // No need to check the dictionary; it will have been handled by - // next() - - return lastResult; + UErrorCode status = U_ZERO_ERROR; + fBreakCache->previous(status); + return fDone ? UBRK_DONE : fPosition; } /** * Sets the iterator to refer to the first boundary position following * the specified position. - * @offset The position from which to begin searching for a break position. + * @param startPos The position from which to begin searching for a break position. * @return The position of the first break after the current position. */ -int32_t RuleBasedBreakIterator::following(int32_t offset) { - // if the offset passed in is already past the end of the text, - // just return DONE; if it's before the beginning, return the +int32_t RuleBasedBreakIterator::following(int32_t startPos) { + // if the supplied position is before the beginning, return the // text's starting offset - if (fText == NULL || offset >= utext_nativeLength(fText)) { - last(); - return next(); - } - else if (offset < 0) { + if (startPos < 0) { return first(); } // Move requested offset to a code point start. It might be on a trail surrogate, - // or on a trail byte if the input is UTF-8. - utext_setNativeIndex(fText, offset); - offset = (int32_t)utext_getNativeIndex(fText); - - // if we have cached break positions and offset is in the range - // covered by them, use them - // TODO: could use binary search - // TODO: what if offset is outside range, but break is not? - if (fCachedBreakPositions != NULL) { - if (offset >= fCachedBreakPositions[0] - && offset < fCachedBreakPositions[fNumCachedBreakPositions - 1]) { - fPositionInCache = 0; - // We are guaranteed not to leave the array due to range test above - while (offset >= fCachedBreakPositions[fPositionInCache]) { - ++fPositionInCache; - } - int32_t pos = fCachedBreakPositions[fPositionInCache]; - utext_setNativeIndex(fText, pos); - return pos; - } - else { - reset(); - } - } - - // Set our internal iteration position (temporarily) - // to the position passed in. If this is the _beginning_ position, - // then we can just use next() to get our return value + // or on a trail byte if the input is UTF-8. Or it may be beyond the end of the text. + utext_setNativeIndex(&fText, startPos); + startPos = (int32_t)utext_getNativeIndex(&fText); - int32_t result = 0; - - if (fData->fSafeRevTable != NULL) { - // new rule syntax - utext_setNativeIndex(fText, offset); - // move forward one codepoint to prepare for moving back to a - // safe point. - // this handles offset being between a supplementary character - // TODO: is this still needed, with move to code point boundary handled above? - (void)UTEXT_NEXT32(fText); - // handlePrevious will move most of the time to < 1 boundary away - handlePrevious(fData->fSafeRevTable); - int32_t result = next(); - while (result <= offset) { - result = next(); - } - return result; - } - if (fData->fSafeFwdTable != NULL) { - // backup plan if forward safe table is not available - utext_setNativeIndex(fText, offset); - (void)UTEXT_PREVIOUS32(fText); - // handle next will give result >= offset - handleNext(fData->fSafeFwdTable); - // previous will give result 0 or 1 boundary away from offset, - // most of the time - // we have to - int32_t oldresult = previous(); - while (oldresult > offset) { - int32_t result = previous(); - if (result <= offset) { - return oldresult; - } - oldresult = result; - } - int32_t result = next(); - if (result <= offset) { - return next(); - } - return result; - } - // otherwise, we have to sync up first. Use handlePrevious() to back - // up to a known break position before the specified position (if - // we can determine that the specified position is a break position, - // we don't back up at all). This may or may not be the last break - // position at or before our starting position. Advance forward - // from here until we've passed the starting position. The position - // we stop on will be the first break position after the specified one. - // old rule syntax - - utext_setNativeIndex(fText, offset); - if (offset==0 || - (offset==1 && utext_getNativeIndex(fText)==0)) { - return next(); - } - result = previous(); - - while (result != BreakIterator::DONE && result <= offset) { - result = next(); - } - - return result; + UErrorCode status = U_ZERO_ERROR; + fBreakCache->following(startPos, status); + return fDone ? UBRK_DONE : fPosition; } /** * Sets the iterator to refer to the last boundary position before the * specified position. - * @offset The position to begin searching for a break from. + * @param offset The position to begin searching for a break from. * @return The position of the last boundary before the starting position. */ int32_t RuleBasedBreakIterator::preceding(int32_t offset) { - // if the offset passed in is already past the end of the text, - // just return DONE; if it's before the beginning, return the - // text's starting offset - if (fText == NULL || offset > utext_nativeLength(fText)) { + if (offset > utext_nativeLength(&fText)) { return last(); } - else if (offset < 0) { - return first(); - } // Move requested offset to a code point start. It might be on a trail surrogate, // or on a trail byte if the input is UTF-8. - utext_setNativeIndex(fText, offset); - offset = (int32_t)utext_getNativeIndex(fText); - - // if we have cached break positions and offset is in the range - // covered by them, use them - if (fCachedBreakPositions != NULL) { - // TODO: binary search? - // TODO: What if offset is outside range, but break is not? - if (offset > fCachedBreakPositions[0] - && offset <= fCachedBreakPositions[fNumCachedBreakPositions - 1]) { - fPositionInCache = 0; - while (fPositionInCache < fNumCachedBreakPositions - && offset > fCachedBreakPositions[fPositionInCache]) - ++fPositionInCache; - --fPositionInCache; - // If we're at the beginning of the cache, need to reevaluate the - // rule status - if (fPositionInCache <= 0) { - fLastStatusIndexValid = FALSE; - } - utext_setNativeIndex(fText, fCachedBreakPositions[fPositionInCache]); - return fCachedBreakPositions[fPositionInCache]; - } - else { - reset(); - } - } - // if we start by updating the current iteration position to the - // position specified by the caller, we can just use previous() - // to carry out this operation - - if (fData->fSafeFwdTable != NULL) { - // new rule syntax - utext_setNativeIndex(fText, offset); - int32_t newOffset = (int32_t)UTEXT_GETNATIVEINDEX(fText); - if (newOffset != offset) { - // Will come here if specified offset was not a code point boundary AND - // the underlying implmentation is using UText, which snaps any non-code-point-boundary - // indices to the containing code point. - // For breakitereator::preceding only, these non-code-point indices need to be moved - // up to refer to the following codepoint. - (void)UTEXT_NEXT32(fText); - offset = (int32_t)UTEXT_GETNATIVEINDEX(fText); - } - - // TODO: (synwee) would it be better to just check for being in the middle of a surrogate pair, - // rather than adjusting the position unconditionally? - // (Change would interact with safe rules.) - // TODO: change RBBI behavior for off-boundary indices to match that of UText? - // affects only preceding(), seems cleaner, but is slightly different. - (void)UTEXT_PREVIOUS32(fText); - handleNext(fData->fSafeFwdTable); - int32_t result = (int32_t)UTEXT_GETNATIVEINDEX(fText); - while (result >= offset) { - result = previous(); - } - return result; - } - if (fData->fSafeRevTable != NULL) { - // backup plan if forward safe table is not available - // TODO: check whether this path can be discarded - // It's probably OK to say that rules must supply both safe tables - // if they use safe tables at all. We have certainly never described - // to anyone how to work with just one safe table. - utext_setNativeIndex(fText, offset); - (void)UTEXT_NEXT32(fText); - - // handle previous will give result <= offset - handlePrevious(fData->fSafeRevTable); - - // next will give result 0 or 1 boundary away from offset, - // most of the time - // we have to - int32_t oldresult = next(); - while (oldresult < offset) { - int32_t result = next(); - if (result >= offset) { - return oldresult; - } - oldresult = result; - } - int32_t result = previous(); - if (result >= offset) { - return previous(); - } - return result; - } + utext_setNativeIndex(&fText, offset); + int32_t adjustedOffset = utext_getNativeIndex(&fText); - // old rule syntax - utext_setNativeIndex(fText, offset); - return previous(); + UErrorCode status = U_ZERO_ERROR; + fBreakCache->preceding(adjustedOffset, status); + return fDone ? UBRK_DONE : fPosition; } /** * Returns true if the specfied position is a boundary position. As a side * effect, leaves the iterator pointing to the first boundary position at * or after "offset". + * * @param offset the offset to check. * @return True if "offset" is a boundary position. */ UBool RuleBasedBreakIterator::isBoundary(int32_t offset) { - // the beginning index of the iterator is always a boundary position by definition - if (offset == 0) { - first(); // For side effects on current position, tag values. - return TRUE; - } - - if (offset == (int32_t)utext_nativeLength(fText)) { - last(); // For side effects on current position, tag values. - return TRUE; - } - // out-of-range indexes are never boundary positions if (offset < 0) { first(); // For side effects on current position, tag values. return FALSE; } - if (offset > utext_nativeLength(fText)) { - last(); // For side effects on current position, tag values. - return FALSE; + // Adjust offset to be on a code point boundary and not beyond the end of the text. + // Note that isBoundary() is always false for offsets that are not on code point boundaries. + // But we still need the side effect of leaving iteration at the following boundary. + + utext_setNativeIndex(&fText, offset); + int32_t adjustedOffset = utext_getNativeIndex(&fText); + + bool result = false; + UErrorCode status = U_ZERO_ERROR; + if (fBreakCache->seek(adjustedOffset) || fBreakCache->populateNear(adjustedOffset, status)) { + result = (fBreakCache->current() == offset); } - // otherwise, we can use following() on the position before the specified - // one and return true if the position we get back is the one the user - // specified - utext_previous32From(fText, offset); - int32_t backOne = (int32_t)UTEXT_GETNATIVEINDEX(fText); - UBool result = following(backOne) == offset; + if (result && adjustedOffset < offset && utext_char32At(&fText, offset) == U_SENTINEL) { + // Original offset is beyond the end of the text. Return FALSE, it's not a boundary, + // but the iteration position remains set to the end of the text, which is a boundary. + return FALSE; + } + if (!result) { + // Not on a boundary. isBoundary() must leave iterator on the following boundary. + // Cache->seek(), above, left us on the preceding boundary, so advance one. + next(); + } return result; } + /** * Returns the current iteration position. * @return The current iteration position. */ int32_t RuleBasedBreakIterator::current(void) const { - int32_t pos = (int32_t)UTEXT_GETNATIVEINDEX(fText); - return pos; + return fPosition; } - + + //======================================================================= // implementation //======================================================================= @@ -1038,7 +746,9 @@ struct LookAheadResults { return fPositions[i]; } } - U_ASSERT(FALSE); + // with NLLT source rules, Latn sample and ubrk_next, we see a request for key 79 here + // near the end of text, when setPosition has only ever set positions for key 80 or 82. + //U_ASSERT(FALSE); return -1; } @@ -1064,43 +774,72 @@ struct LookAheadResults { //----------------------------------------------------------------------------------- // -// handleNext(stateTable) -// This method is the actual implementation of the rbbi next() method. -// This method initializes the state machine to state 1 -// and advances through the text character by character until we reach the end -// of the text or the state machine transitions to state 0. We update our return -// value every time the state machine passes through an accepting state. +// handleNext() +// Run the state machine to find a boundary // //----------------------------------------------------------------------------------- -int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { +// Route handleNext calls through the following to handleNextInternal, +// in order to handle fLineWordOpts. +int32_t RuleBasedBreakIterator::handleNext() { + int32_t result = handleNextInternal(); + while (fLineWordOpts != UBRK_LINEWORD_NORMAL) { + UChar32 prevChr = utext_char32At(&fText, result-1); + UChar32 currChr = utext_char32At(&fText, result); + if (currChr == U_SENTINEL || prevChr == U_SENTINEL) { + break; + } + if (fLineWordOpts == UBRK_LINEWORD_KEEP_HANGUL) { + UErrorCode status = U_ZERO_ERROR; + if (uscript_getScript(currChr, &status) != USCRIPT_HANGUL || uscript_getScript(prevChr, &status) != USCRIPT_HANGUL) { + break; + } + } else { + if (!u_isalpha(currChr) || !u_isalpha(prevChr)) { + break; + } + } + int32_t nextResult = handleNextInternal(); + if (nextResult <= result) { + break; + } + result = nextResult; + } + return result; +} + +int32_t RuleBasedBreakIterator::handleNextInternal() { int32_t state; uint16_t category = 0; RBBIRunMode mode; - + RBBIStateTableRow *row; UChar32 c; LookAheadResults lookAheadMatches; int32_t result = 0; int32_t initialPosition = 0; + const RBBIStateTable *statetable = fData->fForwardTable; const char *tableData = statetable->fTableData; uint32_t tableRowLen = statetable->fRowLen; - #ifdef RBBI_DEBUG - if (fTrace) { + if (gTrace) { RBBIDebugPuts("Handle Next pos char state category"); } #endif - // No matter what, handleNext alway correctly sets the break tag value. - fLastStatusIndexValid = TRUE; - fLastRuleStatusIndex = 0; + // handleNext alway sets the break tag value. + // Set the default for it. + fRuleStatusIndex = 0; + + fDictionaryCharCount = 0; // if we're already at the end of the text, return DONE. - initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText); + initialPosition = fPosition; + UTEXT_SETNATIVEINDEX(&fText, initialPosition); result = initialPosition; - c = UTEXT_NEXT32(fText); - if (fData == NULL || c==U_SENTINEL) { - return BreakIterator::DONE; + c = UTEXT_NEXT32(&fText); + if (c==U_SENTINEL) { + fDone = TRUE; + return UBRK_DONE; } // Set the initial state for the state machine @@ -1108,8 +847,8 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { row = (RBBIStateTableRow *) //(statetable->fTableData + (statetable->fRowLen * state)); (tableData + tableRowLen * state); - - + + mode = RBBI_RUN; if (statetable->fFlags & RBBI_BOF_REQUIRED) { category = 2; @@ -1123,7 +862,7 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { if (c == U_SENTINEL) { // Reached end of input string. if (mode == RBBI_END) { - // We have already run the loop one last time with the + // We have already run the loop one last time with the // character set to the psueudo {eof} value. Now it is time // to unconditionally bail out. break; @@ -1144,10 +883,10 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned, // not the size of the character going in, which is a UChar32. // - UTRIE_GET16(&fData->fTrie, c, category); + category = (fLatin1Cat!=NULL && c<0x100)? fLatin1Cat[c]: UTRIE2_GET16(fData->fTrie, c); // Check the dictionary bit in the character's category. - // Counter is only used by dictionary based iterators (subclasses). + // Counter is only used by dictionary based iteration. // Chars that need to be handled by a dictionary have a flag bit set // in their category values. // @@ -1159,8 +898,8 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { } #ifdef RBBI_DEBUG - if (fTrace) { - RBBIDebugPrintf(" %4lld ", utext_getNativeIndex(fText)); + if (gTrace) { + RBBIDebugPrintf(" %4ld ", utext_getNativeIndex(&fText)); if (0x20<=c && c<0x7f) { RBBIDebugPrintf("\"%c\" ", c); } else { @@ -1173,9 +912,7 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { // State Transition - move machine to its next state // - // Note: fNextState is defined as uint16_t[2], but we are casting - // a generated RBBI table to RBBIStateTableRow and some tables - // actually have more than 2 categories. + // fNextState is a variable-length array. U_ASSERT(categoryfHeader->fCatCount); state = row->fNextState[category]; /*Not accessing beyond memory*/ row = (RBBIStateTableRow *) @@ -1186,25 +923,25 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { if (row->fAccepting == -1) { // Match found, common case. if (mode != RBBI_START) { - result = (int32_t)UTEXT_GETNATIVEINDEX(fText); + result = (int32_t)UTEXT_GETNATIVEINDEX(&fText); } - fLastRuleStatusIndex = row->fTagIdx; // Remember the break status (tag) values. + fRuleStatusIndex = row->fTagIdx; // Remember the break status (tag) values. } int16_t completedRule = row->fAccepting; if (completedRule > 0) { - // Lookahead match is completed. + // Lookahead match is completed. int32_t lookaheadResult = lookAheadMatches.getPosition(completedRule); if (lookaheadResult >= 0) { - fLastRuleStatusIndex = row->fTagIdx; - UTEXT_SETNATIVEINDEX(fText, lookaheadResult); + fRuleStatusIndex = row->fTagIdx; + fPosition = lookaheadResult; return lookaheadResult; } } int16_t rule = row->fLookAhead; if (rule != 0) { // At the position of a '/' in a look-ahead match. Record it. - int32_t pos = (int32_t)UTEXT_GETNATIVEINDEX(fText); + int32_t pos = (int32_t)UTEXT_GETNATIVEINDEX(&fText); lookAheadMatches.setPosition(rule, pos); } @@ -1214,20 +951,18 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { // longer match is possible, no matter what characters follow. break; } - - // Advance to the next character. + + // Advance to the next character. // If this is a beginning-of-input loop iteration, don't advance // the input position. The next iteration will be processing the // first real input character. if (mode == RBBI_RUN) { - c = UTEXT_NEXT32(fText); + c = UTEXT_NEXT32(&fText); } else { if (mode == RBBI_START) { mode = RBBI_RUN; } } - - } // The state machine is done. Check whether it found a match... @@ -1236,15 +971,16 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { // (This really indicates a defect in the break rules. They should always match // at least one character.) if (result == initialPosition) { - UTEXT_SETNATIVEINDEX(fText, initialPosition); - UTEXT_NEXT32(fText); - result = (int32_t)UTEXT_GETNATIVEINDEX(fText); + utext_setNativeIndex(&fText, initialPosition); + utext_next32(&fText); + result = (int32_t)utext_getNativeIndex(&fText); + fRuleStatusIndex = 0; } // Leave the iterator at our result position. - UTEXT_SETNATIVEINDEX(fText, result); + fPosition = result; #ifdef RBBI_DEBUG - if (fTrace) { + if (gTrace) { RBBIDebugPrintf("result = %d\n\n", result); } #endif @@ -1252,112 +988,57 @@ int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) { } - //----------------------------------------------------------------------------------- // -// handlePrevious() -// -// Iterate backwards, according to the logic of the reverse rules. -// This version handles the exact style backwards rules. +// handleSafePrevious() // -// The logic of this function is very similar to handleNext(), above. +// Iterate backwards using the safe reverse rules. +// The logic of this function is similar to handleNext(), but simpler +// because the safe table does not require as many options. // //----------------------------------------------------------------------------------- -int32_t RuleBasedBreakIterator::handlePrevious(const RBBIStateTable *statetable) { +int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) { int32_t state; uint16_t category = 0; - RBBIRunMode mode; RBBIStateTableRow *row; UChar32 c; - LookAheadResults lookAheadMatches; int32_t result = 0; - int32_t initialPosition = 0; + const RBBIStateTable *stateTable = fData->fReverseTable; + UTEXT_SETNATIVEINDEX(&fText, fromPosition); #ifdef RBBI_DEBUG - if (fTrace) { + if (gTrace) { RBBIDebugPuts("Handle Previous pos char state category"); } #endif - // handlePrevious() never gets the rule status. - // Flag the status as invalid; if the user ever asks for status, we will need - // to back up, then re-find the break position using handleNext(), which does - // get the status value. - fLastStatusIndexValid = FALSE; - fLastRuleStatusIndex = 0; - // if we're already at the start of the text, return DONE. - if (fText == NULL || fData == NULL || UTEXT_GETNATIVEINDEX(fText)==0) { + if (fData == NULL || UTEXT_GETNATIVEINDEX(&fText)==0) { return BreakIterator::DONE; } - // Set up the starting char. - initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText); - result = initialPosition; - c = UTEXT_PREVIOUS32(fText); - // Set the initial state for the state machine + c = UTEXT_PREVIOUS32(&fText); state = START_STATE; row = (RBBIStateTableRow *) - (statetable->fTableData + (statetable->fRowLen * state)); - category = 3; - mode = RBBI_RUN; - if (statetable->fFlags & RBBI_BOF_REQUIRED) { - category = 2; - mode = RBBI_START; - } - + (stateTable->fTableData + (stateTable->fRowLen * state)); // loop until we reach the start of the text or transition to state 0 // - for (;;) { - if (c == U_SENTINEL) { - // Reached end of input string. - if (mode == RBBI_END) { - // We have already run the loop one last time with the - // character set to the psueudo {eof} value. Now it is time - // to unconditionally bail out. - if (result == initialPosition) { - // Ran off start, no match found. - // move one index one (towards the start, since we are doing a previous()) - UTEXT_SETNATIVEINDEX(fText, initialPosition); - (void)UTEXT_PREVIOUS32(fText); // TODO: shouldn't be necessary. We're already at beginning. Check. - } - break; - } - // Run the loop one last time with the fake end-of-input character category. - mode = RBBI_END; - category = 1; - } + for (; c != U_SENTINEL; c = UTEXT_PREVIOUS32(&fText)) { + // look up the current character's character category, which tells us + // which column in the state table to look at. + // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned, + // not the size of the character going in, which is a UChar32. // - // Get the char category. An incoming category of 1 or 2 means that - // we are preset for doing the beginning or end of input, and - // that we shouldn't get a category from an actual text input character. - // - if (mode == RBBI_RUN) { - // look up the current character's character category, which tells us - // which column in the state table to look at. - // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned, - // not the size of the character going in, which is a UChar32. - // - UTRIE_GET16(&fData->fTrie, c, category); - - // Check the dictionary bit in the character's category. - // Counter is only used by dictionary based iterators (subclasses). - // Chars that need to be handled by a dictionary have a flag bit set - // in their category values. - // - if ((category & 0x4000) != 0) { - fDictionaryCharCount++; - // And off the dictionary flag bit. - category &= ~0x4000; - } - } + // And off the dictionary flag bit. For reverse iteration it is not used. + category = UTRIE2_GET16(fData->fTrie, c); + category &= ~0x4000; #ifdef RBBI_DEBUG - if (fTrace) { - RBBIDebugPrintf(" %4d ", (int32_t)utext_getNativeIndex(fText)); + if (gTrace) { + RBBIDebugPrintf(" %4d ", (int32_t)utext_getNativeIndex(&fText)); if (0x20<=c && c<0x7f) { RBBIDebugPrintf("\"%c\" ", c); } else { @@ -1369,92 +1050,29 @@ int32_t RuleBasedBreakIterator::handlePrevious(const RBBIStateTable *statetable) // State Transition - move machine to its next state // - - // Note: fNextState is defined as uint16_t[2], but we are casting - // a generated RBBI table to RBBIStateTableRow and some tables - // actually have more than 2 categories. + // fNextState is a variable-length array. U_ASSERT(categoryfHeader->fCatCount); state = row->fNextState[category]; /*Not accessing beyond memory*/ row = (RBBIStateTableRow *) - (statetable->fTableData + (statetable->fRowLen * state)); - - if (row->fAccepting == -1) { - // Match found, common case. - result = (int32_t)UTEXT_GETNATIVEINDEX(fText); - } - - int16_t completedRule = row->fAccepting; - if (completedRule > 0) { - // Lookahead match is completed. - int32_t lookaheadResult = lookAheadMatches.getPosition(completedRule); - if (lookaheadResult >= 0) { - UTEXT_SETNATIVEINDEX(fText, lookaheadResult); - return lookaheadResult; - } - } - int16_t rule = row->fLookAhead; - if (rule != 0) { - // At the position of a '/' in a look-ahead match. Record it. - int32_t pos = (int32_t)UTEXT_GETNATIVEINDEX(fText); - lookAheadMatches.setPosition(rule, pos); - } + (stateTable->fTableData + (stateTable->fRowLen * state)); if (state == STOP_STATE) { // This is the normal exit from the lookup state machine. - // We have advanced through the string until it is certain that no - // longer match is possible, no matter what characters follow. + // Transistion to state zero means we have found a safe point. break; } - - // Move (backwards) to the next character to process. - // If this is a beginning-of-input loop iteration, don't advance - // the input position. The next iteration will be processing the - // first real input character. - if (mode == RBBI_RUN) { - c = UTEXT_PREVIOUS32(fText); - } else { - if (mode == RBBI_START) { - mode = RBBI_RUN; - } - } } // The state machine is done. Check whether it found a match... - - // If the iterator failed to advance in the match engine, force it ahead by one. - // (This really indicates a defect in the break rules. They should always match - // at least one character.) - if (result == initialPosition) { - UTEXT_SETNATIVEINDEX(fText, initialPosition); - UTEXT_PREVIOUS32(fText); - result = (int32_t)UTEXT_GETNATIVEINDEX(fText); - } - - // Leave the iterator at our result position. - UTEXT_SETNATIVEINDEX(fText, result); + result = (int32_t)UTEXT_GETNATIVEINDEX(&fText); #ifdef RBBI_DEBUG - if (fTrace) { + if (gTrace) { RBBIDebugPrintf("result = %d\n\n", result); } #endif return result; } - -void -RuleBasedBreakIterator::reset() -{ - if (fCachedBreakPositions) { - uprv_free(fCachedBreakPositions); - } - fCachedBreakPositions = NULL; - fNumCachedBreakPositions = 0; - fDictionaryCharCount = 0; - fPositionInCache = 0; -} - - - //------------------------------------------------------------------------------- // // getRuleStatus() Return the break rule tag associated with the current @@ -1462,64 +1080,27 @@ RuleBasedBreakIterator::reset() // position by iterating forwards, the value will have been // cached by the handleNext() function. // -// If no cached status value is available, the status is -// found by doing a previous() followed by a next(), which -// leaves the iterator where it started, and computes the -// status while doing the next(). -// //------------------------------------------------------------------------------- -void RuleBasedBreakIterator::makeRuleStatusValid() { - if (fLastStatusIndexValid == FALSE) { - // No cached status is available. - if (fText == NULL || current() == 0) { - // At start of text, or there is no text. Status is always zero. - fLastRuleStatusIndex = 0; - fLastStatusIndexValid = TRUE; - } else { - // Not at start of text. Find status the tedious way. - int32_t pa = current(); - previous(); - if (fNumCachedBreakPositions > 0) { - reset(); // Blow off the dictionary cache - } - int32_t pb = next(); - if (pa != pb) { - // note: the if (pa != pb) test is here only to eliminate warnings for - // unused local variables on gcc. Logically, it isn't needed. - U_ASSERT(pa == pb); - } - } - } - U_ASSERT(fLastRuleStatusIndex >= 0 && fLastRuleStatusIndex < fData->fStatusMaxIdx); -} - int32_t RuleBasedBreakIterator::getRuleStatus() const { - RuleBasedBreakIterator *nonConstThis = (RuleBasedBreakIterator *)this; - nonConstThis->makeRuleStatusValid(); // fLastRuleStatusIndex indexes to the start of the appropriate status record // (the number of status values.) // This function returns the last (largest) of the array of status values. - int32_t idx = fLastRuleStatusIndex + fData->fRuleStatusTable[fLastRuleStatusIndex]; + int32_t idx = fRuleStatusIndex + fData->fRuleStatusTable[fRuleStatusIndex]; int32_t tagVal = fData->fRuleStatusTable[idx]; return tagVal; } - - int32_t RuleBasedBreakIterator::getRuleStatusVec( - int32_t *fillInVec, int32_t capacity, UErrorCode &status) -{ + int32_t *fillInVec, int32_t capacity, UErrorCode &status) { if (U_FAILURE(status)) { return 0; } - RuleBasedBreakIterator *nonConstThis = (RuleBasedBreakIterator *)this; - nonConstThis->makeRuleStatusValid(); - int32_t numVals = fData->fRuleStatusTable[fLastRuleStatusIndex]; + int32_t numVals = fData->fRuleStatusTable[fRuleStatusIndex]; int32_t numValsToCopy = numVals; if (numVals > capacity) { status = U_BUFFER_OVERFLOW_ERROR; @@ -1527,12 +1108,70 @@ int32_t RuleBasedBreakIterator::getRuleStatusVec( } int i; for (i=0; ifRuleStatusTable[fLastRuleStatusIndex + i + 1]; + fillInVec[i] = fData->fRuleStatusTable[fRuleStatusIndex + i + 1]; } return numVals; } - +// Apple custom addition +int32_t RuleBasedBreakIterator::tokenize(int32_t maxTokens, RuleBasedTokenRange *outTokenRanges, unsigned long *outTokenFlags) +{ + //os_log(OS_LOG_DEFAULT, "# tokenize 0: maxT %d; txt idx %lld, len %lld", maxTokens, utext_getNativeIndex(fText), utext_nativeLength(fText)); + if (fDone) { + return 0; + } + RuleBasedTokenRange *outTokenLimit = outTokenRanges + maxTokens; + RuleBasedTokenRange *outTokenP = outTokenRanges; + int32_t lastOffset = fPosition; + //os_log(OS_LOG_DEFAULT, "# tokenize 1"); + while (outTokenP < outTokenLimit) { + // start portion from inlining populateFollowing() + int32_t pos = 0; + int32_t ruleStatusIdx = 0; + int32_t startPos = fPosition; + + if (fDictionaryCache->following(startPos, &pos, &ruleStatusIdx)) { + fPosition = pos; + fRuleStatusIndex = ruleStatusIdx; + } else { + pos = handleNextInternal(); // sets fRuleStatusIndex for the pos it returns, updates fPosition + if (pos == UBRK_DONE) { + // fDone = TRUE; already set by handleNextInternal + break; + } + // Use current result from handleNextInternal(), including fRuleStatusIndex, + // unless overridden by dictionary subdivisions + fPosition = pos; + if (fDictionaryCharCount > 0) { + // The text segment obtained from the rules includes dictionary characters. + // Subdivide it, with subdivided results going into the dictionary cache. + fDictionaryCache->populateDictionary(startPos, pos, fRuleStatusIndex, fRuleStatusIndex); + if (fDictionaryCache->following(startPos, &pos, &ruleStatusIdx)) { + fPosition = pos; + fRuleStatusIndex = ruleStatusIdx; + } + } + } + // end portion from inlining populateFollowing() + int32_t flagCount = fData->fRuleStatusTable[fRuleStatusIndex]; + const int32_t* flagPtr = fData->fRuleStatusTable + fRuleStatusIndex + flagCount; + int32_t flagSet = *flagPtr; // if -1 then skip token + if (flagSet != -1) { + outTokenP->location = lastOffset; + outTokenP++->length = fPosition - lastOffset; + if (outTokenFlags) { + // flagSet should be the OR of all flags returned by getRuleStatusVec; + // here we collect from high-order to low-order. + while (--flagCount > 0) { + flagSet |= *--flagPtr; + } + *outTokenFlags++ = (unsigned long)flagSet; + } + } + lastOffset = fPosition; + } + return (outTokenP - outTokenRanges); +} //------------------------------------------------------------------------------- // @@ -1575,205 +1214,25 @@ BreakIterator * RuleBasedBreakIterator::createBufferClone(void * /*stackBuffer* return (RuleBasedBreakIterator *)clonedBI; } - -//------------------------------------------------------------------------------- -// -// isDictionaryChar Return true if the category lookup for this char -// indicates that it is in the set of dictionary lookup -// chars. -// -// This function is intended for use by dictionary based -// break iterators. -// -//------------------------------------------------------------------------------- -/*UBool RuleBasedBreakIterator::isDictionaryChar(UChar32 c) { - if (fData == NULL) { - return FALSE; - } - uint16_t category; - UTRIE_GET16(&fData->fTrie, c, category); - return (category & 0x4000) != 0; -}*/ - - -//------------------------------------------------------------------------------- -// -// checkDictionary This function handles all processing of characters in -// the "dictionary" set. It will determine the appropriate -// course of action, and possibly set up a cache in the -// process. -// -//------------------------------------------------------------------------------- -int32_t RuleBasedBreakIterator::checkDictionary(int32_t startPos, - int32_t endPos, - UBool reverse) { - // Reset the old break cache first. - reset(); - - // note: code segment below assumes that dictionary chars are in the - // startPos-endPos range - // value returned should be next character in sequence - if ((endPos - startPos) <= 1) { - return (reverse ? startPos : endPos); - } - - // Starting from the starting point, scan towards the proposed result, - // looking for the first dictionary character (which may be the one - // we're on, if we're starting in the middle of a range). - utext_setNativeIndex(fText, reverse ? endPos : startPos); - if (reverse) { - UTEXT_PREVIOUS32(fText); - } - - int32_t rangeStart = startPos; - int32_t rangeEnd = endPos; - - uint16_t category; - int32_t current; - UErrorCode status = U_ZERO_ERROR; - UStack breaks(status); - int32_t foundBreakCount = 0; - UChar32 c = utext_current32(fText); - - UTRIE_GET16(&fData->fTrie, c, category); - - // Is the character we're starting on a dictionary character? If so, we - // need to back up to include the entire run; otherwise the results of - // the break algorithm will differ depending on where we start. Since - // the result is cached and there is typically a non-dictionary break - // within a small number of words, there should be little performance impact. - if (category & 0x4000) { - if (reverse) { - do { - utext_next32(fText); // TODO: recast to work directly with postincrement. - c = utext_current32(fText); - UTRIE_GET16(&fData->fTrie, c, category); - } while (c != U_SENTINEL && (category & 0x4000)); - // Back up to the last dictionary character - rangeEnd = (int32_t)UTEXT_GETNATIVEINDEX(fText); - if (c == U_SENTINEL) { - // c = fText->last32(); - // TODO: why was this if needed? - c = UTEXT_PREVIOUS32(fText); - } - else { - c = UTEXT_PREVIOUS32(fText); - } - } - else { - do { - c = UTEXT_PREVIOUS32(fText); - UTRIE_GET16(&fData->fTrie, c, category); - } - while (c != U_SENTINEL && (category & 0x4000)); - // Back up to the last dictionary character - if (c == U_SENTINEL) { - // c = fText->first32(); - c = utext_current32(fText); - } - else { - utext_next32(fText); - c = utext_current32(fText); - } - rangeStart = (int32_t)UTEXT_GETNATIVEINDEX(fText);; - } - UTRIE_GET16(&fData->fTrie, c, category); - } - - // Loop through the text, looking for ranges of dictionary characters. - // For each span, find the appropriate break engine, and ask it to find - // any breaks within the span. - // Note: we always do this in the forward direction, so that the break - // cache is built in the right order. - if (reverse) { - utext_setNativeIndex(fText, rangeStart); - c = utext_current32(fText); - UTRIE_GET16(&fData->fTrie, c, category); - } - while(U_SUCCESS(status)) { - while((current = (int32_t)UTEXT_GETNATIVEINDEX(fText)) < rangeEnd && (category & 0x4000) == 0) { - utext_next32(fText); // TODO: tweak for post-increment operation - c = utext_current32(fText); - UTRIE_GET16(&fData->fTrie, c, category); - } - if (current >= rangeEnd) { - break; - } - - // We now have a dictionary character. Get the appropriate language object - // to deal with it. - const LanguageBreakEngine *lbe = getLanguageBreakEngine(c); - - // Ask the language object if there are any breaks. It will leave the text - // pointer on the other side of its range, ready to search for the next one. - if (lbe != NULL) { - foundBreakCount += lbe->findBreaks(fText, rangeStart, rangeEnd, FALSE, fBreakType, breaks); - } - - // Reload the loop variables for the next go-round - c = utext_current32(fText); - UTRIE_GET16(&fData->fTrie, c, category); - } - - // If we found breaks, build a new break cache. The first and last entries must - // be the original starting and ending position. - if (foundBreakCount > 0) { - U_ASSERT(foundBreakCount == breaks.size()); - int32_t totalBreaks = foundBreakCount; - if (startPos < breaks.elementAti(0)) { - totalBreaks += 1; - } - if (endPos > breaks.peeki()) { - totalBreaks += 1; - } - fCachedBreakPositions = (int32_t *)uprv_malloc(totalBreaks * sizeof(int32_t)); - if (fCachedBreakPositions != NULL) { - int32_t out = 0; - fNumCachedBreakPositions = totalBreaks; - if (startPos < breaks.elementAti(0)) { - fCachedBreakPositions[out++] = startPos; - } - for (int32_t i = 0; i < foundBreakCount; ++i) { - fCachedBreakPositions[out++] = breaks.elementAti(i); - } - if (endPos > fCachedBreakPositions[out-1]) { - fCachedBreakPositions[out] = endPos; - } - // If there are breaks, then by definition, we are replacing the original - // proposed break by one of the breaks we found. Use following() and - // preceding() to do the work. They should never recurse in this case. - if (reverse) { - return preceding(endPos); - } - else { - return following(startPos); - } - } - // If the allocation failed, just fall through to the "no breaks found" case. - } - - // If we get here, there were no language-based breaks. Set the text pointer - // to the original proposed break. - utext_setNativeIndex(fText, reverse ? startPos : endPos); - return (reverse ? startPos : endPos); -} - U_NAMESPACE_END -static icu::UStack *gLanguageBreakFactories = NULL; +static icu::UStack *gLanguageBreakFactories = nullptr; +static const icu::UnicodeString *gEmptyString = nullptr; static icu::UInitOnce gLanguageBreakFactoriesInitOnce = U_INITONCE_INITIALIZER; +static icu::UInitOnce gRBBIInitOnce = U_INITONCE_INITIALIZER; /** - * Release all static memory held by breakiterator. + * Release all static memory held by breakiterator. */ U_CDECL_BEGIN -static UBool U_CALLCONV breakiterator_cleanup_dict(void) { - if (gLanguageBreakFactories) { - delete gLanguageBreakFactories; - gLanguageBreakFactories = NULL; - } +static UBool U_CALLCONV rbbi_cleanup(void) { + delete gLanguageBreakFactories; + gLanguageBreakFactories = nullptr; + delete gEmptyString; + gEmptyString = nullptr; gLanguageBreakFactoriesInitOnce.reset(); + gRBBIInitOnce.reset(); return TRUE; } U_CDECL_END @@ -1785,6 +1244,11 @@ static void U_CALLCONV _deleteFactory(void *obj) { U_CDECL_END U_NAMESPACE_BEGIN +static void U_CALLCONV rbbiInit() { + gEmptyString = new UnicodeString(); + ucln_common_registerCleanup(UCLN_COMMON_RBBI, rbbi_cleanup); +} + static void U_CALLCONV initLanguageFactories() { UErrorCode status = U_ZERO_ERROR; U_ASSERT(gLanguageBreakFactories == NULL); @@ -1799,23 +1263,23 @@ static void U_CALLCONV initLanguageFactories() { } #endif } - ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR_DICT, breakiterator_cleanup_dict); + ucln_common_registerCleanup(UCLN_COMMON_RBBI, rbbi_cleanup); } static const LanguageBreakEngine* -getLanguageBreakEngineFromFactory(UChar32 c, int32_t breakType) +getLanguageBreakEngineFromFactory(UChar32 c) { umtx_initOnce(gLanguageBreakFactoriesInitOnce, &initLanguageFactories); if (gLanguageBreakFactories == NULL) { return NULL; } - + int32_t i = gLanguageBreakFactories->size(); const LanguageBreakEngine *lbe = NULL; while (--i >= 0) { LanguageBreakFactory *factory = (LanguageBreakFactory *)(gLanguageBreakFactories->elementAt(i)); - lbe = factory->getEngineFor(c, breakType); + lbe = factory->getEngineFor(c); if (lbe != NULL) { break; } @@ -1834,7 +1298,7 @@ const LanguageBreakEngine * RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) { const LanguageBreakEngine *lbe = NULL; UErrorCode status = U_ZERO_ERROR; - + if (fLanguageBreakEngines == NULL) { fLanguageBreakEngines = new UStack(status); if (fLanguageBreakEngines == NULL || U_FAILURE(status)) { @@ -1843,19 +1307,19 @@ RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) { return NULL; } } - + int32_t i = fLanguageBreakEngines->size(); while (--i >= 0) { lbe = (const LanguageBreakEngine *)(fLanguageBreakEngines->elementAt(i)); - if (lbe->handles(c, fBreakType)) { + if (lbe->handles(c)) { return lbe; } } - + // No existing dictionary took the character. See if a factory wants to // give us a new LanguageBreakEngine for this character. - lbe = getLanguageBreakEngineFromFactory(c, fBreakType); - + lbe = getLanguageBreakEngineFromFactory(c); + // If we got one, use it and push it on our stack. if (lbe != NULL) { fLanguageBreakEngines->push((void *)lbe, status); @@ -1863,13 +1327,14 @@ RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) { // return it even if the push fails. return lbe; } - + // No engine is forthcoming for this character. Add it to the // reject set. Create the reject break engine if needed. if (fUnhandledBreakEngine == NULL) { fUnhandledBreakEngine = new UnhandledEngine(status); if (U_SUCCESS(status) && fUnhandledBreakEngine == NULL) { status = U_MEMORY_ALLOCATION_ERROR; + return nullptr; } // Put it last so that scripts for which we have an engine get tried // first. @@ -1881,23 +1346,34 @@ RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) { return NULL; } } - + // Tell the reject engine about the character; at its discretion, it may // add more than just the one character. - fUnhandledBreakEngine->handleCharacter(c, fBreakType); - + fUnhandledBreakEngine->handleCharacter(c); + return fUnhandledBreakEngine; } +void RuleBasedBreakIterator::dumpCache() { + fBreakCache->dumpCache(); +} +void RuleBasedBreakIterator::dumpTables() { + fData->printData(); +} -/*int32_t RuleBasedBreakIterator::getBreakType() const { - return fBreakType; -}*/ +/** + * Returns the description used to create this iterator + */ -void RuleBasedBreakIterator::setBreakType(int32_t type) { - fBreakType = type; - reset(); +const UnicodeString& +RuleBasedBreakIterator::getRules() const { + if (fData != NULL) { + return fData->getRuleSourceString(); + } else { + umtx_initOnce(gRBBIInitOnce, &rbbiInit); + return *gEmptyString; + } } U_NAMESPACE_END diff --git a/icuSources/common/rbbi57.cpp b/icuSources/common/rbbi57.cpp new file mode 100644 index 00000000..49acf1c0 --- /dev/null +++ b/icuSources/common/rbbi57.cpp @@ -0,0 +1,1886 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +*************************************************************************** +* Copyright (C) 1999-2016 International Business Machines Corporation +* and others. All rights reserved. +*************************************************************************** + +********************************************************************** +* Legacy version of RuleBasedBreakIterator from ICU 57, +* only for use by Apple RuleBasedTokenizer +********************************************************************** +*/ + +#include "utypeinfo.h" // for 'typeid' to work + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/schriter.h" +#include "unicode/uchriter.h" +#include "unicode/udata.h" +#include "unicode/uclean.h" +#include "unicode/utext.h" +#include "rbbidata57.h" +#include "rbbirb57.h" +#include "rbbi57.h" +#include "cmemory.h" +#include "cstring.h" +#include "umutex.h" +#include "ucln_cmn.h" +#include "brkeng.h" +#include "utrie.h" + +#include "uassert.h" +#include "uvectr32.h" + +// if U_LOCAL_SERVICE_HOOK is defined, then localsvc.cpp is expected to be included. +#if U_LOCAL_SERVICE_HOOK +#include "localsvc.h" +#endif + +#ifdef RBBI_DEBUG +static UBool fTrace = FALSE; +#endif + +U_NAMESPACE_BEGIN + +// The state number of the starting state +#define START_STATE 1 + +// The state-transition value indicating "stop" +#define STOP_STATE 0 + + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RuleBasedBreakIterator57) + + +//======================================================================= +// constructors +//======================================================================= + +/** + * Constructs a RuleBasedBreakIterator57 that uses the already-created + * tables object that is passed in as a parameter. + */ +RuleBasedBreakIterator57::RuleBasedBreakIterator57(RBBIDataHeader57* data, UErrorCode &status) +{ + init(); + fData = new RBBIDataWrapper57(data, status); // status checked in constructor + if (U_FAILURE(status)) {return;} + if(fData == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } +} + +/** + * Same as above but does not adopt memory + */ +RuleBasedBreakIterator57::RuleBasedBreakIterator57(const RBBIDataHeader57* data, enum EDontAdopt, UErrorCode &status) +{ + init(); + fData = new RBBIDataWrapper57(data, RBBIDataWrapper57::kDontAdopt, status); // status checked in constructor + if (U_FAILURE(status)) {return;} + if(fData == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } +} + + +#if 0 +// not used by rbtok.cpp + +// +// Construct from precompiled binary rules (tables). This constructor is public API, +// taking the rules as a (const uint8_t *) to match the type produced by getBinaryRules(). +// +RuleBasedBreakIterator57::RuleBasedBreakIterator57(const uint8_t *compiledRules, + uint32_t ruleLength, + UErrorCode &status) { + init(); + if (U_FAILURE(status)) { + return; + } + if (compiledRules == NULL || ruleLength < sizeof(RBBIDataHeader57)) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + const RBBIDataHeader57 *data = (const RBBIDataHeader57 *)compiledRules; + if (data->fLength > ruleLength) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + fData = new RBBIDataWrapper57(data, RBBIDataWrapper57::kDontAdopt, status); + if (U_FAILURE(status)) {return;} + if(fData == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } +} + + +//------------------------------------------------------------------------------- +// +// Constructor from a UDataMemory handle to precompiled break rules +// stored in an ICU data file. +// +//------------------------------------------------------------------------------- +RuleBasedBreakIterator57::RuleBasedBreakIterator57(UDataMemory* udm, UErrorCode &status) +{ + init(); + fData = new RBBIDataWrapper57(udm, status); // status checked in constructor + if (U_FAILURE(status)) {return;} + if(fData == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } +} +#endif + + + +//------------------------------------------------------------------------------- +// +// Constructor from a set of rules supplied as a string. +// +//------------------------------------------------------------------------------- +RuleBasedBreakIterator57::RuleBasedBreakIterator57( const UnicodeString &rules, + UParseError &parseError, + UErrorCode &status) +{ + init(); + if (U_FAILURE(status)) {return;} + RuleBasedBreakIterator57 *bi = (RuleBasedBreakIterator57 *) + RBBIRuleBuilder57::createRuleBasedBreakIterator(rules, &parseError, status); + // Note: This is a bit awkward. The RBBI ruleBuilder has a factory method that + // creates and returns a complete RBBI. From here, in a constructor, we + // can't just return the object created by the builder factory, hence + // the assignment of the factory created object to "this". + if (U_SUCCESS(status)) { + *this = *bi; + delete bi; + } +} + + +//------------------------------------------------------------------------------- +// +// Default Constructor. Create an empty shell that can be set up later. +// Used when creating a RuleBasedBreakIterator57 from a set +// of rules. +//------------------------------------------------------------------------------- +RuleBasedBreakIterator57::RuleBasedBreakIterator57() { + init(); +} + + +//------------------------------------------------------------------------------- +// +// Copy constructor. Will produce a break iterator with the same behavior, +// and which iterates over the same text, as the one passed in. +// +//------------------------------------------------------------------------------- +RuleBasedBreakIterator57::RuleBasedBreakIterator57(const RuleBasedBreakIterator57& other) +: BreakIterator(other) +{ + this->init(); + *this = other; +} + + +/** + * Destructor + */ +RuleBasedBreakIterator57::~RuleBasedBreakIterator57() { + if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + // fCharIter was adopted from the outside. + delete fCharIter; + } + fCharIter = NULL; + delete fSCharIter; + fCharIter = NULL; + delete fDCharIter; + fDCharIter = NULL; + + utext_close(fText); + + if (fData != NULL) { + fData->removeReference(); + fData = NULL; + } + if (fCachedBreakPositions) { + uprv_free(fCachedBreakPositions); + fCachedBreakPositions = NULL; + } + if (fLanguageBreakEngines) { + delete fLanguageBreakEngines; + fLanguageBreakEngines = NULL; + } + if (fUnhandledBreakEngine) { + delete fUnhandledBreakEngine; + fUnhandledBreakEngine = NULL; + } +} + +/** + * Assignment operator. Sets this iterator to have the same behavior, + * and iterate over the same text, as the one passed in. + */ +RuleBasedBreakIterator57& +RuleBasedBreakIterator57::operator=(const RuleBasedBreakIterator57& that) { + if (this == &that) { + return *this; + } + fLineWordOpts = that.fLineWordOpts; + reset(); // Delete break cache information + fBreakType = that.fBreakType; + if (fLanguageBreakEngines != NULL) { + delete fLanguageBreakEngines; + fLanguageBreakEngines = NULL; // Just rebuild for now + } + // TODO: clone fLanguageBreakEngines from "that" + UErrorCode status = U_ZERO_ERROR; + fText = utext_clone(fText, that.fText, FALSE, TRUE, &status); + + if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + delete fCharIter; + } + fCharIter = NULL; + + if (that.fCharIter != NULL ) { + // This is a little bit tricky - it will intially appear that + // this->fCharIter is adopted, even if that->fCharIter was + // not adopted. That's ok. + fCharIter = that.fCharIter->clone(); + } + + if (fData != NULL) { + fData->removeReference(); + fData = NULL; + } + if (that.fData != NULL) { + fData = that.fData->addReference(); + } + + return *this; +} + + + +//----------------------------------------------------------------------------- +// +// init() Shared initialization routine. Used by all the constructors. +// Initializes all fields, leaving the object in a consistent state. +// +//----------------------------------------------------------------------------- +void RuleBasedBreakIterator57::init() { + UErrorCode status = U_ZERO_ERROR; + fText = utext_openUChars(NULL, NULL, 0, &status); + fCharIter = NULL; + fSCharIter = NULL; + fDCharIter = NULL; + fData = NULL; + fLastRuleStatusIndex = 0; + fLastStatusIndexValid = TRUE; + fDictionaryCharCount = 0; + fBreakType = UBRK_WORD; // Defaulting BreakType to word gives reasonable + // dictionary behavior for Break Iterators that are + // built from rules. Even better would be the ability to + // declare the type in the rules. + + fCachedBreakPositions = NULL; + fLanguageBreakEngines = NULL; + fUnhandledBreakEngine = NULL; + fNumCachedBreakPositions = 0; + fPositionInCache = 0; + +#ifdef RBBI_DEBUG + static UBool debugInitDone = FALSE; + if (debugInitDone == FALSE) { + char *debugEnv = getenv("U_RBBIDEBUG"); + if (debugEnv && uprv_strstr(debugEnv, "trace")) { + fTrace = TRUE; + } + debugInitDone = TRUE; + } +#endif +} + + + +//----------------------------------------------------------------------------- +// +// clone - Returns a newly-constructed RuleBasedBreakIterator57 with the same +// behavior, and iterating over the same text, as this one. +// Virtual function: does the right thing with subclasses. +// +//----------------------------------------------------------------------------- +BreakIterator* +RuleBasedBreakIterator57::clone(void) const { + return new RuleBasedBreakIterator57(*this); +} + +/** + * Equality operator. Returns TRUE if both BreakIterators are of the + * same class, have the same behavior, and iterate over the same text. + */ +UBool +RuleBasedBreakIterator57::operator==(const BreakIterator& that) const { + if (typeid(*this) != typeid(that)) { + return FALSE; + } + + const RuleBasedBreakIterator57& that2 = (const RuleBasedBreakIterator57&) that; + if (that2.fLineWordOpts != fLineWordOpts) { + return FALSE; + } + + if (!utext_equals(fText, that2.fText)) { + // The two break iterators are operating on different text, + // or have a different interation position. + return FALSE; + }; + + // TODO: need a check for when in a dictionary region at different offsets. + + if (that2.fData == fData || + (fData != NULL && that2.fData != NULL && *that2.fData == *fData)) { + // The two break iterators are using the same rules. + return TRUE; + } + return FALSE; +} + +/** + * Compute a hash code for this BreakIterator + * @return A hash code + */ +int32_t +RuleBasedBreakIterator57::hashCode(void) const { + int32_t hash = 0; + if (fData != NULL) { + hash = fData->hashCode(); + } + return hash; +} + + +void RuleBasedBreakIterator57::setText(UText *ut, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + reset(); + fText = utext_clone(fText, ut, FALSE, TRUE, &status); + + // Set up a dummy CharacterIterator to be returned if anyone + // calls getText(). With input from UText, there is no reasonable + // way to return a characterIterator over the actual input text. + // Return one over an empty string instead - this is the closest + // we can come to signaling a failure. + // (GetText() is obsolete, this failure is sort of OK) + if (fDCharIter == NULL) { + static const UChar c = 0; + fDCharIter = new UCharCharacterIterator(&c, 0); + if (fDCharIter == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + } + + if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + // existing fCharIter was adopted from the outside. Delete it now. + delete fCharIter; + } + fCharIter = fDCharIter; + + this->first(); +} + + +UText *RuleBasedBreakIterator57::getUText(UText *fillIn, UErrorCode &status) const { + UText *result = utext_clone(fillIn, fText, FALSE, TRUE, &status); + return result; +} + + + +#if 0 +// not used by rbtok.cpp +/** + * Returns the description used to create this iterator + */ +const UnicodeString& +RuleBasedBreakIterator57::getRules() const { + if (fData != NULL) { + return fData->getRuleSourceString(); + } else { + static const UnicodeString *s; + if (s == NULL) { + // TODO: something more elegant here. + // perhaps API should return the string by value. + // Note: thread unsafe init & leak are semi-ok, better than + // what was before. Sould be cleaned up, though. + s = new UnicodeString; + } + return *s; + } +} +#endif + +//======================================================================= +// BreakIterator overrides +//======================================================================= + +/** + * Return a CharacterIterator over the text being analyzed. + */ +CharacterIterator& +RuleBasedBreakIterator57::getText() const { + return *fCharIter; +} + +/** + * Set the iterator to analyze a new piece of text. This function resets + * the current iteration position to the beginning of the text. + * @param newText An iterator over the text to analyze. + */ +void +RuleBasedBreakIterator57::adoptText(CharacterIterator* newText) { + // If we are holding a CharacterIterator adopted from a + // previous call to this function, delete it now. + if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + delete fCharIter; + } + + fCharIter = newText; + UErrorCode status = U_ZERO_ERROR; + reset(); + if (newText==NULL || newText->startIndex() != 0) { + // startIndex !=0 wants to be an error, but there's no way to report it. + // Make the iterator text be an empty string. + fText = utext_openUChars(fText, NULL, 0, &status); + } else { + fText = utext_openCharacterIterator(fText, newText, &status); + } + this->first(); +} + +/** + * Set the iterator to analyze a new piece of text. This function resets + * the current iteration position to the beginning of the text. + * @param newText An iterator over the text to analyze. + */ +void +RuleBasedBreakIterator57::setText(const UnicodeString& newText) { + UErrorCode status = U_ZERO_ERROR; + reset(); + fText = utext_openConstUnicodeString(fText, &newText, &status); + + // Set up a character iterator on the string. + // Needed in case someone calls getText(). + // Can not, unfortunately, do this lazily on the (probably never) + // call to getText(), because getText is const. + if (fSCharIter == NULL) { + fSCharIter = new StringCharacterIterator(newText); + } else { + fSCharIter->setText(newText); + } + + if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) { + // old fCharIter was adopted from the outside. Delete it. + delete fCharIter; + } + fCharIter = fSCharIter; + + this->first(); +} + + +/** + * Provide a new UText for the input text. Must reference text with contents identical + * to the original. + * Intended for use with text data originating in Java (garbage collected) environments + * where the data may be moved in memory at arbitrary times. + */ +RuleBasedBreakIterator57 &RuleBasedBreakIterator57::refreshInputText(UText *input, UErrorCode &status) { + if (U_FAILURE(status)) { + return *this; + } + if (input == NULL) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return *this; + } + int64_t pos = utext_getNativeIndex(fText); + // Shallow read-only clone of the new UText into the existing input UText + fText = utext_clone(fText, input, FALSE, TRUE, &status); + if (U_FAILURE(status)) { + return *this; + } + utext_setNativeIndex(fText, pos); + if (utext_getNativeIndex(fText) != pos) { + // Sanity check. The new input utext is supposed to have the exact same + // contents as the old. If we can't set to the same position, it doesn't. + // The contents underlying the old utext might be invalid at this point, + // so it's not safe to check directly. + status = U_ILLEGAL_ARGUMENT_ERROR; + } + return *this; +} + + +/** + * Sets the current iteration position to the beginning of the text, position zero. + * @return The new iterator position, which is zero. + */ +int32_t RuleBasedBreakIterator57::first(void) { + reset(); + fLastRuleStatusIndex = 0; + fLastStatusIndexValid = TRUE; + //if (fText == NULL) + // return BreakIterator::DONE; + + utext_setNativeIndex(fText, 0); + return 0; +} + +/** + * Sets the current iteration position to the end of the text. + * @return The text's past-the-end offset. + */ +int32_t RuleBasedBreakIterator57::last(void) { + reset(); + if (fText == NULL) { + fLastRuleStatusIndex = 0; + fLastStatusIndexValid = TRUE; + return BreakIterator::DONE; + } + + fLastStatusIndexValid = FALSE; + int32_t pos = (int32_t)utext_nativeLength(fText); + utext_setNativeIndex(fText, pos); + return pos; +} + +/** + * Advances the iterator either forward or backward the specified number of steps. + * Negative values move backward, and positive values move forward. This is + * equivalent to repeatedly calling next() or previous(). + * @param n The number of steps to move. The sign indicates the direction + * (negative is backwards, and positive is forwards). + * @return The character offset of the boundary position n boundaries away from + * the current one. + */ +int32_t RuleBasedBreakIterator57::next(int32_t n) { + int32_t result = current(); + while (n > 0) { + result = next(); + --n; + } + while (n < 0) { + result = previous(); + ++n; + } + return result; +} + +/** + * Advances the iterator to the next boundary position. + * @return The position of the first boundary after this one. + */ +int32_t RuleBasedBreakIterator57::next(void) { + // if we have cached break positions and we're still in the range + // covered by them, just move one step forward in the cache + if (fCachedBreakPositions != NULL) { + if (fPositionInCache < fNumCachedBreakPositions - 1) { + ++fPositionInCache; + int32_t pos = fCachedBreakPositions[fPositionInCache]; + utext_setNativeIndex(fText, pos); + return pos; + } + else { + reset(); + } + } + + int32_t startPos = current(); + fDictionaryCharCount = 0; + int32_t result = handleNext(fData->fForwardTable); + while (fLineWordOpts != UBRK_LINEWORD_NORMAL) { + UChar32 prevChr = utext_char32At(fText, result-1); + UChar32 currChr = utext_char32At(fText, result); + if (currChr == U_SENTINEL || prevChr == U_SENTINEL || !u_isalpha(currChr) || !u_isalpha(prevChr)) { + break; + } + int32_t nextResult = handleNext(fData->fForwardTable); + if (nextResult <= result) { + break; + } + result = nextResult; + } + if (fDictionaryCharCount > 0) { + result = checkDictionary(startPos, result, FALSE); + } + return result; +} + +/** + * Advances the iterator backwards, to the last boundary preceding this one. + * @return The position of the last boundary position preceding this one. + */ +int32_t RuleBasedBreakIterator57::previous(void) { + int32_t result; + int32_t startPos; + + // if we have cached break positions and we're still in the range + // covered by them, just move one step backward in the cache + if (fCachedBreakPositions != NULL) { + if (fPositionInCache > 0) { + --fPositionInCache; + // If we're at the beginning of the cache, need to reevaluate the + // rule status + if (fPositionInCache <= 0) { + fLastStatusIndexValid = FALSE; + } + int32_t pos = fCachedBreakPositions[fPositionInCache]; + utext_setNativeIndex(fText, pos); + return pos; + } + else { + reset(); + } + } + + // if we're already sitting at the beginning of the text, return DONE + if (fText == NULL || (startPos = current()) == 0) { + fLastRuleStatusIndex = 0; + fLastStatusIndexValid = TRUE; + return BreakIterator::DONE; + } + + if (fData->fSafeRevTable != NULL || fData->fSafeFwdTable != NULL) { + result = handlePrevious(fData->fReverseTable); + while (fLineWordOpts != UBRK_LINEWORD_NORMAL) { + UChar32 prevChr = utext_char32At(fText, result-1); + UChar32 currChr = utext_char32At(fText, result); + if (currChr == U_SENTINEL || prevChr == U_SENTINEL || !u_isalpha(currChr) || !u_isalpha(prevChr)) { + break; + } + int32_t prevResult = handlePrevious(fData->fReverseTable); + if (prevResult >= result) { + break; + } + result = prevResult; + } + if (fDictionaryCharCount > 0) { + result = checkDictionary(result, startPos, TRUE); + } + return result; + } + + // old rule syntax + // set things up. handlePrevious() will back us up to some valid + // break position before the current position (we back our internal + // iterator up one step to prevent handlePrevious() from returning + // the current position), but not necessarily the last one before + // where we started + + int32_t start = current(); + + (void)UTEXT_PREVIOUS32(fText); + int32_t lastResult = handlePrevious(fData->fReverseTable); + if (lastResult == UBRK_DONE) { + lastResult = 0; + utext_setNativeIndex(fText, 0); + } + result = lastResult; + int32_t lastTag = 0; + UBool breakTagValid = FALSE; + + // iterate forward from the known break position until we pass our + // starting point. The last break position before the starting + // point is our return value + + for (;;) { + result = next(); + if (result == BreakIterator::DONE || result >= start) { + break; + } + lastResult = result; + lastTag = fLastRuleStatusIndex; + breakTagValid = TRUE; + } + + // fLastBreakTag wants to have the value for section of text preceding + // the result position that we are to return (in lastResult.) If + // the backwards rules overshot and the above loop had to do two or more + // next()s to move up to the desired return position, we will have a valid + // tag value. But, if handlePrevious() took us to exactly the correct result position, + // we wont have a tag value for that position, which is only set by handleNext(). + + // Set the current iteration position to be the last break position + // before where we started, and then return that value. + utext_setNativeIndex(fText, lastResult); + fLastRuleStatusIndex = lastTag; // for use by getRuleStatus() + fLastStatusIndexValid = breakTagValid; + + // No need to check the dictionary; it will have been handled by + // next() + + return lastResult; +} + +/** + * Sets the iterator to refer to the first boundary position following + * the specified position. + * @offset The position from which to begin searching for a break position. + * @return The position of the first break after the current position. + */ +int32_t RuleBasedBreakIterator57::following(int32_t offset) { + // if the offset passed in is already past the end of the text, + // just return DONE; if it's before the beginning, return the + // text's starting offset + if (fText == NULL || offset >= utext_nativeLength(fText)) { + last(); + return next(); + } + else if (offset < 0) { + return first(); + } + + // Move requested offset to a code point start. It might be on a trail surrogate, + // or on a trail byte if the input is UTF-8. + utext_setNativeIndex(fText, offset); + offset = (int32_t)utext_getNativeIndex(fText); + + // if we have cached break positions and offset is in the range + // covered by them, use them + // TODO: could use binary search + // TODO: what if offset is outside range, but break is not? + if (fCachedBreakPositions != NULL) { + if (offset >= fCachedBreakPositions[0] + && offset < fCachedBreakPositions[fNumCachedBreakPositions - 1]) { + fPositionInCache = 0; + // We are guaranteed not to leave the array due to range test above + while (offset >= fCachedBreakPositions[fPositionInCache]) { + ++fPositionInCache; + } + int32_t pos = fCachedBreakPositions[fPositionInCache]; + utext_setNativeIndex(fText, pos); + return pos; + } + else { + reset(); + } + } + + // Set our internal iteration position (temporarily) + // to the position passed in. If this is the _beginning_ position, + // then we can just use next() to get our return value + + int32_t result = 0; + + if (fData->fSafeRevTable != NULL) { + // new rule syntax + utext_setNativeIndex(fText, offset); + // move forward one codepoint to prepare for moving back to a + // safe point. + // this handles offset being between a supplementary character + // TODO: is this still needed, with move to code point boundary handled above? + (void)UTEXT_NEXT32(fText); + // handlePrevious will move most of the time to < 1 boundary away + handlePrevious(fData->fSafeRevTable); + int32_t result = next(); + while (result <= offset) { + result = next(); + } + return result; + } + if (fData->fSafeFwdTable != NULL) { + // backup plan if forward safe table is not available + utext_setNativeIndex(fText, offset); + (void)UTEXT_PREVIOUS32(fText); + // handle next will give result >= offset + handleNext(fData->fSafeFwdTable); + // previous will give result 0 or 1 boundary away from offset, + // most of the time + // we have to + int32_t oldresult = previous(); + while (oldresult > offset) { + int32_t result = previous(); + if (result <= offset) { + return oldresult; + } + oldresult = result; + } + int32_t result = next(); + if (result <= offset) { + return next(); + } + return result; + } + // otherwise, we have to sync up first. Use handlePrevious() to back + // up to a known break position before the specified position (if + // we can determine that the specified position is a break position, + // we don't back up at all). This may or may not be the last break + // position at or before our starting position. Advance forward + // from here until we've passed the starting position. The position + // we stop on will be the first break position after the specified one. + // old rule syntax + + utext_setNativeIndex(fText, offset); + if (offset==0 || + (offset==1 && utext_getNativeIndex(fText)==0)) { + return next(); + } + result = previous(); + + while (result != BreakIterator::DONE && result <= offset) { + result = next(); + } + + return result; +} + +/** + * Sets the iterator to refer to the last boundary position before the + * specified position. + * @offset The position to begin searching for a break from. + * @return The position of the last boundary before the starting position. + */ +int32_t RuleBasedBreakIterator57::preceding(int32_t offset) { + // if the offset passed in is already past the end of the text, + // just return DONE; if it's before the beginning, return the + // text's starting offset + if (fText == NULL || offset > utext_nativeLength(fText)) { + return last(); + } + else if (offset < 0) { + return first(); + } + + // Move requested offset to a code point start. It might be on a trail surrogate, + // or on a trail byte if the input is UTF-8. + utext_setNativeIndex(fText, offset); + offset = (int32_t)utext_getNativeIndex(fText); + + // if we have cached break positions and offset is in the range + // covered by them, use them + if (fCachedBreakPositions != NULL) { + // TODO: binary search? + // TODO: What if offset is outside range, but break is not? + if (offset > fCachedBreakPositions[0] + && offset <= fCachedBreakPositions[fNumCachedBreakPositions - 1]) { + fPositionInCache = 0; + while (fPositionInCache < fNumCachedBreakPositions + && offset > fCachedBreakPositions[fPositionInCache]) + ++fPositionInCache; + --fPositionInCache; + // If we're at the beginning of the cache, need to reevaluate the + // rule status + if (fPositionInCache <= 0) { + fLastStatusIndexValid = FALSE; + } + utext_setNativeIndex(fText, fCachedBreakPositions[fPositionInCache]); + return fCachedBreakPositions[fPositionInCache]; + } + else { + reset(); + } + } + + // if we start by updating the current iteration position to the + // position specified by the caller, we can just use previous() + // to carry out this operation + + if (fData->fSafeFwdTable != NULL) { + // new rule syntax + utext_setNativeIndex(fText, offset); + int32_t newOffset = (int32_t)UTEXT_GETNATIVEINDEX(fText); + if (newOffset != offset) { + // Will come here if specified offset was not a code point boundary AND + // the underlying implmentation is using UText, which snaps any non-code-point-boundary + // indices to the containing code point. + // For breakitereator::preceding only, these non-code-point indices need to be moved + // up to refer to the following codepoint. + (void)UTEXT_NEXT32(fText); + offset = (int32_t)UTEXT_GETNATIVEINDEX(fText); + } + + // TODO: (synwee) would it be better to just check for being in the middle of a surrogate pair, + // rather than adjusting the position unconditionally? + // (Change would interact with safe rules.) + // TODO: change RBBI behavior for off-boundary indices to match that of UText? + // affects only preceding(), seems cleaner, but is slightly different. + (void)UTEXT_PREVIOUS32(fText); + handleNext(fData->fSafeFwdTable); + int32_t result = (int32_t)UTEXT_GETNATIVEINDEX(fText); + while (result >= offset) { + result = previous(); + } + return result; + } + if (fData->fSafeRevTable != NULL) { + // backup plan if forward safe table is not available + // TODO: check whether this path can be discarded + // It's probably OK to say that rules must supply both safe tables + // if they use safe tables at all. We have certainly never described + // to anyone how to work with just one safe table. + utext_setNativeIndex(fText, offset); + (void)UTEXT_NEXT32(fText); + + // handle previous will give result <= offset + handlePrevious(fData->fSafeRevTable); + + // next will give result 0 or 1 boundary away from offset, + // most of the time + // we have to + int32_t oldresult = next(); + while (oldresult < offset) { + int32_t result = next(); + if (result >= offset) { + return oldresult; + } + oldresult = result; + } + int32_t result = previous(); + if (result >= offset) { + return previous(); + } + return result; + } + + // old rule syntax + utext_setNativeIndex(fText, offset); + return previous(); +} + +/** + * Returns true if the specfied position is a boundary position. As a side + * effect, leaves the iterator pointing to the first boundary position at + * or after "offset". + * @param offset the offset to check. + * @return True if "offset" is a boundary position. + */ +UBool RuleBasedBreakIterator57::isBoundary(int32_t offset) { + // the beginning index of the iterator is always a boundary position by definition + if (offset == 0) { + first(); // For side effects on current position, tag values. + return TRUE; + } + + if (offset == (int32_t)utext_nativeLength(fText)) { + last(); // For side effects on current position, tag values. + return TRUE; + } + + // out-of-range indexes are never boundary positions + if (offset < 0) { + first(); // For side effects on current position, tag values. + return FALSE; + } + + if (offset > utext_nativeLength(fText)) { + last(); // For side effects on current position, tag values. + return FALSE; + } + + // otherwise, we can use following() on the position before the specified + // one and return true if the position we get back is the one the user + // specified + utext_previous32From(fText, offset); + int32_t backOne = (int32_t)UTEXT_GETNATIVEINDEX(fText); + UBool result = following(backOne) == offset; + return result; +} + +/** + * Returns the current iteration position. + * @return The current iteration position. + */ +int32_t RuleBasedBreakIterator57::current(void) const { + int32_t pos = (int32_t)UTEXT_GETNATIVEINDEX(fText); + return pos; +} + +//======================================================================= +// implementation +//======================================================================= + +// +// RBBIRunMode - the state machine runs an extra iteration at the beginning and end +// of user text. A variable with this enum type keeps track of where we +// are. The state machine only fetches user input while in the RUN mode. +// +enum RBBIRunMode { + RBBI_START, // state machine processing is before first char of input + RBBI_RUN, // state machine processing is in the user text + RBBI_END // state machine processing is after end of user text. +}; + + +// Map from look-ahead break states (corresponds to rules) to boundary positions. +// Allows multiple lookahead break rules to be in flight at the same time. +// +// This is a temporary approach for ICU 57. A better fix is to make the look-ahead numbers +// in the state table be sequential, then we can just index an array. And the +// table could also tell us in advance how big that array needs to be. +// +// Before ICU 57 there was just a single simple variable for a look-ahead match that +// was in progress. Two rules at once did not work. + +static const int32_t kMaxLookaheads = 8; +struct LookAheadResults { + int32_t fUsedSlotLimit; + int32_t fPositions[8]; + int16_t fKeys[8]; + + LookAheadResults() : fUsedSlotLimit(0), fPositions(), fKeys() {}; + + int32_t getPosition(int16_t key) { + for (int32_t i=0; i= kMaxLookaheads) { + U_ASSERT(FALSE); + i = kMaxLookaheads - 1; + } + fKeys[i] = key; + fPositions[i] = position; + U_ASSERT(fUsedSlotLimit == i); + fUsedSlotLimit = i + 1; + } +}; + + +//----------------------------------------------------------------------------------- +// +// handleNext(stateTable) +// This method is the actual implementation of the rbbi next() method. +// This method initializes the state machine to state 1 +// and advances through the text character by character until we reach the end +// of the text or the state machine transitions to state 0. We update our return +// value every time the state machine passes through an accepting state. +// +//----------------------------------------------------------------------------------- +int32_t RuleBasedBreakIterator57::handleNext(const RBBIStateTable *statetable) { + int32_t state; + uint16_t category = 0; + RBBIRunMode mode; + + RBBIStateTableRow *row; + UChar32 c; + LookAheadResults lookAheadMatches; + int32_t result = 0; + int32_t initialPosition = 0; + const char *tableData = statetable->fTableData; + uint32_t tableRowLen = statetable->fRowLen; + + #ifdef RBBI_DEBUG + if (fTrace) { + RBBIDebugPuts("Handle Next pos char state category"); + } + #endif + + // No matter what, handleNext alway correctly sets the break tag value. + fLastStatusIndexValid = TRUE; + fLastRuleStatusIndex = 0; + + // if we're already at the end of the text, return DONE. + initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText); + result = initialPosition; + c = UTEXT_NEXT32(fText); + if (fData == NULL || c==U_SENTINEL) { + return BreakIterator::DONE; + } + + // Set the initial state for the state machine + state = START_STATE; + row = (RBBIStateTableRow *) + //(statetable->fTableData + (statetable->fRowLen * state)); + (tableData + tableRowLen * state); + + + mode = RBBI_RUN; + if (statetable->fFlags & RBBI_BOF_REQUIRED) { + category = 2; + mode = RBBI_START; + } + + + // loop until we reach the end of the text or transition to state 0 + // + for (;;) { + if (c == U_SENTINEL) { + // Reached end of input string. + if (mode == RBBI_END) { + // We have already run the loop one last time with the + // character set to the psueudo {eof} value. Now it is time + // to unconditionally bail out. + break; + } + // Run the loop one last time with the fake end-of-input character category. + mode = RBBI_END; + category = 1; + } + + // + // Get the char category. An incoming category of 1 or 2 means that + // we are preset for doing the beginning or end of input, and + // that we shouldn't get a category from an actual text input character. + // + if (mode == RBBI_RUN) { + // look up the current character's character category, which tells us + // which column in the state table to look at. + // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned, + // not the size of the character going in, which is a UChar32. + // + UTRIE_GET16(&fData->fTrie, c, category); + + // Check the dictionary bit in the character's category. + // Counter is only used by dictionary based iterators (subclasses). + // Chars that need to be handled by a dictionary have a flag bit set + // in their category values. + // + if ((category & 0x4000) != 0) { + fDictionaryCharCount++; + // And off the dictionary flag bit. + category &= ~0x4000; + } + } + + #ifdef RBBI_DEBUG + if (fTrace) { + RBBIDebugPrintf(" %4lld ", utext_getNativeIndex(fText)); + if (0x20<=c && c<0x7f) { + RBBIDebugPrintf("\"%c\" ", c); + } else { + RBBIDebugPrintf("%5x ", c); + } + RBBIDebugPrintf("%3d %3d\n", state, category); + } + #endif + + // State Transition - move machine to its next state + // + + // Note: fNextState is defined as uint16_t[2], but we are casting + // a generated RBBI table to RBBIStateTableRow and some tables + // actually have more than 2 categories. + U_ASSERT(categoryfHeader->fCatCount); + state = row->fNextState[category]; /*Not accessing beyond memory*/ + row = (RBBIStateTableRow *) + // (statetable->fTableData + (statetable->fRowLen * state)); + (tableData + tableRowLen * state); + + + if (row->fAccepting == -1) { + // Match found, common case. + if (mode != RBBI_START) { + result = (int32_t)UTEXT_GETNATIVEINDEX(fText); + } + fLastRuleStatusIndex = row->fTagIdx; // Remember the break status (tag) values. + } + + int16_t completedRule = row->fAccepting; + if (completedRule > 0) { + // Lookahead match is completed. + int32_t lookaheadResult = lookAheadMatches.getPosition(completedRule); + if (lookaheadResult >= 0) { + fLastRuleStatusIndex = row->fTagIdx; + UTEXT_SETNATIVEINDEX(fText, lookaheadResult); + return lookaheadResult; + } + } + int16_t rule = row->fLookAhead; + if (rule != 0) { + // At the position of a '/' in a look-ahead match. Record it. + int32_t pos = (int32_t)UTEXT_GETNATIVEINDEX(fText); + lookAheadMatches.setPosition(rule, pos); + } + + if (state == STOP_STATE) { + // This is the normal exit from the lookup state machine. + // We have advanced through the string until it is certain that no + // longer match is possible, no matter what characters follow. + break; + } + + // Advance to the next character. + // If this is a beginning-of-input loop iteration, don't advance + // the input position. The next iteration will be processing the + // first real input character. + if (mode == RBBI_RUN) { + c = UTEXT_NEXT32(fText); + } else { + if (mode == RBBI_START) { + mode = RBBI_RUN; + } + } + + + } + + // The state machine is done. Check whether it found a match... + + // If the iterator failed to advance in the match engine, force it ahead by one. + // (This really indicates a defect in the break rules. They should always match + // at least one character.) + if (result == initialPosition) { + UTEXT_SETNATIVEINDEX(fText, initialPosition); + UTEXT_NEXT32(fText); + result = (int32_t)UTEXT_GETNATIVEINDEX(fText); + } + + // Leave the iterator at our result position. + UTEXT_SETNATIVEINDEX(fText, result); + #ifdef RBBI_DEBUG + if (fTrace) { + RBBIDebugPrintf("result = %d\n\n", result); + } + #endif + return result; +} + + + +//----------------------------------------------------------------------------------- +// +// handlePrevious() +// +// Iterate backwards, according to the logic of the reverse rules. +// This version handles the exact style backwards rules. +// +// The logic of this function is very similar to handleNext(), above. +// +//----------------------------------------------------------------------------------- +int32_t RuleBasedBreakIterator57::handlePrevious(const RBBIStateTable *statetable) { + int32_t state; + uint16_t category = 0; + RBBIRunMode mode; + RBBIStateTableRow *row; + UChar32 c; + LookAheadResults lookAheadMatches; + int32_t result = 0; + int32_t initialPosition = 0; + + #ifdef RBBI_DEBUG + if (fTrace) { + RBBIDebugPuts("Handle Previous pos char state category"); + } + #endif + + // handlePrevious() never gets the rule status. + // Flag the status as invalid; if the user ever asks for status, we will need + // to back up, then re-find the break position using handleNext(), which does + // get the status value. + fLastStatusIndexValid = FALSE; + fLastRuleStatusIndex = 0; + + // if we're already at the start of the text, return DONE. + if (fText == NULL || fData == NULL || UTEXT_GETNATIVEINDEX(fText)==0) { + return BreakIterator::DONE; + } + + // Set up the starting char. + initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText); + result = initialPosition; + c = UTEXT_PREVIOUS32(fText); + + // Set the initial state for the state machine + state = START_STATE; + row = (RBBIStateTableRow *) + (statetable->fTableData + (statetable->fRowLen * state)); + category = 3; + mode = RBBI_RUN; + if (statetable->fFlags & RBBI_BOF_REQUIRED) { + category = 2; + mode = RBBI_START; + } + + + // loop until we reach the start of the text or transition to state 0 + // + for (;;) { + if (c == U_SENTINEL) { + // Reached end of input string. + if (mode == RBBI_END) { + // We have already run the loop one last time with the + // character set to the psueudo {eof} value. Now it is time + // to unconditionally bail out. + if (result == initialPosition) { + // Ran off start, no match found. + // move one index one (towards the start, since we are doing a previous()) + UTEXT_SETNATIVEINDEX(fText, initialPosition); + (void)UTEXT_PREVIOUS32(fText); // TODO: shouldn't be necessary. We're already at beginning. Check. + } + break; + } + // Run the loop one last time with the fake end-of-input character category. + mode = RBBI_END; + category = 1; + } + + // + // Get the char category. An incoming category of 1 or 2 means that + // we are preset for doing the beginning or end of input, and + // that we shouldn't get a category from an actual text input character. + // + if (mode == RBBI_RUN) { + // look up the current character's character category, which tells us + // which column in the state table to look at. + // Note: the 16 in UTRIE_GET16 refers to the size of the data being returned, + // not the size of the character going in, which is a UChar32. + // + UTRIE_GET16(&fData->fTrie, c, category); + + // Check the dictionary bit in the character's category. + // Counter is only used by dictionary based iterators (subclasses). + // Chars that need to be handled by a dictionary have a flag bit set + // in their category values. + // + if ((category & 0x4000) != 0) { + fDictionaryCharCount++; + // And off the dictionary flag bit. + category &= ~0x4000; + } + } + + #ifdef RBBI_DEBUG + if (fTrace) { + RBBIDebugPrintf(" %4d ", (int32_t)utext_getNativeIndex(fText)); + if (0x20<=c && c<0x7f) { + RBBIDebugPrintf("\"%c\" ", c); + } else { + RBBIDebugPrintf("%5x ", c); + } + RBBIDebugPrintf("%3d %3d\n", state, category); + } + #endif + + // State Transition - move machine to its next state + // + + // Note: fNextState is defined as uint16_t[2], but we are casting + // a generated RBBI table to RBBIStateTableRow and some tables + // actually have more than 2 categories. + U_ASSERT(categoryfHeader->fCatCount); + state = row->fNextState[category]; /*Not accessing beyond memory*/ + row = (RBBIStateTableRow *) + (statetable->fTableData + (statetable->fRowLen * state)); + + if (row->fAccepting == -1) { + // Match found, common case. + result = (int32_t)UTEXT_GETNATIVEINDEX(fText); + } + + int16_t completedRule = row->fAccepting; + if (completedRule > 0) { + // Lookahead match is completed. + int32_t lookaheadResult = lookAheadMatches.getPosition(completedRule); + if (lookaheadResult >= 0) { + UTEXT_SETNATIVEINDEX(fText, lookaheadResult); + return lookaheadResult; + } + } + int16_t rule = row->fLookAhead; + if (rule != 0) { + // At the position of a '/' in a look-ahead match. Record it. + int32_t pos = (int32_t)UTEXT_GETNATIVEINDEX(fText); + lookAheadMatches.setPosition(rule, pos); + } + + if (state == STOP_STATE) { + // This is the normal exit from the lookup state machine. + // We have advanced through the string until it is certain that no + // longer match is possible, no matter what characters follow. + break; + } + + // Move (backwards) to the next character to process. + // If this is a beginning-of-input loop iteration, don't advance + // the input position. The next iteration will be processing the + // first real input character. + if (mode == RBBI_RUN) { + c = UTEXT_PREVIOUS32(fText); + } else { + if (mode == RBBI_START) { + mode = RBBI_RUN; + } + } + } + + // The state machine is done. Check whether it found a match... + + // If the iterator failed to advance in the match engine, force it ahead by one. + // (This really indicates a defect in the break rules. They should always match + // at least one character.) + if (result == initialPosition) { + UTEXT_SETNATIVEINDEX(fText, initialPosition); + UTEXT_PREVIOUS32(fText); + result = (int32_t)UTEXT_GETNATIVEINDEX(fText); + } + + // Leave the iterator at our result position. + UTEXT_SETNATIVEINDEX(fText, result); + #ifdef RBBI_DEBUG + if (fTrace) { + RBBIDebugPrintf("result = %d\n\n", result); + } + #endif + return result; +} + + +void +RuleBasedBreakIterator57::reset() +{ + if (fCachedBreakPositions) { + uprv_free(fCachedBreakPositions); + } + fCachedBreakPositions = NULL; + fNumCachedBreakPositions = 0; + fDictionaryCharCount = 0; + fPositionInCache = 0; +} + + + +//------------------------------------------------------------------------------- +// +// getRuleStatus() Return the break rule tag associated with the current +// iterator position. If the iterator arrived at its current +// position by iterating forwards, the value will have been +// cached by the handleNext() function. +// +// If no cached status value is available, the status is +// found by doing a previous() followed by a next(), which +// leaves the iterator where it started, and computes the +// status while doing the next(). +// +//------------------------------------------------------------------------------- +void RuleBasedBreakIterator57::makeRuleStatusValid() { + if (fLastStatusIndexValid == FALSE) { + // No cached status is available. + if (fText == NULL || current() == 0) { + // At start of text, or there is no text. Status is always zero. + fLastRuleStatusIndex = 0; + fLastStatusIndexValid = TRUE; + } else { + // Not at start of text. Find status the tedious way. + int32_t pa = current(); + previous(); + if (fNumCachedBreakPositions > 0) { + reset(); // Blow off the dictionary cache + } + int32_t pb = next(); + if (pa != pb) { + // note: the if (pa != pb) test is here only to eliminate warnings for + // unused local variables on gcc. Logically, it isn't needed. + U_ASSERT(pa == pb); + } + } + } + U_ASSERT(fLastRuleStatusIndex >= 0 && fLastRuleStatusIndex < fData->fStatusMaxIdx); +} + + +int32_t RuleBasedBreakIterator57::getRuleStatus() const { + RuleBasedBreakIterator57 *nonConstThis = (RuleBasedBreakIterator57 *)this; + nonConstThis->makeRuleStatusValid(); + + // fLastRuleStatusIndex indexes to the start of the appropriate status record + // (the number of status values.) + // This function returns the last (largest) of the array of status values. + int32_t idx = fLastRuleStatusIndex + fData->fRuleStatusTable[fLastRuleStatusIndex]; + int32_t tagVal = fData->fRuleStatusTable[idx]; + + return tagVal; +} + + + + +int32_t RuleBasedBreakIterator57::getRuleStatusVec( + int32_t *fillInVec, int32_t capacity, UErrorCode &status) +{ + if (U_FAILURE(status)) { + return 0; + } + + RuleBasedBreakIterator57 *nonConstThis = (RuleBasedBreakIterator57 *)this; + nonConstThis->makeRuleStatusValid(); + int32_t numVals = fData->fRuleStatusTable[fLastRuleStatusIndex]; + int32_t numValsToCopy = numVals; + if (numVals > capacity) { + status = U_BUFFER_OVERFLOW_ERROR; + numValsToCopy = capacity; + } + int i; + for (i=0; ifRuleStatusTable[fLastRuleStatusIndex + i + 1]; + } + return numVals; +} + + + +//------------------------------------------------------------------------------- +// +// getBinaryRules Access to the compiled form of the rules, +// for use by build system tools that save the data +// for standard iterator types. +// +//------------------------------------------------------------------------------- +const uint8_t *RuleBasedBreakIterator57::getBinaryRules(uint32_t &length) { + const uint8_t *retPtr = NULL; + length = 0; + + if (fData != NULL) { + retPtr = (const uint8_t *)fData->fHeader; + length = fData->fHeader->fLength; + } + return retPtr; +} + + +BreakIterator * RuleBasedBreakIterator57::createBufferClone(void * /*stackBuffer*/, + int32_t &bufferSize, + UErrorCode &status) +{ + if (U_FAILURE(status)){ + return NULL; + } + + if (bufferSize == 0) { + bufferSize = 1; // preflighting for deprecated functionality + return NULL; + } + + BreakIterator *clonedBI = clone(); + if (clonedBI == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } else { + status = U_SAFECLONE_ALLOCATED_WARNING; + } + return (RuleBasedBreakIterator57 *)clonedBI; +} + +//------------------------------------------------------------------------------- +// +// checkDictionary This function handles all processing of characters in +// the "dictionary" set. It will determine the appropriate +// course of action, and possibly set up a cache in the +// process. +// +//------------------------------------------------------------------------------- +int32_t RuleBasedBreakIterator57::checkDictionary(int32_t startPos, + int32_t endPos, + UBool reverse) { + // Reset the old break cache first. + reset(); + + // note: code segment below assumes that dictionary chars are in the + // startPos-endPos range + // value returned should be next character in sequence + if ((endPos - startPos) <= 1) { + return (reverse ? startPos : endPos); + } + + // Starting from the starting point, scan towards the proposed result, + // looking for the first dictionary character (which may be the one + // we're on, if we're starting in the middle of a range). + utext_setNativeIndex(fText, reverse ? endPos : startPos); + if (reverse) { + UTEXT_PREVIOUS32(fText); + } + + int32_t rangeStart = startPos; + int32_t rangeEnd = endPos; + + uint16_t category; + int32_t current; + UErrorCode status = U_ZERO_ERROR; + UVector32 breaks(status); // changed from UStack in ICU 57 + int32_t foundBreakCount = 0; + UChar32 c = utext_current32(fText); + + UTRIE_GET16(&fData->fTrie, c, category); + + // Is the character we're starting on a dictionary character? If so, we + // need to back up to include the entire run; otherwise the results of + // the break algorithm will differ depending on where we start. Since + // the result is cached and there is typically a non-dictionary break + // within a small number of words, there should be little performance impact. + if (category & 0x4000) { + if (reverse) { + do { + utext_next32(fText); // TODO: recast to work directly with postincrement. + c = utext_current32(fText); + UTRIE_GET16(&fData->fTrie, c, category); + } while (c != U_SENTINEL && (category & 0x4000)); + // Back up to the last dictionary character + rangeEnd = (int32_t)UTEXT_GETNATIVEINDEX(fText); + if (c == U_SENTINEL) { + // c = fText->last32(); + // TODO: why was this if needed? + c = UTEXT_PREVIOUS32(fText); + } + else { + c = UTEXT_PREVIOUS32(fText); + } + } + else { + do { + c = UTEXT_PREVIOUS32(fText); + UTRIE_GET16(&fData->fTrie, c, category); + } + while (c != U_SENTINEL && (category & 0x4000)); + // Back up to the last dictionary character + if (c == U_SENTINEL) { + // c = fText->first32(); + c = utext_current32(fText); + } + else { + utext_next32(fText); + c = utext_current32(fText); + } + rangeStart = (int32_t)UTEXT_GETNATIVEINDEX(fText);; + } + UTRIE_GET16(&fData->fTrie, c, category); + } + + // Loop through the text, looking for ranges of dictionary characters. + // For each span, find the appropriate break engine, and ask it to find + // any breaks within the span. + // Note: we always do this in the forward direction, so that the break + // cache is built in the right order. + if (reverse) { + utext_setNativeIndex(fText, rangeStart); + c = utext_current32(fText); + UTRIE_GET16(&fData->fTrie, c, category); + } + while(U_SUCCESS(status)) { + while((current = (int32_t)UTEXT_GETNATIVEINDEX(fText)) < rangeEnd && (category & 0x4000) == 0) { + utext_next32(fText); // TODO: tweak for post-increment operation + c = utext_current32(fText); + UTRIE_GET16(&fData->fTrie, c, category); + } + if (current >= rangeEnd) { + break; + } + + // We now have a dictionary character. Get the appropriate language object + // to deal with it. + const LanguageBreakEngine *lbe = getLanguageBreakEngine(c); + + // Ask the language object if there are any breaks. It will leave the text + // pointer on the other side of its range, ready to search for the next one. + if (lbe != NULL) { + foundBreakCount += lbe->findBreaks(fText, rangeStart, rangeEnd, breaks); + } + + // Reload the loop variables for the next go-round + c = utext_current32(fText); + UTRIE_GET16(&fData->fTrie, c, category); + } + + // If we found breaks, build a new break cache. The first and last entries must + // be the original starting and ending position. + if (foundBreakCount > 0) { + U_ASSERT(foundBreakCount == breaks.size()); + int32_t totalBreaks = foundBreakCount; + if (startPos < breaks.elementAti(0)) { + totalBreaks += 1; + } + if (endPos > breaks.peeki()) { + totalBreaks += 1; + } + fCachedBreakPositions = (int32_t *)uprv_malloc(totalBreaks * sizeof(int32_t)); + if (fCachedBreakPositions != NULL) { + int32_t out = 0; + fNumCachedBreakPositions = totalBreaks; + if (startPos < breaks.elementAti(0)) { + fCachedBreakPositions[out++] = startPos; + } + for (int32_t i = 0; i < foundBreakCount; ++i) { + fCachedBreakPositions[out++] = breaks.elementAti(i); + } + if (endPos > fCachedBreakPositions[out-1]) { + fCachedBreakPositions[out] = endPos; + } + // If there are breaks, then by definition, we are replacing the original + // proposed break by one of the breaks we found. Use following() and + // preceding() to do the work. They should never recurse in this case. + if (reverse) { + return preceding(endPos); + } + else { + return following(startPos); + } + } + // If the allocation failed, just fall through to the "no breaks found" case. + } + + // If we get here, there were no language-based breaks. Set the text pointer + // to the original proposed break. + utext_setNativeIndex(fText, reverse ? startPos : endPos); + return (reverse ? startPos : endPos); +} + +U_NAMESPACE_END + + +static icu::UStack *gLanguageBreakFactories = NULL; +static icu::UInitOnce gLanguageBreakFactoriesInitOnce = U_INITONCE_INITIALIZER; + +/** + * Release all static memory held by breakiterator. + */ +U_CDECL_BEGIN +static UBool U_CALLCONV breakiterator_cleanup_dict(void) { + if (gLanguageBreakFactories) { + delete gLanguageBreakFactories; + gLanguageBreakFactories = NULL; + } + gLanguageBreakFactoriesInitOnce.reset(); + return TRUE; +} +U_CDECL_END + +U_CDECL_BEGIN +static void U_CALLCONV _deleteFactory(void *obj) { + delete (icu::LanguageBreakFactory *) obj; +} +U_CDECL_END +U_NAMESPACE_BEGIN + +static void U_CALLCONV initLanguageFactories() { + UErrorCode status = U_ZERO_ERROR; + U_ASSERT(gLanguageBreakFactories == NULL); + gLanguageBreakFactories = new UStack(_deleteFactory, NULL, status); + if (gLanguageBreakFactories != NULL && U_SUCCESS(status)) { + ICULanguageBreakFactory *builtIn = new ICULanguageBreakFactory(status); + gLanguageBreakFactories->push(builtIn, status); +#ifdef U_LOCAL_SERVICE_HOOK + LanguageBreakFactory *extra = (LanguageBreakFactory *)uprv_svc_hook("languageBreakFactory", &status); + if (extra != NULL) { + gLanguageBreakFactories->push(extra, status); + } +#endif + } + ucln_common_registerCleanup(UCLN_COMMON_RBBI57, breakiterator_cleanup_dict); +} + + +static const LanguageBreakEngine* +getLanguageBreakEngineFromFactory(UChar32 c, int32_t breakType) +{ + umtx_initOnce(gLanguageBreakFactoriesInitOnce, &initLanguageFactories); + if (gLanguageBreakFactories == NULL) { + return NULL; + } + + int32_t i = gLanguageBreakFactories->size(); + const LanguageBreakEngine *lbe = NULL; + while (--i >= 0) { + LanguageBreakFactory *factory = (LanguageBreakFactory *)(gLanguageBreakFactories->elementAt(i)); + lbe = factory->getEngineFor(c); + if (lbe != NULL) { + break; + } + } + return lbe; +} + + +//------------------------------------------------------------------------------- +// +// getLanguageBreakEngine Find an appropriate LanguageBreakEngine for the +// the character c. +// +//------------------------------------------------------------------------------- +const LanguageBreakEngine * +RuleBasedBreakIterator57::getLanguageBreakEngine(UChar32 c) { + const LanguageBreakEngine *lbe = NULL; + UErrorCode status = U_ZERO_ERROR; + + if (fLanguageBreakEngines == NULL) { + fLanguageBreakEngines = new UStack(status); + if (fLanguageBreakEngines == NULL || U_FAILURE(status)) { + delete fLanguageBreakEngines; + fLanguageBreakEngines = 0; + return NULL; + } + } + + int32_t i = fLanguageBreakEngines->size(); + while (--i >= 0) { + lbe = (const LanguageBreakEngine *)(fLanguageBreakEngines->elementAt(i)); + if (lbe->handles(c)) { + return lbe; + } + } + + // No existing dictionary took the character. See if a factory wants to + // give us a new LanguageBreakEngine for this character. + lbe = getLanguageBreakEngineFromFactory(c, fBreakType); + + // If we got one, use it and push it on our stack. + if (lbe != NULL) { + fLanguageBreakEngines->push((void *)lbe, status); + // Even if we can't remember it, we can keep looking it up, so + // return it even if the push fails. + return lbe; + } + + // No engine is forthcoming for this character. Add it to the + // reject set. Create the reject break engine if needed. + if (fUnhandledBreakEngine == NULL) { + fUnhandledBreakEngine = new UnhandledEngine(status); + if (U_SUCCESS(status) && fUnhandledBreakEngine == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + } + // Put it last so that scripts for which we have an engine get tried + // first. + fLanguageBreakEngines->insertElementAt(fUnhandledBreakEngine, 0, status); + // If we can't insert it, or creation failed, get rid of it + if (U_FAILURE(status)) { + delete fUnhandledBreakEngine; + fUnhandledBreakEngine = 0; + return NULL; + } + } + + // Tell the reject engine about the character; at its discretion, it may + // add more than just the one character. + fUnhandledBreakEngine->handleCharacter(c); + + return fUnhandledBreakEngine; +} + +void RuleBasedBreakIterator57::setBreakType(int32_t type) { + fBreakType = type; + reset(); +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/rbbi57.h b/icuSources/common/rbbi57.h new file mode 100644 index 00000000..ecf71e2a --- /dev/null +++ b/icuSources/common/rbbi57.h @@ -0,0 +1,762 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +*************************************************************************** +* Copyright (C) 1999-2016 International Business Machines Corporation * +* and others. All rights reserved. * +*************************************************************************** + +********************************************************************** +* Legacy version of RuleBasedBreakIterator from ICU 57, +* only for use by Apple RuleBasedTokenizer +********************************************************************** +*/ + +#ifndef RBBI57_H +#define RBBI57_H + +#include "unicode/utypes.h" + +/** + * \file + * \brief C++ API: Rule Based Break Iterator + */ + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/brkiter.h" +#include "unicode/udata.h" +#include "unicode/parseerr.h" +#include "unicode/schriter.h" +#include "unicode/uchriter.h" +#include "rbbidata57.h" +#include "rbbirb57.h" + +struct UTrie; + +U_NAMESPACE_BEGIN + +/** @internal */ +struct RBBIDataHeader57; +class RuleBasedBreakIteratorTables; +class BreakIterator; +class RBBIDataWrapper57; +class UStack; +class LanguageBreakEngine; +class UnhandledEngine; +struct RBBIStateTable; + +/** + * + * A subclass of BreakIterator whose behavior is specified using a list of rules. + * + *

This class was not intended to be subclassed. The subclassing interface to + * RulesBasedBreakIterator is not part of the ICU API, and may not remain stable.

+ * + *

However, the ICU 57 version was subclassed for the Apple RuleBasedTokenizer. + * So this legacy version of RuleBasedBreakIterator is preserved for that usage, + * since versions of RuleBasedBreakIterator in ICU 58 and later broke that + * subclassing (in ICU 58 it just by changing the access to certain internal fields, + * but in ICU 60 RuleBasedBreakIterator was completely rewritten).

+ */ +class U_COMMON_API RuleBasedBreakIterator57 /*U_FINAL*/ : public BreakIterator { + +protected: + /** + * The UText through which this BreakIterator accesses the text + * @internal + */ + UText *fText; + + /** + * A character iterator that refers to the same text as the UText, above. + * Only included for compatibility with old API, which was based on CharacterIterators. + * Value may be adopted from outside, or one of fSCharIter or fDCharIter, below. + */ + CharacterIterator *fCharIter; + + /** + * When the input text is provided by a UnicodeString, this will point to + * a characterIterator that wraps that data. Needed only for the + * implementation of getText(), a backwards compatibility issue. + */ + StringCharacterIterator *fSCharIter; + + /** + * When the input text is provided by a UText, this + * dummy CharacterIterator over an empty string will + * be returned from getText() + */ + UCharCharacterIterator *fDCharIter; + + /** + * The rule data for this BreakIterator instance + * @internal + */ + RBBIDataWrapper57 *fData; + + /** Index of the Rule {tag} values for the most recent match. + * @internal + */ + int32_t fLastRuleStatusIndex; + + /** + * Rule tag value valid flag. + * Some iterator operations don't intrinsically set the correct tag value. + * This flag lets us lazily compute the value if we are ever asked for it. + * @internal + */ + UBool fLastStatusIndexValid; + + /** + * Counter for the number of characters encountered with the "dictionary" + * flag set. + * @internal + */ + uint32_t fDictionaryCharCount; + + /** + * When a range of characters is divided up using the dictionary, the break + * positions that are discovered are stored here, preventing us from having + * to use either the dictionary or the state table again until the iterator + * leaves this range of text. Has the most impact for line breaking. + * @internal + */ + int32_t* fCachedBreakPositions; + + /** + * The number of elements in fCachedBreakPositions + * @internal + */ + int32_t fNumCachedBreakPositions; + + /** + * if fCachedBreakPositions is not null, this indicates which item in the + * cache the current iteration position refers to + * @internal + */ + int32_t fPositionInCache; + + /** + * + * If present, UStack of LanguageBreakEngine objects that might handle + * dictionary characters. Searched from top to bottom to find an object to + * handle a given character. + * @internal + */ + UStack *fLanguageBreakEngines; + + /** + * + * If present, the special LanguageBreakEngine used for handling + * characters that are in the dictionary set, but not handled by any + * LangugageBreakEngine. + * @internal + */ + UnhandledEngine *fUnhandledBreakEngine; + + /** + * + * The type of the break iterator, or -1 if it has not been set. + * @internal + */ + int32_t fBreakType; + + //======================================================================= + // constructors + //======================================================================= + + /** + * Constant to be used in the constructor + * RuleBasedBreakIterator57(RBBIDataHeader57*, EDontAdopt, UErrorCode &); + * which does not adopt the memory indicated by the RBBIDataHeader57* + * parameter. + * + * @internal, used by rbtok.cpp, urbtok57.cpp + */ + enum EDontAdopt { + kDontAdopt + }; + + /** + * Constructor from a flattened set of RBBI data in malloced memory. + * RulesBasedBreakIterators built from a custom set of rules + * are created via this constructor; the rules are compiled + * into memory, then the break iterator is constructed here. + * + * The break iterator adopts the memory, and will + * free it when done. + * @internal, used by rbtok.cpp + */ + RuleBasedBreakIterator57(RBBIDataHeader57* data, UErrorCode &status); + + /** + * Constructor from a flattened set of RBBI data in memory which need not + * be malloced (e.g. it may be a memory-mapped file, etc.). + * + * This version does not adopt the memory, and does not + * free it when done. + * @internal, used by rbtok.cpp + */ + RuleBasedBreakIterator57(const RBBIDataHeader57* data, enum EDontAdopt dontAdopt, UErrorCode &status); + + + friend class RBBIRuleBuilder57; + /** @internal */ + friend class BreakIterator; + +public: + + /** Default constructor. Creates an empty shell of an iterator, with no + * rules or text to iterate over. Object can subsequently be assigned to. + * @internal + */ + RuleBasedBreakIterator57(); + + /** + * Copy constructor. Will produce a break iterator with the same behavior, + * and which iterates over the same text, as the one passed in. + * @param that The RuleBasedBreakIterator57 passed to be copied + * @internal + */ + RuleBasedBreakIterator57(const RuleBasedBreakIterator57& that); + + /** + * Construct a RuleBasedBreakIterator57 from a set of rules supplied as a string. + * @param rules The break rules to be used. + * @param parseError In the event of a syntax error in the rules, provides the location + * within the rules of the problem. + * @param status Information on any errors encountered. + * @internal, used by rbtok.cpp + */ + RuleBasedBreakIterator57( const UnicodeString &rules, + UParseError &parseError, + UErrorCode &status); + +#if 0 +// not used by rbtok.cpp + /** + * Contruct a RuleBasedBreakIterator57 from a set of precompiled binary rules. + * Binary rules are obtained from RulesBasedBreakIterator::getBinaryRules(). + * Construction of a break iterator in this way is substantially faster than + * constuction from source rules. + * + * Ownership of the storage containing the compiled rules remains with the + * caller of this function. The compiled rules must not be modified or + * deleted during the life of the break iterator. + * + * The compiled rules are not compatible across different major versions of ICU. + * The compiled rules are comaptible only between machines with the same + * byte ordering (little or big endian) and the same base character set family + * (ASCII or EBCDIC). + * + * @see #getBinaryRules + * @param compiledRules A pointer to the compiled break rules to be used. + * @param ruleLength The length of the compiled break rules, in bytes. This + * corresponds to the length value produced by getBinaryRules(). + * @param status Information on any errors encountered, including invalid + * binary rules. + * @internal + */ + RuleBasedBreakIterator57(const uint8_t *compiledRules, + uint32_t ruleLength, + UErrorCode &status); + + /** + * This constructor uses the udata interface to create a BreakIterator + * whose internal tables live in a memory-mapped file. "image" is an + * ICU UDataMemory handle for the pre-compiled break iterator tables. + * @param image handle to the memory image for the break iterator data. + * Ownership of the UDataMemory handle passes to the Break Iterator, + * which will be responsible for closing it when it is no longer needed. + * @param status Information on any errors encountered. + * @see udata_open + * @see #getBinaryRules + * @internal + */ + RuleBasedBreakIterator57(UDataMemory* image, UErrorCode &status); +#endif + + /** + * Destructor + * @internal + */ + virtual ~RuleBasedBreakIterator57(); + + /** + * Assignment operator. Sets this iterator to have the same behavior, + * and iterate over the same text, as the one passed in. + * @param that The RuleBasedBreakItertor passed in + * @return the newly created RuleBasedBreakIterator57 + * @internal + */ + RuleBasedBreakIterator57& operator=(const RuleBasedBreakIterator57& that); + + /** + * Equality operator. Returns TRUE if both BreakIterators are of the + * same class, have the same behavior, and iterate over the same text. + * @param that The BreakIterator to be compared for equality + * @return TRUE if both BreakIterators are of the + * same class, have the same behavior, and iterate over the same text. + * @internal + */ + virtual UBool operator==(const BreakIterator& that) const; + + /** + * Not-equal operator. If operator== returns TRUE, this returns FALSE, + * and vice versa. + * @param that The BreakIterator to be compared for inequality + * @return TRUE if both BreakIterators are not same. + * @internal + */ + UBool operator!=(const BreakIterator& that) const; + + /** + * Returns a newly-constructed RuleBasedBreakIterator57 with the same + * behavior, and iterating over the same text, as this one. + * Differs from the copy constructor in that it is polymorphic, and + * will correctly clone (copy) a derived class. + * clone() is thread safe. Multiple threads may simultaeneously + * clone the same source break iterator. + * @return a newly-constructed RuleBasedBreakIterator57 + * @internal + */ + virtual BreakIterator* clone() const; + + /** + * Compute a hash code for this BreakIterator + * @return A hash code + * @internal + */ + virtual int32_t hashCode(void) const; + +#if 0 +// not used by rbtok.cpp + /** + * Returns the description used to create this iterator + * @return the description used to create this iterator + * @internal + */ + virtual const UnicodeString& getRules(void) const; +#endif + //======================================================================= + // BreakIterator overrides + //======================================================================= + + /** + *

+ * Return a CharacterIterator over the text being analyzed. + * The returned character iterator is owned by the break iterator, and must + * not be deleted by the caller. Repeated calls to this function may + * return the same CharacterIterator. + *

+ *

+ * The returned character iterator must not be used concurrently with + * the break iterator. If concurrent operation is needed, clone the + * returned character iterator first and operate on the clone. + *

+ *

+ * When the break iterator is operating on text supplied via a UText, + * this function will fail. Lacking any way to signal failures, it + * returns an CharacterIterator containing no text. + * The function getUText() provides similar functionality, + * is reliable, and is more efficient. + *

+ * + * TODO: deprecate this function? + * + * @return An iterator over the text being analyzed. + * @internal, inherited from BreakIterator + */ + virtual CharacterIterator& getText(void) const; + + + /** + * Get a UText for the text being analyzed. + * The returned UText is a shallow clone of the UText used internally + * by the break iterator implementation. It can safely be used to + * access the text without impacting any break iterator operations, + * but the underlying text itself must not be altered. + * + * @param fillIn A UText to be filled in. If NULL, a new UText will be + * allocated to hold the result. + * @param status receives any error codes. + * @return The current UText for this break iterator. If an input + * UText was provided, it will always be returned. + * @internal, inherited from BreakIterator + */ + virtual UText *getUText(UText *fillIn, UErrorCode &status) const; + + /** + * Set the iterator to analyze a new piece of text. This function resets + * the current iteration position to the beginning of the text. + * @param newText An iterator over the text to analyze. The BreakIterator + * takes ownership of the character iterator. The caller MUST NOT delete it! + * @internal, inherited from BreakIterator + */ + virtual void adoptText(CharacterIterator* newText); + + /** + * Set the iterator to analyze a new piece of text. This function resets + * the current iteration position to the beginning of the text. + * + * The BreakIterator will retain a reference to the supplied string. + * The caller must not modify or delete the text while the BreakIterator + * retains the reference. + * + * @param newText The text to analyze. + * @internal, inherited from BreakIterator + */ + virtual void setText(const UnicodeString& newText); + + /** + * Reset the break iterator to operate over the text represented by + * the UText. The iterator position is reset to the start. + * + * This function makes a shallow clone of the supplied UText. This means + * that the caller is free to immediately close or otherwise reuse the + * Utext that was passed as a parameter, but that the underlying text itself + * must not be altered while being referenced by the break iterator. + * + * @param text The UText used to change the text. + * @param status Receives any error codes. + * @internal, inherited from BreakIterator + */ + virtual void setText(UText *text, UErrorCode &status); + + /** + * Sets the current iteration position to the beginning of the text, position zero. + * @return The offset of the beginning of the text, zero. + * @internal, inherited from BreakIterator + */ + virtual int32_t first(void); + + /** + * Sets the current iteration position to the end of the text. + * @return The text's past-the-end offset. + * @internal, inherited from BreakIterator + */ + virtual int32_t last(void); + + /** + * Advances the iterator either forward or backward the specified number of steps. + * Negative values move backward, and positive values move forward. This is + * equivalent to repeatedly calling next() or previous(). + * @param n The number of steps to move. The sign indicates the direction + * (negative is backwards, and positive is forwards). + * @return The character offset of the boundary position n boundaries away from + * the current one. + * @internal, inherited from BreakIterator + */ + virtual int32_t next(int32_t n); + + /** + * Advances the iterator to the next boundary position. + * @return The position of the first boundary after this one. + * @internal, inherited from BreakIterator + */ + virtual int32_t next(void); + + /** + * Moves the iterator backwards, to the last boundary preceding this one. + * @return The position of the last boundary position preceding this one. + * @internal, inherited from BreakIterator + */ + virtual int32_t previous(void); + + /** + * Sets the iterator to refer to the first boundary position following + * the specified position. + * @param offset The position from which to begin searching for a break position. + * @return The position of the first break after the current position. + * @internal, inherited from BreakIterator + */ + virtual int32_t following(int32_t offset); + + /** + * Sets the iterator to refer to the last boundary position before the + * specified position. + * @param offset The position to begin searching for a break from. + * @return The position of the last boundary before the starting position. + * @internal, inherited from BreakIterator + */ + virtual int32_t preceding(int32_t offset); + + /** + * Returns true if the specfied position is a boundary position. As a side + * effect, leaves the iterator pointing to the first boundary position at + * or after "offset". + * @param offset the offset to check. + * @return True if "offset" is a boundary position. + * @internal, inherited from BreakIterator + */ + virtual UBool isBoundary(int32_t offset); + + /** + * Returns the current iteration position. + * @return The current iteration position. + * @internal, inherited from BreakIterator + */ + virtual int32_t current(void) const; + + + /** + * Return the status tag from the break rule that determined the most recently + * returned break position. For break rules that do not specify a + * status, a default value of 0 is returned. If more than one break rule + * would cause a boundary to be located at some position in the text, + * the numerically largest of the applicable status values is returned. + *

+ * Of the standard types of ICU break iterators, only word break and + * line break provide status values. The values are defined in + * the header file ubrk.h. For Word breaks, the status allows distinguishing between words + * that contain alphabetic letters, "words" that appear to be numbers, + * punctuation and spaces, words containing ideographic characters, and + * more. For Line Break, the status distinguishes between hard (mandatory) breaks + * and soft (potential) break positions. + *

+ * getRuleStatus() can be called after obtaining a boundary + * position from next(), previous(), or + * any other break iterator functions that returns a boundary position. + *

+ * When creating custom break rules, one is free to define whatever + * status values may be convenient for the application. + *

+ * Note: this function is not thread safe. It should not have been + * declared const, and the const remains only for compatibility + * reasons. (The function is logically const, but not bit-wise const). + *

+ * @return the status from the break rule that determined the most recently + * returned break position. + * + * @see UWordBreak + * @internal, inherited from BreakIterator + */ + virtual int32_t getRuleStatus() const; + + /** + * Get the status (tag) values from the break rule(s) that determined the most + * recently returned break position. + *

+ * The returned status value(s) are stored into an array provided by the caller. + * The values are stored in sorted (ascending) order. + * If the capacity of the output array is insufficient to hold the data, + * the output will be truncated to the available length, and a + * U_BUFFER_OVERFLOW_ERROR will be signaled. + * + * @param fillInVec an array to be filled in with the status values. + * @param capacity the length of the supplied vector. A length of zero causes + * the function to return the number of status values, in the + * normal way, without attemtping to store any values. + * @param status receives error codes. + * @return The number of rule status values from rules that determined + * the most recent boundary returned by the break iterator. + * In the event of a U_BUFFER_OVERFLOW_ERROR, the return value + * is the total number of status values that were available, + * not the reduced number that were actually returned. + * @see getRuleStatus + * @internal, inherited from BreakIterator + */ + virtual int32_t getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status); + + /** + * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. + * This method is to implement a simple version of RTTI, since not all + * C++ compilers support genuine RTTI. Polymorphic operator==() and + * clone() methods call this method. + * + * @return The class ID for this object. All objects of a + * given class have the same class ID. Objects of + * other classes have different class IDs. + * @internal + */ + virtual UClassID getDynamicClassID(void) const; + + /** + * Returns the class ID for this class. This is useful only for + * comparing to a return value from getDynamicClassID(). For example: + * + * Base* polymorphic_pointer = createPolymorphicObject(); + * if (polymorphic_pointer->getDynamicClassID() == + * Derived::getStaticClassID()) ... + * + * @return The class ID for all objects of this class. + * @internal + */ + static UClassID U_EXPORT2 getStaticClassID(void); + + /** + * Deprecated functionality. Use clone() instead. + * + * Create a clone (copy) of this break iterator in memory provided + * by the caller. The idea is to increase performance by avoiding + * a storage allocation. Use of this functoin is NOT RECOMMENDED. + * Performance gains are minimal, and correct buffer management is + * tricky. Use clone() instead. + * + * @param stackBuffer The pointer to the memory into which the cloned object + * should be placed. If NULL, allocate heap memory + * for the cloned object. + * @param BufferSize The size of the buffer. If zero, return the required + * buffer size, but do not clone the object. If the + * size was too small (but not zero), allocate heap + * storage for the cloned object. + * + * @param status Error status. U_SAFECLONE_ALLOCATED_WARNING will be + * returned if the the provided buffer was too small, and + * the clone was therefore put on the heap. + * + * @return Pointer to the clone object. This may differ from the stackBuffer + * address if the byte alignment of the stack buffer was not suitable + * or if the stackBuffer was too small to hold the clone. + * @deprecated ICU 52. Use clone() instead. + */ + virtual BreakIterator * createBufferClone(void *stackBuffer, + int32_t &BufferSize, + UErrorCode &status); + + + /** + * Return the binary form of compiled break rules, + * which can then be used to create a new break iterator at some + * time in the future. Creating a break iterator from pre-compiled rules + * is much faster than building one from the source form of the + * break rules. + * + * The binary data can only be used with the same version of ICU + * and on the same platform type (processor endian-ness) + * + * @param length Returns the length of the binary data. (Out paramter.) + * + * @return A pointer to the binary (compiled) rule data. The storage + * belongs to the RulesBasedBreakIterator object, not the + * caller, and must not be modified or deleted. + * @internal, used by urbtok57.cpp + */ + virtual const uint8_t *getBinaryRules(uint32_t &length); + + /** + * Set the subject text string upon which the break iterator is operating + * without changing any other aspect of the matching state. + * The new and previous text strings must have the same content. + * + * This function is intended for use in environments where ICU is operating on + * strings that may move around in memory. It provides a mechanism for notifying + * ICU that the string has been relocated, and providing a new UText to access the + * string in its new position. + * + * Note that the break iterator implementation never copies the underlying text + * of a string being processed, but always operates directly on the original text + * provided by the user. Refreshing simply drops the references to the old text + * and replaces them with references to the new. + * + * Caution: this function is normally used only by very specialized, + * system-level code. One example use case is with garbage collection that moves + * the text in memory. + * + * @param input The new (moved) text string. + * @param status Receives errors detected by this function. + * @return *this + * + * @internal, inherited from BreakIterator + */ + virtual RuleBasedBreakIterator57 &refreshInputText(UText *input, UErrorCode &status); + + +protected: + //======================================================================= + // implementation + //======================================================================= + /** + * Dumps caches and performs other actions associated with a complete change + * in text or iteration position. + * @internal + */ + virtual void reset(void); + + /** + * Set the type of the break iterator. + * @internal + */ + virtual void setBreakType(int32_t type); + + /** + * Common initialization function, used by constructors and bufferClone. + * @internal + */ + void init(); + +private: + + /** + * This method backs the iterator back up to a "safe position" in the text. + * This is a position that we know, without any context, must be a break position. + * The various calling methods then iterate forward from this safe position to + * the appropriate position to return. (For more information, see the description + * of buildBackwardsStateTable() in RuleBasedBreakIterator57.Builder.) + * @param statetable state table used of moving backwards + * @internal + */ + int32_t handlePrevious(const RBBIStateTable *statetable); + + /** + * This method is the actual implementation of the next() method. All iteration + * vectors through here. This method initializes the state machine to state 1 + * and advances through the text character by character until we reach the end + * of the text or the state machine transitions to state 0. We update our return + * value every time the state machine passes through a possible end state. + * @param statetable state table used of moving forwards + * @internal + */ + int32_t handleNext(const RBBIStateTable *statetable); + +protected: + + /** + * This is the function that actually implements dictionary-based + * breaking. Covering at least the range from startPos to endPos, + * it checks for dictionary characters, and if it finds them determines + * the appropriate object to deal with them. It may cache found breaks in + * fCachedBreakPositions as it goes. It may well also look at text outside + * the range startPos to endPos. + * If going forward, endPos is the normal Unicode break result, and + * if goind in reverse, startPos is the normal Unicode break result + * @param startPos The start position of a range of text + * @param endPos The end position of a range of text + * @param reverse The call is for the reverse direction + * @internal + */ + int32_t checkDictionary(int32_t startPos, int32_t endPos, UBool reverse); + +private: + + /** + * This function returns the appropriate LanguageBreakEngine for a + * given character c. + * @param c A character in the dictionary set + * @internal + */ + const LanguageBreakEngine *getLanguageBreakEngine(UChar32 c); + + /** + * @internal + */ + void makeRuleStatusValid(); + +}; + +//------------------------------------------------------------------------------ +// +// Inline Functions Definitions ... +// +//------------------------------------------------------------------------------ + +inline UBool RuleBasedBreakIterator57::operator!=(const BreakIterator& that) const { + return !operator==(that); +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ + +#endif diff --git a/icuSources/common/rbbi_cache.cpp b/icuSources/common/rbbi_cache.cpp new file mode 100644 index 00000000..60316ce6 --- /dev/null +++ b/icuSources/common/rbbi_cache.cpp @@ -0,0 +1,658 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +// file: rbbi_cache.cpp + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/ubrk.h" +#include "unicode/rbbi.h" + +#include "rbbi_cache.h" + +#include "brkeng.h" +#include "cmemory.h" +#include "rbbidata.h" +#include "rbbirb.h" +#include "uassert.h" +#include "uvectr32.h" + +U_NAMESPACE_BEGIN + +/* + * DictionaryCache implementation + */ + +RuleBasedBreakIterator::DictionaryCache::DictionaryCache(RuleBasedBreakIterator *bi, UErrorCode &status) : + fBI(bi), fBreaks(status), fPositionInCache(-1), + fStart(0), fLimit(0), fFirstRuleStatusIndex(0), fOtherRuleStatusIndex(0) { +} + +RuleBasedBreakIterator::DictionaryCache::~DictionaryCache() { +} + +void RuleBasedBreakIterator::DictionaryCache::reset() { + fPositionInCache = -1; + fStart = 0; + fLimit = 0; + fFirstRuleStatusIndex = 0; + fOtherRuleStatusIndex = 0; + fBreaks.removeAllElements(); +} + +UBool RuleBasedBreakIterator::DictionaryCache::following(int32_t fromPos, int32_t *result, int32_t *statusIndex) { + if (fromPos >= fLimit || fromPos < fStart) { + fPositionInCache = -1; + return FALSE; + } + + // Sequential iteration, move from previous boundary to the following + + int32_t r = 0; + if (fPositionInCache >= 0 && fPositionInCache < fBreaks.size() && fBreaks.elementAti(fPositionInCache) == fromPos) { + ++fPositionInCache; + if (fPositionInCache >= fBreaks.size()) { + fPositionInCache = -1; + return FALSE; + } + r = fBreaks.elementAti(fPositionInCache); + U_ASSERT(r > fromPos); + *result = r; + *statusIndex = fOtherRuleStatusIndex; + return TRUE; + } + + // Random indexing. Linear search for the boundary following the given position. + + for (fPositionInCache = 0; fPositionInCache < fBreaks.size(); ++fPositionInCache) { + r= fBreaks.elementAti(fPositionInCache); + if (r > fromPos) { + *result = r; + *statusIndex = fOtherRuleStatusIndex; + return TRUE; + } + } + U_ASSERT(FALSE); + fPositionInCache = -1; + return FALSE; +} + + +UBool RuleBasedBreakIterator::DictionaryCache::preceding(int32_t fromPos, int32_t *result, int32_t *statusIndex) { + if (fromPos <= fStart || fromPos > fLimit) { + fPositionInCache = -1; + return FALSE; + } + + if (fromPos == fLimit) { + fPositionInCache = fBreaks.size() - 1; + if (fPositionInCache >= 0) { + U_ASSERT(fBreaks.elementAti(fPositionInCache) == fromPos); + } + } + + int32_t r; + if (fPositionInCache > 0 && fPositionInCache < fBreaks.size() && fBreaks.elementAti(fPositionInCache) == fromPos) { + --fPositionInCache; + r = fBreaks.elementAti(fPositionInCache); + U_ASSERT(r < fromPos); + *result = r; + *statusIndex = ( r== fStart) ? fFirstRuleStatusIndex : fOtherRuleStatusIndex; + return TRUE; + } + + if (fPositionInCache == 0) { + fPositionInCache = -1; + return FALSE; + } + + for (fPositionInCache = fBreaks.size()-1; fPositionInCache >= 0; --fPositionInCache) { + r = fBreaks.elementAti(fPositionInCache); + if (r < fromPos) { + *result = r; + *statusIndex = ( r == fStart) ? fFirstRuleStatusIndex : fOtherRuleStatusIndex; + return TRUE; + } + } + U_ASSERT(FALSE); + fPositionInCache = -1; + return FALSE; +} + +void RuleBasedBreakIterator::DictionaryCache::populateDictionary(int32_t startPos, int32_t endPos, + int32_t firstRuleStatus, int32_t otherRuleStatus) { + if ((endPos - startPos) <= 1) { + return; + } + + reset(); + fFirstRuleStatusIndex = firstRuleStatus; + fOtherRuleStatusIndex = otherRuleStatus; + + int32_t rangeStart = startPos; + int32_t rangeEnd = endPos; + + uint16_t category; + int32_t current; + UErrorCode status = U_ZERO_ERROR; + int32_t foundBreakCount = 0; + UText *text = &fBI->fText; + + // Loop through the text, looking for ranges of dictionary characters. + // For each span, find the appropriate break engine, and ask it to find + // any breaks within the span. + + utext_setNativeIndex(text, rangeStart); + UChar32 c = utext_current32(text); + category = UTRIE2_GET16(fBI->fData->fTrie, c); + + while(U_SUCCESS(status)) { + while((current = (int32_t)UTEXT_GETNATIVEINDEX(text)) < rangeEnd && (category & 0x4000) == 0) { + utext_next32(text); // TODO: cleaner loop structure. + c = utext_current32(text); + category = UTRIE2_GET16(fBI->fData->fTrie, c); + } + if (current >= rangeEnd) { + break; + } + + // We now have a dictionary character. Get the appropriate language object + // to deal with it. + const LanguageBreakEngine *lbe = fBI->getLanguageBreakEngine(c); + + // Ask the language object if there are any breaks. It will add them to the cache and + // leave the text pointer on the other side of its range, ready to search for the next one. + if (lbe != NULL) { + foundBreakCount += lbe->findBreaks(text, rangeStart, rangeEnd, fBreaks); + } + + // Reload the loop variables for the next go-round + c = utext_current32(text); + category = UTRIE2_GET16(fBI->fData->fTrie, c); + } + + // If we found breaks, ensure that the first and last entries are + // the original starting and ending position. And initialize the + // cache iteration position to the first entry. + + // printf("foundBreakCount = %d\n", foundBreakCount); + if (foundBreakCount > 0) { + U_ASSERT(foundBreakCount == fBreaks.size()); + if (startPos < fBreaks.elementAti(0)) { + // The dictionary did not place a boundary at the start of the segment of text. + // Add one now. This should not commonly happen, but it would be easy for interactions + // of the rules for dictionary segments and the break engine implementations to + // inadvertently cause it. Cover it here, just in case. + fBreaks.insertElementAt(startPos, 0, status); + } + if (endPos > fBreaks.peeki()) { + fBreaks.push(endPos, status); + } + fPositionInCache = 0; + // Note: Dictionary matching may extend beyond the original limit. + fStart = fBreaks.elementAti(0); + fLimit = fBreaks.peeki(); + } else { + // there were no language-based breaks, even though the segment contained + // dictionary characters. Subsequent attempts to fetch boundaries from the dictionary cache + // for this range will fail, and the calling code will fall back to the rule based boundaries. + } +} + + +/* + * BreakCache implemetation + */ + +RuleBasedBreakIterator::BreakCache::BreakCache(RuleBasedBreakIterator *bi, UErrorCode &status) : + fBI(bi), fSideBuffer(status) { + reset(); +} + + +RuleBasedBreakIterator::BreakCache::~BreakCache() { +} + + +void RuleBasedBreakIterator::BreakCache::reset(int32_t pos, int32_t ruleStatus) { + fStartBufIdx = 0; + fEndBufIdx = 0; + fTextIdx = pos; + fBufIdx = 0; + fBoundaries[0] = pos; + fStatuses[0] = (uint16_t)ruleStatus; +} + + +int32_t RuleBasedBreakIterator::BreakCache::current() { + fBI->fPosition = fTextIdx; + fBI->fRuleStatusIndex = fStatuses[fBufIdx]; + fBI->fDone = FALSE; + return fTextIdx; +} + + +void RuleBasedBreakIterator::BreakCache::following(int32_t startPos, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + if (startPos == fTextIdx || seek(startPos) || populateNear(startPos, status)) { + // startPos is in the cache. Do a next() from that position. + // TODO: an awkward set of interactions with bi->fDone + // seek() does not clear it; it can't because of interactions with populateNear(). + // next() does not clear it in the fast-path case, where everything matters. Maybe it should. + // So clear it here, for the case where seek() succeeded on an iterator that had previously run off the end. + fBI->fDone = false; + next(); + } + return; +} + + +void RuleBasedBreakIterator::BreakCache::preceding(int32_t startPos, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + if (startPos == fTextIdx || seek(startPos) || populateNear(startPos, status)) { + if (startPos == fTextIdx) { + previous(status); + } else { + // seek() leaves the BreakCache positioned at the preceding boundary + // if the requested position is between two bounaries. + // current() pushes the BreakCache position out to the BreakIterator itself. + U_ASSERT(startPos > fTextIdx); + current(); + } + } + return; +} + + +/* + * Out-of-line code for BreakCache::next(). + * Cache does not already contain the boundary + */ +void RuleBasedBreakIterator::BreakCache::nextOL() { + fBI->fDone = !populateFollowing(); + fBI->fPosition = fTextIdx; + fBI->fRuleStatusIndex = fStatuses[fBufIdx]; + return; +} + + +void RuleBasedBreakIterator::BreakCache::previous(UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + int32_t initialBufIdx = fBufIdx; + if (fBufIdx == fStartBufIdx) { + // At start of cache. Prepend to it. + populatePreceding(status); + } else { + // Cache already holds the next boundary + fBufIdx = modChunkSize(fBufIdx - 1); + fTextIdx = fBoundaries[fBufIdx]; + } + fBI->fDone = (fBufIdx == initialBufIdx); + fBI->fPosition = fTextIdx; + fBI->fRuleStatusIndex = fStatuses[fBufIdx]; + return; +} + + +UBool RuleBasedBreakIterator::BreakCache::seek(int32_t pos) { + if (pos < fBoundaries[fStartBufIdx] || pos > fBoundaries[fEndBufIdx]) { + return FALSE; + } + if (pos == fBoundaries[fStartBufIdx]) { + // Common case: seek(0), from BreakIterator::first() + fBufIdx = fStartBufIdx; + fTextIdx = fBoundaries[fBufIdx]; + return TRUE; + } + if (pos == fBoundaries[fEndBufIdx]) { + fBufIdx = fEndBufIdx; + fTextIdx = fBoundaries[fBufIdx]; + return TRUE; + } + + int32_t min = fStartBufIdx; + int32_t max = fEndBufIdx; + while (min != max) { + int32_t probe = (min + max + (min>max ? CACHE_SIZE : 0)) / 2; + probe = modChunkSize(probe); + if (fBoundaries[probe] > pos) { + max = probe; + } else { + min = modChunkSize(probe + 1); + } + } + U_ASSERT(fBoundaries[max] > pos); + fBufIdx = modChunkSize(max - 1); + fTextIdx = fBoundaries[fBufIdx]; + U_ASSERT(fTextIdx <= pos); + return TRUE; +} + + +UBool RuleBasedBreakIterator::BreakCache::populateNear(int32_t position, UErrorCode &status) { + if (U_FAILURE(status)) { + return FALSE; + } + U_ASSERT(position < fBoundaries[fStartBufIdx] || position > fBoundaries[fEndBufIdx]); + + // Find a boundary somewhere in the vicinity of the requested position. + // Depending on the safe rules and the text data, it could be either before, at, or after + // the requested position. + + + // If the requested position is not near already cached positions, clear the existing cache, + // find a near-by boundary and begin new cache contents there. + + if ((position < fBoundaries[fStartBufIdx] - 15) || position > (fBoundaries[fEndBufIdx] + 15)) { + int32_t aBoundary = 0; + int32_t ruleStatusIndex = 0; + if (position > 20) { + int32_t backupPos = fBI->handleSafePrevious(position); + + if (backupPos > 0) { + // Advance to the boundary following the backup position. + // There is a complication: the safe reverse rules identify pairs of code points + // that are safe. If advancing from the safe point moves forwards by less than + // two code points, we need to advance one more time to ensure that the boundary + // is good, including a correct rules status value. + // + fBI->fPosition = backupPos; + aBoundary = fBI->handleNext(); + if (aBoundary <= backupPos + 4) { + // +4 is a quick test for possibly having advanced only one codepoint. + // Four being the length of the longest potential code point, a supplementary in UTF-8 + utext_setNativeIndex(&fBI->fText, aBoundary); + if (backupPos == utext_getPreviousNativeIndex(&fBI->fText)) { + // The initial handleNext() only advanced by a single code point. Go again. + aBoundary = fBI->handleNext(); // Safe rules identify safe pairs. + } + } + ruleStatusIndex = fBI->fRuleStatusIndex; + } + } + reset(aBoundary, ruleStatusIndex); // Reset cache to hold aBoundary as a single starting point. + } + + // Fill in boundaries between existing cache content and the new requested position. + + if (fBoundaries[fEndBufIdx] < position) { + // The last position in the cache precedes the requested position. + // Add following position(s) to the cache. + while (fBoundaries[fEndBufIdx] < position) { + if (!populateFollowing()) { + U_ASSERT(false); + return false; + } + } + fBufIdx = fEndBufIdx; // Set iterator position to the end of the buffer. + fTextIdx = fBoundaries[fBufIdx]; // Required because populateFollowing may add extra boundaries. + while (fTextIdx > position) { // Move backwards to a position at or preceding the requested pos. + previous(status); + } + return true; + } + + if (fBoundaries[fStartBufIdx] > position) { + // The first position in the cache is beyond the requested position. + // back up more until we get a boundary <= the requested position. + while (fBoundaries[fStartBufIdx] > position) { + populatePreceding(status); + } + fBufIdx = fStartBufIdx; // Set iterator position to the start of the buffer. + fTextIdx = fBoundaries[fBufIdx]; // Required because populatePreceding may add extra boundaries. + while (fTextIdx < position) { // Move forwards to a position at or following the requested pos. + next(); + } + if (fTextIdx > position) { + // If position is not itself a boundary, the next() loop above will overshoot. + // Back up one, leaving cache position at the boundary preceding the requested position. + previous(status); + } + return true; + } + + U_ASSERT(fTextIdx == position); + return true; +} + + + +UBool RuleBasedBreakIterator::BreakCache::populateFollowing() { + int32_t fromPosition = fBoundaries[fEndBufIdx]; + int32_t fromRuleStatusIdx = fStatuses[fEndBufIdx]; + int32_t pos = 0; + int32_t ruleStatusIdx = 0; + + if (fBI->fDictionaryCache->following(fromPosition, &pos, &ruleStatusIdx)) { + addFollowing(pos, ruleStatusIdx, UpdateCachePosition); + return TRUE; + } + + fBI->fPosition = fromPosition; + pos = fBI->handleNext(); + if (pos == UBRK_DONE) { + return FALSE; + } + + ruleStatusIdx = fBI->fRuleStatusIndex; + if (fBI->fDictionaryCharCount > 0) { + // The text segment obtained from the rules includes dictionary characters. + // Subdivide it, with subdivided results going into the dictionary cache. + fBI->fDictionaryCache->populateDictionary(fromPosition, pos, fromRuleStatusIdx, ruleStatusIdx); + if (fBI->fDictionaryCache->following(fromPosition, &pos, &ruleStatusIdx)) { + addFollowing(pos, ruleStatusIdx, UpdateCachePosition); + return TRUE; + // TODO: may want to move a sizable chunk of dictionary cache to break cache at this point. + // But be careful with interactions with populateNear(). + } + } + + // Rule based segment did not include dictionary characters. + // Or, it did contain dictionary chars, but the dictionary segmenter didn't handle them, + // meaning that we didn't take the return, above. + // Add its end point to the cache. + addFollowing(pos, ruleStatusIdx, UpdateCachePosition); + + // Add several non-dictionary boundaries at this point, to optimize straight forward iteration. + // (subsequent calls to BreakIterator::next() will take the fast path, getting cached results. + // + for (int count=0; count<6; ++count) { + pos = fBI->handleNext(); + if (pos == UBRK_DONE || fBI->fDictionaryCharCount > 0) { + break; + } + addFollowing(pos, fBI->fRuleStatusIndex, RetainCachePosition); + } + + return TRUE; +} + + +UBool RuleBasedBreakIterator::BreakCache::populatePreceding(UErrorCode &status) { + if (U_FAILURE(status)) { + return FALSE; + } + + int32_t fromPosition = fBoundaries[fStartBufIdx]; + if (fromPosition == 0) { + return FALSE; + } + + int32_t position = 0; + int32_t positionStatusIdx = 0; + + if (fBI->fDictionaryCache->preceding(fromPosition, &position, &positionStatusIdx)) { + addPreceding(position, positionStatusIdx, UpdateCachePosition); + return TRUE; + } + + int32_t backupPosition = fromPosition; + + // Find a boundary somewhere preceding the first already-cached boundary + do { + backupPosition = backupPosition - 30; + if (backupPosition <= 0) { + backupPosition = 0; + } else { + backupPosition = fBI->handleSafePrevious(backupPosition); + } + if (backupPosition == UBRK_DONE || backupPosition == 0) { + position = 0; + positionStatusIdx = 0; + } else { + // Advance to the boundary following the backup position. + // There is a complication: the safe reverse rules identify pairs of code points + // that are safe. If advancing from the safe point moves forwards by less than + // two code points, we need to advance one more time to ensure that the boundary + // is good, including a correct rules status value. + // + fBI->fPosition = backupPosition; + position = fBI->handleNext(); + if (position <= backupPosition + 4) { + // +4 is a quick test for possibly having advanced only one codepoint. + // Four being the length of the longest potential code point, a supplementary in UTF-8 + utext_setNativeIndex(&fBI->fText, position); + if (backupPosition == utext_getPreviousNativeIndex(&fBI->fText)) { + // The initial handleNext() only advanced by a single code point. Go again. + position = fBI->handleNext(); // Safe rules identify safe pairs. + } + }; + positionStatusIdx = fBI->fRuleStatusIndex; + } + } while (position >= fromPosition); + + // Find boundaries between the one we just located and the first already-cached boundary + // Put them in a side buffer, because we don't yet know where they will fall in the circular cache buffer.. + + fSideBuffer.removeAllElements(); + fSideBuffer.addElement(position, status); + fSideBuffer.addElement(positionStatusIdx, status); + + do { + int32_t prevPosition = fBI->fPosition = position; + int32_t prevStatusIdx = positionStatusIdx; + position = fBI->handleNext(); + positionStatusIdx = fBI->fRuleStatusIndex; + if (position == UBRK_DONE) { + break; + } + + UBool segmentHandledByDictionary = FALSE; + if (fBI->fDictionaryCharCount != 0) { + // Segment from the rules includes dictionary characters. + // Subdivide it, with subdivided results going into the dictionary cache. + int32_t dictSegEndPosition = position; + fBI->fDictionaryCache->populateDictionary(prevPosition, dictSegEndPosition, prevStatusIdx, positionStatusIdx); + while (fBI->fDictionaryCache->following(prevPosition, &position, &positionStatusIdx)) { + segmentHandledByDictionary = true; + U_ASSERT(position > prevPosition); + if (position >= fromPosition) { + break; + } + U_ASSERT(position <= dictSegEndPosition); + fSideBuffer.addElement(position, status); + fSideBuffer.addElement(positionStatusIdx, status); + prevPosition = position; + } + U_ASSERT(position==dictSegEndPosition || position>=fromPosition); + } + + if (!segmentHandledByDictionary && position < fromPosition) { + fSideBuffer.addElement(position, status); + fSideBuffer.addElement(positionStatusIdx, status); + } + } while (position < fromPosition); + + // Move boundaries from the side buffer to the main circular buffer. + UBool success = FALSE; + if (!fSideBuffer.isEmpty()) { + positionStatusIdx = fSideBuffer.popi(); + position = fSideBuffer.popi(); + addPreceding(position, positionStatusIdx, UpdateCachePosition); + success = TRUE; + } + + while (!fSideBuffer.isEmpty()) { + positionStatusIdx = fSideBuffer.popi(); + position = fSideBuffer.popi(); + if (!addPreceding(position, positionStatusIdx, RetainCachePosition)) { + // No space in circular buffer to hold a new preceding result while + // also retaining the current cache (iteration) position. + // Bailing out is safe; the cache will refill again if needed. + break; + } + } + + return success; +} + + +void RuleBasedBreakIterator::BreakCache::addFollowing(int32_t position, int32_t ruleStatusIdx, UpdatePositionValues update) { + U_ASSERT(position > fBoundaries[fEndBufIdx]); + U_ASSERT(ruleStatusIdx <= UINT16_MAX); + int32_t nextIdx = modChunkSize(fEndBufIdx + 1); + if (nextIdx == fStartBufIdx) { + fStartBufIdx = modChunkSize(fStartBufIdx + 6); // TODO: experiment. Probably revert to 1. + } + fBoundaries[nextIdx] = position; + fStatuses[nextIdx] = ruleStatusIdx; + fEndBufIdx = nextIdx; + if (update == UpdateCachePosition) { + // Set current position to the newly added boundary. + fBufIdx = nextIdx; + fTextIdx = position; + } else { + // Retaining the original cache position. + // Check if the added boundary wraps around the buffer, and would over-write the original position. + // It's the responsibility of callers of this function to not add too many. + U_ASSERT(nextIdx != fBufIdx); + } +} + +bool RuleBasedBreakIterator::BreakCache::addPreceding(int32_t position, int32_t ruleStatusIdx, UpdatePositionValues update) { + U_ASSERT(position < fBoundaries[fStartBufIdx]); + U_ASSERT(ruleStatusIdx <= UINT16_MAX); + int32_t nextIdx = modChunkSize(fStartBufIdx - 1); + if (nextIdx == fEndBufIdx) { + if (fBufIdx == fEndBufIdx && update == RetainCachePosition) { + // Failure. The insertion of the new boundary would claim the buffer position that is the + // current iteration position. And we also want to retain the current iteration position. + // (The buffer is already completely full of entries that precede the iteration position.) + return false; + } + fEndBufIdx = modChunkSize(fEndBufIdx - 1); + } + fBoundaries[nextIdx] = position; + fStatuses[nextIdx] = ruleStatusIdx; + fStartBufIdx = nextIdx; + if (update == UpdateCachePosition) { + fBufIdx = nextIdx; + fTextIdx = position; + } + return true; +} + + +void RuleBasedBreakIterator::BreakCache::dumpCache() { +#ifdef RBBI_DEBUG + RBBIDebugPrintf("fTextIdx:%d fBufIdx:%d\n", fTextIdx, fBufIdx); + for (int32_t i=fStartBufIdx; ; i=modChunkSize(i+1)) { + RBBIDebugPrintf("%d %d\n", i, fBoundaries[i]); + if (i == fEndBufIdx) { + break; + } + } +#endif +} + +U_NAMESPACE_END + +#endif // #if !UCONFIG_NO_BREAK_ITERATION diff --git a/icuSources/common/rbbi_cache.h b/icuSources/common/rbbi_cache.h new file mode 100644 index 00000000..b4338c37 --- /dev/null +++ b/icuSources/common/rbbi_cache.h @@ -0,0 +1,203 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +// file: rbbi_cache.h +// +#ifndef RBBI_CACHE_H +#define RBBI_CACHE_H + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/rbbi.h" +#include "unicode/uobject.h" + +#include "uvectr32.h" + +U_NAMESPACE_BEGIN + +/* DictionaryCache stores the boundaries obtained from a run of dictionary characters. + * Dictionary boundaries are moved first to this cache, then from here + * to the main BreakCache, where they may inter-leave with non-dictionary + * boundaries. The public BreakIterator API always fetches directly + * from the main BreakCache, not from here. + * + * In common situations, the number of boundaries in a single dictionary run + * should be quite small, it will be terminated by punctuation, spaces, + * or any other non-dictionary characters. The main BreakCache may end + * up with boundaries from multiple dictionary based runs. + * + * The boundaries are stored in a simple ArrayList (vector), with the + * assumption that they will be accessed sequentially. + */ +class RuleBasedBreakIterator::DictionaryCache: public UMemory { + public: + DictionaryCache(RuleBasedBreakIterator *bi, UErrorCode &status); + ~DictionaryCache(); + + void reset(); + + UBool following(int32_t fromPos, int32_t *pos, int32_t *statusIndex); + UBool preceding(int32_t fromPos, int32_t *pos, int32_t *statusIndex); + + /** + * Populate the cache with the dictionary based boundaries within a region of text. + * @param startPos The start position of a range of text + * @param endPos The end position of a range of text + * @param firstRuleStatus The rule status index that applies to the break at startPos + * @param otherRuleStatus The rule status index that applies to boundaries other than startPos + * @internal + */ + void populateDictionary(int32_t startPos, int32_t endPos, + int32_t firstRuleStatus, int32_t otherRuleStatus); + + + + RuleBasedBreakIterator *fBI; + + UVector32 fBreaks; // A vector containing the boundaries. + int32_t fPositionInCache; // Index in fBreaks of last boundary returned by following() + // or preceding(). Optimizes sequential access. + int32_t fStart; // Text position of first boundary in cache. + int32_t fLimit; // Last boundary in cache. Which is the limit of the + // text segment being handled by the dictionary. + int32_t fFirstRuleStatusIndex; // Rule status info for first boundary. + int32_t fOtherRuleStatusIndex; // Rule status info for 2nd through last boundaries. +}; + + +/* + * class BreakCache + * + * Cache of break boundary positions and rule status values. + * Break iterator API functions, next(), previous(), etc., will use cached results + * when possible, and otherwise cache new results as they are obtained. + * + * Uniformly caches both dictionary and rule based (non-dictionary) boundaries. + * + * The cache is implemented as a single circular buffer. + */ + +/* + * size of the circular cache buffer. + */ + +class RuleBasedBreakIterator::BreakCache: public UMemory { + public: + BreakCache(RuleBasedBreakIterator *bi, UErrorCode &status); + virtual ~BreakCache(); + void reset(int32_t pos = 0, int32_t ruleStatus = 0); + void next() { if (fBufIdx == fEndBufIdx) { + nextOL(); + } else { + fBufIdx = modChunkSize(fBufIdx + 1); + fTextIdx = fBI->fPosition = fBoundaries[fBufIdx]; + fBI->fRuleStatusIndex = fStatuses[fBufIdx]; + } + }; + + + void nextOL(); + void previous(UErrorCode &status); + + // Move the iteration state to the position following the startPosition. + // Input position must be pinned to the input length. + void following(int32_t startPosition, UErrorCode &status); + + void preceding(int32_t startPosition, UErrorCode &status); + + /* + * Update the state of the public BreakIterator (fBI) to reflect the + * current state of the break iterator cache (this). + */ + int32_t current(); + + /** + * Add boundaries to the cache near the specified position. + * The given position need not be a boundary itself. + * The input position must be within the range of the text, and + * on a code point boundary. + * If the requested position is a break boundary, leave the iteration + * position on it. + * If the requested position is not a boundary, leave the iteration + * position on the preceding boundary and include both the + * preceding and following boundaries in the cache. + * Additional boundaries, either preceding or following, may be added + * to the cache as a side effect. + * + * Return FALSE if the operation failed. + */ + UBool populateNear(int32_t position, UErrorCode &status); + + /** + * Add boundary(s) to the cache following the current last boundary. + * Return FALSE if at the end of the text, and no more boundaries can be added. + * Leave iteration position at the first newly added boundary, or unchanged if no boundary was added. + */ + UBool populateFollowing(); + + /** + * Add one or more boundaries to the cache preceding the first currently cached boundary. + * Leave the iteration position on the first added boundary. + * Return false if no boundaries could be added (if at the start of the text.) + */ + UBool populatePreceding(UErrorCode &status); + + enum UpdatePositionValues { + RetainCachePosition = 0, + UpdateCachePosition = 1 + }; + + /* + * Add the boundary following the current position. + * The current position can be left as it was, or changed to the newly added boundary, + * as specified by the update parameter. + */ + void addFollowing(int32_t position, int32_t ruleStatusIdx, UpdatePositionValues update); + + + /* + * Add the boundary preceding the current position. + * The current position can be left as it was, or changed to the newly added boundary, + * as specified by the update parameter. + */ + bool addPreceding(int32_t position, int32_t ruleStatusIdx, UpdatePositionValues update); + + /** + * Set the cache position to the specified position, or, if the position + * falls between to cached boundaries, to the preceding boundary. + * Fails if the requested position is outside of the range of boundaries currently held by the cache. + * The startPosition must be on a code point boundary. + * + * Return TRUE if successful, FALSE if the specified position is after + * the last cached boundary or before the first. + */ + UBool seek(int32_t startPosition); + + void dumpCache(); + + private: + static inline int32_t modChunkSize(int index) { return index & (CACHE_SIZE - 1); }; + + static constexpr int32_t CACHE_SIZE = 128; + static_assert((CACHE_SIZE & (CACHE_SIZE-1)) == 0, "CACHE_SIZE must be power of two."); + + RuleBasedBreakIterator *fBI; + int32_t fStartBufIdx; + int32_t fEndBufIdx; // inclusive + + int32_t fTextIdx; + int32_t fBufIdx; + + int32_t fBoundaries[CACHE_SIZE]; + uint16_t fStatuses[CACHE_SIZE]; + + UVector32 fSideBuffer; +}; + +U_NAMESPACE_END + +#endif // #if !UCONFIG_NO_BREAK_ITERATION + +#endif // RBBI_CACHE_H diff --git a/icuSources/common/rbbidata.cpp b/icuSources/common/rbbidata.cpp index 63ed15f3..1d4c9e58 100644 --- a/icuSources/common/rbbidata.cpp +++ b/icuSources/common/rbbidata.cpp @@ -14,7 +14,7 @@ #include "unicode/utypes.h" #include "rbbidata.h" #include "rbbirb.h" -#include "utrie.h" +#include "utrie2.h" #include "udatamem.h" #include "cmemory.h" #include "cstring.h" @@ -23,23 +23,6 @@ #include "uassert.h" -//----------------------------------------------------------------------------------- -// -// Trie access folding function. Copied as-is from properties code in uchar.c -// -//----------------------------------------------------------------------------------- -U_CDECL_BEGIN -static int32_t U_CALLCONV -getFoldingOffset(uint32_t data) { - /* if bit 15 is set, then the folding offset is in bits 14..0 of the 16-bit trie result */ - if(data&0x8000) { - return (int32_t)(data&0x7fff); - } else { - return 0; - } -} -U_CDECL_END - U_NAMESPACE_BEGIN //----------------------------------------------------------------------------- @@ -71,9 +54,8 @@ RBBIDataWrapper::RBBIDataWrapper(UDataMemory* udm, UErrorCode &status) { dh->info.dataFormat[0] == 0x42 && // dataFormat="Brk " dh->info.dataFormat[1] == 0x72 && dh->info.dataFormat[2] == 0x6b && - dh->info.dataFormat[3] == 0x20) - // Note: info.fFormatVersion is duplicated in the RBBIDataHeader, and is - // validated when checking that. + dh->info.dataFormat[3] == 0x20 && + isDataVersionAcceptable(dh->info.formatVersion)) ) { status = U_INVALID_FORMAT_ERROR; return; @@ -84,6 +66,11 @@ RBBIDataWrapper::RBBIDataWrapper(UDataMemory* udm, UErrorCode &status) { fUDataMem = udm; } +UBool RBBIDataWrapper::isDataVersionAcceptable(const UVersionInfo version) { + return RBBI_DATA_FORMAT_VERSION[0] == version[0]; +} + + //----------------------------------------------------------------------------- // // init(). Does most of the work of construction, shared between the @@ -94,12 +81,11 @@ void RBBIDataWrapper::init0() { fHeader = NULL; fForwardTable = NULL; fReverseTable = NULL; - fSafeFwdTable = NULL; - fSafeRevTable = NULL; - fRuleSource = NULL; + fRuleSource = NULL; fRuleStatusTable = NULL; - fUDataMem = NULL; - fRefCount = 0; + fTrie = NULL; + fUDataMem = NULL; + fRefCount = 0; fDontFreeData = TRUE; } @@ -108,8 +94,7 @@ void RBBIDataWrapper::init(const RBBIDataHeader *data, UErrorCode &status) { return; } fHeader = data; - if (fHeader->fMagic != 0xb1a0 || fHeader->fFormatVersion[0] != 3) - { + if (fHeader->fMagic != 0xb1a0 || !isDataVersionAcceptable(fHeader->fFormatVersion)) { status = U_INVALID_FORMAT_ERROR; return; } @@ -124,23 +109,15 @@ void RBBIDataWrapper::init(const RBBIDataHeader *data, UErrorCode &status) { if (data->fRTableLen != 0) { fReverseTable = (RBBIStateTable *)((char *)data + fHeader->fRTable); } - if (data->fSFTableLen != 0) { - fSafeFwdTable = (RBBIStateTable *)((char *)data + fHeader->fSFTable); - } - if (data->fSRTableLen != 0) { - fSafeRevTable = (RBBIStateTable *)((char *)data + fHeader->fSRTable); - } - - utrie_unserialize(&fTrie, - (uint8_t *)data + fHeader->fTrie, - fHeader->fTrieLen, - &status); + fTrie = utrie2_openFromSerialized(UTRIE2_16_VALUE_BITS, + (uint8_t *)data + fHeader->fTrie, + fHeader->fTrieLen, + NULL, // *actual length + &status); if (U_FAILURE(status)) { return; } - fTrie.getFoldingOffset=getFoldingOffset; - fRuleSource = (UChar *)((char *)data + fHeader->fRuleSource); fRuleString.setTo(TRUE, fRuleSource, -1); @@ -165,6 +142,8 @@ void RBBIDataWrapper::init(const RBBIDataHeader *data, UErrorCode &status) { //----------------------------------------------------------------------------- RBBIDataWrapper::~RBBIDataWrapper() { U_ASSERT(fRefCount == 0); + utrie2_close(fTrie); + fTrie = NULL; if (fUDataMem) { udata_close(fUDataMem); } else if (!fDontFreeData) { @@ -271,8 +250,8 @@ void RBBIDataWrapper::printTable(const char *heading, const RBBIStateTable *tab #endif -#ifdef RBBI_DEBUG void RBBIDataWrapper::printData() { +#ifdef RBBI_DEBUG RBBIDebugPrintf("RBBI Data at %p\n", (void *)fHeader); RBBIDebugPrintf(" Version = {%d %d %d %d}\n", fHeader->fFormatVersion[0], fHeader->fFormatVersion[1], fHeader->fFormatVersion[2], fHeader->fFormatVersion[3]); @@ -281,16 +260,14 @@ void RBBIDataWrapper::printData() { printTable("Forward State Transition Table", fForwardTable); printTable("Reverse State Transition Table", fReverseTable); - printTable("Safe Forward State Transition Table", fSafeFwdTable); - printTable("Safe Reverse State Transition Table", fSafeRevTable); RBBIDebugPrintf("\nOrignal Rules source:\n"); for (int32_t c=0; fRuleSource[c] != 0; c++) { RBBIDebugPrintf("%c", fRuleSource[c]); } RBBIDebugPrintf("\n\n"); -} #endif +} U_NAMESPACE_END @@ -323,7 +300,7 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD pInfo->dataFormat[1]==0x72 && pInfo->dataFormat[2]==0x6b && pInfo->dataFormat[3]==0x20 && - pInfo->formatVersion[0]==3 )) { + RBBIDataWrapper::isDataVersionAcceptable(pInfo->formatVersion) )) { udata_printError(ds, "ubrk_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized\n", pInfo->dataFormat[0], pInfo->dataFormat[1], pInfo->dataFormat[2], pInfo->dataFormat[3], @@ -344,17 +321,11 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD // // Get the RRBI Data Header, and check that it appears to be OK. // - // Note: ICU 3.2 and earlier, RBBIDataHeader::fDataFormat was actually - // an int32_t with a value of 1. Starting with ICU 3.4, - // RBBI's fDataFormat matches the dataFormat field from the - // UDataInfo header, four int8_t bytes. The value is {3,1,0,0} - // const uint8_t *inBytes =(const uint8_t *)inData+headerSize; RBBIDataHeader *rbbiDH = (RBBIDataHeader *)inBytes; if (ds->readUInt32(rbbiDH->fMagic) != 0xb1a0 || - rbbiDH->fFormatVersion[0] != 3 || - ds->readUInt32(rbbiDH->fLength) < sizeof(RBBIDataHeader)) - { + !RBBIDataWrapper::isDataVersionAcceptable(rbbiDH->fFormatVersion) || + ds->readUInt32(rbbiDH->fLength) < sizeof(RBBIDataHeader)) { udata_printError(ds, "ubrk_swap(): RBBI Data header is invalid.\n"); *status=U_UNSUPPORTED_ERROR; return 0; @@ -428,31 +399,9 @@ ubrk_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outD outBytes+tableStartOffset+topSize, status); } - // Safe Forward state table. Same layout as forward table, above. - tableStartOffset = ds->readUInt32(rbbiDH->fSFTable); - tableLength = ds->readUInt32(rbbiDH->fSFTableLen); - - if (tableLength > 0) { - ds->swapArray32(ds, inBytes+tableStartOffset, topSize, - outBytes+tableStartOffset, status); - ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize, - outBytes+tableStartOffset+topSize, status); - } - - // Safe Reverse state table. Same layout as forward table, above. - tableStartOffset = ds->readUInt32(rbbiDH->fSRTable); - tableLength = ds->readUInt32(rbbiDH->fSRTableLen); - - if (tableLength > 0) { - ds->swapArray32(ds, inBytes+tableStartOffset, topSize, - outBytes+tableStartOffset, status); - ds->swapArray16(ds, inBytes+tableStartOffset+topSize, tableLength-topSize, - outBytes+tableStartOffset+topSize, status); - } - // Trie table for character categories - utrie_swap(ds, inBytes+ds->readUInt32(rbbiDH->fTrie), ds->readUInt32(rbbiDH->fTrieLen), - outBytes+ds->readUInt32(rbbiDH->fTrie), status); + utrie2_swap(ds, inBytes+ds->readUInt32(rbbiDH->fTrie), ds->readUInt32(rbbiDH->fTrieLen), + outBytes+ds->readUInt32(rbbiDH->fTrie), status); // Source Rules Text. It's UChar data ds->swapArray16(ds, inBytes+ds->readUInt32(rbbiDH->fRuleSource), ds->readUInt32(rbbiDH->fRuleSourceLen), diff --git a/icuSources/common/rbbidata.h b/icuSources/common/rbbidata.h index 8011bafd..b7de6ce0 100644 --- a/icuSources/common/rbbidata.h +++ b/icuSources/common/rbbidata.h @@ -51,22 +51,23 @@ ubrk_swap(const UDataSwapper *ds, #include "unicode/uobject.h" #include "unicode/unistr.h" +#include "unicode/uversion.h" #include "umutex.h" -#include "utrie.h" +#include "utrie2.h" U_NAMESPACE_BEGIN +// The current RBBI data format version. +static const uint8_t RBBI_DATA_FORMAT_VERSION[] = {5, 0, 0, 0}; + /* * The following structs map exactly onto the raw data from ICU common data file. */ struct RBBIDataHeader { uint32_t fMagic; /* == 0xbla0 */ - uint8_t fFormatVersion[4]; /* Data Format. Same as the value in struct UDataInfo */ + UVersionInfo fFormatVersion; /* Data Format. Same as the value in struct UDataInfo */ /* if there is one associated with this data. */ /* (version originates in rbbi, is copied to UDataInfo) */ - /* For ICU 3.2 and earlier, this field was */ - /* uint32_t fVersion */ - /* with a value of 1. */ uint32_t fLength; /* Total length in bytes of this RBBI Data, */ /* including all sections, not just the header. */ uint32_t fCatCount; /* Number of character categories. */ @@ -80,10 +81,6 @@ struct RBBIDataHeader { uint32_t fFTableLen; uint32_t fRTable; /* Offset to the reverse state transition table. */ uint32_t fRTableLen; - uint32_t fSFTable; /* safe point forward transition table */ - uint32_t fSFTableLen; - uint32_t fSRTable; /* safe point reverse transition table */ - uint32_t fSRTableLen; uint32_t fTrie; /* Offset to Trie data for character categories */ uint32_t fTrieLen; uint32_t fRuleSource; /* Offset to the source for for the break */ @@ -115,9 +112,10 @@ struct RBBIStateTableRow { /* StatusTable of the set of matching */ /* tags (rule status values) */ int16_t fReserved; - uint16_t fNextState[2]; /* Next State, indexed by char category. */ - /* This array does not have two elements */ - /* Array Size is actually fData->fHeader->fCatCount */ + uint16_t fNextState[1]; /* Next State, indexed by char category. */ + /* Variable-length array declared with length 1 */ + /* to disable bounds checkers. */ + /* Array Size is actually fData->fHeader->fCatCount*/ /* CAUTION: see RBBITableBuilder::getTableSize() */ /* before changing anything here. */ }; @@ -128,7 +126,9 @@ struct RBBIStateTable { uint32_t fRowLen; /* Length of a state table row, in bytes. */ uint32_t fFlags; /* Option Flags for this state table */ uint32_t fReserved; /* reserved */ - char fTableData[4]; /* First RBBIStateTableRow begins here. */ + char fTableData[1]; /* First RBBIStateTableRow begins here. */ + /* Variable-length array declared with length 1 */ + /* to disable bounds checkers. */ /* (making it char[] simplifies ugly address */ /* arithmetic for indexing variable length rows.) */ }; @@ -152,6 +152,8 @@ public: RBBIDataWrapper(UDataMemory* udm, UErrorCode &status); ~RBBIDataWrapper(); + static UBool isDataVersionAcceptable(const UVersionInfo version); + void init0(); void init(const RBBIDataHeader *data, UErrorCode &status); RBBIDataWrapper *addReference(); @@ -159,13 +161,8 @@ public: UBool operator ==(const RBBIDataWrapper &other) const; int32_t hashCode(); const UnicodeString &getRuleSourceString() const; -#ifdef RBBI_DEBUG void printData(); void printTable(const char *heading, const RBBIStateTable *table); -#else - #define printData() - #define printTable(heading, table) -#endif /* */ /* Pointers to items within the data */ @@ -173,19 +170,17 @@ public: const RBBIDataHeader *fHeader; const RBBIStateTable *fForwardTable; const RBBIStateTable *fReverseTable; - const RBBIStateTable *fSafeFwdTable; - const RBBIStateTable *fSafeRevTable; const UChar *fRuleSource; const int32_t *fRuleStatusTable; /* number of int32_t values in the rule status table. Used to sanity check indexing */ int32_t fStatusMaxIdx; - UTrie fTrie; + UTrie2 *fTrie; private: u_atomic_int32_t fRefCount; - UDataMemory *fUDataMem; + UDataMemory *fUDataMem; UnicodeString fRuleString; UBool fDontFreeData; diff --git a/icuSources/common/rbbidata57.cpp b/icuSources/common/rbbidata57.cpp new file mode 100644 index 00000000..a7e320e9 --- /dev/null +++ b/icuSources/common/rbbidata57.cpp @@ -0,0 +1,305 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +*************************************************************************** +* Copyright (C) 1999-2014 International Business Machines Corporation * +* and others. All rights reserved. * +*************************************************************************** +*/ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/utypes.h" +#include "rbbidata57.h" +#include "rbbirb57.h" +#include "utrie.h" +#include "udatamem.h" +#include "cmemory.h" +#include "cstring.h" +#include "umutex.h" + +#include "uassert.h" + + +//----------------------------------------------------------------------------------- +// +// Trie access folding function. Copied as-is from properties code in uchar.c +// +//----------------------------------------------------------------------------------- +U_CDECL_BEGIN +static int32_t U_CALLCONV +getFoldingOffset(uint32_t data) { + /* if bit 15 is set, then the folding offset is in bits 14..0 of the 16-bit trie result */ + if(data&0x8000) { + return (int32_t)(data&0x7fff); + } else { + return 0; + } +} +U_CDECL_END + +U_NAMESPACE_BEGIN + +//----------------------------------------------------------------------------- +// +// Constructors. +// +//----------------------------------------------------------------------------- +RBBIDataWrapper57::RBBIDataWrapper57(const RBBIDataHeader57 *data, UErrorCode &status) { + init0(); + init(data, status); +} + +RBBIDataWrapper57::RBBIDataWrapper57(const RBBIDataHeader57 *data, enum EDontAdopt, UErrorCode &status) { + init0(); + init(data, status); + fDontFreeData = TRUE; +} + +RBBIDataWrapper57::RBBIDataWrapper57(UDataMemory* udm, UErrorCode &status) { + init0(); + if (U_FAILURE(status)) { + return; + } + const DataHeader *dh = udm->pHeader; + int32_t headerSize = dh->dataHeader.headerSize; + if ( !(headerSize >= 20 && + dh->info.isBigEndian == U_IS_BIG_ENDIAN && + dh->info.charsetFamily == U_CHARSET_FAMILY && + dh->info.dataFormat[0] == 0x42 && // dataFormat="Brk " + dh->info.dataFormat[1] == 0x72 && + dh->info.dataFormat[2] == 0x6b && + dh->info.dataFormat[3] == 0x20) + // Note: info.fFormatVersion is duplicated in the RBBIDataHeader57, and is + // validated when checking that. + ) { + status = U_INVALID_FORMAT_ERROR; + return; + } + const char *dataAsBytes = reinterpret_cast(dh); + const RBBIDataHeader57 *rbbidh = reinterpret_cast(dataAsBytes + headerSize); + init(rbbidh, status); + fUDataMem = udm; +} + +//----------------------------------------------------------------------------- +// +// init(). Does most of the work of construction, shared between the +// constructors. +// +//----------------------------------------------------------------------------- +void RBBIDataWrapper57::init0() { + fHeader = NULL; + fForwardTable = NULL; + fReverseTable = NULL; + fSafeFwdTable = NULL; + fSafeRevTable = NULL; + fRuleSource = NULL; + fRuleStatusTable = NULL; + fUDataMem = NULL; + fRefCount = 0; + fDontFreeData = TRUE; +} + +void RBBIDataWrapper57::init(const RBBIDataHeader57 *data, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + fHeader = data; + if (fHeader->fMagic != 0xb1a0 || fHeader->fFormatVersion[0] != 3) + { + status = U_INVALID_FORMAT_ERROR; + return; + } + // Note: in ICU version 3.2 and earlier, there was a formatVersion 1 + // that is no longer supported. At that time fFormatVersion was + // an int32_t field, rather than an array of 4 bytes. + + fDontFreeData = FALSE; + if (data->fFTableLen != 0) { + fForwardTable = (RBBIStateTable *)((char *)data + fHeader->fFTable); + } + if (data->fRTableLen != 0) { + fReverseTable = (RBBIStateTable *)((char *)data + fHeader->fRTable); + } + if (data->fSFTableLen != 0) { + fSafeFwdTable = (RBBIStateTable *)((char *)data + fHeader->fSFTable); + } + if (data->fSRTableLen != 0) { + fSafeRevTable = (RBBIStateTable *)((char *)data + fHeader->fSRTable); + } + + + utrie_unserialize(&fTrie, + (uint8_t *)data + fHeader->fTrie, + fHeader->fTrieLen, + &status); + if (U_FAILURE(status)) { + return; + } + fTrie.getFoldingOffset=getFoldingOffset; + + + fRuleSource = (UChar *)((char *)data + fHeader->fRuleSource); + fRuleString.setTo(TRUE, fRuleSource, -1); + U_ASSERT(data->fRuleSourceLen > 0); + + fRuleStatusTable = (int32_t *)((char *)data + fHeader->fStatusTable); + fStatusMaxIdx = data->fStatusTableLen / sizeof(int32_t); + + fRefCount = 1; + +#ifdef RBBI_DEBUG + char *debugEnv = getenv("U_RBBIDEBUG"); + if (debugEnv && uprv_strstr(debugEnv, "data")) {this->printData();} +#endif +} + + +//----------------------------------------------------------------------------- +// +// Destructor. Don't call this - use removeReference() instead. +// +//----------------------------------------------------------------------------- +RBBIDataWrapper57::~RBBIDataWrapper57() { + U_ASSERT(fRefCount == 0); + if (fUDataMem) { + udata_close(fUDataMem); + } else if (!fDontFreeData) { + uprv_free((void *)fHeader); + } +} + + + +//----------------------------------------------------------------------------- +// +// Operator == Consider two RBBIDataWrappers to be equal if they +// refer to the same underlying data. Although +// the data wrappers are normally shared between +// iterator instances, it's possible to independently +// open the same data twice, and get two instances, which +// should still be ==. +// +//----------------------------------------------------------------------------- +UBool RBBIDataWrapper57::operator ==(const RBBIDataWrapper57 &other) const { + if (fHeader == other.fHeader) { + return TRUE; + } + if (fHeader->fLength != other.fHeader->fLength) { + return FALSE; + } + if (uprv_memcmp(fHeader, other.fHeader, fHeader->fLength) == 0) { + return TRUE; + } + return FALSE; +} + +int32_t RBBIDataWrapper57::hashCode() { + return fHeader->fFTableLen; +} + + + +//----------------------------------------------------------------------------- +// +// Reference Counting. A single RBBIDataWrapper57 object is shared among +// however many RulesBasedBreakIterator instances are +// referencing the same data. +// +//----------------------------------------------------------------------------- +void RBBIDataWrapper57::removeReference() { + if (umtx_atomic_dec(&fRefCount) == 0) { + delete this; + } +} + + +RBBIDataWrapper57 *RBBIDataWrapper57::addReference() { + umtx_atomic_inc(&fRefCount); + return this; +} + + + +//----------------------------------------------------------------------------- +// +// getRuleSourceString +// +//----------------------------------------------------------------------------- +const UnicodeString &RBBIDataWrapper57::getRuleSourceString() const { + return fRuleString; +} + + +//----------------------------------------------------------------------------- +// +// print - debugging function to dump the runtime data tables. +// +//----------------------------------------------------------------------------- +#ifdef RBBI_DEBUG +void RBBIDataWrapper57::printTable(const char *heading, const RBBIStateTable *table) { + uint32_t c; + uint32_t s; + + RBBIDebugPrintf(" %s\n", heading); + + RBBIDebugPrintf("State | Acc LA TagIx"); + for (c=0; cfCatCount; c++) {RBBIDebugPrintf("%3d ", c);} + RBBIDebugPrintf("\n------|---------------"); for (c=0;cfCatCount; c++) { + RBBIDebugPrintf("----"); + } + RBBIDebugPrintf("\n"); + + if (table == NULL) { + RBBIDebugPrintf(" N U L L T A B L E\n\n"); + return; + } + for (s=0; sfNumStates; s++) { + RBBIStateTableRow *row = (RBBIStateTableRow *) + (table->fTableData + (table->fRowLen * s)); + RBBIDebugPrintf("%4d | %3d %3d %3d ", s, row->fAccepting, row->fLookAhead, row->fTagIdx); + for (c=0; cfCatCount; c++) { + RBBIDebugPrintf("%3d ", row->fNextState[c]); + } + RBBIDebugPrintf("\n"); + } + RBBIDebugPrintf("\n"); +} +#endif + + +#ifdef RBBI_DEBUG +void RBBIDataWrapper57::printData() { + RBBIDebugPrintf("RBBI Data at %p\n", (void *)fHeader); + RBBIDebugPrintf(" Version = {%d %d %d %d}\n", fHeader->fFormatVersion[0], fHeader->fFormatVersion[1], + fHeader->fFormatVersion[2], fHeader->fFormatVersion[3]); + RBBIDebugPrintf(" total length of data = %d\n", fHeader->fLength); + RBBIDebugPrintf(" number of character categories = %d\n\n", fHeader->fCatCount); + + printTable("Forward State Transition Table", fForwardTable); + printTable("Reverse State Transition Table", fReverseTable); + printTable("Safe Forward State Transition Table", fSafeFwdTable); + printTable("Safe Reverse State Transition Table", fSafeRevTable); + + RBBIDebugPrintf("\nOrignal Rules source:\n"); + for (int32_t c=0; fRuleSource[c] != 0; c++) { + RBBIDebugPrintf("%c", fRuleSource[c]); + } + RBBIDebugPrintf("\n\n"); +} +#endif + + +U_NAMESPACE_END +U_NAMESPACE_USE + +//----------------------------------------------------------------------------- +// +// ubrk_swap - in standard rbbidata.cpp +// +//----------------------------------------------------------------------------- + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/rbbidata57.h b/icuSources/common/rbbidata57.h new file mode 100644 index 00000000..33359817 --- /dev/null +++ b/icuSources/common/rbbidata57.h @@ -0,0 +1,158 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +******************************************************************************* +* +* Copyright (C) 1999-2014 International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* +********************************************************************** +* Legacy version of RBBIDataHeader and RBBIDataWrapper from ICU 57, +* only for use by Apple RuleBasedTokenizer +********************************************************************** +* +* RBBI data formats Includes +* +* Structs that describes the format of the Binary RBBI data, +* as it is stored in ICU's data file. +* +* RBBIDataWrapper - Instances of this class sit between the +* raw data structs and the RulesBasedBreakIterator objects +* that are created by applications. The wrapper class +* provides reference counting for the underlying data, +* and direct pointers to data that would not otherwise +* be accessible without ugly pointer arithmetic. The +* wrapper does not attempt to provide any higher level +* abstractions for the data itself. +* +* There will be only one instance of RBBIDataWrapper for any +* set of RBBI run time data being shared by instances +* (clones) of RulesBasedBreakIterator. +*/ + +#ifndef __RBBIDATA57_H__ +#define __RBBIDATA57_H__ + +#include "unicode/utypes.h" +#include "unicode/udata.h" +#include "udataswp.h" +#include "rbbidata.h" + +#ifdef __cplusplus + +#include "unicode/uobject.h" +#include "unicode/unistr.h" +#include "umutex.h" +#include "utrie.h" + +U_NAMESPACE_BEGIN + +/* + * The following structs map exactly onto the raw data from ICU common data file. + */ +struct RBBIDataHeader57 { + uint32_t fMagic; /* == 0xbla0 */ + uint8_t fFormatVersion[4]; /* Data Format. Same as the value in struct UDataInfo */ + /* if there is one associated with this data. */ + /* (version originates in rbbi, is copied to UDataInfo) */ + /* For ICU 3.2 and earlier, this field was */ + /* uint32_t fVersion */ + /* with a value of 1. */ + uint32_t fLength; /* Total length in bytes of this RBBI Data, */ + /* including all sections, not just the header. */ + uint32_t fCatCount; /* Number of character categories. */ + + /* */ + /* Offsets and sizes of each of the subsections within the RBBI data. */ + /* All offsets are bytes from the start of the RBBIDataHeader57. */ + /* All sizes are in bytes. */ + /* */ + uint32_t fFTable; /* forward state transition table. */ + uint32_t fFTableLen; + uint32_t fRTable; /* Offset to the reverse state transition table. */ + uint32_t fRTableLen; + uint32_t fSFTable; /* safe point forward transition table */ + uint32_t fSFTableLen; + uint32_t fSRTable; /* safe point reverse transition table */ + uint32_t fSRTableLen; + uint32_t fTrie; /* Offset to Trie data for character categories */ + uint32_t fTrieLen; + uint32_t fRuleSource; /* Offset to the source for for the break */ + uint32_t fRuleSourceLen; /* rules. Stored UChar *. */ + uint32_t fStatusTable; /* Offset to the table of rule status values */ + uint32_t fStatusTableLen; + + uint32_t fReserved[6]; /* Reserved for expansion */ + +}; + + + +// struct RBBIStateTableRow: standard one from rbbidata.h + + +// struct RBBIStateTable: standard one from rbbidata.h + +/* */ +/* The reference counting wrapper class */ +/* */ +class RBBIDataWrapper57 : public UMemory { +public: + enum EDontAdopt { + kDontAdopt + }; + RBBIDataWrapper57(const RBBIDataHeader57 *data, UErrorCode &status); + RBBIDataWrapper57(const RBBIDataHeader57 *data, enum EDontAdopt dontAdopt, UErrorCode &status); + RBBIDataWrapper57(UDataMemory* udm, UErrorCode &status); + ~RBBIDataWrapper57(); + + void init0(); + void init(const RBBIDataHeader57 *data, UErrorCode &status); + RBBIDataWrapper57 *addReference(); + void removeReference(); + UBool operator ==(const RBBIDataWrapper57 &other) const; + int32_t hashCode(); + const UnicodeString &getRuleSourceString() const; +#ifdef RBBI_DEBUG + void printData(); + void printTable(const char *heading, const RBBIStateTable *table); +#else + #define printData() + #define printTable(heading, table) +#endif + + /* */ + /* Pointers to items within the data */ + /* */ + const RBBIDataHeader57 *fHeader; + const RBBIStateTable *fForwardTable; + const RBBIStateTable *fReverseTable; + const RBBIStateTable *fSafeFwdTable; + const RBBIStateTable *fSafeRevTable; + const UChar *fRuleSource; + const int32_t *fRuleStatusTable; + + /* number of int32_t values in the rule status table. Used to sanity check indexing */ + int32_t fStatusMaxIdx; + + UTrie fTrie; + +private: + u_atomic_int32_t fRefCount; + UDataMemory *fUDataMem; + UnicodeString fRuleString; + UBool fDontFreeData; + + RBBIDataWrapper57(const RBBIDataWrapper57 &other); /* forbid copying of this class */ + RBBIDataWrapper57 &operator=(const RBBIDataWrapper57 &other); /* forbid copying of this class */ +}; + + + +U_NAMESPACE_END + +#endif /* C++ */ + +#endif diff --git a/icuSources/common/rbbirb.cpp b/icuSources/common/rbbirb.cpp index f4fa13c9..a4b9a718 100644 --- a/icuSources/common/rbbirb.cpp +++ b/icuSources/common/rbbirb.cpp @@ -24,16 +24,16 @@ #include "unicode/uchriter.h" #include "unicode/parsepos.h" #include "unicode/parseerr.h" + #include "cmemory.h" #include "cstring.h" - #include "rbbirb.h" #include "rbbinode.h" - #include "rbbiscan.h" #include "rbbisetb.h" #include "rbbitblb.h" #include "rbbidata.h" +#include "uassert.h" U_NAMESPACE_BEGIN @@ -47,7 +47,7 @@ U_NAMESPACE_BEGIN RBBIRuleBuilder::RBBIRuleBuilder(const UnicodeString &rules, UParseError *parseErr, UErrorCode &status) - : fRules(rules) + : fRules(rules), fStrippedRules(rules) { fStatus = &status; // status is checked below fParseError = parseErr; @@ -62,10 +62,7 @@ RBBIRuleBuilder::RBBIRuleBuilder(const UnicodeString &rules, fSafeFwdTree = NULL; fSafeRevTree = NULL; fDefaultTree = &fForwardTree; - fForwardTables = NULL; - fReverseTables = NULL; - fSafeFwdTables = NULL; - fSafeRevTables = NULL; + fForwardTable = NULL; fRuleStatusVals = NULL; fChainRules = FALSE; fLBCMNoChain = FALSE; @@ -114,11 +111,7 @@ RBBIRuleBuilder::~RBBIRuleBuilder() { delete fUSetNodes; delete fSetBuilder; - delete fForwardTables; - delete fReverseTables; - delete fSafeFwdTables; - delete fSafeRevTables; - + delete fForwardTable; delete fForwardTree; delete fReverseTree; delete fSafeFwdTree; @@ -147,8 +140,9 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() { return NULL; } - // Remove comments and whitespace from the rules to make it smaller. - UnicodeString strippedRules((const UnicodeString&)RBBIRuleScanner::stripRules(fRules)); + // Remove whitespace from the rules to make it smaller. + // The rule parser has already removed comments. + fStrippedRules = fScanner->stripRules(fStrippedRules); // Calculate the size of each section in the data. // Sizes here are padded up to a multiple of 8 for better memory alignment. @@ -156,16 +150,15 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() { // without the padding. // int32_t headerSize = align8(sizeof(RBBIDataHeader)); - int32_t forwardTableSize = align8(fForwardTables->getTableSize()); - int32_t reverseTableSize = align8(fReverseTables->getTableSize()); - int32_t safeFwdTableSize = align8(fSafeFwdTables->getTableSize()); - int32_t safeRevTableSize = align8(fSafeRevTables->getTableSize()); + int32_t forwardTableSize = align8(fForwardTable->getTableSize()); + int32_t reverseTableSize = align8(fForwardTable->getSafeTableSize()); int32_t trieSize = align8(fSetBuilder->getTrieSize()); int32_t statusTableSize = align8(fRuleStatusVals->size() * sizeof(int32_t)); - int32_t rulesSize = align8((strippedRules.length()+1) * sizeof(UChar)); + int32_t rulesSize = align8((fStrippedRules.length()+1) * sizeof(UChar)); - int32_t totalSize = headerSize + forwardTableSize + reverseTableSize - + safeFwdTableSize + safeRevTableSize + int32_t totalSize = headerSize + + forwardTableSize + + reverseTableSize + statusTableSize + trieSize + rulesSize; RBBIDataHeader *data = (RBBIDataHeader *)uprv_malloc(totalSize); @@ -177,35 +170,30 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() { data->fMagic = 0xb1a0; - data->fFormatVersion[0] = 3; - data->fFormatVersion[1] = 1; - data->fFormatVersion[2] = 0; - data->fFormatVersion[3] = 0; + data->fFormatVersion[0] = RBBI_DATA_FORMAT_VERSION[0]; + data->fFormatVersion[1] = RBBI_DATA_FORMAT_VERSION[1]; + data->fFormatVersion[2] = RBBI_DATA_FORMAT_VERSION[2]; + data->fFormatVersion[3] = RBBI_DATA_FORMAT_VERSION[3]; data->fLength = totalSize; data->fCatCount = fSetBuilder->getNumCharCategories(); data->fFTable = headerSize; data->fFTableLen = forwardTableSize; - data->fRTable = data->fFTable + forwardTableSize; + + data->fRTable = data->fFTable + data->fFTableLen; data->fRTableLen = reverseTableSize; - data->fSFTable = data->fRTable + reverseTableSize; - data->fSFTableLen = safeFwdTableSize; - data->fSRTable = data->fSFTable + safeFwdTableSize; - data->fSRTableLen = safeRevTableSize; - data->fTrie = data->fSRTable + safeRevTableSize; + data->fTrie = data->fRTable + data->fRTableLen; data->fTrieLen = fSetBuilder->getTrieSize(); data->fStatusTable = data->fTrie + trieSize; data->fStatusTableLen= statusTableSize; data->fRuleSource = data->fStatusTable + statusTableSize; - data->fRuleSourceLen = strippedRules.length() * sizeof(UChar); + data->fRuleSourceLen = fStrippedRules.length() * sizeof(UChar); uprv_memset(data->fReserved, 0, sizeof(data->fReserved)); - fForwardTables->exportTable((uint8_t *)data + data->fFTable); - fReverseTables->exportTable((uint8_t *)data + data->fRTable); - fSafeFwdTables->exportTable((uint8_t *)data + data->fSFTable); - fSafeRevTables->exportTable((uint8_t *)data + data->fSRTable); + fForwardTable->exportTable((uint8_t *)data + data->fFTable); + fForwardTable->exportSafeTable((uint8_t *)data + data->fRTable); fSetBuilder->serializeTrie ((uint8_t *)data + data->fTrie); int32_t *ruleStatusTable = (int32_t *)((uint8_t *)data + data->fStatusTable); @@ -213,16 +201,12 @@ RBBIDataHeader *RBBIRuleBuilder::flattenData() { ruleStatusTable[i] = fRuleStatusVals->elementAti(i); } - strippedRules.extract((UChar *)((uint8_t *)data+data->fRuleSource), rulesSize/2+1, *fStatus); + fStrippedRules.extract((UChar *)((uint8_t *)data+data->fRuleSource), rulesSize/2+1, *fStatus); return data; } - - - - //---------------------------------------------------------------------------------------- // // createRuleBasedBreakIterator construct from source rules that are passed in @@ -234,8 +218,6 @@ RBBIRuleBuilder::createRuleBasedBreakIterator( const UnicodeString &rules, UParseError *parseError, UErrorCode &status) { - // status checked below - // // Read the input rules, generate a parse tree, symbol table, // and list of all Unicode Sets referenced by the rules. @@ -244,75 +226,94 @@ RBBIRuleBuilder::createRuleBasedBreakIterator( const UnicodeString &rules, if (U_FAILURE(status)) { // status checked here bcos build below doesn't return NULL; } - builder.fScanner->parse(); + + RBBIDataHeader *data = builder.build(status); + + if (U_FAILURE(status)) { + return nullptr; + } + + // + // Create a break iterator from the compiled rules. + // (Identical to creation from stored pre-compiled rules) + // + // status is checked after init in construction. + RuleBasedBreakIterator *This = new RuleBasedBreakIterator(data, status); + if (U_FAILURE(status)) { + delete This; + This = NULL; + } + else if(This == NULL) { // test for NULL + status = U_MEMORY_ALLOCATION_ERROR; + } + return This; +} + +RBBIDataHeader *RBBIRuleBuilder::build(UErrorCode &status) { + if (U_FAILURE(status)) { + return nullptr; + } + + fScanner->parse(); + if (U_FAILURE(status)) { + return nullptr; + } // // UnicodeSet processing. // Munge the Unicode Sets to create a set of character categories. - // Generate the mapping tables (TRIE) from input 32-bit characters to + // Generate the mapping tables (TRIE) from input code points to // the character categories. // - builder.fSetBuilder->build(); - + fSetBuilder->buildRanges(); // // Generate the DFA state transition table. // - builder.fForwardTables = new RBBITableBuilder(&builder, &builder.fForwardTree); - builder.fReverseTables = new RBBITableBuilder(&builder, &builder.fReverseTree); - builder.fSafeFwdTables = new RBBITableBuilder(&builder, &builder.fSafeFwdTree); - builder.fSafeRevTables = new RBBITableBuilder(&builder, &builder.fSafeRevTree); - if (builder.fForwardTables == NULL || builder.fReverseTables == NULL || - builder.fSafeFwdTables == NULL || builder.fSafeRevTables == NULL) - { + fForwardTable = new RBBITableBuilder(this, &fForwardTree, status); + if (fForwardTable == nullptr) { status = U_MEMORY_ALLOCATION_ERROR; - delete builder.fForwardTables; builder.fForwardTables = NULL; - delete builder.fReverseTables; builder.fReverseTables = NULL; - delete builder.fSafeFwdTables; builder.fSafeFwdTables = NULL; - delete builder.fSafeRevTables; builder.fSafeRevTables = NULL; - return NULL; + return nullptr; } - builder.fForwardTables->build(); - builder.fReverseTables->build(); - builder.fSafeFwdTables->build(); - builder.fSafeRevTables->build(); + fForwardTable->buildForwardTable(); + optimizeTables(); + fForwardTable->buildSafeReverseTable(status); + #ifdef RBBI_DEBUG - if (builder.fDebugEnv && uprv_strstr(builder.fDebugEnv, "states")) { - builder.fForwardTables->printRuleStatusTable(); + if (fDebugEnv && uprv_strstr(fDebugEnv, "states")) { + fForwardTable->printStates(); + fForwardTable->printRuleStatusTable(); + fForwardTable->printReverseTable(); } #endif + fSetBuilder->buildTrie(); + // // Package up the compiled data into a memory image // in the run-time format. // - RBBIDataHeader *data = builder.flattenData(); // returns NULL if error - if (U_FAILURE(*builder.fStatus)) { - return NULL; + RBBIDataHeader *data = flattenData(); // returns NULL if error + if (U_FAILURE(status)) { + return nullptr; } + return data; +} +void RBBIRuleBuilder::optimizeTables() { - // - // Clean up the compiler related stuff - // - + // Begin looking for duplicates with char class 3. + // Classes 0, 1 and 2 are special; they are unused, {bof} and {eof} respectively, + // and should not have other categories merged into them. + IntPair duplPair = {3, 0}; - // - // Create a break iterator from the compiled rules. - // (Identical to creation from stored pre-compiled rules) - // - // status is checked after init in construction. - RuleBasedBreakIterator *This = new RuleBasedBreakIterator(data, status); - if (U_FAILURE(status)) { - delete This; - This = NULL; - } - else if(This == NULL) { // test for NULL - status = U_MEMORY_ALLOCATION_ERROR; + while (fForwardTable->findDuplCharClassFrom(&duplPair)) { + fSetBuilder->mergeCategories(duplPair); + fForwardTable->removeColumn(duplPair.second); } - return This; + fForwardTable->removeDuplicateStates(); } U_NAMESPACE_END diff --git a/icuSources/common/rbbirb.h b/icuSources/common/rbbirb.h index d58a1361..037c1dc2 100644 --- a/icuSources/common/rbbirb.h +++ b/icuSources/common/rbbirb.h @@ -15,6 +15,11 @@ #define RBBIRB_H #include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include + #include "unicode/uobject.h" #include "unicode/rbbi.h" #include "unicode/uniset.h" @@ -22,8 +27,7 @@ #include "uhash.h" #include "uvector.h" #include "unicode/symtable.h"// For UnicodeSet parsing, is the interface that - // looks up references to $variables within a set. - + // looks up references to $variables within a set. U_NAMESPACE_BEGIN @@ -120,13 +124,28 @@ public: RBBIRuleBuilder(const UnicodeString &rules, UParseError *parseErr, UErrorCode &status - ); + ); virtual ~RBBIRuleBuilder(); + + /** + * Build the state tables and char class Trie from the source rules. + */ + RBBIDataHeader *build(UErrorCode &status); + + + /** + * Fold together redundant character classes (table columns) and + * redundant states (table rows). Done after initial table generation, + * before serializing the result. + */ + void optimizeTables(); + char *fDebugEnv; // controls debug trace output UErrorCode *fStatus; // Error reporting. Keeping status UParseError *fParseError; // here avoids passing it everywhere. const UnicodeString &fRules; // The rule string that we are compiling + UnicodeString fStrippedRules; // The rule string, with comments stripped. RBBIRuleScanner *fScanner; // The scanner. RBBINode *fForwardTree; // The parse trees, generated by the scanner, @@ -150,10 +169,7 @@ public: RBBISetBuilder *fSetBuilder; // Set and Character Category builder. UVector *fUSetNodes; // Vector of all uset nodes. - RBBITableBuilder *fForwardTables; // State transition tables - RBBITableBuilder *fReverseTables; - RBBITableBuilder *fSafeFwdTables; - RBBITableBuilder *fSafeRevTables; + RBBITableBuilder *fForwardTable; // State transition table, build time form. UVector *fRuleStatusVals; // The values that can be returned // from getRuleStatus(). @@ -188,6 +204,11 @@ struct RBBISetTableEl { RBBINode *val; }; +/** + * A pair of ints, used to bundle pairs of states or pairs of character classes. + */ +typedef std::pair IntPair; + //---------------------------------------------------------------------------- // @@ -207,6 +228,9 @@ struct RBBISetTableEl { #endif U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ + #endif diff --git a/icuSources/common/rbbirb57.cpp b/icuSources/common/rbbirb57.cpp new file mode 100644 index 00000000..71cd0fdd --- /dev/null +++ b/icuSources/common/rbbirb57.cpp @@ -0,0 +1,314 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +// Copyright (C) 2002-2011, International Business Machines Corporation and others. +// All Rights Reserved. +// + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/brkiter.h" +#include "unicode/ubrk.h" +#include "unicode/unistr.h" +#include "unicode/uniset.h" +#include "unicode/uchar.h" +#include "unicode/uchriter.h" +#include "unicode/parsepos.h" +#include "unicode/parseerr.h" +#include "cmemory.h" +#include "cstring.h" + +#include "rbbidata57.h" +#include "rbbirb57.h" +#include "rbbisetb57.h" +#include "rbbi57.h" +#include "rbbinode.h" +#include "rbbiscan57.h" +#include "rbbitblb57.h" + + +U_NAMESPACE_BEGIN + + +//---------------------------------------------------------------------------------------- +// +// Constructor. +// +//---------------------------------------------------------------------------------------- +RBBIRuleBuilder57::RBBIRuleBuilder57(const UnicodeString &rules, + UParseError *parseErr, + UErrorCode &status) + : fRules(rules) +{ + fStatus = &status; // status is checked below + fParseError = parseErr; + fDebugEnv = NULL; +#ifdef RBBI_DEBUG + fDebugEnv = getenv("U_RBBIDEBUG"); +#endif + + + fForwardTree = NULL; + fReverseTree = NULL; + fSafeFwdTree = NULL; + fSafeRevTree = NULL; + fDefaultTree = &fForwardTree; + fForwardTables = NULL; + fReverseTables = NULL; + fSafeFwdTables = NULL; + fSafeRevTables = NULL; + fRuleStatusVals = NULL; + fChainRules = FALSE; + fLBCMNoChain = FALSE; + fLookAheadHardBreak = FALSE; + fRINoChain = FALSE; + fUSetNodes = NULL; + fRuleStatusVals = NULL; + fScanner = NULL; + fSetBuilder = NULL; + if (parseErr) { + uprv_memset(parseErr, 0, sizeof(UParseError)); + } + + if (U_FAILURE(status)) { + return; + } + + fUSetNodes = new UVector(status); // bcos status gets overwritten here + fRuleStatusVals = new UVector(status); + fScanner = new RBBIRuleScanner57(this); + fSetBuilder = new RBBISetBuilder57(this); + if (U_FAILURE(status)) { + return; + } + if(fSetBuilder == 0 || fScanner == 0 || fUSetNodes == 0 || fRuleStatusVals == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + } +} + + + +//---------------------------------------------------------------------------------------- +// +// Destructor +// +//---------------------------------------------------------------------------------------- +RBBIRuleBuilder57::~RBBIRuleBuilder57() { + + int i; + for (i=0; ; i++) { + RBBINode *n = (RBBINode *)fUSetNodes->elementAt(i); + if (n==NULL) { + break; + } + delete n; + } + + delete fUSetNodes; + delete fSetBuilder; + delete fForwardTables; + delete fReverseTables; + delete fSafeFwdTables; + delete fSafeRevTables; + + delete fForwardTree; + delete fReverseTree; + delete fSafeFwdTree; + delete fSafeRevTree; + delete fScanner; + delete fRuleStatusVals; +} + + + + + +//---------------------------------------------------------------------------------------- +// +// flattenData() - Collect up the compiled RBBI rule data and put it into +// the format for saving in ICU data files, +// which is also the format needed by the RBBI runtime engine. +// +//---------------------------------------------------------------------------------------- +static int32_t align8(int32_t i) {return (i+7) & 0xfffffff8;} + +RBBIDataHeader57 *RBBIRuleBuilder57::flattenData() { + int32_t i; + + if (U_FAILURE(*fStatus)) { + return NULL; + } + + // Remove comments and whitespace from the rules to make it smaller. + UnicodeString strippedRules((const UnicodeString&)RBBIRuleScanner57::stripRules(fRules)); + + // Calculate the size of each section in the data. + // Sizes here are padded up to a multiple of 8 for better memory alignment. + // Sections sizes actually stored in the header are for the actual data + // without the padding. + // + int32_t headerSize = align8(sizeof(RBBIDataHeader57)); + int32_t forwardTableSize = align8(fForwardTables->getTableSize()); + int32_t reverseTableSize = align8(fReverseTables->getTableSize()); + int32_t safeFwdTableSize = align8(fSafeFwdTables->getTableSize()); + int32_t safeRevTableSize = align8(fSafeRevTables->getTableSize()); + int32_t trieSize = align8(fSetBuilder->getTrieSize()); + int32_t statusTableSize = align8(fRuleStatusVals->size() * sizeof(int32_t)); + int32_t rulesSize = align8((strippedRules.length()+1) * sizeof(UChar)); + + int32_t totalSize = headerSize + forwardTableSize + reverseTableSize + + safeFwdTableSize + safeRevTableSize + + statusTableSize + trieSize + rulesSize; + + RBBIDataHeader57 *data = (RBBIDataHeader57 *)uprv_malloc(totalSize); + if (data == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + uprv_memset(data, 0, totalSize); + + + data->fMagic = 0xb1a0; + data->fFormatVersion[0] = 3; + data->fFormatVersion[1] = 1; + data->fFormatVersion[2] = 0; + data->fFormatVersion[3] = 0; + data->fLength = totalSize; + data->fCatCount = fSetBuilder->getNumCharCategories(); + + data->fFTable = headerSize; + data->fFTableLen = forwardTableSize; + data->fRTable = data->fFTable + forwardTableSize; + data->fRTableLen = reverseTableSize; + data->fSFTable = data->fRTable + reverseTableSize; + data->fSFTableLen = safeFwdTableSize; + data->fSRTable = data->fSFTable + safeFwdTableSize; + data->fSRTableLen = safeRevTableSize; + + data->fTrie = data->fSRTable + safeRevTableSize; + data->fTrieLen = fSetBuilder->getTrieSize(); + data->fStatusTable = data->fTrie + trieSize; + data->fStatusTableLen= statusTableSize; + data->fRuleSource = data->fStatusTable + statusTableSize; + data->fRuleSourceLen = strippedRules.length() * sizeof(UChar); + + uprv_memset(data->fReserved, 0, sizeof(data->fReserved)); + + fForwardTables->exportTable((uint8_t *)data + data->fFTable); + fReverseTables->exportTable((uint8_t *)data + data->fRTable); + fSafeFwdTables->exportTable((uint8_t *)data + data->fSFTable); + fSafeRevTables->exportTable((uint8_t *)data + data->fSRTable); + fSetBuilder->serializeTrie ((uint8_t *)data + data->fTrie); + + int32_t *ruleStatusTable = (int32_t *)((uint8_t *)data + data->fStatusTable); + for (i=0; isize(); i++) { + ruleStatusTable[i] = fRuleStatusVals->elementAti(i); + } + + strippedRules.extract((UChar *)((uint8_t *)data+data->fRuleSource), rulesSize/2+1, *fStatus); + + return data; +} + + + + + + +//---------------------------------------------------------------------------------------- +// +// createRuleBasedBreakIterator construct from source rules that are passed in +// in a UnicodeString +// +//---------------------------------------------------------------------------------------- +BreakIterator * +RBBIRuleBuilder57::createRuleBasedBreakIterator( const UnicodeString &rules, + UParseError *parseError, + UErrorCode &status) +{ + // status checked below + + // + // Read the input rules, generate a parse tree, symbol table, + // and list of all Unicode Sets referenced by the rules. + // + RBBIRuleBuilder57 builder(rules, parseError, status); + if (U_FAILURE(status)) { // status checked here bcos build below doesn't + return NULL; + } + builder.fScanner->parse(); + + // + // UnicodeSet processing. + // Munge the Unicode Sets to create a set of character categories. + // Generate the mapping tables (TRIE) from input 32-bit characters to + // the character categories. + // + builder.fSetBuilder->build(); + + + // + // Generate the DFA state transition table. + // + builder.fForwardTables = new RBBITableBuilder57(&builder, &builder.fForwardTree); + builder.fReverseTables = new RBBITableBuilder57(&builder, &builder.fReverseTree); + builder.fSafeFwdTables = new RBBITableBuilder57(&builder, &builder.fSafeFwdTree); + builder.fSafeRevTables = new RBBITableBuilder57(&builder, &builder.fSafeRevTree); + if (builder.fForwardTables == NULL || builder.fReverseTables == NULL || + builder.fSafeFwdTables == NULL || builder.fSafeRevTables == NULL) + { + status = U_MEMORY_ALLOCATION_ERROR; + delete builder.fForwardTables; builder.fForwardTables = NULL; + delete builder.fReverseTables; builder.fReverseTables = NULL; + delete builder.fSafeFwdTables; builder.fSafeFwdTables = NULL; + delete builder.fSafeRevTables; builder.fSafeRevTables = NULL; + return NULL; + } + + builder.fForwardTables->build(); + builder.fReverseTables->build(); + builder.fSafeFwdTables->build(); + builder.fSafeRevTables->build(); + +#ifdef RBBI_DEBUG + if (builder.fDebugEnv && uprv_strstr(builder.fDebugEnv, "states")) { + builder.fForwardTables->printRuleStatusTable(); + } +#endif + + // + // Package up the compiled data into a memory image + // in the run-time format. + // + RBBIDataHeader57 *data = builder.flattenData(); // returns NULL if error + if (U_FAILURE(*builder.fStatus)) { + return NULL; + } + + + // + // Clean up the compiler related stuff + // + + + // + // Create a break iterator from the compiled rules. + // (Identical to creation from stored pre-compiled rules) + // + // status is checked after init in construction. + RuleBasedBreakIterator57 *This = new RuleBasedBreakIterator57(data, status); + if (U_FAILURE(status)) { + delete This; + This = NULL; + } + else if(This == NULL) { // test for NULL + status = U_MEMORY_ALLOCATION_ERROR; + } + return This; +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/rbbirb57.h b/icuSources/common/rbbirb57.h new file mode 100644 index 00000000..9677279d --- /dev/null +++ b/icuSources/common/rbbirb57.h @@ -0,0 +1,171 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +/* +********************************************************************** +* Legacy version of RBBISymbolTable and RBBIRuleBuilder from ICU 57, +* only for use by Apple RuleBasedTokenizer +********************************************************************** +*/ + +#ifndef RBBIRB57_H +#define RBBIRB57_H + +#include "unicode/utypes.h" +#include "unicode/uobject.h" +#include "unicode/uniset.h" +#include "unicode/parseerr.h" +#include "uhash.h" +#include "uvector.h" +#include "unicode/symtable.h"// For UnicodeSet parsing, is the interface that + // looks up references to $variables within a set. +#include "rbbidata57.h" +#include "rbbisetb57.h" +#include "rbbirb.h" + + + +U_NAMESPACE_BEGIN + +class RBBIRuleScanner57; +struct RBBIRuleTableEl; +class RBBISetBuilder57; +class RBBINode; +class RBBITableBuilder57; + + + +//-------------------------------------------------------------------------------- +// +// RBBISymbolTable57. Implements SymbolTable interface that is used by the +// UnicodeSet parser to resolve references to $variables. +// +//-------------------------------------------------------------------------------- +// class RBBISymbolTableEntry - from standard rbbirb.h + + +class RBBISymbolTable57 : public UMemory, public SymbolTable { +private: + const UnicodeString &fRules; + UHashtable *fHashTable; + RBBIRuleScanner57 *fRuleScanner; + + // These next two fields are part of the mechanism for passing references to + // already-constructed UnicodeSets back to the UnicodeSet constructor + // when the pattern includes $variable references. + const UnicodeString ffffString; // = "/uffff" + UnicodeSet *fCachedSetLookup; + +public: + // API inherited from class SymbolTable + virtual const UnicodeString* lookup(const UnicodeString& s) const; + virtual const UnicodeFunctor* lookupMatcher(UChar32 ch) const; + virtual UnicodeString parseReference(const UnicodeString& text, + ParsePosition& pos, int32_t limit) const; + + // Additional Functions + RBBISymbolTable57(RBBIRuleScanner57 *, const UnicodeString &fRules, UErrorCode &status); + virtual ~RBBISymbolTable57(); + + virtual RBBINode *lookupNode(const UnicodeString &key) const; + virtual void addEntry (const UnicodeString &key, RBBINode *val, UErrorCode &err); + +#ifdef RBBI_DEBUG + virtual void rbbiSymtablePrint() const; +#else + // A do-nothing inline function for non-debug builds. Member funcs can't be empty + // or the call sites won't compile. + int32_t fFakeField; + #define rbbiSymtablePrint() fFakeField=0; +#endif + +private: + RBBISymbolTable57(const RBBISymbolTable57 &other); // forbid copying of this class + RBBISymbolTable57 &operator=(const RBBISymbolTable57 &other); // forbid copying of this class +}; + + +//-------------------------------------------------------------------------------- +// +// class RBBIRuleBuilder57 The top-level class handling RBBI rule compiling. +// +//-------------------------------------------------------------------------------- +class RBBIRuleBuilder57 : public UMemory { +public: + + // Create a rule based break iterator from a set of rules. + // This function is the main entry point into the rule builder. The + // public ICU API for creating RBBIs uses this function to do the actual work. + // + static BreakIterator * createRuleBasedBreakIterator( const UnicodeString &rules, + UParseError *parseError, + UErrorCode &status); + +public: + // The "public" functions and data members that appear below are accessed + // (and shared) by the various parts that make up the rule builder. They + // are NOT intended to be accessed by anything outside of the + // rule builder implementation. + RBBIRuleBuilder57(const UnicodeString &rules, + UParseError *parseErr, + UErrorCode &status + ); + + virtual ~RBBIRuleBuilder57(); + char *fDebugEnv; // controls debug trace output + UErrorCode *fStatus; // Error reporting. Keeping status + UParseError *fParseError; // here avoids passing it everywhere. + const UnicodeString &fRules; // The rule string that we are compiling + + RBBIRuleScanner57 *fScanner; // The scanner. + RBBINode *fForwardTree; // The parse trees, generated by the scanner, + RBBINode *fReverseTree; // then manipulated by subsequent steps. + RBBINode *fSafeFwdTree; + RBBINode *fSafeRevTree; + + RBBINode **fDefaultTree; // For rules not qualified with a ! + // the tree to which they belong to. + + UBool fChainRules; // True for chained Unicode TR style rules. + // False for traditional regexp rules. + + UBool fLBCMNoChain; // True: suppress chaining of rules on + // chars with LineBreak property == CM. + + UBool fLookAheadHardBreak; // True: Look ahead matches cause an + // immediate break, no continuing for the + // longest match. + + UBool fRINoChain; // True: suppress chaining of rules on chars + // with (grapheme/word/line)break property == RI. + + RBBISetBuilder57 *fSetBuilder; // Set and Character Category builder. + UVector *fUSetNodes; // Vector of all uset nodes. + + RBBITableBuilder57 *fForwardTables; // State transition tables + RBBITableBuilder57 *fReverseTables; + RBBITableBuilder57 *fSafeFwdTables; + RBBITableBuilder57 *fSafeRevTables; + + UVector *fRuleStatusVals; // The values that can be returned + // from getRuleStatus(). + + RBBIDataHeader57 *flattenData(); // Create the flattened (runtime format) + // data tables.. +private: + RBBIRuleBuilder57(const RBBIRuleBuilder57 &other); // forbid copying of this class + RBBIRuleBuilder57 &operator=(const RBBIRuleBuilder57 &other); // forbid copying of this class +}; + + + + +// struct RBBISetTableEl - from standard rbbirb.h + +// RBBIDebugPrintf - from standard rbbirb.h + +U_NAMESPACE_END +#endif + + + diff --git a/icuSources/common/rbbiscan.cpp b/icuSources/common/rbbiscan.cpp index e68e0529..c82e1ea0 100644 --- a/icuSources/common/rbbiscan.cpp +++ b/icuSources/common/rbbiscan.cpp @@ -47,6 +47,7 @@ // //------------------------------------------------------------------------------ static const UChar gRuleSet_rule_char_pattern[] = { + // Characters that may appear as literals in patterns without escaping or quoting. // [ ^ [ \ p { Z } \ u 0 0 2 0 0x5b, 0x5e, 0x5b, 0x5c, 0x70, 0x7b, 0x5a, 0x7d, 0x5c, 0x75, 0x30, 0x30, 0x32, 0x30, // - \ u 0 0 7 f ] - [ \ p @@ -371,7 +372,7 @@ UBool RBBIRuleScanner::doParseActions(int32_t action) // (forward, reverse, safe_forward, safe_reverse) // OR this rule into the appropriate group of them. // - RBBINode **destRules = (fReverseRule? &fRB->fReverseTree : fRB->fDefaultTree); + RBBINode **destRules = (fReverseRule? &fRB->fSafeRevTree : fRB->fDefaultTree); if (*destRules != NULL) { // This is not the first rule encounted. @@ -558,6 +559,10 @@ UBool RBBIRuleScanner::doParseActions(int32_t action) fRB->fDefaultTree = &fRB->fSafeRevTree; } else if (opt == UNICODE_STRING("lookAheadHardBreak", 18)) { fRB->fLookAheadHardBreak = TRUE; + } else if (opt == UNICODE_STRING("quoted_literals_only", 20)) { + fRuleSets[kRuleSet_rule_char-128].clear(); + } else if (opt == UNICODE_STRING("unquoted_literals", 17)) { + fRuleSets[kRuleSet_rule_char-128].applyPattern(UnicodeString(gRuleSet_rule_char_pattern), *fRB->fStatus); } else { error(U_BRK_UNRECOGNIZED_OPTION); } @@ -817,27 +822,24 @@ static const UChar chRParen = 0x29; //------------------------------------------------------------------------------ // -// stripRules Return a rules string without unnecessary -// characters. +// stripRules Return a rules string without extra spaces. +// (Comments are removed separately, during rule parsing.) // //------------------------------------------------------------------------------ UnicodeString RBBIRuleScanner::stripRules(const UnicodeString &rules) { UnicodeString strippedRules; - int rulesLength = rules.length(); - for (int idx = 0; idx < rulesLength; ) { - UChar ch = rules[idx++]; - if (ch == chPound) { - while (idx < rulesLength - && ch != chCR && ch != chLF && ch != chNEL) - { - ch = rules[idx++]; - } - } - if (!u_isISOControl(ch)) { - strippedRules.append(ch); + int32_t rulesLength = rules.length(); + bool skippingSpaces = false; + + for (int32_t idx=0; idxfStrippedRules.setCharAt(i, u' '); + } } if (c.fChar == (UChar32)-1) { return; @@ -1116,22 +1122,6 @@ void RBBIRuleScanner::parse() { return; } - // - // If there were NO user specified reverse rules, set up the equivalent of ".*;" - // - if (fRB->fReverseTree == NULL) { - fRB->fReverseTree = pushNewNode(RBBINode::opStar); - RBBINode *operand = pushNewNode(RBBINode::setRef); - if (U_FAILURE(*fRB->fStatus)) { - return; - } - findSetFor(UnicodeString(TRUE, kAny, 3), operand); - fRB->fReverseTree->fLeftChild = operand; - operand->fParent = fRB->fReverseTree; - fNodeStackPtr -= 2; - } - - // // Parsing of the input RBBI rules is complete. // We now have a parse tree for the rule expressions diff --git a/icuSources/common/rbbiscan57.cpp b/icuSources/common/rbbiscan57.cpp new file mode 100644 index 00000000..80b960ed --- /dev/null +++ b/icuSources/common/rbbiscan57.cpp @@ -0,0 +1,1280 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +// Copyright (C) 2002-2016, International Business Machines Corporation and others. +// All Rights Reserved. +// +// This file contains the Rule Based Break Iterator Rule Builder functions for +// scanning the rules and assembling a parse tree. This is the first phase +// of compiling the rules. +// +// The overall of the rules is managed by class RBBIRuleBuilder, which will +// create and use an instance of this class as part of the process. +// + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/unistr.h" +#include "unicode/uniset.h" +#include "unicode/uchar.h" +#include "unicode/uchriter.h" +#include "unicode/parsepos.h" +#include "unicode/parseerr.h" +#include "cmemory.h" +#include "cstring.h" + +#include "rbbirpt.h" // Contains state table for the rbbi rules parser. + // generated by a Perl script. +#include "rbbirb57.h" +#include "rbbinode.h" +#include "rbbiscan57.h" +#include "rbbitblb57.h" + +#include "uassert.h" + +//------------------------------------------------------------------------------ +// +// Unicode Set init strings for each of the character classes needed for parsing a rule file. +// (Initialized with hex values for portability to EBCDIC based machines. +// Really ugly, but there's no good way to avoid it.) +// +// The sets are referred to by name in the rbbirpt.txt, which is the +// source form of the state transition table for the RBBI rule parser. +// +//------------------------------------------------------------------------------ +static const UChar gRuleSet_rule_char_pattern[] = { + // [ ^ [ \ p { Z } \ u 0 0 2 0 + 0x5b, 0x5e, 0x5b, 0x5c, 0x70, 0x7b, 0x5a, 0x7d, 0x5c, 0x75, 0x30, 0x30, 0x32, 0x30, + // - \ u 0 0 7 f ] - [ \ p + 0x2d, 0x5c, 0x75, 0x30, 0x30, 0x37, 0x66, 0x5d, 0x2d, 0x5b, 0x5c, 0x70, + // { L } ] - [ \ p { N } ] ] + 0x7b, 0x4c, 0x7d, 0x5d, 0x2d, 0x5b, 0x5c, 0x70, 0x7b, 0x4e, 0x7d, 0x5d, 0x5d, 0}; + +static const UChar gRuleSet_name_char_pattern[] = { +// [ _ \ p { L } \ p { N } ] + 0x5b, 0x5f, 0x5c, 0x70, 0x7b, 0x4c, 0x7d, 0x5c, 0x70, 0x7b, 0x4e, 0x7d, 0x5d, 0}; + +static const UChar gRuleSet_digit_char_pattern[] = { +// [ 0 - 9 ] + 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0}; + +static const UChar gRuleSet_name_start_char_pattern[] = { +// [ _ \ p { L } ] + 0x5b, 0x5f, 0x5c, 0x70, 0x7b, 0x4c, 0x7d, 0x5d, 0 }; + +static const UChar kAny[] = {0x61, 0x6e, 0x79, 0x00}; // "any" + + +U_CDECL_BEGIN +static void U_CALLCONV RBBISetTable_deleter(void *p) { + icu::RBBISetTableEl *px = (icu::RBBISetTableEl *)p; + delete px->key; + // Note: px->val is owned by the linked list "fSetsListHead" in scanner. + // Don't delete the value nodes here. + uprv_free(px); +} +U_CDECL_END + +U_NAMESPACE_BEGIN + +//------------------------------------------------------------------------------ +// +// Constructor. +// +//------------------------------------------------------------------------------ +RBBIRuleScanner57::RBBIRuleScanner57(RBBIRuleBuilder57 *rb) +{ + fRB = rb; + fScanIndex = 0; + fNextIndex = 0; + fQuoteMode = FALSE; + fLineNum = 1; + fCharNum = 0; + fLastChar = 0; + + fStateTable = NULL; + fStack[0] = 0; + fStackPtr = 0; + fNodeStack[0] = NULL; + fNodeStackPtr = 0; + + fReverseRule = FALSE; + fLookAheadRule = FALSE; + fNoChainInRule = FALSE; + + fSymbolTable = NULL; + fSetTable = NULL; + fRuleNum = 0; + fOptionStart = 0; + + // Do not check status until after all critical fields are sufficiently initialized + // that the destructor can run cleanly. + if (U_FAILURE(*rb->fStatus)) { + return; + } + + // + // Set up the constant Unicode Sets. + // Note: These could be made static, lazily initialized, and shared among + // all instances of RBBIRuleScanners. BUT this is quite a bit simpler, + // and the time to build these few sets should be small compared to a + // full break iterator build. + fRuleSets[kRuleSet_rule_char-128] + = UnicodeSet(UnicodeString(gRuleSet_rule_char_pattern), *rb->fStatus); + // fRuleSets[kRuleSet_white_space-128] = [:Pattern_White_Space:] + fRuleSets[kRuleSet_white_space-128]. + add(9, 0xd).add(0x20).add(0x85).add(0x200e, 0x200f).add(0x2028, 0x2029); + fRuleSets[kRuleSet_name_char-128] + = UnicodeSet(UnicodeString(gRuleSet_name_char_pattern), *rb->fStatus); + fRuleSets[kRuleSet_name_start_char-128] + = UnicodeSet(UnicodeString(gRuleSet_name_start_char_pattern), *rb->fStatus); + fRuleSets[kRuleSet_digit_char-128] + = UnicodeSet(UnicodeString(gRuleSet_digit_char_pattern), *rb->fStatus); + if (*rb->fStatus == U_ILLEGAL_ARGUMENT_ERROR) { + // This case happens if ICU's data is missing. UnicodeSet tries to look up property + // names from the init string, can't find them, and claims an illegal argument. + // Change the error so that the actual problem will be clearer to users. + *rb->fStatus = U_BRK_INIT_ERROR; + } + if (U_FAILURE(*rb->fStatus)) { + return; + } + + fSymbolTable = new RBBISymbolTable57(this, rb->fRules, *rb->fStatus); + if (fSymbolTable == NULL) { + *rb->fStatus = U_MEMORY_ALLOCATION_ERROR; + return; + } + fSetTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, rb->fStatus); + if (U_FAILURE(*rb->fStatus)) { + return; + } + uhash_setValueDeleter(fSetTable, RBBISetTable_deleter); +} + + + +//------------------------------------------------------------------------------ +// +// Destructor +// +//------------------------------------------------------------------------------ +RBBIRuleScanner57::~RBBIRuleScanner57() { + delete fSymbolTable; + if (fSetTable != NULL) { + uhash_close(fSetTable); + fSetTable = NULL; + + } + + + // Node Stack. + // Normally has one entry, which is the entire parse tree for the rules. + // If errors occured, there may be additional subtrees left on the stack. + while (fNodeStackPtr > 0) { + delete fNodeStack[fNodeStackPtr]; + fNodeStackPtr--; + } + +} + +//------------------------------------------------------------------------------ +// +// doParseAction Do some action during rule parsing. +// Called by the parse state machine. +// Actions build the parse tree and Unicode Sets, +// and maintain the parse stack for nested expressions. +// +// TODO: unify EParseAction and RBBI_RuleParseAction enum types. +// They represent exactly the same thing. They're separate +// only to work around enum forward declaration restrictions +// in some compilers, while at the same time avoiding multiple +// definitions problems. I'm sure that there's a better way. +// +//------------------------------------------------------------------------------ +UBool RBBIRuleScanner57::doParseActions(int32_t action) +{ + RBBINode *n = NULL; + + UBool returnVal = TRUE; + + switch (action) { + + case doExprStart: + pushNewNode(RBBINode::opStart); + fRuleNum++; + break; + + + case doNoChain: + // Scanned a '^' while on the rule start state. + fNoChainInRule = TRUE; + break; + + + case doExprOrOperator: + { + fixOpStack(RBBINode::precOpCat); + RBBINode *operandNode = fNodeStack[fNodeStackPtr--]; + RBBINode *orNode = pushNewNode(RBBINode::opOr); + if (U_FAILURE(*fRB->fStatus)) { + break; + } + orNode->fLeftChild = operandNode; + operandNode->fParent = orNode; + } + break; + + case doExprCatOperator: + // concatenation operator. + // For the implicit concatenation of adjacent terms in an expression that are + // not separated by any other operator. Action is invoked between the + // actions for the two terms. + { + fixOpStack(RBBINode::precOpCat); + RBBINode *operandNode = fNodeStack[fNodeStackPtr--]; + RBBINode *catNode = pushNewNode(RBBINode::opCat); + if (U_FAILURE(*fRB->fStatus)) { + break; + } + catNode->fLeftChild = operandNode; + operandNode->fParent = catNode; + } + break; + + case doLParen: + // Open Paren. + // The openParen node is a dummy operation type with a low precedence, + // which has the affect of ensuring that any real binary op that + // follows within the parens binds more tightly to the operands than + // stuff outside of the parens. + pushNewNode(RBBINode::opLParen); + break; + + case doExprRParen: + fixOpStack(RBBINode::precLParen); + break; + + case doNOP: + break; + + case doStartAssign: + // We've just scanned "$variable = " + // The top of the node stack has the $variable ref node. + + // Save the start position of the RHS text in the StartExpression node + // that precedes the $variableReference node on the stack. + // This will eventually be used when saving the full $variable replacement + // text as a string. + n = fNodeStack[fNodeStackPtr-1]; + n->fFirstPos = fNextIndex; // move past the '=' + + // Push a new start-of-expression node; needed to keep parse of the + // RHS expression happy. + pushNewNode(RBBINode::opStart); + break; + + + + + case doEndAssign: + { + // We have reached the end of an assignement statement. + // Current scan char is the ';' that terminates the assignment. + + // Terminate expression, leaves expression parse tree rooted in TOS node. + fixOpStack(RBBINode::precStart); + + RBBINode *startExprNode = fNodeStack[fNodeStackPtr-2]; + RBBINode *varRefNode = fNodeStack[fNodeStackPtr-1]; + RBBINode *RHSExprNode = fNodeStack[fNodeStackPtr]; + + // Save original text of right side of assignment, excluding the terminating ';' + // in the root of the node for the right-hand-side expression. + RHSExprNode->fFirstPos = startExprNode->fFirstPos; + RHSExprNode->fLastPos = fScanIndex; + fRB->fRules.extractBetween(RHSExprNode->fFirstPos, RHSExprNode->fLastPos, RHSExprNode->fText); + + // Expression parse tree becomes l. child of the $variable reference node. + varRefNode->fLeftChild = RHSExprNode; + RHSExprNode->fParent = varRefNode; + + // Make a symbol table entry for the $variableRef node. + fSymbolTable->addEntry(varRefNode->fText, varRefNode, *fRB->fStatus); + if (U_FAILURE(*fRB->fStatus)) { + // This is a round-about way to get the parse position set + // so that duplicate symbols error messages include a line number. + UErrorCode t = *fRB->fStatus; + *fRB->fStatus = U_ZERO_ERROR; + error(t); + } + + // Clean up the stack. + delete startExprNode; + fNodeStackPtr-=3; + break; + } + + case doEndOfRule: + { + fixOpStack(RBBINode::precStart); // Terminate expression, leaves expression + if (U_FAILURE(*fRB->fStatus)) { // parse tree rooted in TOS node. + break; + } +#ifdef RBBI_DEBUG + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "rtree")) {printNodeStack("end of rule");} +#endif + U_ASSERT(fNodeStackPtr == 1); + RBBINode *thisRule = fNodeStack[fNodeStackPtr]; + + // If this rule includes a look-ahead '/', add a endMark node to the + // expression tree. + if (fLookAheadRule) { + RBBINode *endNode = pushNewNode(RBBINode::endMark); + RBBINode *catNode = pushNewNode(RBBINode::opCat); + if (U_FAILURE(*fRB->fStatus)) { + break; + } + fNodeStackPtr -= 2; + catNode->fLeftChild = thisRule; + catNode->fRightChild = endNode; + fNodeStack[fNodeStackPtr] = catNode; + endNode->fVal = fRuleNum; + endNode->fLookAheadEnd = TRUE; + thisRule = catNode; + + // TODO: Disable chaining out of look-ahead (hard break) rules. + // The break on rule match is forced, so there is no point in building up + // the state table to chain into another rule for a longer match. + } + + // Mark this node as being the root of a rule. + thisRule->fRuleRoot = TRUE; + + // Flag if chaining into this rule is wanted. + // + if (fRB->fChainRules && // If rule chaining is enabled globally via !!chain + !fNoChainInRule) { // and no '^' chain-in inhibit was on this rule + thisRule->fChainIn = TRUE; + } + + + // All rule expressions are ORed together. + // The ';' that terminates an expression really just functions as a '|' with + // a low operator prededence. + // + // Each of the four sets of rules are collected separately. + // (forward, reverse, safe_forward, safe_reverse) + // OR this rule into the appropriate group of them. + // + RBBINode **destRules = (fReverseRule? &fRB->fReverseTree : fRB->fDefaultTree); + + if (*destRules != NULL) { + // This is not the first rule encounted. + // OR previous stuff (from *destRules) + // with the current rule expression (on the Node Stack) + // with the resulting OR expression going to *destRules + // + RBBINode *thisRule = fNodeStack[fNodeStackPtr]; + RBBINode *prevRules = *destRules; + RBBINode *orNode = pushNewNode(RBBINode::opOr); + if (U_FAILURE(*fRB->fStatus)) { + break; + } + orNode->fLeftChild = prevRules; + prevRules->fParent = orNode; + orNode->fRightChild = thisRule; + thisRule->fParent = orNode; + *destRules = orNode; + } + else + { + // This is the first rule encountered (for this direction). + // Just move its parse tree from the stack to *destRules. + *destRules = fNodeStack[fNodeStackPtr]; + } + fReverseRule = FALSE; // in preparation for the next rule. + fLookAheadRule = FALSE; + fNoChainInRule = FALSE; + fNodeStackPtr = 0; + } + break; + + + case doRuleError: + error(U_BRK_RULE_SYNTAX); + returnVal = FALSE; + break; + + + case doVariableNameExpectedErr: + error(U_BRK_RULE_SYNTAX); + break; + + + // + // Unary operands + ? * + // These all appear after the operand to which they apply. + // When we hit one, the operand (may be a whole sub expression) + // will be on the top of the stack. + // Unary Operator becomes TOS, with the old TOS as its one child. + case doUnaryOpPlus: + { + RBBINode *operandNode = fNodeStack[fNodeStackPtr--]; + RBBINode *plusNode = pushNewNode(RBBINode::opPlus); + if (U_FAILURE(*fRB->fStatus)) { + break; + } + plusNode->fLeftChild = operandNode; + operandNode->fParent = plusNode; + } + break; + + case doUnaryOpQuestion: + { + RBBINode *operandNode = fNodeStack[fNodeStackPtr--]; + RBBINode *qNode = pushNewNode(RBBINode::opQuestion); + if (U_FAILURE(*fRB->fStatus)) { + break; + } + qNode->fLeftChild = operandNode; + operandNode->fParent = qNode; + } + break; + + case doUnaryOpStar: + { + RBBINode *operandNode = fNodeStack[fNodeStackPtr--]; + RBBINode *starNode = pushNewNode(RBBINode::opStar); + if (U_FAILURE(*fRB->fStatus)) { + break; + } + starNode->fLeftChild = operandNode; + operandNode->fParent = starNode; + } + break; + + case doRuleChar: + // A "Rule Character" is any single character that is a literal part + // of the regular expression. Like a, b and c in the expression "(abc*) | [:L:]" + // These are pretty uncommon in break rules; the terms are more commonly + // sets. To keep things uniform, treat these characters like as + // sets that just happen to contain only one character. + { + n = pushNewNode(RBBINode::setRef); + if (U_FAILURE(*fRB->fStatus)) { + break; + } + findSetFor(UnicodeString(fC.fChar), n); + n->fFirstPos = fScanIndex; + n->fLastPos = fNextIndex; + fRB->fRules.extractBetween(n->fFirstPos, n->fLastPos, n->fText); + break; + } + + case doDotAny: + // scanned a ".", meaning match any single character. + { + n = pushNewNode(RBBINode::setRef); + if (U_FAILURE(*fRB->fStatus)) { + break; + } + findSetFor(UnicodeString(TRUE, kAny, 3), n); + n->fFirstPos = fScanIndex; + n->fLastPos = fNextIndex; + fRB->fRules.extractBetween(n->fFirstPos, n->fLastPos, n->fText); + break; + } + + case doSlash: + // Scanned a '/', which identifies a look-ahead break position in a rule. + n = pushNewNode(RBBINode::lookAhead); + if (U_FAILURE(*fRB->fStatus)) { + break; + } + n->fVal = fRuleNum; + n->fFirstPos = fScanIndex; + n->fLastPos = fNextIndex; + fRB->fRules.extractBetween(n->fFirstPos, n->fLastPos, n->fText); + fLookAheadRule = TRUE; + break; + + + case doStartTagValue: + // Scanned a '{', the opening delimiter for a tag value within a rule. + n = pushNewNode(RBBINode::tag); + if (U_FAILURE(*fRB->fStatus)) { + break; + } + n->fVal = 0; + n->fFirstPos = fScanIndex; + n->fLastPos = fNextIndex; + break; + + case doTagDigit: + // Just scanned a decimal digit that's part of a tag value + { + n = fNodeStack[fNodeStackPtr]; + uint32_t v = u_charDigitValue(fC.fChar); + U_ASSERT(v < 10); + n->fVal = n->fVal*10 + v; + break; + } + + case doTagValue: + n = fNodeStack[fNodeStackPtr]; + n->fLastPos = fNextIndex; + fRB->fRules.extractBetween(n->fFirstPos, n->fLastPos, n->fText); + break; + + case doTagExpectedError: + error(U_BRK_MALFORMED_RULE_TAG); + returnVal = FALSE; + break; + + case doOptionStart: + // Scanning a !!option. At the start of string. + fOptionStart = fScanIndex; + break; + + case doOptionEnd: + { + UnicodeString opt(fRB->fRules, fOptionStart, fScanIndex-fOptionStart); + if (opt == UNICODE_STRING("chain", 5)) { + fRB->fChainRules = TRUE; + } else if (opt == UNICODE_STRING("LBCMNoChain", 11)) { + fRB->fLBCMNoChain = TRUE; + } else if (opt == UNICODE_STRING("RINoChain", 9)) { + fRB->fRINoChain = TRUE; + } else if (opt == UNICODE_STRING("forward", 7)) { + fRB->fDefaultTree = &fRB->fForwardTree; + } else if (opt == UNICODE_STRING("reverse", 7)) { + fRB->fDefaultTree = &fRB->fReverseTree; + } else if (opt == UNICODE_STRING("safe_forward", 12)) { + fRB->fDefaultTree = &fRB->fSafeFwdTree; + } else if (opt == UNICODE_STRING("safe_reverse", 12)) { + fRB->fDefaultTree = &fRB->fSafeRevTree; + } else if (opt == UNICODE_STRING("lookAheadHardBreak", 18)) { + fRB->fLookAheadHardBreak = TRUE; + } else { + error(U_BRK_UNRECOGNIZED_OPTION); + } + } + break; + + case doReverseDir: + fReverseRule = TRUE; + break; + + case doStartVariableName: + n = pushNewNode(RBBINode::varRef); + if (U_FAILURE(*fRB->fStatus)) { + break; + } + n->fFirstPos = fScanIndex; + break; + + case doEndVariableName: + n = fNodeStack[fNodeStackPtr]; + if (n==NULL || n->fType != RBBINode::varRef) { + error(U_BRK_INTERNAL_ERROR); + break; + } + n->fLastPos = fScanIndex; + fRB->fRules.extractBetween(n->fFirstPos+1, n->fLastPos, n->fText); + // Look the newly scanned name up in the symbol table + // If there's an entry, set the l. child of the var ref to the replacement expression. + // (We also pass through here when scanning assignments, but no harm is done, other + // than a slight wasted effort that seems hard to avoid. Lookup will be null) + n->fLeftChild = fSymbolTable->lookupNode(n->fText); + break; + + case doCheckVarDef: + n = fNodeStack[fNodeStackPtr]; + if (n->fLeftChild == NULL) { + error(U_BRK_UNDEFINED_VARIABLE); + returnVal = FALSE; + } + break; + + case doExprFinished: + break; + + case doRuleErrorAssignExpr: + error(U_BRK_ASSIGN_ERROR); + returnVal = FALSE; + break; + + case doExit: + returnVal = FALSE; + break; + + case doScanUnicodeSet: + scanSet(); + break; + + default: + error(U_BRK_INTERNAL_ERROR); + returnVal = FALSE; + break; + } + return returnVal && U_SUCCESS(*fRB->fStatus); +} + + + + +//------------------------------------------------------------------------------ +// +// Error Report a rule parse error. +// Only report it if no previous error has been recorded. +// +//------------------------------------------------------------------------------ +void RBBIRuleScanner57::error(UErrorCode e) { + if (U_SUCCESS(*fRB->fStatus)) { + *fRB->fStatus = e; + if (fRB->fParseError) { + fRB->fParseError->line = fLineNum; + fRB->fParseError->offset = fCharNum; + fRB->fParseError->preContext[0] = 0; + fRB->fParseError->postContext[0] = 0; + } + } +} + + + + +//------------------------------------------------------------------------------ +// +// fixOpStack The parse stack holds partially assembled chunks of the parse tree. +// An entry on the stack may be as small as a single setRef node, +// or as large as the parse tree +// for an entire expression (this will be the one item left on the stack +// when the parsing of an RBBI rule completes. +// +// This function is called when a binary operator is encountered. +// It looks back up the stack for operators that are not yet associated +// with a right operand, and if the precedence of the stacked operator >= +// the precedence of the current operator, binds the operand left, +// to the previously encountered operator. +// +//------------------------------------------------------------------------------ +void RBBIRuleScanner57::fixOpStack(RBBINode::OpPrecedence p) { + RBBINode *n; + // printNodeStack("entering fixOpStack()"); + for (;;) { + n = fNodeStack[fNodeStackPtr-1]; // an operator node + if (n->fPrecedence == 0) { + RBBIDebugPuts("RBBIRuleScanner57::fixOpStack, bad operator node"); + error(U_BRK_INTERNAL_ERROR); + return; + } + + if (n->fPrecedence < p || n->fPrecedence <= RBBINode::precLParen) { + // The most recent operand goes with the current operator, + // not with the previously stacked one. + break; + } + // Stack operator is a binary op ( '|' or concatenation) + // TOS operand becomes right child of this operator. + // Resulting subexpression becomes the TOS operand. + n->fRightChild = fNodeStack[fNodeStackPtr]; + fNodeStack[fNodeStackPtr]->fParent = n; + fNodeStackPtr--; + // printNodeStack("looping in fixOpStack() "); + } + + if (p <= RBBINode::precLParen) { + // Scan is at a right paren or end of expression. + // The scanned item must match the stack, or else there was an error. + // Discard the left paren (or start expr) node from the stack, + // leaving the completed (sub)expression as TOS. + if (n->fPrecedence != p) { + // Right paren encountered matched start of expression node, or + // end of expression matched with a left paren node. + error(U_BRK_MISMATCHED_PAREN); + } + fNodeStack[fNodeStackPtr-1] = fNodeStack[fNodeStackPtr]; + fNodeStackPtr--; + // Delete the now-discarded LParen or Start node. + delete n; + } + // printNodeStack("leaving fixOpStack()"); +} + + + + +//------------------------------------------------------------------------------ +// +// findSetFor given a UnicodeString, +// - find the corresponding Unicode Set (uset node) +// (create one if necessary) +// - Set fLeftChild of the caller's node (should be a setRef node) +// to the uset node +// Maintain a hash table of uset nodes, so the same one is always used +// for the same string. +// If a "to adopt" set is provided and we haven't seen this key before, +// add the provided set to the hash table. +// If the string is one (32 bit) char in length, the set contains +// just one element which is the char in question. +// If the string is "any", return a set containing all chars. +// +//------------------------------------------------------------------------------ +void RBBIRuleScanner57::findSetFor(const UnicodeString &s, RBBINode *node, UnicodeSet *setToAdopt) { + + RBBISetTableEl *el; + + // First check whether we've already cached a set for this string. + // If so, just use the cached set in the new node. + // delete any set provided by the caller, since we own it. + el = (RBBISetTableEl *)uhash_get(fSetTable, &s); + if (el != NULL) { + delete setToAdopt; + node->fLeftChild = el->val; + U_ASSERT(node->fLeftChild->fType == RBBINode::uset); + return; + } + + // Haven't seen this set before. + // If the caller didn't provide us with a prebuilt set, + // create a new UnicodeSet now. + if (setToAdopt == NULL) { + if (s.compare(kAny, -1) == 0) { + setToAdopt = new UnicodeSet(0x000000, 0x10ffff); + } else { + UChar32 c; + c = s.char32At(0); + setToAdopt = new UnicodeSet(c, c); + } + } + + // + // Make a new uset node to refer to this UnicodeSet + // This new uset node becomes the child of the caller's setReference node. + // + RBBINode *usetNode = new RBBINode(RBBINode::uset); + if (usetNode == NULL) { + error(U_MEMORY_ALLOCATION_ERROR); + return; + } + usetNode->fInputSet = setToAdopt; + usetNode->fParent = node; + node->fLeftChild = usetNode; + usetNode->fText = s; + + + // + // Add the new uset node to the list of all uset nodes. + // + fRB->fUSetNodes->addElement(usetNode, *fRB->fStatus); + + + // + // Add the new set to the set hash table. + // + el = (RBBISetTableEl *)uprv_malloc(sizeof(RBBISetTableEl)); + UnicodeString *tkey = new UnicodeString(s); + if (tkey == NULL || el == NULL || setToAdopt == NULL) { + // Delete to avoid memory leak + delete tkey; + tkey = NULL; + uprv_free(el); + el = NULL; + delete setToAdopt; + setToAdopt = NULL; + + error(U_MEMORY_ALLOCATION_ERROR); + return; + } + el->key = tkey; + el->val = usetNode; + uhash_put(fSetTable, el->key, el, fRB->fStatus); + + return; +} + + + +// +// Assorted Unicode character constants. +// Numeric because there is no portable way to enter them as literals. +// (Think EBCDIC). +// +static const UChar chCR = 0x0d; // New lines, for terminating comments. +static const UChar chLF = 0x0a; +static const UChar chNEL = 0x85; // NEL newline variant +static const UChar chLS = 0x2028; // Unicode Line Separator +static const UChar chApos = 0x27; // single quote, for quoted chars. +static const UChar chPound = 0x23; // '#', introduces a comment. +static const UChar chBackSlash = 0x5c; // '\' introduces a char escape +static const UChar chLParen = 0x28; +static const UChar chRParen = 0x29; + + +//------------------------------------------------------------------------------ +// +// stripRules Return a rules string without unnecessary +// characters. +// +//------------------------------------------------------------------------------ +UnicodeString RBBIRuleScanner57::stripRules(const UnicodeString &rules) { + UnicodeString strippedRules; + int rulesLength = rules.length(); + for (int idx = 0; idx < rulesLength; ) { + UChar ch = rules[idx++]; + if (ch == chPound) { + while (idx < rulesLength + && ch != chCR && ch != chLF && ch != chNEL) + { + ch = rules[idx++]; + } + } + if (!u_isISOControl(ch)) { + strippedRules.append(ch); + } + } + // strippedRules = strippedRules.unescape(); + return strippedRules; +} + + +//------------------------------------------------------------------------------ +// +// nextCharLL Low Level Next Char from rule input source. +// Get a char from the input character iterator, +// keep track of input position for error reporting. +// +//------------------------------------------------------------------------------ +UChar32 RBBIRuleScanner57::nextCharLL() { + UChar32 ch; + + if (fNextIndex >= fRB->fRules.length()) { + return (UChar32)-1; + } + ch = fRB->fRules.char32At(fNextIndex); + fNextIndex = fRB->fRules.moveIndex32(fNextIndex, 1); + + if (ch == chCR || + ch == chNEL || + ch == chLS || + (ch == chLF && fLastChar != chCR)) { + // Character is starting a new line. Bump up the line number, and + // reset the column to 0. + fLineNum++; + fCharNum=0; + if (fQuoteMode) { + error(U_BRK_NEW_LINE_IN_QUOTED_STRING); + fQuoteMode = FALSE; + } + } + else { + // Character is not starting a new line. Except in the case of a + // LF following a CR, increment the column position. + if (ch != chLF) { + fCharNum++; + } + } + fLastChar = ch; + return ch; +} + + +//------------------------------------------------------------------------------ +// +// nextChar for rules scanning. At this level, we handle stripping +// out comments and processing backslash character escapes. +// The rest of the rules grammar is handled at the next level up. +// +//------------------------------------------------------------------------------ +void RBBIRuleScanner57::nextChar(RBBIRuleChar &c) { + + // Unicode Character constants needed for the processing done by nextChar(), + // in hex because literals wont work on EBCDIC machines. + + fScanIndex = fNextIndex; + c.fChar = nextCharLL(); + c.fEscaped = FALSE; + + // + // check for '' sequence. + // These are recognized in all contexts, whether in quoted text or not. + // + if (c.fChar == chApos) { + if (fRB->fRules.char32At(fNextIndex) == chApos) { + c.fChar = nextCharLL(); // get nextChar officially so character counts + c.fEscaped = TRUE; // stay correct. + } + else + { + // Single quote, by itself. + // Toggle quoting mode. + // Return either '(' or ')', because quotes cause a grouping of the quoted text. + fQuoteMode = !fQuoteMode; + if (fQuoteMode == TRUE) { + c.fChar = chLParen; + } else { + c.fChar = chRParen; + } + c.fEscaped = FALSE; // The paren that we return is not escaped. + return; + } + } + + if (fQuoteMode) { + c.fEscaped = TRUE; + } + else + { + // We are not in a 'quoted region' of the source. + // + if (c.fChar == chPound) { + // Start of a comment. Consume the rest of it. + // The new-line char that terminates the comment is always returned. + // It will be treated as white-space, and serves to break up anything + // that might otherwise incorrectly clump together with a comment in + // the middle (a variable name, for example.) + for (;;) { + c.fChar = nextCharLL(); + if (c.fChar == (UChar32)-1 || // EOF + c.fChar == chCR || + c.fChar == chLF || + c.fChar == chNEL || + c.fChar == chLS) {break;} + } + } + if (c.fChar == (UChar32)-1) { + return; + } + + // + // check for backslash escaped characters. + // Use UnicodeString::unescapeAt() to handle them. + // + if (c.fChar == chBackSlash) { + c.fEscaped = TRUE; + int32_t startX = fNextIndex; + c.fChar = fRB->fRules.unescapeAt(fNextIndex); + if (fNextIndex == startX) { + error(U_BRK_HEX_DIGITS_EXPECTED); + } + fCharNum += fNextIndex-startX; + } + } + // putc(c.fChar, stdout); +} + +//------------------------------------------------------------------------------ +// +// Parse RBBI rules. The state machine for rules parsing is here. +// The state tables are hand-written in the file rbbirpt.txt, +// and converted to the form used here by a perl +// script rbbicst.pl +// +//------------------------------------------------------------------------------ +void RBBIRuleScanner57::parse() { + uint16_t state; + const RBBIRuleTableEl *tableEl; + + if (U_FAILURE(*fRB->fStatus)) { + return; + } + + state = 1; + nextChar(fC); + // + // Main loop for the rule parsing state machine. + // Runs once per state transition. + // Each time through optionally performs, depending on the state table, + // - an advance to the the next input char + // - an action to be performed. + // - pushing or popping a state to/from the local state return stack. + // + for (;;) { + // Bail out if anything has gone wrong. + // RBBI rule file parsing stops on the first error encountered. + if (U_FAILURE(*fRB->fStatus)) { + break; + } + + // Quit if state == 0. This is the normal way to exit the state machine. + // + if (state == 0) { + break; + } + + // Find the state table element that matches the input char from the rule, or the + // class of the input character. Start with the first table row for this + // state, then linearly scan forward until we find a row that matches the + // character. The last row for each state always matches all characters, so + // the search will stop there, if not before. + // + tableEl = &gRuleParseStateTable[state]; + #ifdef RBBI_DEBUG + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "scan")) { + RBBIDebugPrintf("char, line, col = (\'%c\', %d, %d) state=%s ", + fC.fChar, fLineNum, fCharNum, RBBIRuleStateNames[state]); + } + #endif + + for (;;) { + #ifdef RBBI_DEBUG + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "scan")) { RBBIDebugPrintf("."); fflush(stdout);} + #endif + if (tableEl->fCharClass < 127 && fC.fEscaped == FALSE && tableEl->fCharClass == fC.fChar) { + // Table row specified an individual character, not a set, and + // the input character is not escaped, and + // the input character matched it. + break; + } + if (tableEl->fCharClass == 255) { + // Table row specified default, match anything character class. + break; + } + if (tableEl->fCharClass == 254 && fC.fEscaped) { + // Table row specified "escaped" and the char was escaped. + break; + } + if (tableEl->fCharClass == 253 && fC.fEscaped && + (fC.fChar == 0x50 || fC.fChar == 0x70 )) { + // Table row specified "escaped P" and the char is either 'p' or 'P'. + break; + } + if (tableEl->fCharClass == 252 && fC.fChar == (UChar32)-1) { + // Table row specified eof and we hit eof on the input. + break; + } + + if (tableEl->fCharClass >= 128 && tableEl->fCharClass < 240 && // Table specs a char class && + fC.fEscaped == FALSE && // char is not escaped && + fC.fChar != (UChar32)-1) { // char is not EOF + U_ASSERT((tableEl->fCharClass-128) < UPRV_LENGTHOF(fRuleSets)); + if (fRuleSets[tableEl->fCharClass-128].contains(fC.fChar)) { + // Table row specified a character class, or set of characters, + // and the current char matches it. + break; + } + } + + // No match on this row, advance to the next row for this state, + tableEl++; + } + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "scan")) { RBBIDebugPuts("");} + + // + // We've found the row of the state table that matches the current input + // character from the rules string. + // Perform any action specified by this row in the state table. + if (doParseActions((int32_t)tableEl->fAction) == FALSE) { + // Break out of the state machine loop if the + // the action signalled some kind of error, or + // the action was to exit, occurs on normal end-of-rules-input. + break; + } + + if (tableEl->fPushState != 0) { + fStackPtr++; + if (fStackPtr >= kStackSize) { + error(U_BRK_INTERNAL_ERROR); + RBBIDebugPuts("RBBIRuleScanner57::parse() - state stack overflow."); + fStackPtr--; + } + fStack[fStackPtr] = tableEl->fPushState; + } + + if (tableEl->fNextChar) { + nextChar(fC); + } + + // Get the next state from the table entry, or from the + // state stack if the next state was specified as "pop". + if (tableEl->fNextState != 255) { + state = tableEl->fNextState; + } else { + state = fStack[fStackPtr]; + fStackPtr--; + if (fStackPtr < 0) { + error(U_BRK_INTERNAL_ERROR); + RBBIDebugPuts("RBBIRuleScanner57::parse() - state stack underflow."); + fStackPtr++; + } + } + + } + + // + // If there were NO user specified reverse rules, set up the equivalent of ".*;" + // + if (fRB->fReverseTree == NULL) { + fRB->fReverseTree = pushNewNode(RBBINode::opStar); + RBBINode *operand = pushNewNode(RBBINode::setRef); + if (U_FAILURE(*fRB->fStatus)) { + return; + } + findSetFor(UnicodeString(TRUE, kAny, 3), operand); + fRB->fReverseTree->fLeftChild = operand; + operand->fParent = fRB->fReverseTree; + fNodeStackPtr -= 2; + } + + + // + // Parsing of the input RBBI rules is complete. + // We now have a parse tree for the rule expressions + // and a list of all UnicodeSets that are referenced. + // +#ifdef RBBI_DEBUG + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "symbols")) {fSymbolTable->rbbiSymtablePrint();} + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "ptree")) + { + RBBIDebugPrintf("Completed Forward Rules Parse Tree...\n"); + fRB->fForwardTree->printTree(TRUE); + RBBIDebugPrintf("\nCompleted Reverse Rules Parse Tree...\n"); + fRB->fReverseTree->printTree(TRUE); + RBBIDebugPrintf("\nCompleted Safe Point Forward Rules Parse Tree...\n"); + fRB->fSafeFwdTree->printTree(TRUE); + RBBIDebugPrintf("\nCompleted Safe Point Reverse Rules Parse Tree...\n"); + fRB->fSafeRevTree->printTree(TRUE); + } +#endif +} + + +//------------------------------------------------------------------------------ +// +// printNodeStack for debugging... +// +//------------------------------------------------------------------------------ +#ifdef RBBI_DEBUG +void RBBIRuleScanner57::printNodeStack(const char *title) { + int i; + RBBIDebugPrintf("%s. Dumping node stack...\n", title); + for (i=fNodeStackPtr; i>0; i--) {fNodeStack[i]->printTree(TRUE);} +} +#endif + + + + +//------------------------------------------------------------------------------ +// +// pushNewNode create a new RBBINode of the specified type and push it +// onto the stack of nodes. +// +//------------------------------------------------------------------------------ +RBBINode *RBBIRuleScanner57::pushNewNode(RBBINode::NodeType t) { + if (U_FAILURE(*fRB->fStatus)) { + return NULL; + } + fNodeStackPtr++; + if (fNodeStackPtr >= kStackSize) { + error(U_BRK_INTERNAL_ERROR); + RBBIDebugPuts("RBBIRuleScanner57::pushNewNode - stack overflow."); + *fRB->fStatus = U_BRK_INTERNAL_ERROR; + return NULL; + } + fNodeStack[fNodeStackPtr] = new RBBINode(t); + if (fNodeStack[fNodeStackPtr] == NULL) { + *fRB->fStatus = U_MEMORY_ALLOCATION_ERROR; + } + return fNodeStack[fNodeStackPtr]; +} + + + +//------------------------------------------------------------------------------ +// +// scanSet Construct a UnicodeSet from the text at the current scan +// position. Advance the scan position to the first character +// after the set. +// +// A new RBBI setref node referring to the set is pushed onto the node +// stack. +// +// The scan position is normally under the control of the state machine +// that controls rule parsing. UnicodeSets, however, are parsed by +// the UnicodeSet constructor, not by the RBBI rule parser. +// +//------------------------------------------------------------------------------ +void RBBIRuleScanner57::scanSet() { + UnicodeSet *uset; + ParsePosition pos; + int startPos; + int i; + + if (U_FAILURE(*fRB->fStatus)) { + return; + } + + pos.setIndex(fScanIndex); + startPos = fScanIndex; + UErrorCode localStatus = U_ZERO_ERROR; + uset = new UnicodeSet(); + if (uset == NULL) { + localStatus = U_MEMORY_ALLOCATION_ERROR; + } else { + uset->applyPatternIgnoreSpace(fRB->fRules, pos, fSymbolTable, localStatus); + } + if (U_FAILURE(localStatus)) { + // TODO: Get more accurate position of the error from UnicodeSet's return info. + // UnicodeSet appears to not be reporting correctly at this time. + #ifdef RBBI_DEBUG + RBBIDebugPrintf("UnicodeSet parse postion.ErrorIndex = %d\n", pos.getIndex()); + #endif + error(localStatus); + delete uset; + return; + } + + // Verify that the set contains at least one code point. + // + U_ASSERT(uset!=NULL); + if (uset->isEmpty()) { + // This set is empty. + // Make it an error, because it almost certainly is not what the user wanted. + // Also, avoids having to think about corner cases in the tree manipulation code + // that occurs later on. + error(U_BRK_RULE_EMPTY_SET); + delete uset; + return; + } + + + // Advance the RBBI parse postion over the UnicodeSet pattern. + // Don't just set fScanIndex because the line/char positions maintained + // for error reporting would be thrown off. + i = pos.getIndex(); + for (;;) { + if (fNextIndex >= i) { + break; + } + nextCharLL(); + } + + if (U_SUCCESS(*fRB->fStatus)) { + RBBINode *n; + + n = pushNewNode(RBBINode::setRef); + if (U_FAILURE(*fRB->fStatus)) { + return; + } + n->fFirstPos = startPos; + n->fLastPos = fNextIndex; + fRB->fRules.extractBetween(n->fFirstPos, n->fLastPos, n->fText); + // findSetFor() serves several purposes here: + // - Adopts storage for the UnicodeSet, will be responsible for deleting. + // - Mantains collection of all sets in use, needed later for establishing + // character categories for run time engine. + // - Eliminates mulitiple instances of the same set. + // - Creates a new uset node if necessary (if this isn't a duplicate.) + findSetFor(n->fText, n, uset); + } + +} + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/rbbiscan57.h b/icuSources/common/rbbiscan57.h new file mode 100644 index 00000000..c8ea7ace --- /dev/null +++ b/icuSources/common/rbbiscan57.h @@ -0,0 +1,168 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +// +// Copyright (C) 2002-2016, International Business Machines Corporation and others. +// All Rights Reserved. +// +/* +********************************************************************** +* Legacy version of RBBIRuleScanner from ICU 57, +* only for use by Apple RuleBasedTokenizer +********************************************************************** +*/ + + +#ifndef RBBISCAN57_H +#define RBBISCAN57_H + +#include "unicode/utypes.h" +#include "unicode/uobject.h" +#include "unicode/uniset.h" +#include "unicode/parseerr.h" +#include "uhash.h" +#include "uvector.h" +#include "unicode/symtable.h"// For UnicodeSet parsing, is the interface that + // looks up references to $variables within a set. +#include "rbbi57.h" +#include "rbbinode.h" +#include "rbbirpt.h" + +U_NAMESPACE_BEGIN + +class RBBIRuleBuilder57; +class RBBISymbolTable57; + + +//-------------------------------------------------------------------------------- +// +// class RBBIRuleScanner57 does the lowest level, character-at-a-time +// scanning of break iterator rules. +// +// The output of the scanner is parse trees for +// the rule expressions and a list of all Unicode Sets +// encountered. +// +//-------------------------------------------------------------------------------- + +class RBBIRuleScanner57 : public UMemory { +public: + + enum { + kStackSize = 100 // The size of the state stack for + }; // rules parsing. Corresponds roughly + // to the depth of parentheses nesting + // that is allowed in the rules. + + struct RBBIRuleChar { + UChar32 fChar; + UBool fEscaped; + RBBIRuleChar() : fChar(0), fEscaped(FALSE) {}; + }; + + RBBIRuleScanner57(RBBIRuleBuilder57 *rb); + + + virtual ~RBBIRuleScanner57(); + + void nextChar(RBBIRuleChar &c); // Get the next char from the input stream. + // Return false if at end. + + UBool push(const RBBIRuleChar &c); // Push (unget) one character. + // Only a single character may be pushed. + + void parse(); // Parse the rules, generating two parse + // trees, one each for the forward and + // reverse rules, + // and a list of UnicodeSets encountered. + + /** + * Return a rules string without unnecessary + * characters. + */ + static UnicodeString stripRules(const UnicodeString &rules); +private: + + UBool doParseActions(int32_t a); + void error(UErrorCode e); // error reporting convenience function. + void fixOpStack(RBBINode::OpPrecedence p); + // a character. + void findSetFor(const UnicodeString &s, RBBINode *node, UnicodeSet *setToAdopt = NULL); + + UChar32 nextCharLL(); +#ifdef RBBI_DEBUG + void printNodeStack(const char *title); +#endif + RBBINode *pushNewNode(RBBINode::NodeType t); + void scanSet(); + + + RBBIRuleBuilder57 *fRB; // The rule builder that we are part of. + + int32_t fScanIndex; // Index of current character being processed + // in the rule input string. + int32_t fNextIndex; // Index of the next character, which + // is the first character not yet scanned. + UBool fQuoteMode; // Scan is in a 'quoted region' + int32_t fLineNum; // Line number in input file. + int32_t fCharNum; // Char position within the line. + UChar32 fLastChar; // Previous char, needed to count CR-LF + // as a single line, not two. + + RBBIRuleChar fC; // Current char for parse state machine + // processing. + UnicodeString fVarName; // $variableName, valid when we've just + // scanned one. + + RBBIRuleTableEl **fStateTable; // State Transition Table for RBBI Rule + // parsing. index by p[state][char-class] + + uint16_t fStack[kStackSize]; // State stack, holds state pushes + int32_t fStackPtr; // and pops as specified in the state + // transition rules. + + RBBINode *fNodeStack[kStackSize]; // Node stack, holds nodes created + // during the parse of a rule + int32_t fNodeStackPtr; + + + UBool fReverseRule; // True if the rule currently being scanned + // is a reverse direction rule (if it + // starts with a '!') + + UBool fLookAheadRule; // True if the rule includes a '/' + // somewhere within it. + + UBool fNoChainInRule; // True if the current rule starts with a '^'. + + RBBISymbolTable57 *fSymbolTable; // symbol table, holds definitions of + // $variable symbols. + + UHashtable *fSetTable; // UnicocodeSet hash table, holds indexes to + // the sets created while parsing rules. + // The key is the string used for creating + // the set. + + UnicodeSet fRuleSets[10]; // Unicode Sets that are needed during + // the scanning of RBBI rules. The + // indicies for these are assigned by the + // perl script that builds the state tables. + // See rbbirpt.h. + + int32_t fRuleNum; // Counts each rule as it is scanned. + + int32_t fOptionStart; // Input index of start of a !!option + // keyword, while being scanned. + + UnicodeSet *gRuleSet_rule_char; + UnicodeSet *gRuleSet_white_space; + UnicodeSet *gRuleSet_name_char; + UnicodeSet *gRuleSet_name_start_char; + + RBBIRuleScanner57(const RBBIRuleScanner57 &other); // forbid copying of this class + RBBIRuleScanner57 &operator=(const RBBIRuleScanner57 &other); // forbid copying of this class +}; + +U_NAMESPACE_END + +#endif diff --git a/icuSources/common/rbbisetb.cpp b/icuSources/common/rbbisetb.cpp index f55388ae..36e2e07e 100644 --- a/icuSources/common/rbbisetb.cpp +++ b/icuSources/common/rbbisetb.cpp @@ -35,7 +35,7 @@ #if !UCONFIG_NO_BREAK_ITERATION #include "unicode/uniset.h" -#include "utrie.h" +#include "utrie2.h" #include "uvector.h" #include "uassert.h" #include "cmemory.h" @@ -44,43 +44,6 @@ #include "rbbisetb.h" #include "rbbinode.h" - -//------------------------------------------------------------------------ -// -// getFoldedRBBIValue Call-back function used during building of Trie table. -// Folding value: just store the offset (16 bits) -// if there is any non-0 entry. -// (It'd really be nice if the Trie builder would provide a -// simple default, so this function could go away from here.) -// -//------------------------------------------------------------------------ -/* folding value: just store the offset (16 bits) if there is any non-0 entry */ -U_CDECL_BEGIN -static uint32_t U_CALLCONV -getFoldedRBBIValue(UNewTrie *trie, UChar32 start, int32_t offset) { - uint32_t value; - UChar32 limit; - UBool inBlockZero; - - limit=start+0x400; - while(startfDebugEnv && uprv_strstr(fRB->fDebugEnv, "rgroup")) {printRangeGroups();} if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "esets")) {printSets();} +} - // - // Build the Trie table for mapping UChar32 values to the corresponding - // range group number - // - fTrie = utrie_open(NULL, // Pre-existing trie to be filled in - NULL, // Data array (utrie will allocate one) - 100000, // Max Data Length - 0, // Initial value for all code points - 0, // Lead surrogate unit value - TRUE); // Keep Latin 1 in separately +// +// Build the Trie table for mapping UChar32 values to the corresponding +// range group number. +// +void RBBISetBuilder::buildTrie() { + RangeDescriptor *rlRange; - for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) { - utrie_setRange32(fTrie, rlRange->fStartChar, rlRange->fEndChar+1, rlRange->fNum, TRUE); + fTrie = utrie2_open(0, // Initial value for all code points. + 0, // Error value for out-of-range input. + fStatus); + + for (rlRange = fRangeList; rlRange!=0 && U_SUCCESS(*fStatus); rlRange=rlRange->fNext) { + utrie2_setRange32(fTrie, + rlRange->fStartChar, // Range start + rlRange->fEndChar, // Range end (inclusive) + rlRange->fNum, // value for range + TRUE, // Overwrite previously written values + fStatus); } } +void RBBISetBuilder::mergeCategories(IntPair categories) { + U_ASSERT(categories.first >= 1); + U_ASSERT(categories.second > categories.first); + for (RangeDescriptor *rd = fRangeList; rd != nullptr; rd = rd->fNext) { + int32_t rangeNum = rd->fNum & ~DICT_BIT; + int32_t rangeDict = rd->fNum & DICT_BIT; + if (rangeNum == categories.second) { + rd->fNum = categories.first | rangeDict; + } else if (rangeNum > categories.second) { + rd->fNum--; + } + } + --fGroupCount; +} + //----------------------------------------------------------------------------------- // // getTrieSize() Return the size that will be required to serialize the Trie. // //----------------------------------------------------------------------------------- -int32_t RBBISetBuilder::getTrieSize() /*const*/ { - fTrieSize = utrie_serialize(fTrie, - NULL, // Buffer - 0, // Capacity - getFoldedRBBIValue, - TRUE, // Reduce to 16 bits - fStatus); +int32_t RBBISetBuilder::getTrieSize() { + if (U_FAILURE(*fStatus)) { + return 0; + } + utrie2_freeze(fTrie, UTRIE2_16_VALUE_BITS, fStatus); + fTrieSize = utrie2_serialize(fTrie, + NULL, // Buffer + 0, // Capacity + fStatus); + if (*fStatus == U_BUFFER_OVERFLOW_ERROR) { + *fStatus = U_ZERO_ERROR; + } // RBBIDebugPrintf("Trie table size is %d\n", trieSize); return fTrieSize; } @@ -327,12 +316,10 @@ int32_t RBBISetBuilder::getTrieSize() /*const*/ { // //----------------------------------------------------------------------------------- void RBBISetBuilder::serializeTrie(uint8_t *where) { - utrie_serialize(fTrie, - where, // Buffer - fTrieSize, // Capacity - getFoldedRBBIValue, - TRUE, // Reduce to 16 bits - fStatus); + utrie2_serialize(fTrie, + where, // Buffer + fTrieSize, // Capacity + fStatus); } //------------------------------------------------------------------------ @@ -480,7 +467,7 @@ void RBBISetBuilder::printRangeGroups() { lastPrintedGroupNum = groupNum; RBBIDebugPrintf("%2i ", groupNum); - if (rlRange->fNum & 0x4000) { RBBIDebugPrintf(" ");} + if (rlRange->fNum & DICT_BIT) { RBBIDebugPrintf(" ");} for (i=0; ifIncludesSets->size(); i++) { RBBINode *usetNode = (RBBINode *)rlRange->fIncludesSets->elementAt(i); @@ -673,20 +660,20 @@ void RangeDescriptor::split(UChar32 where, UErrorCode &status) { void RangeDescriptor::setDictionaryFlag() { int i; - for (i=0; ifIncludesSets->size(); i++) { - RBBINode *usetNode = (RBBINode *)fIncludesSets->elementAt(i); - UnicodeString setName; - RBBINode *setRef = usetNode->fParent; - if (setRef != NULL) { + static const char16_t *dictionary = u"dictionary"; + for (i=0; isize(); i++) { + RBBINode *usetNode = (RBBINode *)fIncludesSets->elementAt(i); + RBBINode *setRef = usetNode->fParent; + if (setRef != nullptr) { RBBINode *varRef = setRef->fParent; - if (varRef != NULL && varRef->fType == RBBINode::varRef) { - setName = varRef->fText; + if (varRef && varRef->fType == RBBINode::varRef) { + const UnicodeString *setName = &varRef->fText; + if (setName->compare(dictionary, -1) == 0) { + fNum |= RBBISetBuilder::DICT_BIT; + break; + } } } - if (setName.compare(UNICODE_STRING("dictionary", 10)) == 0) { // TODO: no string literals. - this->fNum |= 0x4000; - break; - } } } diff --git a/icuSources/common/rbbisetb.h b/icuSources/common/rbbisetb.h index a7d1e7af..ed6a76b1 100644 --- a/icuSources/common/rbbisetb.h +++ b/icuSources/common/rbbisetb.h @@ -13,12 +13,14 @@ #define RBBISETB_H #include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + #include "unicode/uobject.h" #include "rbbirb.h" +#include "utrie2.h" #include "uvector.h" -struct UNewTrie; - U_NAMESPACE_BEGIN // @@ -80,7 +82,8 @@ public: RBBISetBuilder(RBBIRuleBuilder *rb); ~RBBISetBuilder(); - void build(); + void buildRanges(); + void buildTrie(); void addValToSets(UVector *sets, uint32_t val); void addValToSet (RBBINode *usetNode, uint32_t val); int32_t getNumCharCategories() const; // CharCategories are the same as input symbol set to the @@ -91,6 +94,15 @@ public: UChar32 getFirstChar(int32_t val) const; UBool sawBOF() const; // Indicate whether any references to the {bof} pseudo // character were encountered. + /** + * Merge two character categories that have been identified as having equivalent behavior. + * The ranges belonging to the second category (table column) will be added to the first. + * @param categories the pair of categories to be merged. + */ + void mergeCategories(IntPair categories); + + static constexpr int32_t DICT_BIT = 0x4000; + #ifdef RBBI_DEBUG void printSets(); void printRanges(); @@ -109,8 +121,8 @@ private: RangeDescriptor *fRangeList; // Head of the linked list of RangeDescriptors - UNewTrie *fTrie; // The mapping TRIE that is the end result of processing - uint32_t fTrieSize; // the Unicode Sets. + UTrie2 *fTrie; // The mapping TRIE that is the end result of processing + uint32_t fTrieSize; // the Unicode Sets. // Groups correspond to character categories - // groups of ranges that are in the same original UnicodeSets. @@ -129,4 +141,7 @@ private: U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ + #endif diff --git a/icuSources/common/rbbisetb57.cpp b/icuSources/common/rbbisetb57.cpp new file mode 100644 index 00000000..bacf14fb --- /dev/null +++ b/icuSources/common/rbbisetb57.cpp @@ -0,0 +1,695 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +/* +*************************************************************************** +* Copyright (C) 2002-2008 International Business Machines Corporation * +* and others. All rights reserved. * +*************************************************************************** +*/ +// +// RBBISetBuilder57 Handles processing of Unicode Sets from RBBI rules +// (part of the rule building process.) +// +// Starting with the rules parse tree from the scanner, +// +// - Enumerate the set of UnicodeSets that are referenced +// by the RBBI rules. +// - compute a set of non-overlapping character ranges +// with all characters within a range belonging to the same +// set of input uniocde sets. +// - Derive a set of non-overlapping UnicodeSet (like things) +// that will correspond to columns in the state table for +// the RBBI execution engine. All characters within one +// of these sets belong to the same set of the original +// UnicodeSets from the user's rules. +// - construct the trie table that maps input characters +// to the index of the matching non-overlapping set of set from +// the previous step. +// + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/uniset.h" +#include "utrie.h" +#include "uvector.h" +#include "uassert.h" +#include "cmemory.h" +#include "cstring.h" + +#include "rbbirb57.h" +#include "rbbisetb57.h" +#include "rbbinode.h" + + +//------------------------------------------------------------------------ +// +// getFoldedRBBIValue Call-back function used during building of Trie table. +// Folding value: just store the offset (16 bits) +// if there is any non-0 entry. +// (It'd really be nice if the Trie builder would provide a +// simple default, so this function could go away from here.) +// +//------------------------------------------------------------------------ +/* folding value: just store the offset (16 bits) if there is any non-0 entry */ +U_CDECL_BEGIN +static uint32_t U_CALLCONV +getFoldedRBBIValue(UNewTrie *trie, UChar32 start, int32_t offset) { + uint32_t value; + UChar32 limit; + UBool inBlockZero; + + limit=start+0x400; + while(startfStatus; + fRangeList = 0; + fTrie = 0; + fTrieSize = 0; + fGroupCount = 0; + fSawBOF = FALSE; +} + + +//------------------------------------------------------------------------ +// +// Destructor +// +//------------------------------------------------------------------------ +RBBISetBuilder57::~RBBISetBuilder57() +{ + RangeDescriptor57 *nextRangeDesc; + + // Walk through & delete the linked list of RangeDescriptors + for (nextRangeDesc = fRangeList; nextRangeDesc!=NULL;) { + RangeDescriptor57 *r = nextRangeDesc; + nextRangeDesc = r->fNext; + delete r; + } + + utrie_close(fTrie); +} + + + + +//------------------------------------------------------------------------ +// +// build Build the list of non-overlapping character ranges +// from the Unicode Sets. +// +//------------------------------------------------------------------------ +void RBBISetBuilder57::build() { + RBBINode *usetNode; + RangeDescriptor57 *rlRange; + + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "usets")) {printSets();} + + // + // Initialize the process by creating a single range encompassing all characters + // that is in no sets. + // + fRangeList = new RangeDescriptor57(*fStatus); // will check for status here + if (fRangeList == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + return; + } + fRangeList->fStartChar = 0; + fRangeList->fEndChar = 0x10ffff; + + if (U_FAILURE(*fStatus)) { + return; + } + + // + // Find the set of non-overlapping ranges of characters + // + int ni; + for (ni=0; ; ni++) { // Loop over each of the UnicodeSets encountered in the input rules + usetNode = (RBBINode *)this->fRB->fUSetNodes->elementAt(ni); + if (usetNode==NULL) { + break; + } + + UnicodeSet *inputSet = usetNode->fInputSet; + int32_t inputSetRangeCount = inputSet->getRangeCount(); + int inputSetRangeIndex = 0; + rlRange = fRangeList; + + for (;;) { + if (inputSetRangeIndex >= inputSetRangeCount) { + break; + } + UChar32 inputSetRangeBegin = inputSet->getRangeStart(inputSetRangeIndex); + UChar32 inputSetRangeEnd = inputSet->getRangeEnd(inputSetRangeIndex); + + // skip over ranges from the range list that are completely + // below the current range from the input unicode set. + while (rlRange->fEndChar < inputSetRangeBegin) { + rlRange = rlRange->fNext; + } + + // If the start of the range from the range list is before with + // the start of the range from the unicode set, split the range list range + // in two, with one part being before (wholly outside of) the unicode set + // and the other containing the rest. + // Then continue the loop; the post-split current range will then be skipped + // over + if (rlRange->fStartChar < inputSetRangeBegin) { + rlRange->split(inputSetRangeBegin, *fStatus); + if (U_FAILURE(*fStatus)) { + return; + } + continue; + } + + // Same thing at the end of the ranges... + // If the end of the range from the range list doesn't coincide with + // the end of the range from the unicode set, split the range list + // range in two. The first part of the split range will be + // wholly inside the Unicode set. + if (rlRange->fEndChar > inputSetRangeEnd) { + rlRange->split(inputSetRangeEnd+1, *fStatus); + if (U_FAILURE(*fStatus)) { + return; + } + } + + // The current rlRange is now entirely within the UnicodeSet range. + // Add this unicode set to the list of sets for this rlRange + if (rlRange->fIncludesSets->indexOf(usetNode) == -1) { + rlRange->fIncludesSets->addElement(usetNode, *fStatus); + if (U_FAILURE(*fStatus)) { + return; + } + } + + // Advance over ranges that we are finished with. + if (inputSetRangeEnd == rlRange->fEndChar) { + inputSetRangeIndex++; + } + rlRange = rlRange->fNext; + } + } + + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "range")) { printRanges();} + + // + // Group the above ranges, with each group consisting of one or more + // ranges that are in exactly the same set of original UnicodeSets. + // The groups are numbered, and these group numbers are the set of + // input symbols recognized by the run-time state machine. + // + // Numbering: # 0 (state table column 0) is unused. + // # 1 is reserved - table column 1 is for end-of-input + // # 2 is reserved - table column 2 is for beginning-in-input + // # 3 is the first range list. + // + RangeDescriptor57 *rlSearchRange; + for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) { + for (rlSearchRange=fRangeList; rlSearchRange != rlRange; rlSearchRange=rlSearchRange->fNext) { + if (rlRange->fIncludesSets->equals(*rlSearchRange->fIncludesSets)) { + rlRange->fNum = rlSearchRange->fNum; + break; + } + } + if (rlRange->fNum == 0) { + fGroupCount ++; + rlRange->fNum = fGroupCount+2; + rlRange->setDictionaryFlag(); + addValToSets(rlRange->fIncludesSets, fGroupCount+2); + } + } + + // Handle input sets that contain the special string {eof}. + // Column 1 of the state table is reserved for EOF on input. + // Column 2 is reserved for before-the-start-input. + // (This column can be optimized away later if there are no rule + // references to {bof}.) + // Add this column value (1 or 2) to the equivalent expression + // subtree for each UnicodeSet that contains the string {eof} + // Because {bof} and {eof} are not a characters in the normal sense, + // they doesn't affect the computation of ranges or TRIE. + static const UChar eofUString[] = {0x65, 0x6f, 0x66, 0}; + static const UChar bofUString[] = {0x62, 0x6f, 0x66, 0}; + + UnicodeString eofString(eofUString); + UnicodeString bofString(bofUString); + for (ni=0; ; ni++) { // Loop over each of the UnicodeSets encountered in the input rules + usetNode = (RBBINode *)this->fRB->fUSetNodes->elementAt(ni); + if (usetNode==NULL) { + break; + } + UnicodeSet *inputSet = usetNode->fInputSet; + if (inputSet->contains(eofString)) { + addValToSet(usetNode, 1); + } + if (inputSet->contains(bofString)) { + addValToSet(usetNode, 2); + fSawBOF = TRUE; + } + } + + + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "rgroup")) {printRangeGroups();} + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "esets")) {printSets();} + + // + // Build the Trie table for mapping UChar32 values to the corresponding + // range group number + // + fTrie = utrie_open(NULL, // Pre-existing trie to be filled in + NULL, // Data array (utrie will allocate one) + 100000, // Max Data Length + 0, // Initial value for all code points + 0, // Lead surrogate unit value + TRUE); // Keep Latin 1 in separately + + + for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) { + utrie_setRange32(fTrie, rlRange->fStartChar, rlRange->fEndChar+1, rlRange->fNum, TRUE); + } +} + + +//----------------------------------------------------------------------------------- +// +// getTrieSize() Return the size that will be required to serialize the Trie. +// +//----------------------------------------------------------------------------------- +int32_t RBBISetBuilder57::getTrieSize() /*const*/ { + fTrieSize = utrie_serialize(fTrie, + NULL, // Buffer + 0, // Capacity + getFoldedRBBIValue, + TRUE, // Reduce to 16 bits + fStatus); + // RBBIDebugPrintf("Trie table size is %d\n", trieSize); + return fTrieSize; +} + + +//----------------------------------------------------------------------------------- +// +// serializeTrie() Put the serialized trie at the specified address. +// Trust the caller to have given us enough memory. +// getTrieSize() MUST be called first. +// +//----------------------------------------------------------------------------------- +void RBBISetBuilder57::serializeTrie(uint8_t *where) { + utrie_serialize(fTrie, + where, // Buffer + fTrieSize, // Capacity + getFoldedRBBIValue, + TRUE, // Reduce to 16 bits + fStatus); +} + +//------------------------------------------------------------------------ +// +// addValToSets Add a runtime-mapped input value to each uset from a +// list of uset nodes. (val corresponds to a state table column.) +// For each of the original Unicode sets - which correspond +// directly to uset nodes - a logically equivalent expression +// is constructed in terms of the remapped runtime input +// symbol set. This function adds one runtime input symbol to +// a list of sets. +// +// The "logically equivalent expression" is the tree for an +// or-ing together of all of the symbols that go into the set. +// +//------------------------------------------------------------------------ +void RBBISetBuilder57::addValToSets(UVector *sets, uint32_t val) { + int32_t ix; + + for (ix=0; ixsize(); ix++) { + RBBINode *usetNode = (RBBINode *)sets->elementAt(ix); + addValToSet(usetNode, val); + } +} + +void RBBISetBuilder57::addValToSet(RBBINode *usetNode, uint32_t val) { + RBBINode *leafNode = new RBBINode(RBBINode::leafChar); + if (leafNode == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + return; + } + leafNode->fVal = (unsigned short)val; + if (usetNode->fLeftChild == NULL) { + usetNode->fLeftChild = leafNode; + leafNode->fParent = usetNode; + } else { + // There are already input symbols present for this set. + // Set up an OR node, with the previous stuff as the left child + // and the new value as the right child. + RBBINode *orNode = new RBBINode(RBBINode::opOr); + if (orNode == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + return; + } + orNode->fLeftChild = usetNode->fLeftChild; + orNode->fRightChild = leafNode; + orNode->fLeftChild->fParent = orNode; + orNode->fRightChild->fParent = orNode; + usetNode->fLeftChild = orNode; + orNode->fParent = usetNode; + } +} + + +//------------------------------------------------------------------------ +// +// getNumCharCategories +// +//------------------------------------------------------------------------ +int32_t RBBISetBuilder57::getNumCharCategories() const { + return fGroupCount + 3; +} + + +//------------------------------------------------------------------------ +// +// sawBOF +// +//------------------------------------------------------------------------ +UBool RBBISetBuilder57::sawBOF() const { + return fSawBOF; +} + + +//------------------------------------------------------------------------ +// +// getFirstChar Given a runtime RBBI character category, find +// the first UChar32 that is in the set of chars +// in the category. +//------------------------------------------------------------------------ +UChar32 RBBISetBuilder57::getFirstChar(int32_t category) const { + RangeDescriptor57 *rlRange; + UChar32 retVal = (UChar32)-1; + for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) { + if (rlRange->fNum == category) { + retVal = rlRange->fStartChar; + break; + } + } + return retVal; +} + + + +//------------------------------------------------------------------------ +// +// printRanges A debugging function. +// dump out all of the range definitions. +// +//------------------------------------------------------------------------ +#ifdef RBBI_DEBUG +void RBBISetBuilder57::printRanges() { + RangeDescriptor57 *rlRange; + int i; + + RBBIDebugPrintf("\n\n Nonoverlapping Ranges ...\n"); + for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) { + RBBIDebugPrintf("%2i %4x-%4x ", rlRange->fNum, rlRange->fStartChar, rlRange->fEndChar); + + for (i=0; ifIncludesSets->size(); i++) { + RBBINode *usetNode = (RBBINode *)rlRange->fIncludesSets->elementAt(i); + UnicodeString setName = UNICODE_STRING("anon", 4); + RBBINode *setRef = usetNode->fParent; + if (setRef != NULL) { + RBBINode *varRef = setRef->fParent; + if (varRef != NULL && varRef->fType == RBBINode::varRef) { + setName = varRef->fText; + } + } + RBBI_DEBUG_printUnicodeString(setName); RBBIDebugPrintf(" "); + } + RBBIDebugPrintf("\n"); + } +} +#endif + + +//------------------------------------------------------------------------ +// +// printRangeGroups A debugging function. +// dump out all of the range groups. +// +//------------------------------------------------------------------------ +#ifdef RBBI_DEBUG +void RBBISetBuilder57::printRangeGroups() { + RangeDescriptor57 *rlRange; + RangeDescriptor57 *tRange; + int i; + int lastPrintedGroupNum = 0; + + RBBIDebugPrintf("\nRanges grouped by Unicode Set Membership...\n"); + for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) { + int groupNum = rlRange->fNum & 0xbfff; + if (groupNum > lastPrintedGroupNum) { + lastPrintedGroupNum = groupNum; + RBBIDebugPrintf("%2i ", groupNum); + + if (rlRange->fNum & 0x4000) { RBBIDebugPrintf(" ");} + + for (i=0; ifIncludesSets->size(); i++) { + RBBINode *usetNode = (RBBINode *)rlRange->fIncludesSets->elementAt(i); + UnicodeString setName = UNICODE_STRING("anon", 4); + RBBINode *setRef = usetNode->fParent; + if (setRef != NULL) { + RBBINode *varRef = setRef->fParent; + if (varRef != NULL && varRef->fType == RBBINode::varRef) { + setName = varRef->fText; + } + } + RBBI_DEBUG_printUnicodeString(setName); RBBIDebugPrintf(" "); + } + + i = 0; + for (tRange = rlRange; tRange != 0; tRange = tRange->fNext) { + if (tRange->fNum == rlRange->fNum) { + if (i++ % 5 == 0) { + RBBIDebugPrintf("\n "); + } + RBBIDebugPrintf(" %05x-%05x", tRange->fStartChar, tRange->fEndChar); + } + } + RBBIDebugPrintf("\n"); + } + } + RBBIDebugPrintf("\n"); +} +#endif + + +//------------------------------------------------------------------------ +// +// printSets A debugging function. +// dump out all of the set definitions. +// +//------------------------------------------------------------------------ +#ifdef RBBI_DEBUG +void RBBISetBuilder57::printSets() { + int i; + + RBBIDebugPrintf("\n\nUnicode Sets List\n------------------\n"); + for (i=0; ; i++) { + RBBINode *usetNode; + RBBINode *setRef; + RBBINode *varRef; + UnicodeString setName; + + usetNode = (RBBINode *)fRB->fUSetNodes->elementAt(i); + if (usetNode == NULL) { + break; + } + + RBBIDebugPrintf("%3d ", i); + setName = UNICODE_STRING("anonymous", 9); + setRef = usetNode->fParent; + if (setRef != NULL) { + varRef = setRef->fParent; + if (varRef != NULL && varRef->fType == RBBINode::varRef) { + setName = varRef->fText; + } + } + RBBI_DEBUG_printUnicodeString(setName); + RBBIDebugPrintf(" "); + RBBI_DEBUG_printUnicodeString(usetNode->fText); + RBBIDebugPrintf("\n"); + if (usetNode->fLeftChild != NULL) { + RBBINode::printTree(usetNode->fLeftChild, TRUE); + } + } + RBBIDebugPrintf("\n"); +} +#endif + + + +//------------------------------------------------------------------------------------- +// +// RangeDescriptor57 copy constructor +// +//------------------------------------------------------------------------------------- + +RangeDescriptor57::RangeDescriptor57(const RangeDescriptor57 &other, UErrorCode &status) { + int i; + + this->fStartChar = other.fStartChar; + this->fEndChar = other.fEndChar; + this->fNum = other.fNum; + this->fNext = NULL; + UErrorCode oldstatus = status; + this->fIncludesSets = new UVector(status); + if (U_FAILURE(oldstatus)) { + status = oldstatus; + } + if (U_FAILURE(status)) { + return; + } + /* test for NULL */ + if (this->fIncludesSets == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + + for (i=0; isize(); i++) { + this->fIncludesSets->addElement(other.fIncludesSets->elementAt(i), status); + } +} + + +//------------------------------------------------------------------------------------- +// +// RangeDesriptor default constructor +// +//------------------------------------------------------------------------------------- +RangeDescriptor57::RangeDescriptor57(UErrorCode &status) { + this->fStartChar = 0; + this->fEndChar = 0; + this->fNum = 0; + this->fNext = NULL; + UErrorCode oldstatus = status; + this->fIncludesSets = new UVector(status); + if (U_FAILURE(oldstatus)) { + status = oldstatus; + } + if (U_FAILURE(status)) { + return; + } + /* test for NULL */ + if(this->fIncludesSets == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + +} + + +//------------------------------------------------------------------------------------- +// +// RangeDesriptor Destructor +// +//------------------------------------------------------------------------------------- +RangeDescriptor57::~RangeDescriptor57() { + delete fIncludesSets; + fIncludesSets = NULL; +} + +//------------------------------------------------------------------------------------- +// +// RangeDesriptor::split() +// +//------------------------------------------------------------------------------------- +void RangeDescriptor57::split(UChar32 where, UErrorCode &status) { + U_ASSERT(where>fStartChar && where<=fEndChar); + RangeDescriptor57 *nr = new RangeDescriptor57(*this, status); + if(nr == 0) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + if (U_FAILURE(status)) { + delete nr; + return; + } + // RangeDescriptor57 copy constructor copies all fields. + // Only need to update those that are different after the split. + nr->fStartChar = where; + this->fEndChar = where-1; + nr->fNext = this->fNext; + this->fNext = nr; +} + + +//------------------------------------------------------------------------------------- +// +// RangeDescriptor57::setDictionaryFlag +// +// Character Category Numbers that include characters from +// the original Unicode Set named "dictionary" have bit 14 +// set to 1. The RBBI runtime engine uses this to trigger +// use of the word dictionary. +// +// This function looks through the Unicode Sets that it +// (the range) includes, and sets the bit in fNum when +// "dictionary" is among them. +// +// TODO: a faster way would be to find the set node for +// "dictionary" just once, rather than looking it +// up by name every time. +// +//------------------------------------------------------------------------------------- +void RangeDescriptor57::setDictionaryFlag() { + int i; + + for (i=0; ifIncludesSets->size(); i++) { + RBBINode *usetNode = (RBBINode *)fIncludesSets->elementAt(i); + UnicodeString setName; + RBBINode *setRef = usetNode->fParent; + if (setRef != NULL) { + RBBINode *varRef = setRef->fParent; + if (varRef != NULL && varRef->fType == RBBINode::varRef) { + setName = varRef->fText; + } + } + if (setName.compare(UNICODE_STRING("dictionary", 10)) == 0) { // TODO: no string literals. + this->fNum |= 0x4000; + break; + } + } +} + + + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/rbbisetb57.h b/icuSources/common/rbbisetb57.h new file mode 100644 index 00000000..b2724b4a --- /dev/null +++ b/icuSources/common/rbbisetb57.h @@ -0,0 +1,138 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +********************************************************************** +* Copyright (c) 2001-2005, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +* +********************************************************************** +* Legacy version of RangeDescriptor and RBBISetBuilder from ICU 57, +* only for use by Apple RuleBasedTokenizer +********************************************************************** +*/ + +#ifndef RBBISETB57_H +#define RBBISETB57_H + +#include "unicode/utypes.h" +#include "unicode/uobject.h" +#include "rbbirb57.h" +#include "rbbinode.h" +#include "uvector.h" + +struct UNewTrie; + +U_NAMESPACE_BEGIN + +class RBBIRuleBuilder57; + +// +// RBBISetBuilder57 Derives the character categories used by the runtime RBBI engine +// from the Unicode Sets appearing in the source RBBI rules, and +// creates the TRIE table used to map from Unicode to the +// character categories. +// + + +// +// RangeDescriptor57 +// +// Each of the non-overlapping character ranges gets one of these descriptors. +// All of them are strung together in a linked list, which is kept in order +// (by character) +// +class RangeDescriptor57 : public UMemory { +public: + UChar32 fStartChar; // Start of range, unicode 32 bit value. + UChar32 fEndChar; // End of range, unicode 32 bit value. + int32_t fNum; // runtime-mapped input value for this range. + UVector *fIncludesSets; // vector of the the original + // Unicode sets that include this range. + // (Contains ptrs to uset nodes) + RangeDescriptor57 *fNext; // Next RangeDescriptor57 in the linked list. + + RangeDescriptor57(UErrorCode &status); + RangeDescriptor57(const RangeDescriptor57 &other, UErrorCode &status); + ~RangeDescriptor57(); + void split(UChar32 where, UErrorCode &status); // Spit this range in two at "where", with + // where appearing in the second (higher) part. + void setDictionaryFlag(); // Check whether this range appears as part of + // the Unicode set named "dictionary" + +private: + RangeDescriptor57(const RangeDescriptor57 &other); // forbid copying of this class + RangeDescriptor57 &operator=(const RangeDescriptor57 &other); // forbid copying of this class +}; + + +// +// RBBISetBuilder57 Handles processing of Unicode Sets from RBBI rules. +// +// Starting with the rules parse tree from the scanner, +// +// - Enumerate the set of UnicodeSets that are referenced +// by the RBBI rules. +// - compute a derived set of non-overlapping UnicodeSets +// that will correspond to columns in the state table for +// the RBBI execution engine. +// - construct the trie table that maps input characters +// to set numbers in the non-overlapping set of sets. +// + + +class RBBISetBuilder57 : public UMemory { +public: + RBBISetBuilder57(RBBIRuleBuilder57 *rb); + ~RBBISetBuilder57(); + + void build(); + void addValToSets(UVector *sets, uint32_t val); + void addValToSet (RBBINode *usetNode, uint32_t val); + int32_t getNumCharCategories() const; // CharCategories are the same as input symbol set to the + // runtime state machine, which are the same as + // columns in the DFA state table + int32_t getTrieSize() /*const*/; // Size in bytes of the serialized Trie. + void serializeTrie(uint8_t *where); // write out the serialized Trie. + UChar32 getFirstChar(int32_t val) const; + UBool sawBOF() const; // Indicate whether any references to the {bof} pseudo + // character were encountered. +#ifdef RBBI_DEBUG + void printSets(); + void printRanges(); + void printRangeGroups(); +#else + #define printSets() + #define printRanges() + #define printRangeGroups() +#endif + +private: + void numberSets(); + + RBBIRuleBuilder57 *fRB; // The RBBI Rule Compiler that owns us. + UErrorCode *fStatus; + + RangeDescriptor57 *fRangeList; // Head of the linked list of RangeDescriptors + + UNewTrie *fTrie; // The mapping TRIE that is the end result of processing + uint32_t fTrieSize; // the Unicode Sets. + + // Groups correspond to character categories - + // groups of ranges that are in the same original UnicodeSets. + // fGroupCount is the index of the last used group. + // fGroupCount+1 is also the number of columns in the RBBI state table being compiled. + // State table column 0 is not used. Column 1 is for end-of-input. + // column 2 is for group 0. Funny counting. + int32_t fGroupCount; + + UBool fSawBOF; + + RBBISetBuilder57(const RBBISetBuilder57 &other); // forbid copying of this class + RBBISetBuilder57 &operator=(const RBBISetBuilder57 &other); // forbid copying of this class +}; + + + +U_NAMESPACE_END +#endif diff --git a/icuSources/common/rbbistbl57.cpp b/icuSources/common/rbbistbl57.cpp new file mode 100644 index 00000000..d96bdc7e --- /dev/null +++ b/icuSources/common/rbbistbl57.cpp @@ -0,0 +1,255 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +*************************************************************************** +* Copyright (C) 2002-2014 International Business Machines Corporation +* and others. All rights reserved. +*************************************************************************** +*/ + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/unistr.h" +#include "unicode/uniset.h" +#include "unicode/uchar.h" +#include "unicode/parsepos.h" + +#include "umutex.h" + +#include "rbbirb57.h" +#include "rbbinode.h" + + +// +// RBBISymbolTableEntry_deleter Used by the UHashTable to delete the contents +// when the hash table is deleted. +// +U_CDECL_BEGIN +static void U_CALLCONV RBBISymbolTableEntry_deleter(void *p) { + icu::RBBISymbolTableEntry *px = (icu::RBBISymbolTableEntry *)p; + delete px; +} +U_CDECL_END + + + +U_NAMESPACE_BEGIN + +RBBISymbolTable57::RBBISymbolTable57(RBBIRuleScanner57 *rs, const UnicodeString &rules, UErrorCode &status) + :fRules(rules), fRuleScanner(rs), ffffString(UChar(0xffff)) +{ + fHashTable = NULL; + fCachedSetLookup = NULL; + + fHashTable = uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, &status); + // uhash_open checks status + if (U_FAILURE(status)) { + return; + } + uhash_setValueDeleter(fHashTable, RBBISymbolTableEntry_deleter); +} + + + +RBBISymbolTable57::~RBBISymbolTable57() +{ + uhash_close(fHashTable); +} + + +// +// RBBISymbolTable57::lookup This function from the abstract symbol table inteface +// looks up a variable name and returns a UnicodeString +// containing the substitution text. +// +// The variable name does NOT include the leading $. +// +const UnicodeString *RBBISymbolTable57::lookup(const UnicodeString& s) const +{ + RBBISymbolTableEntry *el; + RBBINode *varRefNode; + RBBINode *exprNode; + RBBINode *usetNode; + const UnicodeString *retString; + RBBISymbolTable57 *This = (RBBISymbolTable57 *)this; // cast off const + + el = (RBBISymbolTableEntry *)uhash_get(fHashTable, &s); + if (el == NULL) { + return NULL; + } + + varRefNode = el->val; + exprNode = varRefNode->fLeftChild; // Root node of expression for variable + if (exprNode->fType == RBBINode::setRef) { + // The $variable refers to a single UnicodeSet + // return the ffffString, which will subsequently be interpreted as a + // stand-in character for the set by RBBISymbolTable57::lookupMatcher() + usetNode = exprNode->fLeftChild; + This->fCachedSetLookup = usetNode->fInputSet; + retString = &ffffString; + } + else + { + // The variable refers to something other than just a set. + // return the original source string for the expression + retString = &exprNode->fText; + This->fCachedSetLookup = NULL; + } + return retString; +} + + + +// +// RBBISymbolTable57::lookupMatcher This function from the abstract symbol table +// interface maps a single stand-in character to a +// pointer to a Unicode Set. The Unicode Set code uses this +// mechanism to get all references to the same $variable +// name to refer to a single common Unicode Set instance. +// +// This implementation cheats a little, and does not maintain a map of stand-in chars +// to sets. Instead, it takes advantage of the fact that the UnicodeSet +// constructor will always call this function right after calling lookup(), +// and we just need to remember what set to return between these two calls. +const UnicodeFunctor *RBBISymbolTable57::lookupMatcher(UChar32 ch) const +{ + UnicodeSet *retVal = NULL; + RBBISymbolTable57 *This = (RBBISymbolTable57 *)this; // cast off const + if (ch == 0xffff) { + retVal = fCachedSetLookup; + This->fCachedSetLookup = 0; + } + return retVal; +} + +// +// RBBISymbolTable57::parseReference This function from the abstract symbol table interface +// looks for a $variable name in the source text. +// It does not look it up, only scans for it. +// It is used by the UnicodeSet parser. +// +// This implementation is lifted pretty much verbatim +// from the rules based transliterator implementation. +// I didn't see an obvious way of sharing it. +// +UnicodeString RBBISymbolTable57::parseReference(const UnicodeString& text, + ParsePosition& pos, int32_t limit) const +{ + int32_t start = pos.getIndex(); + int32_t i = start; + UnicodeString result; + while (i < limit) { + UChar c = text.charAt(i); + if ((i==start && !u_isIDStart(c)) || !u_isIDPart(c)) { + break; + } + ++i; + } + if (i == start) { // No valid name chars + return result; // Indicate failure with empty string + } + pos.setIndex(i); + text.extractBetween(start, i, result); + return result; +} + + + +// +// RBBISymbolTable57::lookupNode Given a key (a variable name), return the +// corresponding RBBI Node. If there is no entry +// in the table for this name, return NULL. +// +RBBINode *RBBISymbolTable57::lookupNode(const UnicodeString &key) const{ + + RBBINode *retNode = NULL; + RBBISymbolTableEntry *el; + + el = (RBBISymbolTableEntry *)uhash_get(fHashTable, &key); + if (el != NULL) { + retNode = el->val; + } + return retNode; +} + + +// +// RBBISymbolTable57::addEntry Add a new entry to the symbol table. +// Indicate an error if the name already exists - +// this will only occur in the case of duplicate +// variable assignments. +// +void RBBISymbolTable57::addEntry (const UnicodeString &key, RBBINode *val, UErrorCode &err) { + RBBISymbolTableEntry *e; + /* test for buffer overflows */ + if (U_FAILURE(err)) { + return; + } + e = (RBBISymbolTableEntry *)uhash_get(fHashTable, &key); + if (e != NULL) { + err = U_BRK_VARIABLE_REDFINITION; + return; + } + + e = new RBBISymbolTableEntry; + if (e == NULL) { + err = U_MEMORY_ALLOCATION_ERROR; + return; + } + e->key = key; + e->val = val; + uhash_put( fHashTable, &e->key, e, &err); +} + +// RBBISymbolTableEntry::RBBISymbolTableEntry() - from standard rbbistbl.cpp +// RBBISymbolTableEntry::~RBBISymbolTableEntry() - from standard rbbistbl.cpp + + +// +// RBBISymbolTable57::print Debugging function, dump out the symbol table contents. +// +#ifdef RBBI_DEBUG +void RBBISymbolTable57::rbbiSymtablePrint() const { + RBBIDebugPrintf("Variable Definitions\n" + "Name Node Val String Val\n" + "----------------------------------------------------------------------\n"); + + int32_t pos = UHASH_FIRST; + const UHashElement *e = NULL; + for (;;) { + e = uhash_nextElement(fHashTable, &pos); + if (e == NULL ) { + break; + } + RBBISymbolTableEntry *s = (RBBISymbolTableEntry *)e->value.pointer; + + RBBI_DEBUG_printUnicodeString(s->key, 15); + RBBIDebugPrintf(" %8p ", (void *)s->val); + RBBI_DEBUG_printUnicodeString(s->val->fLeftChild->fText); + RBBIDebugPrintf("\n"); + } + + RBBIDebugPrintf("\nParsed Variable Definitions\n"); + pos = -1; + for (;;) { + e = uhash_nextElement(fHashTable, &pos); + if (e == NULL ) { + break; + } + RBBISymbolTableEntry *s = (RBBISymbolTableEntry *)e->value.pointer; + RBBI_DEBUG_printUnicodeString(s->key); + s->val->fLeftChild->printTree(TRUE); + RBBIDebugPrintf("\n"); + } +} +#endif + + + + + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/rbbitblb.cpp b/icuSources/common/rbbitblb.cpp index 0f1a901f..8a6f7c79 100644 --- a/icuSources/common/rbbitblb.cpp +++ b/icuSources/common/rbbitblb.cpp @@ -22,25 +22,24 @@ #include "rbbidata.h" #include "cstring.h" #include "uassert.h" +#include "uvectr32.h" #include "cmemory.h" U_NAMESPACE_BEGIN -RBBITableBuilder::RBBITableBuilder(RBBIRuleBuilder *rb, RBBINode **rootNode) : - fTree(*rootNode) { - fRB = rb; - fStatus = fRB->fStatus; - UErrorCode status = U_ZERO_ERROR; - fDStates = new UVector(status); - if (U_FAILURE(*fStatus)) { - return; - } +RBBITableBuilder::RBBITableBuilder(RBBIRuleBuilder *rb, RBBINode **rootNode, UErrorCode &status) : + fRB(rb), + fTree(*rootNode), + fStatus(&status), + fDStates(nullptr), + fSafeTable(nullptr) { if (U_FAILURE(status)) { - *fStatus = status; return; } - if (fDStates == NULL) { - *fStatus = U_MEMORY_ALLOCATION_ERROR;; + // fDStates is UVector + fDStates = new UVector(status); + if (U_SUCCESS(status) && fDStates == nullptr ) { + status = U_MEMORY_ALLOCATION_ERROR; } } @@ -51,17 +50,18 @@ RBBITableBuilder::~RBBITableBuilder() { for (i=0; isize(); i++) { delete (RBBIStateDescriptor *)fDStates->elementAt(i); } - delete fDStates; + delete fDStates; + delete fSafeTable; } //----------------------------------------------------------------------------- // -// RBBITableBuilder::build - This is the main function for building the DFA state transtion -// table from the RBBI rules parse tree. +// RBBITableBuilder::buildForwardTable - This is the main function for building +// the DFA state transition table from the RBBI rules parse tree. // //----------------------------------------------------------------------------- -void RBBITableBuilder::build() { +void RBBITableBuilder::buildForwardTable() { if (U_FAILURE(*fStatus)) { return; @@ -188,8 +188,6 @@ void RBBITableBuilder::build() { // for all tables. Merge the ones from this table into the global set. // mergeRuleStatusVals(); - - if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "states")) {printStates();}; } @@ -761,7 +759,7 @@ void RBBITableBuilder::flagAcceptingStates() { // if sd->fAccepting already had a value other than 0 or -1, leave it be. // If the end marker node is from a look-ahead rule, set - // the fLookAhead field or this state also. + // the fLookAhead field for this state also. if (endMarker->fLookAheadEnd) { // TODO: don't change value if already set? // TODO: allow for more than one active look-ahead rule in engine. @@ -1077,6 +1075,183 @@ void RBBITableBuilder::printPosSets(RBBINode *n) { } #endif +// +// findDuplCharClassFrom() +// +bool RBBITableBuilder::findDuplCharClassFrom(IntPair *categories) { + int32_t numStates = fDStates->size(); + int32_t numCols = fRB->fSetBuilder->getNumCharCategories(); + + uint16_t table_base; + uint16_t table_dupl; + for (; categories->first < numCols-1; categories->first++) { + for (categories->second=categories->first+1; categories->second < numCols; categories->second++) { + for (int32_t state=0; stateelementAt(state); + table_base = (uint16_t)sd->fDtran->elementAti(categories->first); + table_dupl = (uint16_t)sd->fDtran->elementAti(categories->second); + if (table_base != table_dupl) { + break; + } + } + if (table_base == table_dupl) { + return true; + } + } + } + return false; +} + + +// +// removeColumn() +// +void RBBITableBuilder::removeColumn(int32_t column) { + int32_t numStates = fDStates->size(); + for (int32_t state=0; stateelementAt(state); + U_ASSERT(column < sd->fDtran->size()); + sd->fDtran->removeElementAt(column); + } +} + +/* + * findDuplicateState + */ +bool RBBITableBuilder::findDuplicateState(IntPair *states) { + int32_t numStates = fDStates->size(); + int32_t numCols = fRB->fSetBuilder->getNumCharCategories(); + + for (; states->firstfirst++) { + RBBIStateDescriptor *firstSD = (RBBIStateDescriptor *)fDStates->elementAt(states->first); + for (states->second=states->first+1; states->secondsecond++) { + RBBIStateDescriptor *duplSD = (RBBIStateDescriptor *)fDStates->elementAt(states->second); + if (firstSD->fAccepting != duplSD->fAccepting || + firstSD->fLookAhead != duplSD->fLookAhead || + firstSD->fTagsIdx != duplSD->fTagsIdx) { + continue; + } + bool rowsMatch = true; + for (int32_t col=0; col < numCols; ++col) { + int32_t firstVal = firstSD->fDtran->elementAti(col); + int32_t duplVal = duplSD->fDtran->elementAti(col); + if (!((firstVal == duplVal) || + ((firstVal == states->first || firstVal == states->second) && + (duplVal == states->first || duplVal == states->second)))) { + rowsMatch = false; + break; + } + } + if (rowsMatch) { + return true; + } + } + } + return false; +} + + +bool RBBITableBuilder::findDuplicateSafeState(IntPair *states) { + int32_t numStates = fSafeTable->size(); + + for (; states->firstfirst++) { + UnicodeString *firstRow = static_cast(fSafeTable->elementAt(states->first)); + for (states->second=states->first+1; states->secondsecond++) { + UnicodeString *duplRow = static_cast(fSafeTable->elementAt(states->second)); + bool rowsMatch = true; + int32_t numCols = firstRow->length(); + for (int32_t col=0; col < numCols; ++col) { + int32_t firstVal = firstRow->charAt(col); + int32_t duplVal = duplRow->charAt(col); + if (!((firstVal == duplVal) || + ((firstVal == states->first || firstVal == states->second) && + (duplVal == states->first || duplVal == states->second)))) { + rowsMatch = false; + break; + } + } + if (rowsMatch) { + return true; + } + } + } + return false; +} + + +void RBBITableBuilder::removeState(IntPair duplStates) { + const int32_t keepState = duplStates.first; + const int32_t duplState = duplStates.second; + U_ASSERT(keepState < duplState); + U_ASSERT(duplState < fDStates->size()); + + RBBIStateDescriptor *duplSD = (RBBIStateDescriptor *)fDStates->elementAt(duplState); + fDStates->removeElementAt(duplState); + delete duplSD; + + int32_t numStates = fDStates->size(); + int32_t numCols = fRB->fSetBuilder->getNumCharCategories(); + for (int32_t state=0; stateelementAt(state); + for (int32_t col=0; colfDtran->elementAti(col); + int32_t newVal = existingVal; + if (existingVal == duplState) { + newVal = keepState; + } else if (existingVal > duplState) { + newVal = existingVal - 1; + } + sd->fDtran->setElementAt(newVal, col); + } + if (sd->fAccepting == duplState) { + sd->fAccepting = keepState; + } else if (sd->fAccepting > duplState) { + sd->fAccepting--; + } + if (sd->fLookAhead == duplState) { + sd->fLookAhead = keepState; + } else if (sd->fLookAhead > duplState) { + sd->fLookAhead--; + } + } +} + +void RBBITableBuilder::removeSafeState(IntPair duplStates) { + const int32_t keepState = duplStates.first; + const int32_t duplState = duplStates.second; + U_ASSERT(keepState < duplState); + U_ASSERT(duplState < fSafeTable->size()); + + fSafeTable->removeElementAt(duplState); // Note that fSafeTable has a deleter function + // and will auto-delete the removed element. + int32_t numStates = fSafeTable->size(); + for (int32_t state=0; stateelementAt(state); + int32_t numCols = sd->length(); + for (int32_t col=0; colcharAt(col); + int32_t newVal = existingVal; + if (existingVal == duplState) { + newVal = keepState; + } else if (existingVal > duplState) { + newVal = existingVal - 1; + } + sd->setCharAt(col, newVal); + } + } +} + + +/* + * RemoveDuplicateStates + */ +void RBBITableBuilder::removeDuplicateStates() { + IntPair dupls = {3, 0}; + while (findDuplicateState(&dupls)) { + // printf("Removing duplicate states (%d, %d)\n", dupls.first, dupls.second); + removeState(dupls); + } +} //----------------------------------------------------------------------------- @@ -1095,21 +1270,17 @@ int32_t RBBITableBuilder::getTableSize() const { return 0; } - size = sizeof(RBBIStateTable) - 4; // The header, with no rows to the table. + size = offsetof(RBBIStateTable, fTableData); // The header, with no rows to the table. numRows = fDStates->size(); numCols = fRB->fSetBuilder->getNumCharCategories(); - // Note The declaration of RBBIStateTableRow is for a table of two columns. - // Therefore we subtract two from numCols when determining - // how much storage to add to a row for the total columns. - rowSize = sizeof(RBBIStateTableRow) + sizeof(uint16_t)*(numCols-2); + rowSize = offsetof(RBBIStateTableRow, fNextState) + sizeof(uint16_t)*numCols; size += numRows * rowSize; return size; } - //----------------------------------------------------------------------------- // // exportTable() export the state transition table in the format required @@ -1126,14 +1297,14 @@ void RBBITableBuilder::exportTable(void *where) { return; } - if (fRB->fSetBuilder->getNumCharCategories() > 0x7fff || + int32_t catCount = fRB->fSetBuilder->getNumCharCategories(); + if (catCount > 0x7fff || fDStates->size() > 0x7fff) { *fStatus = U_BRK_INTERNAL_ERROR; return; } - table->fRowLen = sizeof(RBBIStateTableRow) + - sizeof(uint16_t) * (fRB->fSetBuilder->getNumCharCategories() - 2); + table->fRowLen = offsetof(RBBIStateTableRow, fNextState) + sizeof(uint16_t) * catCount; table->fNumStates = fDStates->size(); table->fFlags = 0; if (fRB->fLookAheadHardBreak) { @@ -1152,13 +1323,192 @@ void RBBITableBuilder::exportTable(void *where) { row->fAccepting = (int16_t)sd->fAccepting; row->fLookAhead = (int16_t)sd->fLookAhead; row->fTagIdx = (int16_t)sd->fTagsIdx; - for (col=0; colfSetBuilder->getNumCharCategories(); col++) { + for (col=0; colfNextState[col] = (uint16_t)sd->fDtran->elementAti(col); } } } +/** + * Synthesize a safe state table from the main state table. + */ +void RBBITableBuilder::buildSafeReverseTable(UErrorCode &status) { + // The safe table creation has three steps: + + // 1. Identifiy pairs of character classes that are "safe." Safe means that boundaries + // following the pair do not depend on context or state before the pair. To test + // whether a pair is safe, run it through the main forward state table, starting + // from each state. If the the final state is the same, no matter what the starting state, + // the pair is safe. + // + // 2. Build a state table that recognizes the safe pairs. It's similar to their + // forward table, with a column for each input character [class], and a row for + // each state. Row 1 is the start state, and row 0 is the stop state. Initially + // create an additional state for each input character category; being in + // one of these states means that the character has been seen, and is potentially + // the first of a pair. In each of these rows, the entry for the second character + // of a safe pair is set to the stop state (0), indicating that a match was found. + // All other table entries are set to the state corresponding the current input + // character, allowing that charcter to be the of a start following pair. + // + // Because the safe rules are to be run in reverse, moving backwards in the text, + // the first and second pair categories are swapped when building the table. + // + // 3. Compress the table. There are typically many rows (states) that are + // equivalent - that have zeroes (match completed) in the same columns - + // and can be folded together. + + // Each safe pair is stored as two UChars in the safePair string. + UnicodeString safePairs; + + int32_t numCharClasses = fRB->fSetBuilder->getNumCharCategories(); + int32_t numStates = fDStates->size(); + + for (int32_t c1=0; c1(fDStates->elementAt(startState)); + int32_t s2 = startStateD->fDtran->elementAti(c1); + RBBIStateDescriptor *s2StateD = static_cast(fDStates->elementAt(s2)); + endState = s2StateD->fDtran->elementAti(c2); + if (wantedEndState < 0) { + wantedEndState = endState; + } else { + if (wantedEndState != endState) { + break; + } + } + } + if (wantedEndState == endState) { + safePairs.append((char16_t)c1); + safePairs.append((char16_t)c2); + // printf("(%d, %d) ", c1, c2); + } + } + // printf("\n"); + } + + // Populate the initial safe table. + // The table as a whole is UVector + // Each row is represented by a UnicodeString, being used as a Vector. + // Row 0 is the stop state. + // Row 1 is the start sate. + // Row 2 and beyond are other states, initially one per char class, but + // after initial construction, many of the states will be combined, compacting the table. + // The String holds the nextState data only. The four leading fields of a row, fAccepting, + // fLookAhead, etc. are not needed for the safe table, and are omitted at this stage of building. + + U_ASSERT(fSafeTable == nullptr); + fSafeTable = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, numCharClasses + 2, status); + for (int32_t row=0; rowaddElement(new UnicodeString(numCharClasses, 0, numCharClasses+4), status); + } + + // From the start state, each input char class transitions to the state for that input. + UnicodeString &startState = *static_cast(fSafeTable->elementAt(1)); + for (int32_t charClass=0; charClass < numCharClasses; ++charClass) { + // Note: +2 for the start & stop state. + startState.setCharAt(charClass, charClass+2); + } + + // Initially make every other state table row look like the start state row, + for (int32_t row=2; row(fSafeTable->elementAt(row)); + rowState = startState; // UnicodeString assignment, copies contents. + } + + // Run through the safe pairs, set the next state to zero when pair has been seen. + // Zero being the stop state, meaning we found a safe point. + for (int32_t pairIdx=0; pairIdx(fSafeTable->elementAt(c2 + 2)); + rowState.setCharAt(c1, 0); + } + + // Remove duplicate or redundant rows from the table. + IntPair states = {1, 0}; + while (findDuplicateSafeState(&states)) { + // printf("Removing duplicate safe states (%d, %d)\n", states.first, states.second); + removeSafeState(states); + } +} + + +//----------------------------------------------------------------------------- +// +// getSafeTableSize() Calculate the size of the runtime form of this +// safe state table. +// +//----------------------------------------------------------------------------- +int32_t RBBITableBuilder::getSafeTableSize() const { + int32_t size = 0; + int32_t numRows; + int32_t numCols; + int32_t rowSize; + + if (fSafeTable == nullptr) { + return 0; + } + + size = offsetof(RBBIStateTable, fTableData); // The header, with no rows to the table. + + numRows = fSafeTable->size(); + numCols = fRB->fSetBuilder->getNumCharCategories(); + + rowSize = offsetof(RBBIStateTableRow, fNextState) + sizeof(uint16_t)*numCols; + size += numRows * rowSize; + return size; +} + + +//----------------------------------------------------------------------------- +// +// exportSafeTable() export the state transition table in the format required +// by the runtime engine. getTableSize() bytes of memory +// must be available at the output address "where". +// +//----------------------------------------------------------------------------- +void RBBITableBuilder::exportSafeTable(void *where) { + RBBIStateTable *table = (RBBIStateTable *)where; + uint32_t state; + int col; + + if (U_FAILURE(*fStatus) || fSafeTable == nullptr) { + return; + } + + int32_t catCount = fRB->fSetBuilder->getNumCharCategories(); + if (catCount > 0x7fff || + fSafeTable->size() > 0x7fff) { + *fStatus = U_BRK_INTERNAL_ERROR; + return; + } + + table->fRowLen = offsetof(RBBIStateTableRow, fNextState) + sizeof(uint16_t) * catCount; + table->fNumStates = fSafeTable->size(); + table->fFlags = 0; + table->fReserved = 0; + + for (state=0; statefNumStates; state++) { + UnicodeString *rowString = (UnicodeString *)fSafeTable->elementAt(state); + RBBIStateTableRow *row = (RBBIStateTableRow *)(table->fTableData + state*table->fRowLen); + row->fAccepting = 0; + row->fLookAhead = 0; + row->fTagIdx = 0; + row->fReserved = 0; + for (col=0; colfNextState[col] = rowString->charAt(col); + } + } +} + + + //----------------------------------------------------------------------------- // @@ -1213,6 +1563,47 @@ void RBBITableBuilder::printStates() { #endif +//----------------------------------------------------------------------------- +// +// printSafeTable Debug Function. Dump the fully constructed safe table. +// +//----------------------------------------------------------------------------- +#ifdef RBBI_DEBUG +void RBBITableBuilder::printReverseTable() { + int c; // input "character" + int n; // state number + + RBBIDebugPrintf(" Safe Reverse Table \n"); + if (fSafeTable == nullptr) { + RBBIDebugPrintf(" --- nullptr ---\n"); + return; + } + RBBIDebugPrintf("state | i n p u t s y m b o l s \n"); + RBBIDebugPrintf(" | Acc LA Tag"); + for (c=0; cfSetBuilder->getNumCharCategories(); c++) { + RBBIDebugPrintf(" %2d", c); + } + RBBIDebugPrintf("\n"); + RBBIDebugPrintf(" |---------------"); + for (c=0; cfSetBuilder->getNumCharCategories(); c++) { + RBBIDebugPrintf("---"); + } + RBBIDebugPrintf("\n"); + + for (n=0; nsize(); n++) { + UnicodeString *rowString = (UnicodeString *)fSafeTable->elementAt(n); + RBBIDebugPrintf(" %3d | " , n); + RBBIDebugPrintf("%3d %3d %5d ", 0, 0, 0); // Accepting, LookAhead, Tags + for (c=0; cfSetBuilder->getNumCharCategories(); c++) { + RBBIDebugPrintf(" %2d", rowString->charAt(c)); + } + RBBIDebugPrintf("\n"); + } + RBBIDebugPrintf("\n\n"); +} +#endif + + //----------------------------------------------------------------------------- // @@ -1259,7 +1650,7 @@ RBBIStateDescriptor::RBBIStateDescriptor(int lastInputSymbol, UErrorCode *fStatu fPositions = NULL; fDtran = NULL; - fDtran = new UVector(lastInputSymbol+1, *fStatus); + fDtran = new UVector32(lastInputSymbol+1, *fStatus); if (U_FAILURE(*fStatus)) { return; } @@ -1267,7 +1658,7 @@ RBBIStateDescriptor::RBBIStateDescriptor(int lastInputSymbol, UErrorCode *fStatu *fStatus = U_MEMORY_ALLOCATION_ERROR; return; } - fDtran->setSize(lastInputSymbol+1, *fStatus); // fDtran needs to be pre-sized. + fDtran->setSize(lastInputSymbol+1); // fDtran needs to be pre-sized. // It is indexed by input symbols, and will // hold the next state number for each // symbol. diff --git a/icuSources/common/rbbitblb.h b/icuSources/common/rbbitblb.h index 10415018..eea243e4 100644 --- a/icuSources/common/rbbitblb.h +++ b/icuSources/common/rbbitblb.h @@ -17,6 +17,7 @@ #include "unicode/utypes.h" #include "unicode/uobject.h" #include "unicode/rbbi.h" +#include "rbbirb.h" #include "rbbinode.h" @@ -24,6 +25,7 @@ U_NAMESPACE_BEGIN class RBBIRuleScanner; class RBBIRuleBuilder; +class UVector32; // // class RBBITableBuilder is part of the RBBI rule compiler. @@ -36,15 +38,46 @@ class RBBIRuleBuilder; class RBBITableBuilder : public UMemory { public: - RBBITableBuilder(RBBIRuleBuilder *rb, RBBINode **rootNode); + RBBITableBuilder(RBBIRuleBuilder *rb, RBBINode **rootNode, UErrorCode &status); ~RBBITableBuilder(); - void build(); - int32_t getTableSize() const; // Return the runtime size in bytes of - // the built state table - void exportTable(void *where); // fill in the runtime state table. - // Sufficient memory must exist at - // the specified location. + void buildForwardTable(); + + /** Return the runtime size in bytes of the built state table. */ + int32_t getTableSize() const; + + /** Fill in the runtime state table. Sufficient memory must exist at the specified location. + */ + void exportTable(void *where); + + /** + * Find duplicate (redundant) character classes. Begin looking with categories.first. + * Duplicate, if found are returned in the categories parameter. + * This is an iterator-like function, used to identify character classes + * (state table columns) that can be eliminated. + * @param categories in/out parameter, specifies where to start looking for duplicates, + * and returns the first pair of duplicates found, if any. + * @return true if duplicate char classes were found, false otherwise. + */ + bool findDuplCharClassFrom(IntPair *categories); + + /** Remove a column from the state table. Used when two character categories + * have been found equivalent, and merged together, to eliminate the uneeded table column. + */ + void removeColumn(int32_t column); + + /** Check for, and remove dupicate states (table rows). */ + void removeDuplicateStates(); + + /** Build the safe reverse table from the already-constructed forward table. */ + void buildSafeReverseTable(UErrorCode &status); + + /** Return the runtime size in bytes of the built safe reverse state table. */ + int32_t getSafeTableSize() const; + + /** Fill in the runtime safe state table. Sufficient memory must exist at the specified location. + */ + void exportSafeTable(void *where); private: @@ -60,8 +93,45 @@ private: void flagTaggedStates(); void mergeRuleStatusVals(); + /** + * Merge redundant state table columns, eliminating character classes with identical behavior. + * Done after the state tables are generated, just before converting to their run-time format. + */ + int32_t mergeColumns(); + void addRuleRootNodes(UVector *dest, RBBINode *node); + /** + * Find duplicate (redundant) states, beginning at the specified pair, + * within this state table. This is an iterator-like function, used to + * identify states (state table rows) that can be eliminated. + * @param states in/out parameter, specifies where to start looking for duplicates, + * and returns the first pair of duplicates found, if any. + * @return true if duplicate states were found, false otherwise. + */ + bool findDuplicateState(IntPair *states); + + /** Remove a duplicate state. + * @param duplStates The duplicate states. The first is kept, the second is removed. + * All references to the second in the state table are retargeted + * to the first. + */ + void removeState(IntPair duplStates); + + /** Find the next duplicate state in the safe reverse table. An iterator function. + * @param states in/out parameter, specifies where to start looking for duplicates, + * and returns the first pair of duplicates found, if any. + * @return true if a duplicate pair of states was found. + */ + bool findDuplicateSafeState(IntPair *states); + + /** Remove a duplicate state from the safe table. + * @param duplStates The duplicate states. The first is kept, the second is removed. + * All references to the second in the state table are retargeted + * to the first. + */ + void removeSafeState(IntPair duplStates); + // Set functions for UVector. // TODO: make a USet subclass of UVector @@ -76,11 +146,13 @@ public: void printPosSets(RBBINode *n /* = NULL*/); void printStates(); void printRuleStatusTable(); + void printReverseTable(); #else #define printSet(s) #define printPosSets(n) #define printStates() #define printRuleStatusTable() + #define printReverseTable() #endif private: @@ -89,10 +161,14 @@ private: // table for. UErrorCode *fStatus; + /** State Descriptors, UVector */ UVector *fDStates; // D states (Aho's terminology) // Index is state number // Contents are RBBIStateDescriptor pointers. + /** Synthesized safe table, UVector of UnicodeString, one string per table row. */ + UVector *fSafeTable; + RBBITableBuilder(const RBBITableBuilder &other); // forbid copying of this class RBBITableBuilder &operator=(const RBBITableBuilder &other); // forbid copying of this class @@ -112,7 +188,7 @@ public: // with this state. Unordered (it's a set). // UVector contents are RBBINode * - UVector *fDtran; // Transitions out of this state. + UVector32 *fDtran; // Transitions out of this state. // indexed by input character // contents is int index of dest state // in RBBITableBuilder.fDStates diff --git a/icuSources/common/rbbitblb57.cpp b/icuSources/common/rbbitblb57.cpp new file mode 100644 index 00000000..e915db10 --- /dev/null +++ b/icuSources/common/rbbitblb57.cpp @@ -0,0 +1,1259 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +********************************************************************** +* Copyright (c) 2002-2016, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +*/ + + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_BREAK_ITERATION + +#include "unicode/unistr.h" +#include "rbbitblb57.h" +#include "rbbirb57.h" +#include "rbbisetb57.h" +#include "rbbidata57.h" +#include "cstring.h" +#include "uassert.h" +#include "cmemory.h" + +U_NAMESPACE_BEGIN + +RBBITableBuilder57::RBBITableBuilder57(RBBIRuleBuilder57 *rb, RBBINode **rootNode) : + fTree(*rootNode) { + fRB = rb; + fStatus = fRB->fStatus; + UErrorCode status = U_ZERO_ERROR; + fDStates = new UVector(status); + if (U_FAILURE(*fStatus)) { + return; + } + if (U_FAILURE(status)) { + *fStatus = status; + return; + } + if (fDStates == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR;; + } +} + + + +RBBITableBuilder57::~RBBITableBuilder57() { + int i; + for (i=0; isize(); i++) { + delete (RBBIStateDescriptor *)fDStates->elementAt(i); + } + delete fDStates; +} + + +//----------------------------------------------------------------------------- +// +// RBBITableBuilder57::build - This is the main function for building the DFA state transtion +// table from the RBBI rules parse tree. +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::build() { + + if (U_FAILURE(*fStatus)) { + return; + } + + // If there were no rules, just return. This situation can easily arise + // for the reverse rules. + if (fTree==NULL) { + return; + } + + // + // Walk through the tree, replacing any references to $variables with a copy of the + // parse tree for the substition expression. + // + fTree = fTree->flattenVariables(); +#ifdef RBBI_DEBUG + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "ftree")) { + RBBIDebugPuts("\nParse tree after flattening variable references."); + fTree->printTree(TRUE); + } +#endif + + // + // If the rules contained any references to {bof} + // add a {bof} to the + // tree. Means that all matches must start out with the + // {bof} fake character. + // + if (fRB->fSetBuilder->sawBOF()) { + RBBINode *bofTop = new RBBINode(RBBINode::opCat); + RBBINode *bofLeaf = new RBBINode(RBBINode::leafChar); + // Delete and exit if memory allocation failed. + if (bofTop == NULL || bofLeaf == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + delete bofTop; + delete bofLeaf; + return; + } + bofTop->fLeftChild = bofLeaf; + bofTop->fRightChild = fTree; + bofLeaf->fParent = bofTop; + bofLeaf->fVal = 2; // Reserved value for {bof}. + fTree = bofTop; + } + + // + // Add a unique right-end marker to the expression. + // Appears as a cat-node, left child being the original tree, + // right child being the end marker. + // + RBBINode *cn = new RBBINode(RBBINode::opCat); + // Exit if memory allocation failed. + if (cn == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + return; + } + cn->fLeftChild = fTree; + fTree->fParent = cn; + cn->fRightChild = new RBBINode(RBBINode::endMark); + // Delete and exit if memory allocation failed. + if (cn->fRightChild == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + delete cn; + return; + } + cn->fRightChild->fParent = cn; + fTree = cn; + + // + // Replace all references to UnicodeSets with the tree for the equivalent + // expression. + // + fTree->flattenSets(); +#ifdef RBBI_DEBUG + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "stree")) { + RBBIDebugPuts("\nParse tree after flattening Unicode Set references."); + fTree->printTree(TRUE); + } +#endif + + + // + // calculate the functions nullable, firstpos, lastpos and followpos on + // nodes in the parse tree. + // See the alogrithm description in Aho. + // Understanding how this works by looking at the code alone will be + // nearly impossible. + // + calcNullable(fTree); + calcFirstPos(fTree); + calcLastPos(fTree); + calcFollowPos(fTree); + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "pos")) { + RBBIDebugPuts("\n"); + printPosSets(fTree); + } + + // + // For "chained" rules, modify the followPos sets + // + if (fRB->fChainRules) { + calcChainedFollowPos(fTree); + } + + // + // BOF (start of input) test fixup. + // + if (fRB->fSetBuilder->sawBOF()) { + bofFixup(); + } + + // + // Build the DFA state transition tables. + // + buildStateTable(); + flagAcceptingStates(); + flagLookAheadStates(); + flagTaggedStates(); + + // + // Update the global table of rule status {tag} values + // The rule builder has a global vector of status values that are common + // for all tables. Merge the ones from this table into the global set. + // + mergeRuleStatusVals(); + + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "states")) {printStates();}; +} + + + +//----------------------------------------------------------------------------- +// +// calcNullable. Impossible to explain succinctly. See Aho, section 3.9 +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::calcNullable(RBBINode *n) { + if (n == NULL) { + return; + } + if (n->fType == RBBINode::setRef || + n->fType == RBBINode::endMark ) { + // These are non-empty leaf node types. + n->fNullable = FALSE; + return; + } + + if (n->fType == RBBINode::lookAhead || n->fType == RBBINode::tag) { + // Lookahead marker node. It's a leaf, so no recursion on children. + // It's nullable because it does not match any literal text from the input stream. + n->fNullable = TRUE; + return; + } + + + // The node is not a leaf. + // Calculate nullable on its children. + calcNullable(n->fLeftChild); + calcNullable(n->fRightChild); + + // Apply functions from table 3.40 in Aho + if (n->fType == RBBINode::opOr) { + n->fNullable = n->fLeftChild->fNullable || n->fRightChild->fNullable; + } + else if (n->fType == RBBINode::opCat) { + n->fNullable = n->fLeftChild->fNullable && n->fRightChild->fNullable; + } + else if (n->fType == RBBINode::opStar || n->fType == RBBINode::opQuestion) { + n->fNullable = TRUE; + } + else { + n->fNullable = FALSE; + } +} + + + + +//----------------------------------------------------------------------------- +// +// calcFirstPos. Impossible to explain succinctly. See Aho, section 3.9 +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::calcFirstPos(RBBINode *n) { + if (n == NULL) { + return; + } + if (n->fType == RBBINode::leafChar || + n->fType == RBBINode::endMark || + n->fType == RBBINode::lookAhead || + n->fType == RBBINode::tag) { + // These are non-empty leaf node types. + // Note: In order to maintain the sort invariant on the set, + // this function should only be called on a node whose set is + // empty to start with. + n->fFirstPosSet->addElement(n, *fStatus); + return; + } + + // The node is not a leaf. + // Calculate firstPos on its children. + calcFirstPos(n->fLeftChild); + calcFirstPos(n->fRightChild); + + // Apply functions from table 3.40 in Aho + if (n->fType == RBBINode::opOr) { + setAdd(n->fFirstPosSet, n->fLeftChild->fFirstPosSet); + setAdd(n->fFirstPosSet, n->fRightChild->fFirstPosSet); + } + else if (n->fType == RBBINode::opCat) { + setAdd(n->fFirstPosSet, n->fLeftChild->fFirstPosSet); + if (n->fLeftChild->fNullable) { + setAdd(n->fFirstPosSet, n->fRightChild->fFirstPosSet); + } + } + else if (n->fType == RBBINode::opStar || + n->fType == RBBINode::opQuestion || + n->fType == RBBINode::opPlus) { + setAdd(n->fFirstPosSet, n->fLeftChild->fFirstPosSet); + } +} + + + +//----------------------------------------------------------------------------- +// +// calcLastPos. Impossible to explain succinctly. See Aho, section 3.9 +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::calcLastPos(RBBINode *n) { + if (n == NULL) { + return; + } + if (n->fType == RBBINode::leafChar || + n->fType == RBBINode::endMark || + n->fType == RBBINode::lookAhead || + n->fType == RBBINode::tag) { + // These are non-empty leaf node types. + // Note: In order to maintain the sort invariant on the set, + // this function should only be called on a node whose set is + // empty to start with. + n->fLastPosSet->addElement(n, *fStatus); + return; + } + + // The node is not a leaf. + // Calculate lastPos on its children. + calcLastPos(n->fLeftChild); + calcLastPos(n->fRightChild); + + // Apply functions from table 3.40 in Aho + if (n->fType == RBBINode::opOr) { + setAdd(n->fLastPosSet, n->fLeftChild->fLastPosSet); + setAdd(n->fLastPosSet, n->fRightChild->fLastPosSet); + } + else if (n->fType == RBBINode::opCat) { + setAdd(n->fLastPosSet, n->fRightChild->fLastPosSet); + if (n->fRightChild->fNullable) { + setAdd(n->fLastPosSet, n->fLeftChild->fLastPosSet); + } + } + else if (n->fType == RBBINode::opStar || + n->fType == RBBINode::opQuestion || + n->fType == RBBINode::opPlus) { + setAdd(n->fLastPosSet, n->fLeftChild->fLastPosSet); + } +} + + + +//----------------------------------------------------------------------------- +// +// calcFollowPos. Impossible to explain succinctly. See Aho, section 3.9 +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::calcFollowPos(RBBINode *n) { + if (n == NULL || + n->fType == RBBINode::leafChar || + n->fType == RBBINode::endMark) { + return; + } + + calcFollowPos(n->fLeftChild); + calcFollowPos(n->fRightChild); + + // Aho rule #1 + if (n->fType == RBBINode::opCat) { + RBBINode *i; // is 'i' in Aho's description + uint32_t ix; + + UVector *LastPosOfLeftChild = n->fLeftChild->fLastPosSet; + + for (ix=0; ix<(uint32_t)LastPosOfLeftChild->size(); ix++) { + i = (RBBINode *)LastPosOfLeftChild->elementAt(ix); + setAdd(i->fFollowPos, n->fRightChild->fFirstPosSet); + } + } + + // Aho rule #2 + if (n->fType == RBBINode::opStar || + n->fType == RBBINode::opPlus) { + RBBINode *i; // again, n and i are the names from Aho's description. + uint32_t ix; + + for (ix=0; ix<(uint32_t)n->fLastPosSet->size(); ix++) { + i = (RBBINode *)n->fLastPosSet->elementAt(ix); + setAdd(i->fFollowPos, n->fFirstPosSet); + } + } + + + +} + +//----------------------------------------------------------------------------- +// +// addRuleRootNodes Recursively walk a parse tree, adding all nodes flagged +// as roots of a rule to a destination vector. +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::addRuleRootNodes(UVector *dest, RBBINode *node) { + if (node == NULL || U_FAILURE(*fStatus)) { + return; + } + if (node->fRuleRoot) { + dest->addElement(node, *fStatus); + // Note: rules cannot nest. If we found a rule start node, + // no child node can also be a start node. + return; + } + addRuleRootNodes(dest, node->fLeftChild); + addRuleRootNodes(dest, node->fRightChild); +} + +//----------------------------------------------------------------------------- +// +// calcChainedFollowPos. Modify the previously calculated followPos sets +// to implement rule chaining. NOT described by Aho +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::calcChainedFollowPos(RBBINode *tree) { + + UVector endMarkerNodes(*fStatus); + UVector leafNodes(*fStatus); + int32_t i; + + if (U_FAILURE(*fStatus)) { + return; + } + + // get a list of all endmarker nodes. + tree->findNodes(&endMarkerNodes, RBBINode::endMark, *fStatus); + + // get a list all leaf nodes + tree->findNodes(&leafNodes, RBBINode::leafChar, *fStatus); + if (U_FAILURE(*fStatus)) { + return; + } + + // Collect all leaf nodes that can start matches for rules + // with inbound chaining enabled, which is the union of the + // firstPosition sets from each of the rule root nodes. + + UVector ruleRootNodes(*fStatus); + addRuleRootNodes(&ruleRootNodes, tree); + + UVector matchStartNodes(*fStatus); + for (int i=0; i(ruleRootNodes.elementAt(i)); + if (node->fChainIn) { + setAdd(&matchStartNodes, node->fFirstPosSet); + } + } + if (U_FAILURE(*fStatus)) { + return; + } + + int32_t endNodeIx; + int32_t startNodeIx; + + for (endNodeIx=0; endNodeIxfFollowPos->contains(endMarkerNodes.elementAt(i))) { + endNode = tNode; + break; + } + } + if (endNode == NULL) { + // node wasn't an end node. Try again with the next. + continue; + } + + // We've got a node that can end a match. + + // Line Break Specific hack: If this node's val correspond to the $CM char class, + // don't chain from it. + // TODO: Add rule syntax for this behavior, get specifics out of here and + // into the rule file. + if (fRB->fLBCMNoChain || fRB->fRINoChain) { + UChar32 c = this->fRB->fSetBuilder->getFirstChar(endNode->fVal); + if (c != -1) { + // c == -1 occurs with sets containing only the {eof} marker string. + if (fRB->fLBCMNoChain) { + ULineBreak cLBProp = (ULineBreak)u_getIntPropertyValue(c, UCHAR_LINE_BREAK); + if (cLBProp == U_LB_COMBINING_MARK) { + continue; + } + } + if (fRB->fRINoChain) { + UGraphemeClusterBreak cGBProp = (UGraphemeClusterBreak)u_getIntPropertyValue(c, UCHAR_GRAPHEME_CLUSTER_BREAK); + if (cGBProp == U_GCB_REGIONAL_INDICATOR) { + continue; + } + } + } + } + + + // Now iterate over the nodes that can start a match, looking for ones + // with the same char class as our ending node. + RBBINode *startNode; + for (startNodeIx = 0; startNodeIxfType != RBBINode::leafChar) { + continue; + } + + if (endNode->fVal == startNode->fVal) { + // The end val (character class) of one possible match is the + // same as the start of another. + + // Add all nodes from the followPos of the start node to the + // followPos set of the end node, which will have the effect of + // letting matches transition from a match state at endNode + // to the second char of a match starting with startNode. + setAdd(endNode->fFollowPos, startNode->fFollowPos); + } + } + } +} + + +//----------------------------------------------------------------------------- +// +// bofFixup. Fixup for state tables that include {bof} beginning of input testing. +// Do an swizzle similar to chaining, modifying the followPos set of +// the bofNode to include the followPos nodes from other {bot} nodes +// scattered through the tree. +// +// This function has much in common with calcChainedFollowPos(). +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::bofFixup() { + + if (U_FAILURE(*fStatus)) { + return; + } + + // The parse tree looks like this ... + // fTree root ---> + // / \ . + // <#end node> + // / \ . + // rest + // of tree + // + // We will be adding things to the followPos set of the + // + RBBINode *bofNode = fTree->fLeftChild->fLeftChild; + U_ASSERT(bofNode->fType == RBBINode::leafChar); + U_ASSERT(bofNode->fVal == 2); + + // Get all nodes that can be the start a match of the user-written rules + // (excluding the fake bofNode) + // We want the nodes that can start a match in the + // part labeled "rest of tree" + // + UVector *matchStartNodes = fTree->fLeftChild->fRightChild->fFirstPosSet; + + RBBINode *startNode; + int startNodeIx; + for (startNodeIx = 0; startNodeIxsize(); startNodeIx++) { + startNode = (RBBINode *)matchStartNodes->elementAt(startNodeIx); + if (startNode->fType != RBBINode::leafChar) { + continue; + } + + if (startNode->fVal == bofNode->fVal) { + // We found a leaf node corresponding to a {bof} that was + // explicitly written into a rule. + // Add everything from the followPos set of this node to the + // followPos set of the fake bofNode at the start of the tree. + // + setAdd(bofNode->fFollowPos, startNode->fFollowPos); + } + } +} + +//----------------------------------------------------------------------------- +// +// buildStateTable() Determine the set of runtime DFA states and the +// transition tables for these states, by the algorithm +// of fig. 3.44 in Aho. +// +// Most of the comments are quotes of Aho's psuedo-code. +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::buildStateTable() { + if (U_FAILURE(*fStatus)) { + return; + } + RBBIStateDescriptor *failState; + // Set it to NULL to avoid uninitialized warning + RBBIStateDescriptor *initialState = NULL; + // + // Add a dummy state 0 - the stop state. Not from Aho. + int lastInputSymbol = fRB->fSetBuilder->getNumCharCategories() - 1; + failState = new RBBIStateDescriptor(lastInputSymbol, fStatus); + if (failState == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + goto ExitBuildSTdeleteall; + } + failState->fPositions = new UVector(*fStatus); + if (failState->fPositions == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + } + if (failState->fPositions == NULL || U_FAILURE(*fStatus)) { + goto ExitBuildSTdeleteall; + } + fDStates->addElement(failState, *fStatus); + if (U_FAILURE(*fStatus)) { + goto ExitBuildSTdeleteall; + } + + // initially, the only unmarked state in Dstates is firstpos(root), + // where toot is the root of the syntax tree for (r)#; + initialState = new RBBIStateDescriptor(lastInputSymbol, fStatus); + if (initialState == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + } + if (U_FAILURE(*fStatus)) { + goto ExitBuildSTdeleteall; + } + initialState->fPositions = new UVector(*fStatus); + if (initialState->fPositions == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + } + if (U_FAILURE(*fStatus)) { + goto ExitBuildSTdeleteall; + } + setAdd(initialState->fPositions, fTree->fFirstPosSet); + fDStates->addElement(initialState, *fStatus); + if (U_FAILURE(*fStatus)) { + goto ExitBuildSTdeleteall; + } + + // while there is an unmarked state T in Dstates do begin + for (;;) { + RBBIStateDescriptor *T = NULL; + int32_t tx; + for (tx=1; txsize(); tx++) { + RBBIStateDescriptor *temp; + temp = (RBBIStateDescriptor *)fDStates->elementAt(tx); + if (temp->fMarked == FALSE) { + T = temp; + break; + } + } + if (T == NULL) { + break; + } + + // mark T; + T->fMarked = TRUE; + + // for each input symbol a do begin + int32_t a; + for (a = 1; a<=lastInputSymbol; a++) { + // let U be the set of positions that are in followpos(p) + // for some position p in T + // such that the symbol at position p is a; + UVector *U = NULL; + RBBINode *p; + int32_t px; + for (px=0; pxfPositions->size(); px++) { + p = (RBBINode *)T->fPositions->elementAt(px); + if ((p->fType == RBBINode::leafChar) && (p->fVal == a)) { + if (U == NULL) { + U = new UVector(*fStatus); + if (U == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + goto ExitBuildSTdeleteall; + } + } + setAdd(U, p->fFollowPos); + } + } + + // if U is not empty and not in DStates then + int32_t ux = 0; + UBool UinDstates = FALSE; + if (U != NULL) { + U_ASSERT(U->size() > 0); + int ix; + for (ix=0; ixsize(); ix++) { + RBBIStateDescriptor *temp2; + temp2 = (RBBIStateDescriptor *)fDStates->elementAt(ix); + if (setEquals(U, temp2->fPositions)) { + delete U; + U = temp2->fPositions; + ux = ix; + UinDstates = TRUE; + break; + } + } + + // Add U as an unmarked state to Dstates + if (!UinDstates) + { + RBBIStateDescriptor *newState = new RBBIStateDescriptor(lastInputSymbol, fStatus); + if (newState == NULL) { + *fStatus = U_MEMORY_ALLOCATION_ERROR; + } + if (U_FAILURE(*fStatus)) { + goto ExitBuildSTdeleteall; + } + newState->fPositions = U; + fDStates->addElement(newState, *fStatus); + if (U_FAILURE(*fStatus)) { + return; + } + ux = fDStates->size()-1; + } + + // Dtran[T, a] := U; + T->fDtran->setElementAt(ux, a); + } + } + } + return; + // delete local pointers only if error occured. +ExitBuildSTdeleteall: + delete initialState; + delete failState; +} + + + +//----------------------------------------------------------------------------- +// +// flagAcceptingStates Identify accepting states. +// First get a list of all of the end marker nodes. +// Then, for each state s, +// if s contains one of the end marker nodes in its list of tree positions then +// s is an accepting state. +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::flagAcceptingStates() { + if (U_FAILURE(*fStatus)) { + return; + } + UVector endMarkerNodes(*fStatus); + RBBINode *endMarker; + int32_t i; + int32_t n; + + if (U_FAILURE(*fStatus)) { + return; + } + + fTree->findNodes(&endMarkerNodes, RBBINode::endMark, *fStatus); + if (U_FAILURE(*fStatus)) { + return; + } + + for (i=0; isize(); n++) { + RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n); + if (sd->fPositions->indexOf(endMarker) >= 0) { + // Any non-zero value for fAccepting means this is an accepting node. + // The value is what will be returned to the user as the break status. + // If no other value was specified, force it to -1. + + if (sd->fAccepting==0) { + // State hasn't been marked as accepting yet. Do it now. + sd->fAccepting = endMarker->fVal; + if (sd->fAccepting == 0) { + sd->fAccepting = -1; + } + } + if (sd->fAccepting==-1 && endMarker->fVal != 0) { + // Both lookahead and non-lookahead accepting for this state. + // Favor the look-ahead. Expedient for line break. + // TODO: need a more elegant resolution for conflicting rules. + sd->fAccepting = endMarker->fVal; + } + // implicit else: + // if sd->fAccepting already had a value other than 0 or -1, leave it be. + + // If the end marker node is from a look-ahead rule, set + // the fLookAhead field or this state also. + if (endMarker->fLookAheadEnd) { + // TODO: don't change value if already set? + // TODO: allow for more than one active look-ahead rule in engine. + // Make value here an index to a side array in engine? + sd->fLookAhead = sd->fAccepting; + } + } + } + } +} + + +//----------------------------------------------------------------------------- +// +// flagLookAheadStates Very similar to flagAcceptingStates, above. +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::flagLookAheadStates() { + if (U_FAILURE(*fStatus)) { + return; + } + UVector lookAheadNodes(*fStatus); + RBBINode *lookAheadNode; + int32_t i; + int32_t n; + + fTree->findNodes(&lookAheadNodes, RBBINode::lookAhead, *fStatus); + if (U_FAILURE(*fStatus)) { + return; + } + for (i=0; isize(); n++) { + RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n); + if (sd->fPositions->indexOf(lookAheadNode) >= 0) { + sd->fLookAhead = lookAheadNode->fVal; + } + } + } +} + + + + +//----------------------------------------------------------------------------- +// +// flagTaggedStates +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::flagTaggedStates() { + if (U_FAILURE(*fStatus)) { + return; + } + UVector tagNodes(*fStatus); + RBBINode *tagNode; + int32_t i; + int32_t n; + + if (U_FAILURE(*fStatus)) { + return; + } + fTree->findNodes(&tagNodes, RBBINode::tag, *fStatus); + if (U_FAILURE(*fStatus)) { + return; + } + for (i=0; isize(); n++) { // For each state s (row in the state table) + RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n); + if (sd->fPositions->indexOf(tagNode) >= 0) { // if s include the tag node t + sortedAdd(&sd->fTagVals, tagNode->fVal); + } + } + } +} + + + + +//----------------------------------------------------------------------------- +// +// mergeRuleStatusVals +// +// Update the global table of rule status {tag} values +// The rule builder has a global vector of status values that are common +// for all tables. Merge the ones from this table into the global set. +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::mergeRuleStatusVals() { + // + // The basic outline of what happens here is this... + // + // for each state in this state table + // if the status tag list for this state is in the global statuses list + // record where and + // continue with the next state + // else + // add the tag list for this state to the global list. + // + int i; + int n; + + // Pre-set a single tag of {0} into the table. + // We will need this as a default, for rule sets with no explicit tagging. + if (fRB->fRuleStatusVals->size() == 0) { + fRB->fRuleStatusVals->addElement(1, *fStatus); // Num of statuses in group + fRB->fRuleStatusVals->addElement((int32_t)0, *fStatus); // and our single status of zero + } + + // For each state + for (n=0; nsize(); n++) { + RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n); + UVector *thisStatesTagValues = sd->fTagVals; + if (thisStatesTagValues == NULL) { + // No tag values are explicitly associated with this state. + // Set the default tag value. + sd->fTagsIdx = 0; + continue; + } + + // There are tag(s) associated with this state. + // fTagsIdx will be the index into the global tag list for this state's tag values. + // Initial value of -1 flags that we haven't got it set yet. + sd->fTagsIdx = -1; + int32_t thisTagGroupStart = 0; // indexes into the global rule status vals list + int32_t nextTagGroupStart = 0; + + // Loop runs once per group of tags in the global list + while (nextTagGroupStart < fRB->fRuleStatusVals->size()) { + thisTagGroupStart = nextTagGroupStart; + nextTagGroupStart += fRB->fRuleStatusVals->elementAti(thisTagGroupStart) + 1; + if (thisStatesTagValues->size() != fRB->fRuleStatusVals->elementAti(thisTagGroupStart)) { + // The number of tags for this state is different from + // the number of tags in this group from the global list. + // Continue with the next group from the global list. + continue; + } + // The lengths match, go ahead and compare the actual tag values + // between this state and the group from the global list. + for (i=0; isize(); i++) { + if (thisStatesTagValues->elementAti(i) != + fRB->fRuleStatusVals->elementAti(thisTagGroupStart + 1 + i) ) { + // Mismatch. + break; + } + } + + if (i == thisStatesTagValues->size()) { + // We found a set of tag values in the global list that match + // those for this state. Use them. + sd->fTagsIdx = thisTagGroupStart; + break; + } + } + + if (sd->fTagsIdx == -1) { + // No suitable entry in the global tag list already. Add one + sd->fTagsIdx = fRB->fRuleStatusVals->size(); + fRB->fRuleStatusVals->addElement(thisStatesTagValues->size(), *fStatus); + for (i=0; isize(); i++) { + fRB->fRuleStatusVals->addElement(thisStatesTagValues->elementAti(i), *fStatus); + } + } + } +} + + + + + + + +//----------------------------------------------------------------------------- +// +// sortedAdd Add a value to a vector of sorted values (ints). +// Do not replicate entries; if the value is already there, do not +// add a second one. +// Lazily create the vector if it does not already exist. +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::sortedAdd(UVector **vector, int32_t val) { + int32_t i; + + if (*vector == NULL) { + *vector = new UVector(*fStatus); + } + if (*vector == NULL || U_FAILURE(*fStatus)) { + return; + } + UVector *vec = *vector; + int32_t vSize = vec->size(); + for (i=0; ielementAti(i); + if (valAtI == val) { + // The value is already in the vector. Don't add it again. + return; + } + if (valAtI > val) { + break; + } + } + vec->insertElementAt(val, i, *fStatus); +} + + + +//----------------------------------------------------------------------------- +// +// setAdd Set operation on UVector +// dest = dest union source +// Elements may only appear once and must be sorted. +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::setAdd(UVector *dest, UVector *source) { + int32_t destOriginalSize = dest->size(); + int32_t sourceSize = source->size(); + int32_t di = 0; + MaybeStackArray destArray, sourceArray; // Handle small cases without malloc + void **destPtr, **sourcePtr; + void **destLim, **sourceLim; + + if (destOriginalSize > destArray.getCapacity()) { + if (destArray.resize(destOriginalSize) == NULL) { + return; + } + } + destPtr = destArray.getAlias(); + destLim = destPtr + destOriginalSize; // destArray.getArrayLimit()? + + if (sourceSize > sourceArray.getCapacity()) { + if (sourceArray.resize(sourceSize) == NULL) { + return; + } + } + sourcePtr = sourceArray.getAlias(); + sourceLim = sourcePtr + sourceSize; // sourceArray.getArrayLimit()? + + // Avoid multiple "get element" calls by getting the contents into arrays + (void) dest->toArray(destPtr); + (void) source->toArray(sourcePtr); + + dest->setSize(sourceSize+destOriginalSize, *fStatus); + + while (sourcePtr < sourceLim && destPtr < destLim) { + if (*destPtr == *sourcePtr) { + dest->setElementAt(*sourcePtr++, di++); + destPtr++; + } + // This check is required for machines with segmented memory, like i5/OS. + // Direct pointer comparison is not recommended. + else if (uprv_memcmp(destPtr, sourcePtr, sizeof(void *)) < 0) { + dest->setElementAt(*destPtr++, di++); + } + else { /* *sourcePtr < *destPtr */ + dest->setElementAt(*sourcePtr++, di++); + } + } + + // At most one of these two cleanup loops will execute + while (destPtr < destLim) { + dest->setElementAt(*destPtr++, di++); + } + while (sourcePtr < sourceLim) { + dest->setElementAt(*sourcePtr++, di++); + } + + dest->setSize(di, *fStatus); +} + + + +//----------------------------------------------------------------------------- +// +// setEqual Set operation on UVector. +// Compare for equality. +// Elements must be sorted. +// +//----------------------------------------------------------------------------- +UBool RBBITableBuilder57::setEquals(UVector *a, UVector *b) { + return a->equals(*b); +} + + +//----------------------------------------------------------------------------- +// +// printPosSets Debug function. Dump Nullable, firstpos, lastpos and followpos +// for each node in the tree. +// +//----------------------------------------------------------------------------- +#ifdef RBBI_DEBUG +void RBBITableBuilder57::printPosSets(RBBINode *n) { + if (n==NULL) { + return; + } + printf("\n"); + RBBINode::printNodeHeader(); + n->printNode(); + RBBIDebugPrintf(" Nullable: %s\n", n->fNullable?"TRUE":"FALSE"); + + RBBIDebugPrintf(" firstpos: "); + printSet(n->fFirstPosSet); + + RBBIDebugPrintf(" lastpos: "); + printSet(n->fLastPosSet); + + RBBIDebugPrintf(" followpos: "); + printSet(n->fFollowPos); + + printPosSets(n->fLeftChild); + printPosSets(n->fRightChild); +} +#endif + + + +//----------------------------------------------------------------------------- +// +// getTableSize() Calculate the size of the runtime form of this +// state transition table. +// +//----------------------------------------------------------------------------- +int32_t RBBITableBuilder57::getTableSize() const { + int32_t size = 0; + int32_t numRows; + int32_t numCols; + int32_t rowSize; + + if (fTree == NULL) { + return 0; + } + + size = sizeof(RBBIStateTable) - 4; // The header, with no rows to the table. + + numRows = fDStates->size(); + numCols = fRB->fSetBuilder->getNumCharCategories(); + + // Note The declaration of RBBIStateTableRow is for a table of two columns. + // Therefore we subtract two from numCols when determining + // how much storage to add to a row for the total columns. + rowSize = sizeof(RBBIStateTableRow) + sizeof(uint16_t)*(numCols-2); + size += numRows * rowSize; + return size; +} + + + +//----------------------------------------------------------------------------- +// +// exportTable() export the state transition table in the format required +// by the runtime engine. getTableSize() bytes of memory +// must be available at the output address "where". +// +//----------------------------------------------------------------------------- +void RBBITableBuilder57::exportTable(void *where) { + RBBIStateTable *table = (RBBIStateTable *)where; + uint32_t state; + int col; + + if (U_FAILURE(*fStatus) || fTree == NULL) { + return; + } + + if (fRB->fSetBuilder->getNumCharCategories() > 0x7fff || + fDStates->size() > 0x7fff) { + *fStatus = U_BRK_INTERNAL_ERROR; + return; + } + + table->fRowLen = sizeof(RBBIStateTableRow) + + sizeof(uint16_t) * (fRB->fSetBuilder->getNumCharCategories() - 2); + table->fNumStates = fDStates->size(); + table->fFlags = 0; + if (fRB->fLookAheadHardBreak) { + table->fFlags |= RBBI_LOOKAHEAD_HARD_BREAK; + } + if (fRB->fSetBuilder->sawBOF()) { + table->fFlags |= RBBI_BOF_REQUIRED; + } + table->fReserved = 0; + + for (state=0; statefNumStates; state++) { + RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(state); + RBBIStateTableRow *row = (RBBIStateTableRow *)(table->fTableData + state*table->fRowLen); + U_ASSERT (-32768 < sd->fAccepting && sd->fAccepting <= 32767); + U_ASSERT (-32768 < sd->fLookAhead && sd->fLookAhead <= 32767); + row->fAccepting = (int16_t)sd->fAccepting; + row->fLookAhead = (int16_t)sd->fLookAhead; + row->fTagIdx = (int16_t)sd->fTagsIdx; + for (col=0; colfSetBuilder->getNumCharCategories(); col++) { + row->fNextState[col] = (uint16_t)sd->fDtran->elementAti(col); + } + } +} + + + +//----------------------------------------------------------------------------- +// +// printSet Debug function. Print the contents of a UVector +// +//----------------------------------------------------------------------------- +#ifdef RBBI_DEBUG +void RBBITableBuilder57::printSet(UVector *s) { + int32_t i; + for (i=0; isize(); i++) { + const RBBINode *v = static_cast(s->elementAt(i)); + RBBIDebugPrintf("%5d", v==NULL? -1 : v->fSerialNum); + } + RBBIDebugPrintf("\n"); +} +#endif + + +//----------------------------------------------------------------------------- +// +// printStates Debug Function. Dump the fully constructed state transition table. +// +//----------------------------------------------------------------------------- +#ifdef RBBI_DEBUG +void RBBITableBuilder57::printStates() { + int c; // input "character" + int n; // state number + + RBBIDebugPrintf("state | i n p u t s y m b o l s \n"); + RBBIDebugPrintf(" | Acc LA Tag"); + for (c=0; cfSetBuilder->getNumCharCategories(); c++) { + RBBIDebugPrintf(" %2d", c); + } + RBBIDebugPrintf("\n"); + RBBIDebugPrintf(" |---------------"); + for (c=0; cfSetBuilder->getNumCharCategories(); c++) { + RBBIDebugPrintf("---"); + } + RBBIDebugPrintf("\n"); + + for (n=0; nsize(); n++) { + RBBIStateDescriptor *sd = (RBBIStateDescriptor *)fDStates->elementAt(n); + RBBIDebugPrintf(" %3d | " , n); + RBBIDebugPrintf("%3d %3d %5d ", sd->fAccepting, sd->fLookAhead, sd->fTagsIdx); + for (c=0; cfSetBuilder->getNumCharCategories(); c++) { + RBBIDebugPrintf(" %2d", sd->fDtran->elementAti(c)); + } + RBBIDebugPrintf("\n"); + } + RBBIDebugPrintf("\n\n"); +} +#endif + + + +//----------------------------------------------------------------------------- +// +// printRuleStatusTable Debug Function. Dump the common rule status table +// +//----------------------------------------------------------------------------- +#ifdef RBBI_DEBUG +void RBBITableBuilder57::printRuleStatusTable() { + int32_t thisRecord = 0; + int32_t nextRecord = 0; + int i; + UVector *tbl = fRB->fRuleStatusVals; + + RBBIDebugPrintf("index | tags \n"); + RBBIDebugPrintf("-------------------\n"); + + while (nextRecord < tbl->size()) { + thisRecord = nextRecord; + nextRecord = thisRecord + tbl->elementAti(thisRecord) + 1; + RBBIDebugPrintf("%4d ", thisRecord); + for (i=thisRecord+1; ielementAti(i)); + } + RBBIDebugPrintf("\n"); + } + RBBIDebugPrintf("\n\n"); +} +#endif + + +//----------------------------------------------------------------------------- +// +// RBBIStateDescriptor - in standard rbbitblb.cpp +// +//----------------------------------------------------------------------------- + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/rbbitblb57.h b/icuSources/common/rbbitblb57.h new file mode 100644 index 00000000..25f28dcb --- /dev/null +++ b/icuSources/common/rbbitblb57.h @@ -0,0 +1,109 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +********************************************************************** +* Copyright (c) 2002-2016, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +* +********************************************************************** +* Legacy version of RBBITableBuilder from ICU 57, +* only for use by Apple RuleBasedTokenizer +********************************************************************** +*/ + +#ifndef RBBITBLB57_H +#define RBBITBLB57_H + +#include "unicode/utypes.h" +#include "unicode/uobject.h" +#include "uvectr32.h" +#include "rbbitblb.h" +#include "rbbi57.h" +#include "rbbinode.h" + + +U_NAMESPACE_BEGIN + +class RBBIRuleScanner57; +class RBBIRuleBuilder57; +class UVector32; + +// +// class RBBITableBuilder57 is part of the RBBI rule compiler. +// It builds the state transition table used by the RBBI runtime +// from the expression syntax tree generated by the rule scanner. +// +// This class is part of the RBBI implementation only. +// There is no user-visible public API here. +// + +class RBBITableBuilder57 : public UMemory { +public: + RBBITableBuilder57(RBBIRuleBuilder57 *rb, RBBINode **rootNode); + ~RBBITableBuilder57(); + + void build(); + int32_t getTableSize() const; // Return the runtime size in bytes of + // the built state table + void exportTable(void *where); // fill in the runtime state table. + // Sufficient memory must exist at + // the specified location. + + +private: + void calcNullable(RBBINode *n); + void calcFirstPos(RBBINode *n); + void calcLastPos(RBBINode *n); + void calcFollowPos(RBBINode *n); + void calcChainedFollowPos(RBBINode *n); + void bofFixup(); + void buildStateTable(); + void flagAcceptingStates(); + void flagLookAheadStates(); + void flagTaggedStates(); + void mergeRuleStatusVals(); + + void addRuleRootNodes(UVector *dest, RBBINode *node); + + // Set functions for UVector. + // TODO: make a USet subclass of UVector + + void setAdd(UVector *dest, UVector *source); + UBool setEquals(UVector *a, UVector *b); + + void sortedAdd(UVector **dest, int32_t val); + +public: +#ifdef RBBI_DEBUG + void printSet(UVector *s); + void printPosSets(RBBINode *n /* = NULL*/); + void printStates(); + void printRuleStatusTable(); +#else + #define printSet(s) + #define printPosSets(n) + #define printStates() + #define printRuleStatusTable() +#endif + +private: + RBBIRuleBuilder57 *fRB; + RBBINode *&fTree; // The root node of the parse tree to build a + // table for. + UErrorCode *fStatus; + + UVector *fDStates; // D states (Aho's terminology) + // Index is state number + // Contents are RBBIStateDescriptor pointers. + + + RBBITableBuilder57(const RBBITableBuilder57 &other); // forbid copying of this class + RBBITableBuilder57 &operator=(const RBBITableBuilder57 &other); // forbid copying of this class +}; + +// class RBBIStateDescriptor - use standard rbbitblb.h + + +U_NAMESPACE_END +#endif diff --git a/icuSources/common/rbtok.cpp b/icuSources/common/rbtok.cpp index 6104c127..9182b5ce 100644 --- a/icuSources/common/rbtok.cpp +++ b/icuSources/common/rbtok.cpp @@ -1,6 +1,6 @@ /* *************************************************************************** -* Copyright (C) 2006-2008,2017 Apple Inc. All Rights Reserved. * +* Copyright (C) 2006-2008,2017-2018 Apple Inc. All Rights Reserved. * *************************************************************************** */ @@ -8,11 +8,11 @@ #if !UCONFIG_NO_BREAK_ITERATION -#include "rbtok.h" #include "unicode/ustring.h" #include "unicode/utext.h" -#include "rbbidata.h" -#include "rbbirb.h" +#include "rbbidata57.h" +#include "rbbi57.h" +#include "rbtok.h" #include "uassert.h" #ifdef RBBI_DEBUG @@ -60,8 +60,7 @@ int32_t RuleBasedTokenizer::tokenize(int32_t maxTokens, RuleBasedTokenRange *out // const UTrie *trie = &fData->fTrie; while (outTokenP < outTokenLimit) { - // LookAheadResults lookAheadMatches; // added in RBBI, #12081/r38387 - result = prev; // fallback initialization, prevent uninitialized use + result = prev; // fallback initialization c = UTEXT_NEXT32(text); if (c == U_SENTINEL) { @@ -140,10 +139,7 @@ int32_t RuleBasedTokenizer::tokenize(int32_t maxTokens, RuleBasedTokenRange *out //lastStatusRow = row; lastAcceptingState = state; } - - // rbbi has added code here to check lookAheadMatches and - // set lookAheadMatches, per open-source ICU #12081/r38387 - + if (state == STOP_STATE) { // This is the normal exit from the lookup state machine. // We have advanced through the string until it is certain that no @@ -260,7 +256,7 @@ RuleBasedTokenizer::init() } RuleBasedTokenizer::RuleBasedTokenizer(const UnicodeString &rules, UParseError &parseErr, UErrorCode &err) - : RuleBasedBreakIterator(rules, parseErr, err) + : RuleBasedBreakIterator57(rules, parseErr, err) { if (U_SUCCESS(err)) { init(); @@ -268,7 +264,7 @@ RuleBasedTokenizer::RuleBasedTokenizer(const UnicodeString &rules, UParseError & } RuleBasedTokenizer::RuleBasedTokenizer(uint8_t *data, UErrorCode &status) - : RuleBasedBreakIterator((RBBIDataHeader *)data, status) + : RuleBasedBreakIterator57((RBBIDataHeader57 *)data, status) { if (U_SUCCESS(status)) { init(); @@ -276,7 +272,7 @@ RuleBasedTokenizer::RuleBasedTokenizer(uint8_t *data, UErrorCode &status) } RuleBasedTokenizer::RuleBasedTokenizer(const uint8_t *data, enum EDontAdopt, UErrorCode &status) - : RuleBasedBreakIterator((const RBBIDataHeader *)data, RuleBasedBreakIterator::kDontAdopt, status) + : RuleBasedBreakIterator57((const RBBIDataHeader57 *)data, RuleBasedBreakIterator57::kDontAdopt, status) { if (U_SUCCESS(status)) { init(); diff --git a/icuSources/common/rbtok.h b/icuSources/common/rbtok.h index a23c053c..2e40b583 100644 --- a/icuSources/common/rbtok.h +++ b/icuSources/common/rbtok.h @@ -1,6 +1,13 @@ /* *************************************************************************** -* Copyright (C) 2006-2008 Apple Inc. All Rights Reserved. * +* Copyright (C) 2006-2008, 2018 Apple Inc. All Rights Reserved. * +*************************************************************************** +* +*************************************************************************** +* This uses the ICU 57 legacy version of RuleBasedBreakIterator for +* performanc reasons, does not support the RuleBasedBreakIterator rule +* syntax updates from ICU 60 and later, and requires both forward and +* reverse rules (as in ICU 57). *************************************************************************** */ @@ -17,25 +24,26 @@ #if !UCONFIG_NO_BREAK_ITERATION #include "unicode/urbtok.h" -#include "unicode/rbbi.h" #include "unicode/parseerr.h" +#include "rbbidata57.h" +#include "rbbi57.h" U_NAMESPACE_BEGIN /** @internal */ -struct RBBIDataHeader; +struct RBBIDataHeader57; struct RBBIStateTableRow; /** * - * A subclass of RuleBasedBreakIterator that adds tokenization functionality. + * A subclass of RuleBasedBreakIterator57 that adds tokenization functionality. - *

This class is for internal use only by Apple Computer, Inc.

+ *

This class is for internal use only by Apple Inc.

* */ -class U_COMMON_API RuleBasedTokenizer : public RuleBasedBreakIterator { +class U_COMMON_API RuleBasedTokenizer : public RuleBasedBreakIterator57 { private: /** @@ -63,7 +71,7 @@ public: * @param parseError In the event of a syntax error in the rules, provides the location * within the rules of the problem. * @param status Information on any errors encountered. - * @internal + * @internal, used by urbtok57.cpp */ RuleBasedTokenizer(const UnicodeString &rules, UParseError &parseErr, UErrorCode &status); @@ -75,7 +83,7 @@ public: * * The break iterator adopts the memory, and will * free it when done. - * @internal + * @internal, used by urbtok57.cpp */ RuleBasedTokenizer(uint8_t *data, UErrorCode &status); @@ -85,7 +93,7 @@ public: * * This version does not adopt the memory, and does not * free it when done. - * @internal + * @internal, used by urbtok57.cpp */ enum EDontAdopt { kDontAdopt @@ -103,7 +111,7 @@ public: * @param maxTokens The maximum number of tokens to return. * @param outTokenRanges Pointer to output array of token ranges. * @param outTokenFlags (optional) pointer to output array of token flags. - * @internal + * @internal, used by urbtok57.cpp */ int32_t tokenize(int32_t maxTokens, RuleBasedTokenRange *outTokenRanges, unsigned long *outTokenFlags); diff --git a/icuSources/common/serv.cpp b/icuSources/common/serv.cpp index de29c641..959ab604 100644 --- a/icuSources/common/serv.cpp +++ b/icuSources/common/serv.cpp @@ -547,16 +547,15 @@ outerEnd: if (putInCache && cacheResult) { serviceCache->put(result->actualDescriptor, result, status); if (U_FAILURE(status)) { - delete result; return NULL; } if (cacheDescriptorList._obj != NULL) { for (int32_t i = cacheDescriptorList._obj->size(); --i >= 0;) { UnicodeString* desc = (UnicodeString*)cacheDescriptorList._obj->elementAt(i); + serviceCache->put(*desc, result, status); if (U_FAILURE(status)) { - delete result; return NULL; } diff --git a/icuSources/common/sharedobject.cpp b/icuSources/common/sharedobject.cpp index 37aa458e..6eeca860 100644 --- a/icuSources/common/sharedobject.cpp +++ b/icuSources/common/sharedobject.cpp @@ -8,7 +8,10 @@ * sharedobject.cpp */ #include "sharedobject.h" +#include "mutex.h" #include "uassert.h" +#include "umutex.h" +#include "unifiedcache.h" U_NAMESPACE_BEGIN @@ -17,69 +20,41 @@ SharedObject::~SharedObject() {} UnifiedCacheBase::~UnifiedCacheBase() {} void -SharedObject::addRef(UBool fromWithinCache) const { - umtx_atomic_inc(&totalRefCount); - - // Although items in use may not be correct immediately, it - // will be correct eventually. - if (umtx_atomic_inc(&hardRefCount) == 1 && cachePtr != NULL) { - // If this object is cached, and the hardRefCount goes from 0 to 1, - // then the increment must happen from within the cache while the - // cache global mutex is locked. In this way, we can be rest assured - // that data races can't happen if the cache performs some task if - // the hardRefCount is zero while the global cache mutex is locked. - (void)fromWithinCache; // Suppress unused variable warning in non-debug builds. - U_ASSERT(fromWithinCache); - cachePtr->incrementItemsInUse(); - } +SharedObject::addRef() const { + umtx_atomic_inc(&hardRefCount); } +// removeRef Decrement the reference count and delete if it is zero. +// Note that SharedObjects with a non-null cachePtr are owned by the +// unified cache, and the cache will be responsible for the actual deletion. +// The deletion could be as soon as immediately following the +// update to the reference count, if another thread is running +// a cache eviction cycle concurrently. +// NO ACCESS TO *this PERMITTED AFTER REFERENCE COUNT == 0 for cached objects. +// THE OBJECT MAY ALREADY BE GONE. void -SharedObject::removeRef(UBool fromWithinCache) const { - UBool decrementItemsInUse = (umtx_atomic_dec(&hardRefCount) == 0); - UBool allReferencesGone = (umtx_atomic_dec(&totalRefCount) == 0); - - // Although items in use may not be correct immediately, it - // will be correct eventually. - if (decrementItemsInUse && cachePtr != NULL) { - if (fromWithinCache) { - cachePtr->decrementItemsInUse(); +SharedObject::removeRef() const { + const UnifiedCacheBase *cache = this->cachePtr; + int32_t updatedRefCount = umtx_atomic_dec(&hardRefCount); + U_ASSERT(updatedRefCount >= 0); + if (updatedRefCount == 0) { + if (cache) { + cache->handleUnreferencedObject(); } else { - cachePtr->decrementItemsInUseWithLockingAndEviction(); + delete this; } } - if (allReferencesGone) { - delete this; - } } -void -SharedObject::addSoftRef() const { - umtx_atomic_inc(&totalRefCount); - ++softRefCount; -} - -void -SharedObject::removeSoftRef() const { - --softRefCount; - if (umtx_atomic_dec(&totalRefCount) == 0) { - delete this; - } -} int32_t SharedObject::getRefCount() const { - return umtx_loadAcquire(totalRefCount); -} - -int32_t -SharedObject::getHardRefCount() const { return umtx_loadAcquire(hardRefCount); } void SharedObject::deleteIfZeroRefCount() const { - if(getRefCount() == 0) { + if (this->cachePtr == nullptr && getRefCount() == 0) { delete this; } } diff --git a/icuSources/common/sharedobject.h b/icuSources/common/sharedobject.h index d1326518..75c4ec38 100644 --- a/icuSources/common/sharedobject.h +++ b/icuSources/common/sharedobject.h @@ -17,6 +17,8 @@ U_NAMESPACE_BEGIN +class SharedObject; + /** * Base class for unified cache exposing enough methods to SharedObject * instances to allow their addRef() and removeRef() methods to @@ -28,22 +30,12 @@ public: UnifiedCacheBase() { } /** - * Called by addRefWhileHoldingCacheLock() when the hard reference count - * of its instance goes from 0 to 1. + * Notify the cache implementation that an object was seen transitioning to + * zero hard references. The cache may use this to keep track the number of + * unreferenced SharedObjects, and to trigger evictions. */ - virtual void incrementItemsInUse() const = 0; + virtual void handleUnreferencedObject() const = 0; - /** - * Called by removeRef() when the hard reference count of its instance - * drops from 1 to 0. - */ - virtual void decrementItemsInUseWithLockingAndEviction() const = 0; - - /** - * Called by removeRefWhileHoldingCacheLock() when the hard reference - * count of its instance drops from 1 to 0. - */ - virtual void decrementItemsInUse() const = 0; virtual ~UnifiedCacheBase(); private: UnifiedCacheBase(const UnifiedCacheBase &); @@ -63,7 +55,6 @@ class U_COMMON_API SharedObject : public UObject { public: /** Initializes totalRefCount, softRefCount to 0. */ SharedObject() : - totalRefCount(0), softRefCount(0), hardRefCount(0), cachePtr(NULL) {} @@ -71,7 +62,6 @@ public: /** Initializes totalRefCount, softRefCount to 0. */ SharedObject(const SharedObject &other) : UObject(other), - totalRefCount(0), softRefCount(0), hardRefCount(0), cachePtr(NULL) {} @@ -79,93 +69,45 @@ public: virtual ~SharedObject(); /** - * Increments the number of references to this object. Thread-safe. - */ - void addRef() const { addRef(FALSE); } - - /** - * Increments the number of references to this object. - * Must be called only from within the internals of UnifiedCache and - * only while the cache global mutex is held. - */ - void addRefWhileHoldingCacheLock() const { addRef(TRUE); } - - /** - * Increments the number of soft references to this object. - * Must be called only from within the internals of UnifiedCache and - * only while the cache global mutex is held. - */ - void addSoftRef() const; - - /** - * Decrements the number of references to this object. Thread-safe. - */ - void removeRef() const { removeRef(FALSE); } - - /** - * Decrements the number of references to this object. - * Must be called only from within the internals of UnifiedCache and - * only while the cache global mutex is held. + * Increments the number of hard references to this object. Thread-safe. + * Not for use from within the Unified Cache implementation. */ - void removeRefWhileHoldingCacheLock() const { removeRef(TRUE); } + void addRef() const; /** - * Decrements the number of soft references to this object. - * Must be called only from within the internals of UnifiedCache and - * only while the cache global mutex is held. + * Decrements the number of hard references to this object, and + * arrange for possible cache-eviction and/or deletion if ref + * count goes to zero. Thread-safe. + * + * Not for use from within the UnifiedCache implementation. */ - void removeSoftRef() const; + void removeRef() const; /** - * Returns the reference counter including soft references. + * Returns the number of hard references for this object. * Uses a memory barrier. */ int32_t getRefCount() const; - /** - * Returns the count of soft references only. - * Must be called only from within the internals of UnifiedCache and - * only while the cache global mutex is held. - */ - int32_t getSoftRefCount() const { return softRefCount; } - - /** - * Returns the count of hard references only. Uses a memory barrier. - * Used for testing the cache. Regular clients won't need this. - */ - int32_t getHardRefCount() const; - /** * If noHardReferences() == TRUE then this object has no hard references. * Must be called only from within the internals of UnifiedCache. */ - inline UBool noHardReferences() const { return getHardRefCount() == 0; } + inline UBool noHardReferences() const { return getRefCount() == 0; } /** * If hasHardReferences() == TRUE then this object has hard references. * Must be called only from within the internals of UnifiedCache. */ - inline UBool hasHardReferences() const { return getHardRefCount() != 0; } + inline UBool hasHardReferences() const { return getRefCount() != 0; } /** - * If noSoftReferences() == TRUE then this object has no soft references. - * Must be called only from within the internals of UnifiedCache and - * only while the cache global mutex is held. - */ - UBool noSoftReferences() const { return (softRefCount == 0); } - - /** - * Deletes this object if it has no references or soft references. + * Deletes this object if it has no references. + * Available for non-cached SharedObjects only. Ownership of cached objects + * is with the UnifiedCache, which is soley responsible for eviction and deletion. */ void deleteIfZeroRefCount() const; - /** - * @internal For UnifedCache use only to register this object with itself. - * Must be called before this object is exposed to multiple threads. - */ - void registerWithCache(const UnifiedCacheBase *ptr) const { - cachePtr = ptr; - } /** * Returns a writable version of ptr. @@ -219,15 +161,21 @@ public: } private: - mutable u_atomic_int32_t totalRefCount; - - // Any thread modifying softRefCount must hold the global cache mutex + /** + * The number of references from the UnifiedCache, which is + * the number of times that the sharedObject is stored as a hash table value. + * For use by UnifiedCache implementation code only. + * All access is synchronized by UnifiedCache's gCacheMutex + */ mutable int32_t softRefCount; + friend class UnifiedCache; + /** + * Reference count, excluding references from within the UnifiedCache implementation. + */ mutable u_atomic_int32_t hardRefCount; + mutable const UnifiedCacheBase *cachePtr; - void addRef(UBool withCacheLock) const; - void removeRef(UBool withCacheLock) const; }; diff --git a/icuSources/common/sprpimpl.h b/icuSources/common/sprpimpl.h index 12f18a5e..ca0bcdb5 100644 --- a/icuSources/common/sprpimpl.h +++ b/icuSources/common/sprpimpl.h @@ -90,7 +90,6 @@ struct UStringPrepProfile{ UTrie sprepTrie; const uint16_t* mappingData; UDataMemory* sprepData; - const UBiDiProps *bdp; /* used only if checkBiDi is set */ int32_t refCount; UBool isDataLoaded; UBool doNFKC; diff --git a/icuSources/common/static_unicode_sets.cpp b/icuSources/common/static_unicode_sets.cpp new file mode 100644 index 00000000..9e731f57 --- /dev/null +++ b/icuSources/common/static_unicode_sets.cpp @@ -0,0 +1,222 @@ +// © 2018 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING + +// Allow implicit conversion from char16_t* to UnicodeString for this file: +// Helpful in toString methods and elsewhere. +#define UNISTR_FROM_STRING_EXPLICIT + +#include "static_unicode_sets.h" +#include "umutex.h" +#include "ucln_cmn.h" +#include "unicode/uniset.h" +#include "uresimp.h" +#include "cstring.h" +#include "uassert.h" + +using namespace icu; +using namespace icu::unisets; + + +namespace { + +UnicodeSet* gUnicodeSets[COUNT] = {}; + +// Save the empty instance in static memory to have well-defined behavior if a +// regular UnicodeSet cannot be allocated. +char gEmptyUnicodeSet[sizeof(UnicodeSet)]; + +// Whether the gEmptyUnicodeSet is initialized and ready to use. +UBool gEmptyUnicodeSetInitialized = FALSE; + +inline UnicodeSet* getImpl(Key key) { + UnicodeSet* candidate = gUnicodeSets[key]; + if (candidate == nullptr) { + return reinterpret_cast(gEmptyUnicodeSet); + } + return candidate; +} + +UnicodeSet* computeUnion(Key k1, Key k2) { + UnicodeSet* result = new UnicodeSet(); + if (result == nullptr) { + return nullptr; + } + result->addAll(*getImpl(k1)); + result->addAll(*getImpl(k2)); + result->freeze(); + return result; +} + +UnicodeSet* computeUnion(Key k1, Key k2, Key k3) { + UnicodeSet* result = new UnicodeSet(); + if (result == nullptr) { + return nullptr; + } + result->addAll(*getImpl(k1)); + result->addAll(*getImpl(k2)); + result->addAll(*getImpl(k3)); + result->freeze(); + return result; +} + + +void saveSet(Key key, const UnicodeString& unicodeSetPattern, UErrorCode& status) { + // assert unicodeSets.get(key) == null; + gUnicodeSets[key] = new UnicodeSet(unicodeSetPattern, status); +} + +class ParseDataSink : public ResourceSink { + public: + void put(const char* key, ResourceValue& value, UBool /*noFallback*/, UErrorCode& status) U_OVERRIDE { + ResourceTable contextsTable = value.getTable(status); + if (U_FAILURE(status)) { return; } + for (int i = 0; contextsTable.getKeyAndValue(i, key, value); i++) { + if (uprv_strcmp(key, "date") == 0) { + // ignore + } else { + ResourceTable strictnessTable = value.getTable(status); + if (U_FAILURE(status)) { return; } + for (int j = 0; strictnessTable.getKeyAndValue(j, key, value); j++) { + bool isLenient = (uprv_strcmp(key, "lenient") == 0); + ResourceArray array = value.getArray(status); + if (U_FAILURE(status)) { return; } + for (int k = 0; k < array.getSize(); k++) { + array.getValue(k, value); + UnicodeString str = value.getUnicodeString(status); + if (U_FAILURE(status)) { return; } + // There is both lenient and strict data for comma/period, + // but not for any of the other symbols. + if (str.indexOf(u'.') != -1) { + saveSet(isLenient ? PERIOD : STRICT_PERIOD, str, status); + } else if (str.indexOf(u',') != -1) { + saveSet(isLenient ? COMMA : STRICT_COMMA, str, status); + } else if (str.indexOf(u'+') != -1) { + saveSet(PLUS_SIGN, str, status); + } else if (str.indexOf(u'‒') != -1) { + saveSet(MINUS_SIGN, str, status); + } else if (str.indexOf(u'$') != -1) { + saveSet(DOLLAR_SIGN, str, status); + } else if (str.indexOf(u'£') != -1) { + saveSet(POUND_SIGN, str, status); + } else if (str.indexOf(u'₨') != -1) { + saveSet(RUPEE_SIGN, str, status); + } + if (U_FAILURE(status)) { return; } + } + } + } + } + } +}; + + +icu::UInitOnce gNumberParseUniSetsInitOnce = U_INITONCE_INITIALIZER; + +UBool U_CALLCONV cleanupNumberParseUniSets() { + if (gEmptyUnicodeSetInitialized) { + reinterpret_cast(gEmptyUnicodeSet)->~UnicodeSet(); + gEmptyUnicodeSetInitialized = FALSE; + } + for (int32_t i = 0; i < COUNT; i++) { + delete gUnicodeSets[i]; + gUnicodeSets[i] = nullptr; + } + gNumberParseUniSetsInitOnce.reset(); + return TRUE; +} + +void U_CALLCONV initNumberParseUniSets(UErrorCode& status) { + ucln_common_registerCleanup(UCLN_COMMON_NUMPARSE_UNISETS, cleanupNumberParseUniSets); + + // Initialize the empty instance for well-defined fallback behavior + new(gEmptyUnicodeSet) UnicodeSet(); + reinterpret_cast(gEmptyUnicodeSet)->freeze(); + gEmptyUnicodeSetInitialized = TRUE; + + // These sets were decided after discussion with icu-design@. See tickets #13084 and #13309. + // Zs+TAB is "horizontal whitespace" according to UTS #18 (blank property). + gUnicodeSets[DEFAULT_IGNORABLES] = new UnicodeSet( + u"[[:Zs:][\\u0009][:Bidi_Control:][:Variation_Selector:]]", status); + gUnicodeSets[STRICT_IGNORABLES] = new UnicodeSet(u"[[:Bidi_Control:]]", status); + + LocalUResourceBundlePointer rb(ures_open(nullptr, "root", &status)); + if (U_FAILURE(status)) { return; } + ParseDataSink sink; + ures_getAllItemsWithFallback(rb.getAlias(), "parse", sink, status); + if (U_FAILURE(status)) { return; } + + // NOTE: It is OK for these assertions to fail if there was a no-data build. + U_ASSERT(gUnicodeSets[COMMA] != nullptr); + U_ASSERT(gUnicodeSets[STRICT_COMMA] != nullptr); + U_ASSERT(gUnicodeSets[PERIOD] != nullptr); + U_ASSERT(gUnicodeSets[STRICT_PERIOD] != nullptr); + + gUnicodeSets[OTHER_GROUPING_SEPARATORS] = new UnicodeSet( + u"['٬‘’'\\u0020\\u00A0\\u2000-\\u200A\\u202F\\u205F\\u3000]", status); + gUnicodeSets[ALL_SEPARATORS] = computeUnion(COMMA, PERIOD, OTHER_GROUPING_SEPARATORS); + gUnicodeSets[STRICT_ALL_SEPARATORS] = computeUnion( + STRICT_COMMA, STRICT_PERIOD, OTHER_GROUPING_SEPARATORS); + + U_ASSERT(gUnicodeSets[MINUS_SIGN] != nullptr); + U_ASSERT(gUnicodeSets[PLUS_SIGN] != nullptr); + + gUnicodeSets[PERCENT_SIGN] = new UnicodeSet(u"[%٪]", status); + gUnicodeSets[PERMILLE_SIGN] = new UnicodeSet(u"[‰؉]", status); + gUnicodeSets[INFINITY_KEY] = new UnicodeSet(u"[∞]", status); + + U_ASSERT(gUnicodeSets[DOLLAR_SIGN] != nullptr); + U_ASSERT(gUnicodeSets[POUND_SIGN] != nullptr); + U_ASSERT(gUnicodeSets[RUPEE_SIGN] != nullptr); + gUnicodeSets[YEN_SIGN] = new UnicodeSet(u"[¥\\uffe5]", status); + + gUnicodeSets[DIGITS] = new UnicodeSet(u"[:digit:]", status); + + gUnicodeSets[DIGITS_OR_ALL_SEPARATORS] = computeUnion(DIGITS, ALL_SEPARATORS); + gUnicodeSets[DIGITS_OR_STRICT_ALL_SEPARATORS] = computeUnion(DIGITS, STRICT_ALL_SEPARATORS); + + for (auto* uniset : gUnicodeSets) { + if (uniset != nullptr) { + uniset->freeze(); + } + } +} + +} + +const UnicodeSet* unisets::get(Key key) { + UErrorCode localStatus = U_ZERO_ERROR; + umtx_initOnce(gNumberParseUniSetsInitOnce, &initNumberParseUniSets, localStatus); + if (U_FAILURE(localStatus)) { + return reinterpret_cast(gEmptyUnicodeSet); + } + return getImpl(key); +} + +Key unisets::chooseFrom(UnicodeString str, Key key1) { + return get(key1)->contains(str) ? key1 : NONE; +} + +Key unisets::chooseFrom(UnicodeString str, Key key1, Key key2) { + return get(key1)->contains(str) ? key1 : chooseFrom(str, key2); +} + +//Key unisets::chooseCurrency(UnicodeString str) { +// if (get(DOLLAR_SIGN)->contains(str)) { +// return DOLLAR_SIGN; +// } else if (get(POUND_SIGN)->contains(str)) { +// return POUND_SIGN; +// } else if (get(RUPEE_SIGN)->contains(str)) { +// return RUPEE_SIGN; +// } else if (get(YEN_SIGN)->contains(str)) { +// return YEN_SIGN; +// } else { +// return NONE; +// } +//} + + +#endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/common/static_unicode_sets.h b/icuSources/common/static_unicode_sets.h new file mode 100644 index 00000000..5f18b321 --- /dev/null +++ b/icuSources/common/static_unicode_sets.h @@ -0,0 +1,119 @@ +// © 2018 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +// This file is in common instead of i18n because it is needed by ucurr.cpp. + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING +#ifndef __STATIC_UNICODE_SETS_H__ +#define __STATIC_UNICODE_SETS_H__ + +#include "unicode/uniset.h" +#include "unicode/unistr.h" + +U_NAMESPACE_BEGIN +namespace unisets { + +enum Key { + // NONE is used to indicate null in chooseFrom(). + // EMPTY is used to get an empty UnicodeSet. + NONE = -1, + EMPTY = 0, + + // Ignorables + DEFAULT_IGNORABLES, + STRICT_IGNORABLES, + + // Separators + // Notes: + // - COMMA is a superset of STRICT_COMMA + // - PERIOD is a superset of SCRICT_PERIOD + // - ALL_SEPARATORS is the union of COMMA, PERIOD, and OTHER_GROUPING_SEPARATORS + // - STRICT_ALL_SEPARATORS is the union of STRICT_COMMA, STRICT_PERIOD, and OTHER_GRP_SEPARATORS + COMMA, + PERIOD, + STRICT_COMMA, + STRICT_PERIOD, + OTHER_GROUPING_SEPARATORS, + ALL_SEPARATORS, + STRICT_ALL_SEPARATORS, + + // Symbols + MINUS_SIGN, + PLUS_SIGN, + PERCENT_SIGN, + PERMILLE_SIGN, + INFINITY_KEY, // INFINITY is defined in cmath + + // Currency Symbols + DOLLAR_SIGN, + POUND_SIGN, + RUPEE_SIGN, + YEN_SIGN, // not in CLDR data, but Currency.java wants it + + // Other + DIGITS, + + // Combined Separators with Digits (for lead code points) + DIGITS_OR_ALL_SEPARATORS, + DIGITS_OR_STRICT_ALL_SEPARATORS, + + // The number of elements in the enum. + COUNT +}; + +/** + * Gets the static-allocated UnicodeSet according to the provided key. The + * pointer will be deleted during u_cleanup(); the caller should NOT delete it. + * + * Exported as U_COMMON_API for ucurr.cpp + * + * @param key The desired UnicodeSet according to the enum in this file. + * @return The requested UnicodeSet. Guaranteed to be frozen and non-null, but + * may be empty if an error occurred during data loading. + */ +U_COMMON_API const UnicodeSet* get(Key key); + +/** + * Checks if the UnicodeSet given by key1 contains the given string. + * + * Exported as U_COMMON_API for numparse_decimal.cpp + * + * @param str The string to check. + * @param key1 The set to check. + * @return key1 if the set contains str, or NONE if not. + */ +U_COMMON_API Key chooseFrom(UnicodeString str, Key key1); + +/** + * Checks if the UnicodeSet given by either key1 or key2 contains the string. + * + * Exported as U_COMMON_API for numparse_decimal.cpp + * + * @param str The string to check. + * @param key1 The first set to check. + * @param key2 The second set to check. + * @return key1 if that set contains str; key2 if that set contains str; or + * NONE if neither set contains str. + */ +U_COMMON_API Key chooseFrom(UnicodeString str, Key key1, Key key2); + +// Unused in C++: +// Key chooseCurrency(UnicodeString str); +// Used instead: +static const struct { + Key key; + UChar32 exemplar; +} kCurrencyEntries[] = { + {DOLLAR_SIGN, u'$'}, + {POUND_SIGN, u'£'}, + {RUPEE_SIGN, u'₨'}, + {YEN_SIGN, u'¥'}, +}; + +} // namespace unisets +U_NAMESPACE_END + +#endif //__STATIC_UNICODE_SETS_H__ +#endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icuSources/common/ualoc.cpp b/icuSources/common/ualoc.cpp index ffc23e7e..5bb1a52e 100644 --- a/icuSources/common/ualoc.cpp +++ b/icuSources/common/ualoc.cpp @@ -748,8 +748,8 @@ static void ualoc_normalize(const char *locale, char *normalized, int32_t normal // uloc_minimizeSubtags(locale, normalized, normalizedCapacity, status); const char *replacement = NULL; - if (gMapDataState > 0) { - replacement = (const char *)uhash_get(gAliasMap, locale); + if (icu::gMapDataState > 0) { + replacement = (const char *)uhash_get(icu::gAliasMap, locale); } if (replacement == NULL) { replacement = locale; @@ -767,8 +767,8 @@ static void ualoc_getParent(const char *locale, char *parent, int32_t parentCapa if (U_FAILURE(*status)) { return; } - if (gMapDataState > 0) { - const char *replacement = (const char *)uhash_get(gParentMap, locale); + if (icu::gMapDataState > 0) { + const char *replacement = (const char *)uhash_get(icu::gParentMap, locale); if (replacement) { int32_t len = uprv_strlen(replacement); if (len < parentCapacity) { // allow for 0 termination @@ -793,8 +793,8 @@ static const char * getLocParent(const char *locale, int32_t* distance) return locParentMap[locParentIndex].parent; } } - if (gMapDataState > 0) { - const char *replacement = (const char *)uhash_get(gParentMap, locale); + if (icu::gMapDataState > 0) { + const char *replacement = (const char *)uhash_get(icu::gParentMap, locale); if (replacement) { *distance = 1; return replacement; @@ -834,8 +834,8 @@ ualoc_localizationsToUse( const char* const *preferredLanguages, return -1; } // get resource data, need to protect with mutex - if (gMapDataState == 0) { - umtx_initOnce(gUALocaleCacheInitOnce, initializeMapData); + if (icu::gMapDataState == 0) { + umtx_initOnce(icu::gUALocaleCacheInitOnce, initializeMapData); } int32_t locsToUseCount = 0; int32_t prefLangIndex, availLocIndex = 0; diff --git a/icuSources/common/ubidi.cpp b/icuSources/common/ubidi.cpp index a4ea3195..f50ee79c 100644 --- a/icuSources/common/ubidi.cpp +++ b/icuSources/common/ubidi.cpp @@ -152,9 +152,6 @@ ubidi_openSized(int32_t maxLength, int32_t maxRunCount, UErrorCode *pErrorCode) /* reset the object, all pointers NULL, all flags FALSE, all sizes 0 */ uprv_memset(pBiDi, 0, sizeof(UBiDi)); - /* get BiDi properties */ - pBiDi->bdp=ubidi_getSingleton(); - /* allocate memory for arrays as requested */ if(maxLength>0) { if( !getInitialDirPropsMemory(pBiDi, maxLength) || @@ -1070,7 +1067,7 @@ bracketProcessChar(BracketData *bd, int32_t position) { else match=0; if(match!=c && /* has a matching char */ - ubidi_getPairedBracketType(bd->pBiDi->bdp, c)==U_BPT_OPEN) { /* opening bracket */ + ubidi_getPairedBracketType(c)==U_BPT_OPEN) { /* opening bracket */ /* special case: process synonyms create an opening entry for each synonym */ if(match==0x232A) { /* RIGHT-POINTING ANGLE BRACKET */ @@ -3357,7 +3354,7 @@ ubidi_getCustomizedClass(UBiDi *pBiDi, UChar32 c) if( pBiDi->fnClassCallback == NULL || (dir = (*pBiDi->fnClassCallback)(pBiDi->coClassCallback, c)) == U_BIDI_CLASS_DEFAULT ) { - dir = ubidi_getClass(pBiDi->bdp, c); + dir = ubidi_getClass(c); } if(dir >= U_CHAR_DIRECTION_COUNT) { dir = (UCharDirection)ON; diff --git a/icuSources/common/ubidi_props.cpp b/icuSources/common/ubidi_props.cpp index 103e21ca..4141c219 100644 --- a/icuSources/common/ubidi_props.cpp +++ b/icuSources/common/ubidi_props.cpp @@ -44,13 +44,6 @@ struct UBiDiProps { #define INCLUDED_FROM_UBIDI_PROPS_C #include "ubidi_props_data.h" -/* UBiDiProps singleton ----------------------------------------------------- */ - -U_CFUNC const UBiDiProps * -ubidi_getSingleton() { - return &ubidi_props_singleton; -} - /* set of property starts for UnicodeSet ------------------------------------ */ static UBool U_CALLCONV @@ -64,7 +57,7 @@ _enumPropertyStartsRange(const void *context, UChar32 start, UChar32 end, uint32 } U_CFUNC void -ubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode *pErrorCode) { +ubidi_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { int32_t i, length; UChar32 c, start, limit; @@ -76,19 +69,19 @@ ubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode * } /* add the start code point of each same-value range of the trie */ - utrie2_enum(&bdp->trie, NULL, _enumPropertyStartsRange, sa); + utrie2_enum(&ubidi_props_singleton.trie, NULL, _enumPropertyStartsRange, sa); /* add the code points from the bidi mirroring table */ - length=bdp->indexes[UBIDI_IX_MIRROR_LENGTH]; + length=ubidi_props_singleton.indexes[UBIDI_IX_MIRROR_LENGTH]; for(i=0; imirrors[i]); + c=UBIDI_GET_MIRROR_CODE_POINT(ubidi_props_singleton.mirrors[i]); sa->addRange(sa->set, c, c+1); } /* add the code points from the Joining_Group array where the value changes */ - start=bdp->indexes[UBIDI_IX_JG_START]; - limit=bdp->indexes[UBIDI_IX_JG_LIMIT]; - jgArray=bdp->jgArray; + start=ubidi_props_singleton.indexes[UBIDI_IX_JG_START]; + limit=ubidi_props_singleton.indexes[UBIDI_IX_JG_LIMIT]; + jgArray=ubidi_props_singleton.jgArray; for(;;) { prev=0; while(startadd(sa->set, limit); } - if(limit==bdp->indexes[UBIDI_IX_JG_LIMIT]) { + if(limit==ubidi_props_singleton.indexes[UBIDI_IX_JG_LIMIT]) { /* switch to the second Joining_Group range */ - start=bdp->indexes[UBIDI_IX_JG_START2]; - limit=bdp->indexes[UBIDI_IX_JG_LIMIT2]; - jgArray=bdp->jgArray2; + start=ubidi_props_singleton.indexes[UBIDI_IX_JG_START2]; + limit=ubidi_props_singleton.indexes[UBIDI_IX_JG_LIMIT2]; + jgArray=ubidi_props_singleton.jgArray2; } else { break; } @@ -121,14 +114,8 @@ ubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode * /* property access functions ------------------------------------------------ */ U_CFUNC int32_t -ubidi_getMaxValue(const UBiDiProps *bdp, UProperty which) { - int32_t max; - - if(bdp==NULL) { - return -1; - } - - max=bdp->indexes[UBIDI_MAX_VALUES_INDEX]; +ubidi_getMaxValue(UProperty which) { + int32_t max=ubidi_props_singleton.indexes[UBIDI_MAX_VALUES_INDEX]; switch(which) { case UCHAR_BIDI_CLASS: return (max&UBIDI_CLASS_MASK); @@ -144,19 +131,19 @@ ubidi_getMaxValue(const UBiDiProps *bdp, UProperty which) { } U_CAPI UCharDirection -ubidi_getClass(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); +ubidi_getClass(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ubidi_props_singleton.trie, c); return (UCharDirection)UBIDI_GET_CLASS(props); } U_CFUNC UBool -ubidi_isMirrored(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); +ubidi_isMirrored(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ubidi_props_singleton.trie, c); return (UBool)UBIDI_GET_FLAG(props, UBIDI_IS_MIRRORED_SHIFT); } static UChar32 -getMirror(const UBiDiProps *bdp, UChar32 c, uint16_t props) { +getMirror(UChar32 c, uint16_t props) { int32_t delta=UBIDI_GET_MIRROR_DELTA(props); if(delta!=UBIDI_ESC_MIRROR_DELTA) { return c+delta; @@ -167,8 +154,8 @@ getMirror(const UBiDiProps *bdp, UChar32 c, uint16_t props) { int32_t i, length; UChar32 c2; - mirrors=bdp->mirrors; - length=bdp->indexes[UBIDI_IX_MIRROR_LENGTH]; + mirrors=ubidi_props_singleton.mirrors; + length=ubidi_props_singleton.indexes[UBIDI_IX_MIRROR_LENGTH]; /* linear search */ for(i=0; itrie, c); - return getMirror(bdp, c, props); +ubidi_getMirror(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ubidi_props_singleton.trie, c); + return getMirror(c, props); } U_CFUNC UBool -ubidi_isBidiControl(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); +ubidi_isBidiControl(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ubidi_props_singleton.trie, c); return (UBool)UBIDI_GET_FLAG(props, UBIDI_BIDI_CONTROL_SHIFT); } U_CFUNC UBool -ubidi_isJoinControl(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); +ubidi_isJoinControl(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ubidi_props_singleton.trie, c); return (UBool)UBIDI_GET_FLAG(props, UBIDI_JOIN_CONTROL_SHIFT); } U_CFUNC UJoiningType -ubidi_getJoiningType(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); +ubidi_getJoiningType(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ubidi_props_singleton.trie, c); return (UJoiningType)((props&UBIDI_JT_MASK)>>UBIDI_JT_SHIFT); } U_CFUNC UJoiningGroup -ubidi_getJoiningGroup(const UBiDiProps *bdp, UChar32 c) { +ubidi_getJoiningGroup(UChar32 c) { UChar32 start, limit; - start=bdp->indexes[UBIDI_IX_JG_START]; - limit=bdp->indexes[UBIDI_IX_JG_LIMIT]; + start=ubidi_props_singleton.indexes[UBIDI_IX_JG_START]; + limit=ubidi_props_singleton.indexes[UBIDI_IX_JG_LIMIT]; if(start<=c && cjgArray[c-start]; + return (UJoiningGroup)ubidi_props_singleton.jgArray[c-start]; } - start=bdp->indexes[UBIDI_IX_JG_START2]; - limit=bdp->indexes[UBIDI_IX_JG_LIMIT2]; + start=ubidi_props_singleton.indexes[UBIDI_IX_JG_START2]; + limit=ubidi_props_singleton.indexes[UBIDI_IX_JG_LIMIT2]; if(start<=c && cjgArray2[c-start]; + return (UJoiningGroup)ubidi_props_singleton.jgArray2[c-start]; } return U_JG_NO_JOINING_GROUP; } U_CFUNC UBidiPairedBracketType -ubidi_getPairedBracketType(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); +ubidi_getPairedBracketType(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ubidi_props_singleton.trie, c); return (UBidiPairedBracketType)((props&UBIDI_BPT_MASK)>>UBIDI_BPT_SHIFT); } U_CFUNC UChar32 -ubidi_getPairedBracket(const UBiDiProps *bdp, UChar32 c) { - uint16_t props=UTRIE2_GET16(&bdp->trie, c); +ubidi_getPairedBracket(UChar32 c) { + uint16_t props=UTRIE2_GET16(&ubidi_props_singleton.trie, c); if((props&UBIDI_BPT_MASK)==0) { return c; } else { - return getMirror(bdp, c, props); + return getMirror(c, props); } } /* public API (see uchar.h) ------------------------------------------------- */ U_CFUNC UCharDirection -u_charDirection(UChar32 c) { - return ubidi_getClass(&ubidi_props_singleton, c); +u_charDirection(UChar32 c) { + return ubidi_getClass(c); } U_CFUNC UBool u_isMirrored(UChar32 c) { - return ubidi_isMirrored(&ubidi_props_singleton, c); + return ubidi_isMirrored(c); } U_CFUNC UChar32 u_charMirror(UChar32 c) { - return ubidi_getMirror(&ubidi_props_singleton, c); + return ubidi_getMirror(c); } U_STABLE UChar32 U_EXPORT2 u_getBidiPairedBracket(UChar32 c) { - return ubidi_getPairedBracket(&ubidi_props_singleton, c); + return ubidi_getPairedBracket(c); } diff --git a/icuSources/common/ubidi_props.h b/icuSources/common/ubidi_props.h index 69e8853e..698ee9c5 100644 --- a/icuSources/common/ubidi_props.h +++ b/icuSources/common/ubidi_props.h @@ -31,46 +31,40 @@ U_CDECL_BEGIN /* library API -------------------------------------------------------------- */ -struct UBiDiProps; -typedef struct UBiDiProps UBiDiProps; - -U_CFUNC const UBiDiProps * -ubidi_getSingleton(void); - U_CFUNC void -ubidi_addPropertyStarts(const UBiDiProps *bdp, const USetAdder *sa, UErrorCode *pErrorCode); +ubidi_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode); /* property access functions */ U_CFUNC int32_t -ubidi_getMaxValue(const UBiDiProps *bdp, UProperty which); +ubidi_getMaxValue(UProperty which); U_CAPI UCharDirection -ubidi_getClass(const UBiDiProps *bdp, UChar32 c); +ubidi_getClass(UChar32 c); U_CFUNC UBool -ubidi_isMirrored(const UBiDiProps *bdp, UChar32 c); +ubidi_isMirrored(UChar32 c); U_CFUNC UChar32 -ubidi_getMirror(const UBiDiProps *bdp, UChar32 c); +ubidi_getMirror(UChar32 c); U_CFUNC UBool -ubidi_isBidiControl(const UBiDiProps *bdp, UChar32 c); +ubidi_isBidiControl(UChar32 c); U_CFUNC UBool -ubidi_isJoinControl(const UBiDiProps *bdp, UChar32 c); +ubidi_isJoinControl(UChar32 c); U_CFUNC UJoiningType -ubidi_getJoiningType(const UBiDiProps *bdp, UChar32 c); +ubidi_getJoiningType(UChar32 c); U_CFUNC UJoiningGroup -ubidi_getJoiningGroup(const UBiDiProps *bdp, UChar32 c); +ubidi_getJoiningGroup(UChar32 c); U_CFUNC UBidiPairedBracketType -ubidi_getPairedBracketType(const UBiDiProps *bdp, UChar32 c); +ubidi_getPairedBracketType(UChar32 c); U_CFUNC UChar32 -ubidi_getPairedBracket(const UBiDiProps *bdp, UChar32 c); +ubidi_getPairedBracket(UChar32 c); /* file definitions --------------------------------------------------------- */ diff --git a/icuSources/common/ubidi_props_data.h b/icuSources/common/ubidi_props_data.h index e1e950b0..9663f3d7 100644 --- a/icuSources/common/ubidi_props_data.h +++ b/icuSources/common/ubidi_props_data.h @@ -11,626 +11,631 @@ #ifdef INCLUDED_FROM_UBIDI_PROPS_C -static const UVersionInfo ubidi_props_dataVersion={0xa,0,0,0}; +static const UVersionInfo ubidi_props_dataVersion={0xb,0,0,0}; #if !U_PLATFORM_IS_DARWIN_BASED -static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x6028,0x5cb0,0x1a,0x620,0x8c0,0x10ac0,0x10af0,0,0,0,0,0,0,0,0x6302b6}; +static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x647c,0x5e98,0x28,0x620,0x8c0,0x10ac0,0x10d24,0,0,0,0,0,0,0,0x6502b6}; #else /* !U_PLATFORM_IS_DARWIN_BASED */ -static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x6128,0x5db0,0x1a,0x620,0x8c0,0x10ac0,0x10af0,0,0,0,0,0,0,0,0x6302b6}; +static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x657c,0x5f98,0x28,0x620,0x8c0,0x10ac0,0x10d24,0,0,0,0,0,0,0,0x6502b6}; #endif /* !U_PLATFORM_IS_DARWIN_BASED */ #if !U_PLATFORM_IS_DARWIN_BASED -static const uint16_t ubidi_props_trieIndex[11856]={ +static const uint16_t ubidi_props_trieIndex[12100]={ #else /* !U_PLATFORM_IS_DARWIN_BASED */ -static const uint16_t ubidi_props_trieIndex[11984]={ +static const uint16_t ubidi_props_trieIndex[12228]={ #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x36a,0x372,0x37a,0x382,0x39a,0x3a2,0x3aa,0x3b2,0x38a,0x392,0x38a,0x392,0x38a,0x392,0x38a,0x392, -0x38a,0x392,0x38a,0x392,0x3b8,0x3c0,0x3c8,0x3d0,0x3d8,0x3e0,0x3dc,0x3e4,0x3ec,0x3f4,0x3ef,0x3f7, -0x38a,0x392,0x38a,0x392,0x3ff,0x407,0x38a,0x392,0x38a,0x392,0x38a,0x392,0x40d,0x415,0x41d,0x425, -0x42d,0x435,0x43d,0x445,0x44b,0x453,0x45b,0x463,0x46b,0x473,0x479,0x481,0x489,0x491,0x499,0x4a1, -0x4ad,0x4a9,0x4b5,0x4bd,0x41f,0x4cd,0x4d5,0x4c5,0x4dd,0x4df,0x4e7,0x4ef,0x4f7,0x4f8,0x500,0x508, -0x510,0x4f8,0x518,0x51d,0x510,0x4f8,0x525,0x52d,0x4f7,0x535,0x53d,0x4ef,0x542,0x38a,0x54a,0x54e, -0x556,0x557,0x55f,0x567,0x4f7,0x56f,0x577,0x4ef,0x401,0x57b,0x500,0x4ef,0x38a,0x38a,0x583,0x38a, -0x38a,0x589,0x591,0x38a,0x38a,0x595,0x59d,0x38a,0x5a1,0x5a8,0x38a,0x5b0,0x5b8,0x5bf,0x541,0x38a, -0x38a,0x5c7,0x5cf,0x5d7,0x5df,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x5e7,0x38a,0x5ef,0x38a,0x38a,0x38a, -0x5f7,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x5ff,0x38a,0x38a,0x38a,0x607,0x607,0x504,0x504,0x38a,0x60d,0x615,0x5ef, -0x62b,0x61d,0x61d,0x633,0x63a,0x623,0x38a,0x38a,0x38a,0x642,0x64a,0x38a,0x38a,0x38a,0x64c,0x654, -0x65c,0x38a,0x663,0x66b,0x38a,0x673,0x38a,0x38a,0x534,0x67b,0x542,0x683,0x401,0x68b,0x38a,0x692, -0x38a,0x697,0x38a,0x38a,0x38a,0x38a,0x69d,0x6a5,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x3d8,0x6ad, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x6b5,0x6bd,0x6c1, -0x6d9,0x6df,0x6c9,0x6d1,0x6e7,0x6ef,0x6f3,0x5c2,0x6fb,0x703,0x70b,0x38a,0x713,0x654,0x654,0x654, -0x723,0x72b,0x733,0x73b,0x740,0x748,0x750,0x71b,0x758,0x760,0x38a,0x766,0x76d,0x654,0x654,0x654, -0x654,0x56d,0x773,0x654,0x77b,0x38a,0x38a,0x651,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654, -0x654,0x654,0x654,0x654,0x654,0x783,0x654,0x654,0x654,0x654,0x654,0x789,0x654,0x654,0x791,0x799, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x654,0x654,0x654,0x654,0x7a9,0x7b0,0x7b8,0x7a1, -0x7c8,0x7d0,0x7d8,0x7df,0x7e7,0x7ef,0x7f6,0x7c0,0x654,0x654,0x654,0x7fe,0x804,0x80a,0x812,0x817, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x81e,0x38a,0x38a,0x38a,0x826,0x38a,0x38a,0x38a,0x3d8, -0x82e,0x836,0x763,0x38a,0x839,0x654,0x654,0x657,0x654,0x654,0x654,0x654,0x654,0x654,0x840,0x846, -0x856,0x84e,0x38a,0x38a,0x85e,0x5f7,0x38a,0x3b1,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x654,0x825, -0x3bf,0x38a,0x866,0x86e,0x38a,0x876,0x817,0x38a,0x38a,0x38a,0x38a,0x87e,0x38a,0x38a,0x64c,0x3b0, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x654,0x654, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x866,0x654,0x56d,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x885,0x38a,0x38a,0x88a,0x557,0x38a,0x38a,0x5a3,0x654,0x64b,0x38a,0x38a,0x892,0x38a,0x38a,0x38a, -0x89a,0x8a1,0x61d,0x8a9,0x38a,0x38a,0x579,0x8b1,0x38a,0x8b8,0x8bf,0x38a,0x4dd,0x8c4,0x38a,0x4f6, -0x38a,0x8cc,0x8d4,0x4f8,0x38a,0x8d8,0x4f7,0x8e0,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x8e7, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x36f,0x377,0x37f,0x387,0x39f,0x3a7,0x3af,0x3b7,0x38f,0x397,0x38f,0x397,0x38f,0x397,0x38f,0x397, +0x38f,0x397,0x38f,0x397,0x3bd,0x3c5,0x3cd,0x3d5,0x3dd,0x3e5,0x3e1,0x3e9,0x3f1,0x3f9,0x3f4,0x3fc, +0x38f,0x397,0x38f,0x397,0x404,0x40c,0x38f,0x397,0x38f,0x397,0x38f,0x397,0x412,0x41a,0x422,0x42a, +0x432,0x43a,0x442,0x44a,0x450,0x458,0x460,0x468,0x470,0x478,0x47e,0x486,0x48e,0x496,0x49e,0x4a6, +0x4b2,0x4ae,0x4ba,0x4c2,0x424,0x4d2,0x4da,0x4ca,0x4e2,0x4e4,0x4ec,0x4f4,0x4fc,0x4fd,0x505,0x50d, +0x515,0x4fd,0x51d,0x522,0x515,0x4fd,0x52a,0x532,0x4fc,0x53a,0x542,0x4f4,0x547,0x38f,0x54f,0x553, +0x55b,0x55d,0x565,0x56d,0x4fc,0x575,0x57d,0x4f4,0x406,0x581,0x505,0x4f4,0x38f,0x38f,0x589,0x38f, +0x38f,0x58f,0x597,0x38f,0x38f,0x59b,0x5a3,0x38f,0x5a7,0x5ae,0x38f,0x5b6,0x5be,0x5c5,0x546,0x38f, +0x38f,0x5cd,0x5d5,0x5dd,0x5e5,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x5ed,0x38f,0x5f5,0x38f,0x38f,0x38f, +0x5fd,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x605,0x38f,0x38f,0x38f,0x60d,0x60d,0x509,0x509,0x38f,0x613,0x61b,0x5f5, +0x631,0x623,0x623,0x639,0x640,0x629,0x38f,0x38f,0x38f,0x648,0x650,0x38f,0x38f,0x38f,0x652,0x65a, +0x662,0x38f,0x669,0x671,0x38f,0x679,0x38f,0x38f,0x539,0x681,0x547,0x689,0x406,0x691,0x38f,0x698, +0x38f,0x69d,0x38f,0x38f,0x38f,0x38f,0x6a3,0x6ab,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x3dd,0x6b3, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x6bb,0x6c3,0x6c7, +0x6df,0x6e5,0x6cf,0x6d7,0x6ed,0x6f5,0x6f9,0x5c8,0x701,0x709,0x711,0x38f,0x719,0x65a,0x65a,0x65a, +0x729,0x731,0x739,0x741,0x746,0x74e,0x756,0x721,0x75e,0x766,0x38f,0x76c,0x773,0x65a,0x65a,0x65a, +0x65a,0x573,0x779,0x65a,0x781,0x38f,0x38f,0x657,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a, +0x65a,0x65a,0x65a,0x65a,0x65a,0x789,0x65a,0x65a,0x65a,0x65a,0x65a,0x78f,0x65a,0x65a,0x797,0x79f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x65a,0x65a,0x65a,0x65a,0x7af,0x7b7,0x7bf,0x7a7, +0x7cf,0x7d7,0x7df,0x7e6,0x7ed,0x7f5,0x7f9,0x7c7,0x65a,0x65a,0x65a,0x801,0x807,0x65a,0x80d,0x810, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x818,0x38f,0x38f,0x38f,0x820,0x38f,0x38f,0x38f,0x3dd, +0x828,0x830,0x835,0x38f,0x83d,0x65a,0x65a,0x65d,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x844,0x84a, +0x85a,0x852,0x38f,0x38f,0x862,0x5fd,0x38f,0x3b6,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x65a,0x81f, +0x3c4,0x38f,0x839,0x86a,0x38f,0x872,0x87a,0x38f,0x38f,0x38f,0x38f,0x87e,0x38f,0x38f,0x652,0x3b5, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x65a,0x65a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x839,0x65a,0x573,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x885,0x38f,0x38f,0x88a,0x55d,0x38f,0x38f,0x5a9,0x65a,0x651,0x38f,0x38f,0x892,0x38f,0x38f,0x38f, +0x89a,0x8a1,0x623,0x8a9,0x38f,0x38f,0x57f,0x8b1,0x38f,0x8b9,0x8c0,0x38f,0x4e2,0x8c5,0x38f,0x4fb, +0x38f,0x8cd,0x8d5,0x4fd,0x38f,0x8d9,0x4fc,0x8e1,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x8e8, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #if !U_PLATFORM_IS_DARWIN_BASED -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x8fb,0x8ef,0x8f3,0x489,0x489,0x489,0x489,0x489, -0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x903,0x489,0x489,0x489,0x489,0x90b,0x90f, -0x917,0x91f,0x923,0x92b,0x489,0x489,0x489,0x92f,0x937,0x37a,0x93f,0x947,0x38a,0x38a,0x38a,0x94f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x8fc,0x8f0,0x8f4,0x48e,0x48e,0x48e,0x48e,0x48e, +0x48e,0x48e,0x48e,0x48e,0x48e,0x48e,0x48e,0x48e,0x48e,0x904,0x48e,0x48e,0x48e,0x48e,0x90c,0x910, +0x918,0x920,0x924,0x92c,0x48e,0x48e,0x48e,0x930,0x938,0x37f,0x940,0x948,0x38f,0x38f,0x38f,0x950, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x768, -0x654,0x654,0x654,0x8ef,0x8f7,0x8ff,0x907,0x654,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x91b,0x90f,0x913,0x489,0x489,0x489,0x489,0x489, -0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x923,0x489,0x489,0x489,0x489,0x92b,0x92f, -0x937,0x93f,0x943,0x94b,0x489,0x489,0x489,0x94f,0x957,0x37a,0x95f,0x967,0x38a,0x38a,0x38a,0x96f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x76e, +0x65a,0x65a,0x65a,0x8f0,0x8f8,0x900,0x908,0x65a,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x91c,0x910,0x914,0x48e,0x48e,0x48e,0x48e,0x48e, +0x48e,0x48e,0x48e,0x48e,0x48e,0x48e,0x48e,0x48e,0x48e,0x924,0x48e,0x48e,0x48e,0x48e,0x92c,0x930, +0x938,0x940,0x944,0x94c,0x48e,0x48e,0x48e,0x950,0x958,0x37f,0x960,0x968,0x38f,0x38f,0x38f,0x970, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0xe28,0xe28,0xe68,0xea8,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xee0,0xf20,0xf60,0xf70,0xfb0,0xfbc, -0xe28,0xe28,0xffc,0xe28,0xe28,0xe28,0x1034,0x1074,0x10b4,0x10f4,0x112c,0x116c,0x11ac,0x11e4,0x1224,0x1264, -0xa40,0xa80,0xac0,0xafa,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb25,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb62,0x1a0,0x1a0,0xb97,0xbd7,0xc17,0xc57,0xc97,0xcd7, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0xe3c,0xe3c,0xe7c,0xebc,0xe3c,0xe3c,0xe3c,0xe3c,0xe3c,0xe3c,0xef4,0xf34,0xf74,0xf84,0xfc4,0xfd0, +0xe3c,0xe3c,0x1010,0xe3c,0xe3c,0xe3c,0x1048,0x1088,0x10c8,0x1108,0x1140,0x1180,0x11c0,0x11f8,0x1238,0x1278, +0xa40,0xa80,0xac0,0xaff,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb37,0x1a0,0x1a0, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb74,0x1a0,0x1a0,0xba9,0xbe9,0xc29,0xc69,0xca9,0xce9, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, -0xd57,0xd67,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, +0xd69,0xd79,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd17, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd29, #if !U_PLATFORM_IS_DARWIN_BASED -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x957,0x38a,0x654,0x654,0x95f,0x5f7,0x38a,0x4f0, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x967,0x38a,0x38a,0x38a,0x96e,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x958,0x38f,0x65a,0x65a,0x960,0x5fd,0x38f,0x4f5, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x968,0x38f,0x38f,0x38f,0x96f,0x38f,0x38f,0x38f,0x38f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x977,0x38a,0x654,0x654,0x97f,0x5f7,0x38a,0x4f0, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x987,0x38a,0x38a,0x38a,0x98e,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x978,0x38f,0x65a,0x65a,0x980,0x5fd,0x38f,0x4f5, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x988,0x38f,0x38f,0x38f,0x98f,0x38f,0x38f,0x38f,0x38f, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #if !U_PLATFORM_IS_DARWIN_BASED -0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x976,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, -0x97e,0x982,0x41f,0x41f,0x41f,0x41f,0x992,0x98a,0x41f,0x99a,0x41f,0x41f,0x9a2,0x9a8,0x41f,0x41f, +0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x977,0x424,0x424,0x424,0x424,0x424,0x424,0x424, +0x97f,0x983,0x424,0x424,0x424,0x424,0x993,0x98b,0x424,0x99b,0x424,0x424,0x9a3,0x9a9,0x424,0x424, +0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x9b9,0x9b1,0x424,0x424,0x424,0x424,0x424,0x424, +0x424,0x424,0x424,0x9c1,0x424,0x424,0x424,0x424,0x424,0x9c9,0x9d0,0x9d6,0x424,0x424,0x424,0x424, +0x4fc,0x9de,0x9e5,0x9ec,0x406,0x9ef,0x38f,0x38f,0x4e2,0x9f6,0x38f,0x9fc,0x406,0xa01,0xa09,0x38f, +0x38f,0xa0e,0x38f,0x38f,0x38f,0x38f,0x820,0xa16,0x406,0x581,0x55c,0xa1d,0x38f,0x38f,0x38f,0x38f, +0x38f,0x9de,0xa25,0x38f,0x38f,0xa2d,0xa35,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xa39,0xa41,0x38f, +0x38f,0xa49,0x55c,0xa51,0x38f,0xa57,0x38f,0x38f,0x5ed,0xa5f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0xa64,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xa6c, +0xa70,0xa78,0x38f,0xa7f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0xa86,0x38f,0x38f,0xa94,0xa8e,0x38f,0x38f,0x38f,0xa9c,0xaa4,0x38f,0xaa8,0x38f,0x38f,0x38f,0x38f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x996,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, -0x99e,0x9a2,0x41f,0x41f,0x41f,0x41f,0x9b2,0x9aa,0x41f,0x9ba,0x41f,0x41f,0x9c2,0x9c8,0x41f,0x41f, +0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x997,0x424,0x424,0x424,0x424,0x424,0x424,0x424, +0x99f,0x9a3,0x424,0x424,0x424,0x424,0x9b3,0x9ab,0x424,0x9bb,0x424,0x424,0x9c3,0x9c9,0x424,0x424, +0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x9d9,0x9d1,0x424,0x424,0x424,0x424,0x424,0x424, +0x424,0x424,0x424,0x9e1,0x424,0x424,0x424,0x424,0x424,0x9e9,0x9f0,0x9f6,0x424,0x424,0x424,0x424, +0x4fc,0x9fe,0xa05,0xa0c,0x406,0xa0f,0x38f,0x38f,0x4e2,0xa16,0x38f,0xa1c,0x406,0xa21,0xa29,0x38f, +0x38f,0xa2e,0x38f,0x38f,0x38f,0x38f,0x820,0xa36,0x406,0x581,0x55c,0xa3d,0x38f,0x38f,0x38f,0x38f, +0x38f,0x9fe,0xa45,0x38f,0x38f,0xa4d,0xa55,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xa59,0xa61,0x38f, +0x38f,0xa69,0x55c,0xa71,0x38f,0xa77,0x38f,0x38f,0x5ed,0xa7f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0xa84,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xa8c, +0xa90,0xa98,0x38f,0xa9f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0xaa6,0x38f,0x38f,0xab4,0xaae,0x38f,0x38f,0x38f,0xabc,0xac4,0x38f,0xac8,0x38f,0x38f,0x38f,0x38f, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x583,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #if !U_PLATFORM_IS_DARWIN_BASED -0x41f,0x41f,0x41f,0x9b0,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, -0x4f7,0x9b8,0x9bf,0x9c6,0x401,0x9c9,0x38a,0x38a,0x4dd,0x9d1,0x38a,0x9d7,0x401,0x9dc,0x609,0x38a, -0x38a,0x9e4,0x38a,0x38a,0x38a,0x38a,0x826,0x9ec,0x401,0x4f8,0x556,0x9f3,0x38a,0x38a,0x38a,0x38a, -0x38a,0x9b8,0x9fb,0x38a,0x38a,0x9ff,0xa07,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa0b,0xa13,0x38a, -0x38a,0xa1b,0x556,0xa23,0x38a,0xa29,0x38a,0x38a,0x5e7,0xa31,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa39,0xa3d,0xa45,0x38a,0xa4c,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa53,0x38a,0x38a,0xa61,0xa5b, -0x38a,0x38a,0x38a,0xa69,0xa71,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa75,0x38a,0xa7b,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xaae,0x38f, +0xab4,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x41f,0x41f,0x41f,0x9d0,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, -0x4f7,0x9d8,0x9df,0x9e6,0x401,0x9e9,0x38a,0x38a,0x4dd,0x9f1,0x38a,0x9f7,0x401,0x9fc,0x609,0x38a, -0x38a,0xa04,0x38a,0x38a,0x38a,0x38a,0x826,0xa0c,0x401,0x4f8,0x556,0xa13,0x38a,0x38a,0x38a,0x38a, -0x38a,0x9d8,0xa1b,0x38a,0x38a,0xa1f,0xa27,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa2b,0xa33,0x38a, -0x38a,0xa3b,0x556,0xa43,0x38a,0xa49,0x38a,0x38a,0x5e7,0xa51,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa59,0xa5d,0xa65,0x38a,0xa6c,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa73,0x38a,0x38a,0xa81,0xa7b, -0x38a,0x38a,0x38a,0xa89,0xa91,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa95,0x38a,0xa9b,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xace,0x38f, +0xad4,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #if !U_PLATFORM_IS_DARWIN_BASED -0x38a,0xa81,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0xaba,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0xaa1,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0xada,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #if !U_PLATFORM_IS_DARWIN_BASED -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x511,0xa89,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x516,0xac2,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x511,0xaa9,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x516,0xae2,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #if !U_PLATFORM_IS_DARWIN_BASED -0x38a,0x38a,0xa90,0xa98,0xa9e,0x38a,0x38a,0x654,0x654,0xaa6,0x38a,0x38a,0x38a,0x38a,0x38a,0x654, -0x654,0xaae,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xab4,0x38a,0xabb, -0x38a,0xab7,0x38a,0xabe,0x38a,0xac6,0xaca,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x3d8,0xad2,0x3d8,0xad9,0xae0,0xae8,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0xac9,0xad1,0xad7,0x38f,0x38f,0x65a,0x65a,0xadf,0x38f,0x38f,0x38f,0x38f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0xab0,0xab8,0xabe,0x38a,0x38a,0x654,0x654,0xac6,0x38a,0x38a,0x38a,0x38a,0x38a,0x654, -0x654,0xace,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xad4,0x38a,0xadb, -0x38a,0xad7,0x38a,0xade,0x38a,0xae6,0xaea,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x3d8,0xaf2,0x3d8,0xaf9,0xb00,0xb08,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0xae9,0xaf1,0xaf7,0x38f,0x38f,0x65a,0x65a,0xaff,0x38f,0x38f,0x38f,0x38f, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x65a,0x65a,0x833,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #if !U_PLATFORM_IS_DARWIN_BASED -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xaf0,0xaf8,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xae1, +0x38f,0xae8,0x38f,0xae4,0x38f,0xaeb,0x38f,0xaf3,0xaf7,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x3dd,0xaff,0x3dd,0xb06,0xb0d,0xb15,0x38f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xb10,0xb18,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xb01, +0x38f,0xb08,0x38f,0xb04,0x38f,0xb0b,0x38f,0xb13,0xb17,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x3dd,0xb1f,0x3dd,0xb26,0xb2d,0xb35,0x38f, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #if !U_PLATFORM_IS_DARWIN_BASED -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0xb00,0x41f,0xb08, -0xb08,0xb0f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xb1d,0xb25,0x38f,0x38f,0x38f,0x38f,0x38f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0xb20,0x41f,0xb28, -0xb28,0xb2f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xb3d,0xb45,0x38f,0x38f,0x38f,0x38f,0x38f, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #if !U_PLATFORM_IS_DARWIN_BASED -0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0xb17,0x41f, -0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x654,0xb1f,0x654,0x654,0x657,0xb24,0xb28,0x840,0xb30, -0x38a,0x38a,0xb36,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x764,0x38a,0x38a,0x38a,0x38a,0x654, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x424,0x424,0x424,0x424,0x424,0x424,0xb2d, +0x424,0xb35,0xb35,0xb3c,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424, +0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x8f4,0x48e,0x48e,0x424, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0xb37,0x41f, -0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x654,0xb3f,0x654,0x654,0x657,0xb44,0xb48,0x840,0xb50, -0x38a,0x38a,0xb56,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x764,0x38a,0x38a,0x38a,0x38a,0x654, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x424,0x424,0x424,0x424,0x424,0x424,0xb4d, +0x424,0xb55,0xb55,0xb5c,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424, +0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x914,0x48e,0x48e,0x424, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654, +0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x48e,0x48e,0x48e,0x48e,0x48e,0x48e,0x48e, #if !U_PLATFORM_IS_DARWIN_BASED -0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0xb3e,0xb46,0x654, -0x654,0x654,0x657,0x654,0x654,0xb3e,0x38a,0xb1f,0x654,0xb4e,0x654,0xb56,0x842,0x38a,0x38a,0xb1f, -0xb5a,0xb62,0x659,0x656,0x38a,0xb6a,0x56d,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0xb44,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x65a,0xb4c,0x65a,0x65a,0x65d,0xb51,0xb55, +0x844,0xb5d,0x3b1,0x38f,0xb63,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x76a,0x38f,0x38f,0x38f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0xb5e,0xb66,0x654, -0x654,0x654,0x657,0x654,0x654,0xb5e,0x38a,0xb3f,0x654,0xb6e,0x654,0xb76,0x842,0x38a,0x38a,0xb3f, -0xb7a,0xb82,0x659,0x656,0x38a,0xb8a,0x56d,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0xb64,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x424,0x65a,0xb6c,0x65a,0x65a,0x65d,0xb71,0xb75, +0x844,0xb7d,0x3b1,0x38f,0xb83,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x76a,0x38f,0x38f,0x38f, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a, #if !U_PLATFORM_IS_DARWIN_BASED -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xb72,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0xb6b, +0xb73,0x65a,0x65a,0x65a,0x65d,0x65a,0x65a,0xb7b,0x38f,0xb4c,0x65a,0xb83,0x65a,0xb8b,0x846,0x38f, +0x38f,0xb4c,0xb8f,0x65a,0xb97,0x65a,0xb9f,0xba7,0x65a,0x38f,0x38f,0x38f,0x846,0x38f,0x38f,0x38f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xb92,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0xb8b, +0xb93,0x65a,0x65a,0x65a,0x65d,0x65a,0x65a,0xb9b,0x38f,0xb6c,0x65a,0xba3,0x65a,0xbab,0x846,0x38f, +0x38f,0xb6c,0xbaf,0x65a,0xbb7,0x65a,0xbbf,0xbc7,0x65a,0x38f,0x38f,0x38f,0x846,0x38f,0x38f,0x38f, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #if !U_PLATFORM_IS_DARWIN_BASED -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xb72,0xb82,0xb7a,0xb7a,0xb7a,0xb83,0xb83,0xb83,0xb83,0x3d8, -0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0xb8b,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83, -0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83, -0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83, -0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83, -0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0xb83,0x369,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xbaf,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xb92,0xba2,0xb9a,0xb9a,0xb9a,0xba3,0xba3,0xba3,0xba3,0x3d8, -0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0xbab,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3, -0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3, -0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3, -0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3, -0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0x369,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xbcf,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x12,8,7,8,9,7,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,7,7,7,8,9,0xa,0xa,4,4,4,0xa,0xa, -0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2,2,2,2,2, -2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0,0,0,0,0, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f, +#if !U_PLATFORM_IS_DARWIN_BASED +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xbaf,0xbbf,0xbb7,0xbb7,0xbb7,0xbc0,0xbc0,0xbc0, +0xbc0,0x3dd,0x3dd,0x3dd,0x3dd,0x3dd,0x3dd,0x3dd,0xbc8,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0, +0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0, +0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0, +0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0, +0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0xbc0,0x36e,0x36e,0x36e,0x12,0x12,0x12,0x12, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0x38f,0xbcf,0xbdf,0xbd7,0xbd7,0xbd7,0xbe0,0xbe0,0xbe0, +0xbe0,0x3dd,0x3dd,0x3dd,0x3dd,0x3dd,0x3dd,0x3dd,0xbe8,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0, +0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0, +0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0, +0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0, +0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0xbe0,0x36e,0x36e,0x36e,0x12,0x12,0x12,0x12, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x12,0x12,0x12,0x12,0x12,8,7,8,9,7,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,7,7,7,8,9,0xa,0xa,4, +4,4,0xa,0xa,0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2, +2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0x510a,0xa,0xd20a,0xa,0xa,0xa,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0xa,0xa,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0x510a,0xa,0xd20a,0xa,0x12,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0x12,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x12,0x12,0x12,0x12,0x12,7,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,6,0xa,4,4,4,4,0xa,0xa, -0xa,0xa,0,0x900a,0xa,0xb2,0xa,0xa,4,4,2,2,0xa,0,0xa,0xa, -0xa,2,0,0x900a,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, +0,0,0,0,0,0,0,0,0,0,0,0,0x12,0x12,0x12,0x12, +0x12,7,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,6,0xa,4,4, +4,4,0xa,0xa,0xa,0xa,0,0x900a,0xa,0xb2,0xa,0xa,4,4,2,2, +0xa,0,0xa,0xa,0xa,2,0,0x900a,0xa,0xa,0xa,0xa,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, +0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xa,0xa,0,0,0,0,0, -0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0, +0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0, -0,0,0,0,0xa,0xa,0,0xa,0,0,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xa,0xa,0,0,0,0,0,0, +0,0,0xa,0,0,0,0,0,0xa,0xa,0,0xa,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xa,0,0,0,0,0,0,0,0,0, +0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0, -0,0xa,0xa,4,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xa,0,0,0xa,0xa,4,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,1,0xb1,1,0xb1,0xb1,1,0xb1,0xb1,1,0xb1,1,1,1,1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,0xb1,1,0xb1,0xb1,1,0xb1,0xb1,1,0xb1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,5,5,5,5,5,5,0xa,0xa,0xd,4,4,0xd, -6,0xd,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd, -0x8ad,0xd,0xd,0xd,0x4d,0xd,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x4d,0x2d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,5,5,5,5,5,5,5,5,5,5,4,5, -5,0xd,0x4d,0x4d,0xb1,0x8d,0x8d,0x8d,0xd,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, -0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +1,1,1,1,1,1,1,1,5,5,5,5,5,5,0xa,0xa, +0xd,4,4,0xd,6,0xd,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xd,0x8ad,0xd,0xd,0xd,0x4d,0xd,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d, +0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x2d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x8d,0x4d,0x4d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,5,5,5,5,5,5,5, +5,5,4,5,5,0xd,0x4d,0x4d,0xb1,0x8d,0x8d,0x8d,0xd,0x8d,0x8d,0x8d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, +0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x8d, -0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,0x8d, -0xd,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,0xa,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xd,0xd,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0x8d,0x8d,2,2,2,2, -2,2,2,2,2,2,0x4d,0x4d,0x4d,0xd,0xd,0x4d,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xad,0x8d,0xb1,0x4d,0x4d, -0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd, -0xd,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d, -0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d, -0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0x8d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,0x4d,0x8d, +0x4d,0x4d,0x8d,0x8d,0xd,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,0xa,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0x8d,0x8d, +2,2,2,2,2,2,2,2,2,2,0x4d,0x4d,0x4d,0xd,0xd,0x4d, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xad, +0x8d,0xb1,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xd,0xd,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d, +0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,1,1,1,1,1,1,1,1,1,1,0x41,0x41, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,1,1,1,1,1,1,1,1, +1,1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, -0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,0xa,0xa,0xa,0xa,0x21,1, -1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1, -0xb1,0xb1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1, -0xb1,0xb1,0xb1,0xb1,0x81,0x41,0x41,0x41,0x41,0x41,0x81,0x81,0x41,0x81,0x41,0x41, -0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x81,0x41,1,1,1,0xb1,0xb1,0xb1, -1,1,1,1,0x4d,0xd,0x4d,0x4d,0x4d,0x4d,0xd,0x8d,0x4d,0x8d,0x8d,0xd, -0xd,0xd,0xd,0xd,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,0xb1,0xb1,5,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,0xa,0xa, +0xa,0xa,0x21,1,1,0xb1,1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1, +1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1, +0xb1,0xb1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0x81,0x41,0x41,0x41,0x41,0x41,0x81,0x81, +0x41,0x81,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x81,0x41,1,1, +1,0xb1,0xb1,0xb1,1,1,1,1,0x4d,0xd,0x4d,0x4d,0x4d,0x4d,0xd,0x8d, +0x4d,0x8d,0x8d,0xd,0xd,0xd,0xd,0xd,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xb1,0xb1,5,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d, -0x8d,0xd,0x8d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0xd,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d, -0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0,0xb1,0,0,0,0,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0,0,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0, -0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x8d,0x8d,0x8d,0xd,0x8d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0xd,0x4d,0x4d, +0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0,0,0, +0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0, +0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, 0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,4,4,0,0,0,0,0,0,0,4,0,0,0,0, -0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0,0, 0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0,0,0,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, 0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0, -0,0,0,0,0,4,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, -0,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0, +0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,4, +0,0,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa, -0xa,4,0xa,0,0,0,0,0,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0xb1, +0xb1,0xb1,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, +0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0, +0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0, -0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, -0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, +0,0,0,0,0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, +0xa,0xa,0xa,0xa,0xa,4,0xa,0,0,0,0,0,0xb1,0,0,0, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0,0,0xa0,0,0,0,0, -0,0,0xa0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0, +0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0,0,4,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0,0xa0,0,0,0,0,0,0,0xa0,0,0,0,0,0, 0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0,0xb1,0,0xb1,0x310a,0xf20a,0x310a,0xf20a,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, 0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0, -0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,4,0,0,0,0, +0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1, +0,0xb1,0x310a,0xf20a,0x310a,0xf20a,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1, +0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0, +0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0, +0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0,0,0,0,0, +0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xa,0,0,0, +0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, +0,0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0, +0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x310a, +0xf20a,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x310a,0xf20a,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,4, -0,0xb1,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x40,0x40,0x40,0xb1,0x40,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0x4a,0xa,0xa,0x2a,0xb1,0xb1,0xb1,0x12,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40, +0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, +0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0,0,0,0,0,4,0,0xb1,0,0,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xb1,0x40,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x4a,0xa,0xa,0x2a,0xb1, +0xb1,0xb1,0x12,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0, +0,0,0,0,0,0xb1,0xb1,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xb1,0xb1,0xb1,0,0,0,0,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0, -0,0xb1,0xb1,0xb1,0,0,0,0,0xa,0,0,0,0xa,0xa,0,0, +0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0, +0xa,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xb1,0xb1,0,0,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0xb1,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0xb1,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0, -0xb1,0xb1,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, -0,0xb1,0,0,0,0,0,0,0xb1,0,0,0,0xb1,0xb1,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xa,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0, -0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xa,0xa,0,0xa,0xa,0xa,0xa,6,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,9,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0x814,0x815,0x813,0x816,0xb2,0xb2, -0xb2,0xb2,0xb2,0xb2,2,0,0,0,2,2,2,2,2,2,3,3, -0xa,0x310a,0xf20a,0,9,9,9,9,9,9,9,9,9,9,9,0xb2, -0x412,0x432,0x8a0,0x8a1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,9,7,0x8ab,0x8ae,0x8b0,0x8ac,0x8af,6,4,4,4,4, -4,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,2,2,2,2, -2,2,2,2,2,2,3,3,0xa,0x310a,0xf20a,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4, +0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0,0,0,0xb1,0,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0,0,0,0,0, +0xb1,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0,0xa,0xa,0xa,0xa, +6,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,0xb2,0xb2,0xb2,0xb2, +0xb2,0x12,0x814,0x815,0x813,0x816,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,2,0,0,0, +2,2,2,2,2,2,3,3,0xa,0x310a,0xf20a,0,9,9,9,9, +9,9,9,9,9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,7,0x8ab,0x8ae, +0x8b0,0x8ac,0x8af,6,4,4,4,4,4,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa, +0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,2,2,3,3, +0xa,0x310a,0xf20a,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0xa, -0xa,0xa,0xa,0,0xa,0xa,0,0,0,0,0,0,0,0,0,0, -0xa,0,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa, -0,0xa,0,0xa,0,0xa,0,0,0,0,4,0,0,0,0,0, -0,0,0,0,0,0,0xa,0xa,0,0,0,0,0x100a,0xa,0xa,0xa, -0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, -0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x900a,0x900a, -0x900a,0x100a,0x900a,0x900a,0x100a,0x100a,0x900a,0x900a,0x900a,0x900a,0x900a,0x100a,0xa,0x100a,0x100a,0x100a, -0x100a,0xa,0xa,0xa,0x700a,0x700a,0x700a,0xb00a,0xb00a,0xb00a,0xa,0xa,0xa,0x100a,3,4, -0xa,0x900a,0x100a,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa, -0x100a,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a, -0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0x100a,0xa, -0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a, -0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0x300a,0xf00a,0xa,0xa,0x900a,0x100a,0x900a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a, -0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa, -0x300a,0xf00a,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa, +4,4,4,4,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0,0, +0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0, +0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0,0xa,0,0xa,0,0, +0,0,4,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa, +0,0,0,0,0x100a,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa, +0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a,0x100a,0x100a,0x900a,0x900a, +0x900a,0x900a,0x900a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0x700a,0x700a,0x700a,0xb00a, +0xb00a,0xb00a,0xa,0xa,0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa,0xa,0xa,0x100a,0x100a, +0x100a,0x100a,0xa,0x900a,0x900a,0x900a,0x900a,0xa,0x900a,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a, +0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x900a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0x100a,0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, +0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x900a,0x100a, +0x900a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x900a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x300a,0xf00a, +0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0, +0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a, -0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0x100a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0xa,0x300a,0xf00a,0xa,0x500a, -0x100a,0xd00a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, -0x100a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a, -0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a,0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x900a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa, -0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a, -0xf20a,0x710a,0x320a,0xf10a,0xb20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x300a, -0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x100a,0xa,0xa,0xa, -0xa,0xa,0x100a,0x900a,0x900a,0x900a,0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa, -0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0x100a,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a, -0x100a,0x100a,0xa,0xa,0x100a,0xa,0x100a,0xa,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa, -0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a, +0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0xa,0x300a, +0xf00a,0x310a,0xf20a,0xa,0x300a,0xf00a,0xa,0x500a,0x100a,0xd00a,0xa,0xa,0xa,0xa,0xa,0x100a, +0x100a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x900a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a, +0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a, +0x100a,0x100a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0x100a,0x900a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0x310a, +0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x710a,0x320a,0xf10a,0xb20a,0x310a,0xf20a,0x310a, +0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0x900a,0x100a,0x100a,0x100a,0x100a,0x900a,0xa,0x100a,0x900a, +0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a, +0x300a,0xf00a,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0x300a,0xf00a,0xa, +0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x900a, +0x900a,0x900a,0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x900a,0xa,0xa,0xa,0xa,0x100a, +0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0x100a,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa, +0x100a,0xa,0x100a,0xa,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, +0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0x300a,0xf00a,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0xa,0xa,0x100a, -0x100a,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a, -0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a, -0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x100a, -0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a, -0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa, -0xa,0xa,0xa,0xa,0x100a,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa, +0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa, +0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa, +0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a, +0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a, +0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x300a,0xf00a,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a, +0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, +0x100a,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, -0xa,0xa,0xa,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0, -0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xb1,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa, -0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a, -0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x900a,0, +0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa, +0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0, @@ -642,12 +647,11 @@ static const uint16_t ubidi_props_trieIndex[11984]={ 0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xb1,0xb1,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, 0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, @@ -662,206 +666,221 @@ static const uint16_t ubidi_props_trieIndex[11984]={ 0x40,0x40,0x40,0x40,0x40,0x40,0x60,0,0xa,0xa,0xa,0xa,0,0,0,0, 0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0, +0,0,0,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0,0, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0, +0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0, +0,0,0,0,0,0xb1,0,0,0xb1,0,0,0,0,0xb1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0, -0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0, -0,0xb1,0,0,0xb1,0,0,0,0,0xb1,0,0,0,0,0,0, -#if !U_PLATFORM_IS_DARWIN_BASED -0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x11,0x11,0x11,0x11, -0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0,0,0xd,1, +#if U_PLATFORM_IS_DARWIN_BASED +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, -0x11,0x11,0x11,0x11,0x11,0x11,1,1,1,1,1,0x11,4,2,0,0, -0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0,0, -0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,1,1,1,1, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0,0,0,0, +0,0,0xd,1,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,1,1,1,1,1,0x11, +4,2,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, +0xa,0xa,0,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +#endif /* U_PLATFORM_IS_DARWIN_BASED */ +1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,1,0xb1,1,0xd,0xd,0xd,0xd, +0,0,0,0,0,0,0,0,0,0,0,0,0,1,0xb1,1, 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,6,0xa,6,0, -0xa,6,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,4,0xa,0xa,3,3, -0x300a,0xf00a,0xa,0,0xa,4,4,0xa,0,0,0,0,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa, 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2,0,0xa,0xa,4, -4,4,0xa,0xa,0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2, -2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xd,0xd, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +6,0xa,6,0,0xa,6,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,4, +0xa,0xa,3,3,0x300a,0xf00a,0xa,0,0xa,4,4,0xa,0,0,0,0, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2, +0,0xa,0xa,4,4,4,0xa,0xa,0x310a,0xf20a,0xa,3,6,3,6,6, +2,2,2,2,2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa, +0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0x310a, +0xf20a,0xa,0x310a,0xf20a,0xa,0xa,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0x310a,0xf20a,0xa,0x310a,0xf20a, -0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,4,4,0xa,0xa, -0xa,4,4,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa,0xa,0xa,0x12,0x12,0,0xa,0,0, +4,4,0xa,0xa,0xa,4,4,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa,0xa,0xa,0x12,0x12, +0,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xb1,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0xb1,0xb1,0,0,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,0xa,1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1, -1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +0xb1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -0xb1,0xb1,0xb1,1,1,1,1,0xb1,0x41,0x81,1,1,0x81,0xb1,0xb1,1, -1,1,1,0x41,0x41,0x41,0x41,0x81,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x81,1,0x81, -1,0x81,0x81,1,1,0x61,0x81,0x81,0x81,0x81,0x81,0x41,0x41,0x41,0x41,0x61, -0x41,0x41,0x41,0x41,0x41,0x81,0x41,0x41,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,0xa,1,0xb1,0xb1,0xb1, +1,0xb1,0xb1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x41,0x81,0x41,0x81,0x81,0x81,0x41,0x41, -0x41,0x81,0x41,0x41,0x81,0x41,0x81,0x81,0x41,0x81,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,0x81,0x81,0x81,0x81,0x41,0x41,1, +1,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0xb1,0x41,0x81,1,1, +0x81,0xb1,0xb1,1,1,1,1,0x41,0x41,0x41,0x41,0x81,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,0x41,0x41,0x41,0x41, +0x41,0x81,1,0x81,1,0x81,0x81,1,1,0x61,0x81,0x81,0x81,0x81,0x81,0x41, +0x41,0x41,0x41,0x61,0x41,0x41,0x41,0x41,0x41,0x81,0x41,0x41,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x41,0x81,0x41,0x81, +0x81,0x81,0x41,0x41,0x41,0x81,0x41,0x41,0x81,0x41,0x81,0x81,0x41,0x81,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,0x81,0x81,0x81, +0x81,0x41,0x41,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0x4d,0x4d,0x8d,0x4d,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,5,5,5,5,5,5,5,5,5,5,0xd,0xd, +0xd,0xd,0xd,0xd,0x6d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1, +5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x4d,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0x4d,0x4d,0x4d,0x8d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0, -0,0xa0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, +0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0,0,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, +0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1,0xb1, +0,0,0,0,0,0,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0xb1,0xb1,0,0xb1,0xb1, +0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0, +0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, +0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0,0xb1,0,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, +0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0, -0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0, +0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa0,0xa0,0xb1,0xb1,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1, -0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,0, -0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1, -0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xa0,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1, -0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0, +0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0, +0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0,0,0,0, 0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0xb1,0, -0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0, +0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xa0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb2,0xb2,0xb2,0xb2,0,0,0,0,0,0,0,0, +0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0, -0,0,0,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0, +0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0xb1,0,0xb1,0xb1,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xb1,0xb1,0xb1,0xa,0,0, +0xb1,0xb1,0,0,0,0xb1,0,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0x100a,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0x100a,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0x100a,0,0,0,0, -0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, -0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xb1,0xb1, +0xb1,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x100a, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, +0,0,0,0,0,0x100a,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x100a, +0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0, +0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1, +0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1, +1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, -0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, -0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -2,2,2,2,2,2,2,2,2,2,2,0xa,0xa,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0x41,0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, +0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,2,2,2,0xa, +0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa, +0xa,0xa,0xa,0,0,0,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x12,0x12,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, +0,0,0,0,0,0,0,0,0,0,0x12,0x12,0xb2,0xb2,0xb2,0xb2, 0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, -0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0xb2,0x12,0x12,0x12,0x12,0x12,0x12, +0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0xb2,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0,0,0,0 +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0,0,0,0 }; -static const uint32_t ubidi_props_mirrors[26]={ -0x2000ab,0xbb,0x2a02215,0x1202243,0x2802298,0x2c022a6,0x30022a8,0x2e022a9,0x32022ab,0x6022cd,0x1e022f2,0x20022f3,0x22022f4,0x24022f6,0x26022f7,0x14022fa, -0x16022fb,0x18022fc,0x1a022fd,0x1c022fe,0x8029b8,0x4029f5,0xa02ade,0xe02ae3,0xc02ae4,0x1002ae5 +static const uint32_t ubidi_props_mirrors[40]={ +0x2000ab,0xbb,0x4202215,0x4e0221f,0x3e02220,0x3a02221,0x3c02222,0x4c02224,0x2202243,0x1402245,0x120224c,0x4002298,0x44022a6,0x48022a8,0x46022a9,0x4a022ab, +0x38022b8,0x10022cd,0x2e022f2,0x30022f3,0x32022f4,0x34022f6,0x36022f7,0x24022fa,0x26022fb,0x28022fc,0x2a022fd,0x2c022fe,0x20027dc,0xa0299b,0xc029a0,0x8029a3, +0x16029b8,0x4029f5,0x1802ade,0x1c02ae3,0x1a02ae4,0x1e02ae5,0xe02aee,0x602bfe }; static const uint8_t ubidi_props_jgArray[672]={ @@ -909,10 +928,46 @@ static const uint8_t ubidi_props_jgArray[672]={ 0xb,0x55,0x1f,1,0x13,0,4,4,4,0x1f,0x2d,0x56,0x58,0x57,0,0 }; -static const uint8_t ubidi_props_jgArray2[48]={ +static const uint8_t ubidi_props_jgArray2[612]={ 0x3a,0x3c,0x3c,0x40,0x40,0x3d,0,0x52,0,0x54,0x54,0,0,0x41,0x4f,0x53, 0x43,0x43,0x43,0x44,0x3e,0x50,0x45,0x46,0x4c,0x3b,0x3b,0x48,0x48,0x4b,0x49,0x49, -0x49,0x4a,0,0,0x4d,0,0,0,0,0,0,0x47,0x3f,0x4e,0x51,0x42 +0x49,0x4a,0,0,0x4d,0,0,0,0,0,0,0x47,0x3f,0x4e,0x51,0x42, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x65,0,0,0,0,0,0,0x65,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x64,0,0,0x65,0,0x64,0, +0x64,0,0,0x64 }; static const UBiDiProps ubidi_props_singleton={ @@ -923,23 +978,23 @@ static const UBiDiProps ubidi_props_singleton={ ubidi_props_jgArray2, { ubidi_props_trieIndex, - ubidi_props_trieIndex+3496, + ubidi_props_trieIndex+3516, NULL, - 3496, + 3516, #if !U_PLATFORM_IS_DARWIN_BASED - 8360, + 8584, #else /* !U_PLATFORM_IS_DARWIN_BASED */ - 8488, + 8712, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x1a0, - 0xe28, + 0xe3c, 0x0, 0x0, 0x110000, #if !U_PLATFORM_IS_DARWIN_BASED - 0x2e4c, + 0x2f40, #else /* !U_PLATFORM_IS_DARWIN_BASED */ - 0x2ecc, + 0x2fc0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ NULL, 0, FALSE, FALSE, 0, NULL }, diff --git a/icuSources/common/ubidiimp.h b/icuSources/common/ubidiimp.h index a95b6e6d..a50fbbc4 100644 --- a/icuSources/common/ubidiimp.h +++ b/icuSources/common/ubidiimp.h @@ -254,8 +254,6 @@ struct UBiDi { */ const UBiDi * pParaBiDi; - const UBiDiProps *bdp; - /* alias pointer to the current text */ const UChar *text; diff --git a/icuSources/common/ubrk.cpp b/icuSources/common/ubrk.cpp index f8bdf5a6..fcec23df 100644 --- a/icuSources/common/ubrk.cpp +++ b/icuSources/common/ubrk.cpp @@ -182,6 +182,16 @@ ubrk_close(UBreakIterator *bi) delete (BreakIterator *)bi; } + +// Apple only +U_CAPI void U_EXPORT2 +ubrk_setLineWordOpts(UBreakIterator* bi, + ULineWordOptions lineWordOpts) +{ + ((BreakIterator*)bi)->setLineWordOpts(lineWordOpts); +} + + U_CAPI void U_EXPORT2 ubrk_setText(UBreakIterator* bi, const UChar* text, diff --git a/icuSources/common/ucase.cpp b/icuSources/common/ucase.cpp index 706d7289..8414c527 100644 --- a/icuSources/common/ucase.cpp +++ b/icuSources/common/ucase.cpp @@ -77,9 +77,12 @@ ucase_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { /* data access primitives --------------------------------------------------- */ -#define GET_EXCEPTIONS(csp, props) ((csp)->exceptions+((props)>>UCASE_EXC_SHIFT)) +U_CFUNC const UTrie2 * U_EXPORT2 +ucase_getTrie() { + return &ucase_props_singleton.trie; +} -#define PROPS_HAS_EXCEPTION(props) ((props)&UCASE_EXCEPTION) +#define GET_EXCEPTIONS(csp, props) ((csp)->exceptions+((props)>>UCASE_EXC_SHIFT)) /* number of bits in an 8-bit integer value */ static const uint8_t flagsOffset[256]={ @@ -128,13 +131,18 @@ static const uint8_t flagsOffset[256]={ U_CAPI UChar32 U_EXPORT2 ucase_tolower(UChar32 c) { uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); - if(!PROPS_HAS_EXCEPTION(props)) { - if(UCASE_GET_TYPE(props)>=UCASE_UPPER) { + if(!UCASE_HAS_EXCEPTION(props)) { + if(UCASE_IS_UPPER_OR_TITLE(props)) { c+=UCASE_GET_DELTA(props); } } else { const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props); uint16_t excWord=*pe++; + if(HAS_SLOT(excWord, UCASE_EXC_DELTA) && UCASE_IS_UPPER_OR_TITLE(props)) { + int32_t delta; + GET_SLOT_VALUE(excWord, UCASE_EXC_DELTA, pe, delta); + return (excWord&UCASE_EXC_DELTA_IS_NEGATIVE)==0 ? c+delta : c-delta; + } if(HAS_SLOT(excWord, UCASE_EXC_LOWER)) { GET_SLOT_VALUE(excWord, UCASE_EXC_LOWER, pe, c); } @@ -145,13 +153,18 @@ ucase_tolower(UChar32 c) { U_CAPI UChar32 U_EXPORT2 ucase_toupper(UChar32 c) { uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); - if(!PROPS_HAS_EXCEPTION(props)) { + if(!UCASE_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)==UCASE_LOWER) { c+=UCASE_GET_DELTA(props); } } else { const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props); uint16_t excWord=*pe++; + if(HAS_SLOT(excWord, UCASE_EXC_DELTA) && UCASE_GET_TYPE(props)==UCASE_LOWER) { + int32_t delta; + GET_SLOT_VALUE(excWord, UCASE_EXC_DELTA, pe, delta); + return (excWord&UCASE_EXC_DELTA_IS_NEGATIVE)==0 ? c+delta : c-delta; + } if(HAS_SLOT(excWord, UCASE_EXC_UPPER)) { GET_SLOT_VALUE(excWord, UCASE_EXC_UPPER, pe, c); } @@ -162,13 +175,18 @@ ucase_toupper(UChar32 c) { U_CAPI UChar32 U_EXPORT2 ucase_totitle(UChar32 c) { uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); - if(!PROPS_HAS_EXCEPTION(props)) { + if(!UCASE_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)==UCASE_LOWER) { c+=UCASE_GET_DELTA(props); } } else { const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props); uint16_t excWord=*pe++; + if(HAS_SLOT(excWord, UCASE_EXC_DELTA) && UCASE_GET_TYPE(props)==UCASE_LOWER) { + int32_t delta; + GET_SLOT_VALUE(excWord, UCASE_EXC_DELTA, pe, delta); + return (excWord&UCASE_EXC_DELTA_IS_NEGATIVE)==0 ? c+delta : c-delta; + } int32_t idx; if(HAS_SLOT(excWord, UCASE_EXC_TITLE)) { idx=UCASE_EXC_TITLE; @@ -223,7 +241,7 @@ ucase_addCaseClosure(UChar32 c, const USetAdder *sa) { } props=UTRIE2_GET16(&ucase_props_singleton.trie, c); - if(!PROPS_HAS_EXCEPTION(props)) { + if(!UCASE_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)!=UCASE_NONE) { /* add the one simple case mapping, no matter what type it is */ int32_t delta=UCASE_GET_DELTA(props); @@ -251,6 +269,12 @@ ucase_addCaseClosure(UChar32 c, const USetAdder *sa) { sa->add(sa->set, c); } } + if(HAS_SLOT(excWord, UCASE_EXC_DELTA)) { + pe=pe0; + int32_t delta; + GET_SLOT_VALUE(excWord, UCASE_EXC_DELTA, pe, delta); + sa->add(sa->set, (excWord&UCASE_EXC_DELTA_IS_NEGATIVE)==0 ? c+delta : c-delta); + } /* get the closure string pointer & length */ if(HAS_SLOT(excWord, UCASE_EXC_CLOSURE)) { @@ -419,6 +443,138 @@ FullCaseFoldingIterator::next(UnicodeString &full) { return c; } +namespace LatinCase { + +const int8_t TO_LOWER_NORMAL[LIMIT] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, EXC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, EXC, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + EXC, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, + + 0, 1, 0, 1, 0, 1, 0, 1, 0, EXC, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, -121, 1, 0, 1, 0, 1, 0, EXC +}; + +const int8_t TO_LOWER_TR_LT[LIMIT] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 32, 32, 32, 32, 32, 32, 32, 32, EXC, EXC, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, EXC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, EXC, EXC, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, EXC, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, EXC, 0, 1, 0, 1, 0, EXC, 0, + EXC, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, + + 0, 1, 0, 1, 0, 1, 0, 1, 0, EXC, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, -121, 1, 0, 1, 0, 1, 0, EXC +}; + +const int8_t TO_UPPER_NORMAL[LIMIT] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, EXC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, EXC, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, 0, -32, -32, -32, -32, -32, -32, -32, 121, + + 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, + 0, EXC, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, 0, + + -1, 0, -1, 0, -1, 0, -1, 0, -1, EXC, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, EXC +}; + +const int8_t TO_UPPER_TR[LIMIT] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -32, -32, -32, -32, -32, -32, -32, -32, EXC, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, EXC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, EXC, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, 0, -32, -32, -32, -32, -32, -32, -32, 121, + + 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, + 0, EXC, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, 0, + + -1, 0, -1, 0, -1, 0, -1, 0, -1, EXC, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, -1, EXC +}; + +} // namespace LatinCase + U_NAMESPACE_END /** @return UCASE_NONE, UCASE_LOWER, UCASE_UPPER, UCASE_TITLE */ @@ -439,7 +595,7 @@ ucase_getTypeOrIgnorable(UChar32 c) { static inline int32_t getDotType(UChar32 c) { uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); - if(!PROPS_HAS_EXCEPTION(props)) { + if(!UCASE_HAS_EXCEPTION(props)) { return props&UCASE_DOT_MASK; } else { const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props); @@ -455,7 +611,12 @@ ucase_isSoftDotted(UChar32 c) { U_CAPI UBool U_EXPORT2 ucase_isCaseSensitive(UChar32 c) { uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); - return (UBool)((props&UCASE_SENSITIVE)!=0); + if(!UCASE_HAS_EXCEPTION(props)) { + return (UBool)((props&UCASE_SENSITIVE)!=0); + } else { + const uint16_t *pe=GET_EXCEPTIONS(&ucase_props_singleton, props); + return (UBool)((*pe&UCASE_EXC_SENSITIVE)!=0); + } } /* string casing ------------------------------------------------------------ */ @@ -878,8 +1039,8 @@ ucase_toFullLower(UChar32 c, U_ASSERT(c >= 0); UChar32 result=c; uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); - if(!PROPS_HAS_EXCEPTION(props)) { - if(UCASE_GET_TYPE(props)>=UCASE_UPPER) { + if(!UCASE_HAS_EXCEPTION(props)) { + if(UCASE_IS_UPPER_OR_TITLE(props)) { result=c+UCASE_GET_DELTA(props); } } else { @@ -961,6 +1122,7 @@ ucase_toFullLower(UChar32 c, 0307; ; 0307; 0307; tr After_I; # COMBINING DOT ABOVE 0307; ; 0307; 0307; az After_I; # COMBINING DOT ABOVE */ + *pString=nullptr; return 0; /* remove the dot (continue without output) */ } else if(loc==UCASE_LOC_TURKISH && c==0x49 && !isFollowedByDotAbove(iter, context)) { /* @@ -1004,6 +1166,11 @@ ucase_toFullLower(UChar32 c, } } + if(HAS_SLOT(excWord, UCASE_EXC_DELTA) && UCASE_IS_UPPER_OR_TITLE(props)) { + int32_t delta; + GET_SLOT_VALUE(excWord, UCASE_EXC_DELTA, pe2, delta); + return (excWord&UCASE_EXC_DELTA_IS_NEGATIVE)==0 ? c+delta : c-delta; + } if(HAS_SLOT(excWord, UCASE_EXC_LOWER)) { GET_SLOT_VALUE(excWord, UCASE_EXC_LOWER, pe2, result); } @@ -1023,7 +1190,7 @@ toUpperOrTitle(UChar32 c, U_ASSERT(c >= 0); UChar32 result=c; uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); - if(!PROPS_HAS_EXCEPTION(props)) { + if(!UCASE_HAS_EXCEPTION(props)) { if(UCASE_GET_TYPE(props)==UCASE_LOWER) { result=c+UCASE_GET_DELTA(props); } @@ -1059,6 +1226,7 @@ toUpperOrTitle(UChar32 c, 0307; 0307; ; ; lt After_Soft_Dotted; # COMBINING DOT ABOVE */ + *pString=nullptr; return 0; /* remove the dot (continue without output) */ } else { /* no known conditional special case mapping, use a normal mapping */ @@ -1092,6 +1260,11 @@ toUpperOrTitle(UChar32 c, } } + if(HAS_SLOT(excWord, UCASE_EXC_DELTA) && UCASE_GET_TYPE(props)==UCASE_LOWER) { + int32_t delta; + GET_SLOT_VALUE(excWord, UCASE_EXC_DELTA, pe2, delta); + return (excWord&UCASE_EXC_DELTA_IS_NEGATIVE)==0 ? c+delta : c-delta; + } if(!upperNotTitle && HAS_SLOT(excWord, UCASE_EXC_TITLE)) { idx=UCASE_EXC_TITLE; } else if(HAS_SLOT(excWord, UCASE_EXC_UPPER)) { @@ -1167,8 +1340,8 @@ ucase_toFullTitle(UChar32 c, U_CAPI UChar32 U_EXPORT2 ucase_fold(UChar32 c, uint32_t options) { uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); - if(!PROPS_HAS_EXCEPTION(props)) { - if(UCASE_GET_TYPE(props)>=UCASE_UPPER) { + if(!UCASE_HAS_EXCEPTION(props)) { + if(UCASE_IS_UPPER_OR_TITLE(props)) { c+=UCASE_GET_DELTA(props); } } else { @@ -1197,6 +1370,14 @@ ucase_fold(UChar32 c, uint32_t options) { } } } + if((excWord&UCASE_EXC_NO_SIMPLE_CASE_FOLDING)!=0) { + return c; + } + if(HAS_SLOT(excWord, UCASE_EXC_DELTA) && UCASE_IS_UPPER_OR_TITLE(props)) { + int32_t delta; + GET_SLOT_VALUE(excWord, UCASE_EXC_DELTA, pe, delta); + return (excWord&UCASE_EXC_DELTA_IS_NEGATIVE)==0 ? c+delta : c-delta; + } if(HAS_SLOT(excWord, UCASE_EXC_FOLD)) { idx=UCASE_EXC_FOLD; } else if(HAS_SLOT(excWord, UCASE_EXC_LOWER)) { @@ -1232,8 +1413,8 @@ ucase_toFullFolding(UChar32 c, U_ASSERT(c >= 0); UChar32 result=c; uint16_t props=UTRIE2_GET16(&ucase_props_singleton.trie, c); - if(!PROPS_HAS_EXCEPTION(props)) { - if(UCASE_GET_TYPE(props)>=UCASE_UPPER) { + if(!UCASE_HAS_EXCEPTION(props)) { + if(UCASE_IS_UPPER_OR_TITLE(props)) { result=c+UCASE_GET_DELTA(props); } } else { @@ -1284,6 +1465,14 @@ ucase_toFullFolding(UChar32 c, } } + if((excWord&UCASE_EXC_NO_SIMPLE_CASE_FOLDING)!=0) { + return ~c; + } + if(HAS_SLOT(excWord, UCASE_EXC_DELTA) && UCASE_IS_UPPER_OR_TITLE(props)) { + int32_t delta; + GET_SLOT_VALUE(excWord, UCASE_EXC_DELTA, pe2, delta); + return (excWord&UCASE_EXC_DELTA_IS_NEGATIVE)==0 ? c+delta : c-delta; + } if(HAS_SLOT(excWord, UCASE_EXC_FOLD)) { idx=UCASE_EXC_FOLD; } else if(HAS_SLOT(excWord, UCASE_EXC_LOWER)) { diff --git a/icuSources/common/ucase.h b/icuSources/common/ucase.h index e15bae66..b0a453b8 100644 --- a/icuSources/common/ucase.h +++ b/icuSources/common/ucase.h @@ -26,6 +26,7 @@ #include "putilimp.h" #include "uset_imp.h" #include "udataswp.h" +#include "utrie2.h" #ifdef __cplusplus U_NAMESPACE_BEGIN @@ -61,7 +62,7 @@ enum { /** * Bit mask for getting just the options from a string compare options word * that are relevant for case-insensitive string comparison. - * See uchar.h. Also include _STRNCMP_STYLE and U_COMPARE_CODE_POINT_ORDER. + * See stringoptions.h. Also include _STRNCMP_STYLE and U_COMPARE_CODE_POINT_ORDER. * @internal */ #define _STRCASECMP_OPTIONS_MASK 0xffff @@ -69,10 +70,16 @@ enum { /** * Bit mask for getting just the options from a string compare options word * that are relevant for case folding (of a single string or code point). - * See uchar.h. + * + * Currently only bit 0 for U_FOLD_CASE_EXCLUDE_SPECIAL_I. + * It is conceivable that at some point we might use one more bit for using uppercase sharp s. + * It is conceivable that at some point we might want the option to use only simple case foldings + * when operating on strings. + * + * See stringoptions.h. * @internal */ -#define _FOLD_CASE_OPTIONS_MASK 0xff +#define _FOLD_CASE_OPTIONS_MASK 7 /* single-code point functions */ @@ -142,6 +149,33 @@ private: int32_t rowCpIndex; }; +/** + * Fast case mapping data for ASCII/Latin. + * Linear arrays of delta bytes: 0=no mapping; EXC=exception. + * Deltas must not cross the ASCII boundary, or else they cannot be easily used + * in simple UTF-8 code. + */ +namespace LatinCase { + +/** Case mapping/folding data for code points up to U+017F. */ +constexpr UChar LIMIT = 0x180; +/** U+017F case-folds and uppercases crossing the ASCII boundary. */ +constexpr UChar LONG_S = 0x17f; +/** Exception: Complex mapping, or too-large delta. */ +constexpr int8_t EXC = -0x80; + +/** Deltas for lowercasing for most locales, and default case folding. */ +extern const int8_t TO_LOWER_NORMAL[LIMIT]; +/** Deltas for lowercasing for tr/az/lt, and Turkic case folding. */ +extern const int8_t TO_LOWER_TR_LT[LIMIT]; + +/** Deltas for uppercasing for most locales. */ +extern const int8_t TO_UPPER_NORMAL[LIMIT]; +/** Deltas for uppercasing for tr/az. */ +extern const int8_t TO_UPPER_TR[LIMIT]; + +} // namespace LatinCase + U_NAMESPACE_END #endif @@ -302,6 +336,9 @@ enum { /* definitions for 16-bit case properties word ------------------------------ */ +U_CFUNC const UTrie2 * U_EXPORT2 +ucase_getTrie(); + /* 2-bit constants for types of cased characters */ #define UCASE_TYPE_MASK 3 enum { @@ -314,9 +351,13 @@ enum { #define UCASE_GET_TYPE(props) ((props)&UCASE_TYPE_MASK) #define UCASE_GET_TYPE_AND_IGNORABLE(props) ((props)&7) +#define UCASE_IS_UPPER_OR_TITLE(props) ((props)&2) + #define UCASE_IGNORABLE 4 -#define UCASE_SENSITIVE 8 -#define UCASE_EXCEPTION 0x10 +#define UCASE_EXCEPTION 8 +#define UCASE_SENSITIVE 0x10 + +#define UCASE_HAS_EXCEPTION(props) ((props)&UCASE_EXCEPTION) #define UCASE_DOT_MASK 0x60 enum { @@ -338,9 +379,9 @@ enum { # define UCASE_GET_DELTA(props) (int16_t)(((props)&0x8000) ? (((props)>>UCASE_DELTA_SHIFT)|0xfe00) : ((uint16_t)(props)>>UCASE_DELTA_SHIFT)) #endif -/* exception: bits 15..5 are an unsigned 11-bit index into the exceptions array */ -#define UCASE_EXC_SHIFT 5 -#define UCASE_EXC_MASK 0xffe0 +/* exception: bits 15..4 are an unsigned 12-bit index into the exceptions array */ +#define UCASE_EXC_SHIFT 4 +#define UCASE_EXC_MASK 0xfff0 #define UCASE_MAX_EXCEPTIONS ((UCASE_EXC_MASK>>UCASE_EXC_SHIFT)+1) /* definitions for 16-bit main exceptions word ------------------------------ */ @@ -351,7 +392,7 @@ enum { UCASE_EXC_FOLD, UCASE_EXC_UPPER, UCASE_EXC_TITLE, - UCASE_EXC_4, /* reserved */ + UCASE_EXC_DELTA, UCASE_EXC_5, /* reserved */ UCASE_EXC_CLOSURE, UCASE_EXC_FULL_MAPPINGS, @@ -361,7 +402,11 @@ enum { /* each slot is 2 uint16_t instead of 1 */ #define UCASE_EXC_DOUBLE_SLOTS 0x100 -/* reserved: exception bits 11..9 */ +enum { + UCASE_EXC_NO_SIMPLE_CASE_FOLDING=0x200, + UCASE_EXC_DELTA_IS_NEGATIVE=0x400, + UCASE_EXC_SENSITIVE=0x800 +}; /* UCASE_EXC_DOT_MASK=UCASE_DOT_MASK< destCapacity) { - errorCode = U_BUFFER_OVERFLOW_ERROR; - } else if (edits != NULL) { - edits->copyErrorTo(errorCode); - } - } - return destIndex; -} - -} // namespace - -U_NAMESPACE_END - U_NAMESPACE_USE /* UCaseMap service object -------------------------------------------------- */ @@ -150,150 +133,39 @@ ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode) { /* TODO(markus): Move to a new, separate utf8case.cpp file. */ +namespace { + /* append a full case mapping result, see UCASE_MAX_STRING_LENGTH */ -static inline int32_t -appendResult(uint8_t *dest, int32_t destIndex, int32_t destCapacity, - int32_t result, const UChar *s, - int32_t cpLength, uint32_t options, icu::Edits *edits) { - UChar32 c; - int32_t length; - UErrorCode errorCode; +inline UBool +appendResult(int32_t cpLength, int32_t result, const UChar *s, + ByteSink &sink, uint32_t options, icu::Edits *edits, UErrorCode &errorCode) { + U_ASSERT(U_SUCCESS(errorCode)); /* decode the result */ if(result<0) { /* (not) original code point */ if(edits!=NULL) { edits->addUnchanged(cpLength); - if(options & UCASEMAP_OMIT_UNCHANGED_TEXT) { - return destIndex; - } } - c=~result; - if(destIndex(INT32_MAX-destIndex)) { - return -1; // integer overflow - } - if(edits!=NULL) { - edits->addReplace(cpLength, length); - } - // We might have an overflow, but we know the actual length. - return destIndex+length; - } else if(destIndexaddReplace(cpLength, 1); - } - return destIndex; + return ByteSinkUtil::appendChange(cpLength, s, result, sink, edits, errorCode); } else { - c=result; - length=U8_LENGTH(c); - if(edits!=NULL) { - edits->addReplace(cpLength, length); - } - } - } - // c>=0 single code point - if(length>(INT32_MAX-destIndex)) { - return -1; // integer overflow - } - - if(destIndex> 6) | 0xc0); } -static inline uint8_t getTwoByteTrail(UChar32 c) { return (uint8_t)((c & 0x3f) | 0x80); } - -static inline int32_t -appendTwoBytes(uint8_t *dest, int32_t destIndex, int32_t destCapacity, UChar32 c) { - U_ASSERT(0x370 <= c && c <= 0x3ff); // 2-byte UTF-8, main Greek block - if(2>(INT32_MAX-destIndex)) { - return -1; // integer overflow - } - int32_t limit=destIndex+2; - if(limit<=destCapacity) { - dest+=destIndex; - dest[0]=getTwoByteLead(c); - dest[1]=getTwoByteTrail(c); - } - return limit; -} +inline uint8_t getTwoByteLead(UChar32 c) { return (uint8_t)((c >> 6) | 0xc0); } +inline uint8_t getTwoByteTrail(UChar32 c) { return (uint8_t)((c & 0x3f) | 0x80); } -static inline int32_t -appendTwoBytes(uint8_t *dest, int32_t destIndex, int32_t destCapacity, const char *s) { - if(2>(INT32_MAX-destIndex)) { - return -1; // integer overflow - } - int32_t limit=destIndex+2; - if(limit<=destCapacity) { - dest+=destIndex; - dest[0]=(uint8_t)s[0]; - dest[1]=(uint8_t)s[1]; - } - return limit; -} - -static inline int32_t -appendUnchanged(uint8_t *dest, int32_t destIndex, int32_t destCapacity, - const uint8_t *s, int32_t length, uint32_t options, icu::Edits *edits) { - if(length>0) { - if(edits!=NULL) { - edits->addUnchanged(length); - if(options & UCASEMAP_OMIT_UNCHANGED_TEXT) { - return destIndex; - } - } - if(length>(INT32_MAX-destIndex)) { - return -1; // integer overflow - } - if((destIndex+length)<=destCapacity) { - uprv_memcpy(dest+destIndex, s, length); - } - destIndex+=length; - } - return destIndex; -} - -static UChar32 U_CALLCONV +UChar32 U_CALLCONV utf8_caseContextIterator(void *context, int8_t dir) { UCaseContext *csc=(UCaseContext *)context; UChar32 c; @@ -325,67 +197,243 @@ utf8_caseContextIterator(void *context, int8_t dir) { return U_SENTINEL; } -/* - * Case-maps [srcStart..srcLimit[ but takes - * context [0..srcLength[ into account. +/** + * caseLocale >= 0: Lowercases [srcStart..srcLimit[ but takes context [0..srcLength[ into account. + * caseLocale < 0: Case-folds [srcStart..srcLimit[. */ -static int32_t -_caseMap(int32_t caseLocale, uint32_t options, UCaseMapFull *map, - uint8_t *dest, int32_t destCapacity, - const uint8_t *src, UCaseContext *csc, - int32_t srcStart, int32_t srcLimit, - icu::Edits *edits, - UErrorCode &errorCode) { - /* case mapping loop */ - int32_t srcIndex=srcStart; - int32_t destIndex=0; - while(srcIndex= 0 ? + !(caseLocale == UCASE_LOC_TURKISH || caseLocale == UCASE_LOC_LITHUANIAN) : + (options & _FOLD_CASE_OPTIONS_MASK) == U_FOLD_CASE_DEFAULT)) { + latinToLower = LatinCase::TO_LOWER_NORMAL; + } else { + latinToLower = LatinCase::TO_LOWER_TR_LT; + } + const UTrie2 *trie = ucase_getTrie(); + int32_t prev = srcStart; + int32_t srcIndex = srcStart; + for (;;) { + // fast path for simple cases int32_t cpStart; - csc->cpStart=cpStart=srcIndex; UChar32 c; - U8_NEXT(src, srcIndex, srcLimit, c); - csc->cpLimit=srcIndex; - if(c<0) { - // Malformed UTF-8. - destIndex=appendUnchanged(dest, destIndex, destCapacity, - src+cpStart, srcIndex-cpStart, options, edits); - if(destIndex<0) { - errorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; + for (;;) { + if (U_FAILURE(errorCode) || srcIndex >= srcLimit) { + c = U_SENTINEL; + break; + } + uint8_t lead = src[srcIndex++]; + if (lead <= 0x7f) { + int8_t d = latinToLower[lead]; + if (d == LatinCase::EXC) { + cpStart = srcIndex - 1; + c = lead; + break; + } + if (d == 0) { continue; } + ByteSinkUtil::appendUnchanged(src + prev, srcIndex - 1 - prev, + sink, options, edits, errorCode); + char ascii = (char)(lead + d); + sink.Append(&ascii, 1); + if (edits != nullptr) { + edits->addReplace(1, 1); + } + prev = srcIndex; + continue; + } else if (lead < 0xe3) { + uint8_t t; + if (0xc2 <= lead && lead <= 0xc5 && srcIndex < srcLimit && + (t = src[srcIndex] - 0x80) <= 0x3f) { + // U+0080..U+017F + ++srcIndex; + c = ((lead - 0xc0) << 6) | t; + int8_t d = latinToLower[c]; + if (d == LatinCase::EXC) { + cpStart = srcIndex - 2; + break; + } + if (d == 0) { continue; } + ByteSinkUtil::appendUnchanged(src + prev, srcIndex - 2 - prev, + sink, options, edits, errorCode); + ByteSinkUtil::appendTwoBytes(c + d, sink); + if (edits != nullptr) { + edits->addReplace(2, 2); + } + prev = srcIndex; + continue; + } + } else if ((lead <= 0xe9 || lead == 0xeb || lead == 0xec) && + (srcIndex + 2) <= srcLimit && + U8_IS_TRAIL(src[srcIndex]) && U8_IS_TRAIL(src[srcIndex + 1])) { + // most of CJK: no case mappings + srcIndex += 2; + continue; } - continue; + cpStart = --srcIndex; + U8_NEXT(src, srcIndex, srcLimit, c); + if (c < 0) { + // ill-formed UTF-8 + continue; + } + uint16_t props = UTRIE2_GET16(trie, c); + if (UCASE_HAS_EXCEPTION(props)) { break; } + int32_t delta; + if (!UCASE_IS_UPPER_OR_TITLE(props) || (delta = UCASE_GET_DELTA(props)) == 0) { + continue; + } + ByteSinkUtil::appendUnchanged(src + prev, cpStart - prev, + sink, options, edits, errorCode); + ByteSinkUtil::appendCodePoint(srcIndex - cpStart, c + delta, sink, edits); + prev = srcIndex; + } + if (c < 0) { + break; } + // slow path const UChar *s; - c=map(c, utf8_caseContextIterator, csc, &s, caseLocale); - destIndex = appendResult(dest, destIndex, destCapacity, c, s, - srcIndex - cpStart, options, edits); - if (destIndex < 0) { - errorCode = U_INDEX_OUTOFBOUNDS_ERROR; - return 0; + if (caseLocale >= 0) { + csc->cpStart = cpStart; + csc->cpLimit = srcIndex; + c = ucase_toFullLower(c, utf8_caseContextIterator, csc, &s, caseLocale); + } else { + c = ucase_toFullFolding(c, &s, options); + } + if (c >= 0) { + ByteSinkUtil::appendUnchanged(src + prev, cpStart - prev, + sink, options, edits, errorCode); + appendResult(srcIndex - cpStart, c, s, sink, options, edits, errorCode); + prev = srcIndex; } } + ByteSinkUtil::appendUnchanged(src + prev, srcIndex - prev, + sink, options, edits, errorCode); +} - return destIndex; +void toUpper(int32_t caseLocale, uint32_t options, + const uint8_t *src, UCaseContext *csc, int32_t srcLength, + icu::ByteSink &sink, icu::Edits *edits, UErrorCode &errorCode) { + const int8_t *latinToUpper; + if (caseLocale == UCASE_LOC_TURKISH) { + latinToUpper = LatinCase::TO_UPPER_TR; + } else { + latinToUpper = LatinCase::TO_UPPER_NORMAL; + } + const UTrie2 *trie = ucase_getTrie(); + int32_t prev = 0; + int32_t srcIndex = 0; + for (;;) { + // fast path for simple cases + int32_t cpStart; + UChar32 c; + for (;;) { + if (U_FAILURE(errorCode) || srcIndex >= srcLength) { + c = U_SENTINEL; + break; + } + uint8_t lead = src[srcIndex++]; + if (lead <= 0x7f) { + int8_t d = latinToUpper[lead]; + if (d == LatinCase::EXC) { + cpStart = srcIndex - 1; + c = lead; + break; + } + if (d == 0) { continue; } + ByteSinkUtil::appendUnchanged(src + prev, srcIndex - 1 - prev, + sink, options, edits, errorCode); + char ascii = (char)(lead + d); + sink.Append(&ascii, 1); + if (edits != nullptr) { + edits->addReplace(1, 1); + } + prev = srcIndex; + continue; + } else if (lead < 0xe3) { + uint8_t t; + if (0xc2 <= lead && lead <= 0xc5 && srcIndex < srcLength && + (t = src[srcIndex] - 0x80) <= 0x3f) { + // U+0080..U+017F + ++srcIndex; + c = ((lead - 0xc0) << 6) | t; + int8_t d = latinToUpper[c]; + if (d == LatinCase::EXC) { + cpStart = srcIndex - 2; + break; + } + if (d == 0) { continue; } + ByteSinkUtil::appendUnchanged(src + prev, srcIndex - 2 - prev, + sink, options, edits, errorCode); + ByteSinkUtil::appendTwoBytes(c + d, sink); + if (edits != nullptr) { + edits->addReplace(2, 2); + } + prev = srcIndex; + continue; + } + } else if ((lead <= 0xe9 || lead == 0xeb || lead == 0xec) && + (srcIndex + 2) <= srcLength && + U8_IS_TRAIL(src[srcIndex]) && U8_IS_TRAIL(src[srcIndex + 1])) { + // most of CJK: no case mappings + srcIndex += 2; + continue; + } + cpStart = --srcIndex; + U8_NEXT(src, srcIndex, srcLength, c); + if (c < 0) { + // ill-formed UTF-8 + continue; + } + uint16_t props = UTRIE2_GET16(trie, c); + if (UCASE_HAS_EXCEPTION(props)) { break; } + int32_t delta; + if (UCASE_GET_TYPE(props) != UCASE_LOWER || (delta = UCASE_GET_DELTA(props)) == 0) { + continue; + } + ByteSinkUtil::appendUnchanged(src + prev, cpStart - prev, + sink, options, edits, errorCode); + ByteSinkUtil::appendCodePoint(srcIndex - cpStart, c + delta, sink, edits); + prev = srcIndex; + } + if (c < 0) { + break; + } + // slow path + csc->cpStart = cpStart; + csc->cpLimit = srcIndex; + const UChar *s; + c = ucase_toFullUpper(c, utf8_caseContextIterator, csc, &s, caseLocale); + if (c >= 0) { + ByteSinkUtil::appendUnchanged(src + prev, cpStart - prev, + sink, options, edits, errorCode); + appendResult(srcIndex - cpStart, c, s, sink, options, edits, errorCode); + prev = srcIndex; + } + } + ByteSinkUtil::appendUnchanged(src + prev, srcIndex - prev, + sink, options, edits, errorCode); } +} // namespace + #if !UCONFIG_NO_BREAK_ITERATION -U_CFUNC int32_t U_CALLCONV +U_CFUNC void U_CALLCONV ucasemap_internalUTF8ToTitle( int32_t caseLocale, uint32_t options, BreakIterator *iter, - uint8_t *dest, int32_t destCapacity, const uint8_t *src, int32_t srcLength, - icu::Edits *edits, + ByteSink &sink, icu::Edits *edits, UErrorCode &errorCode) { - if(U_FAILURE(errorCode)) { - return 0; + if (!ustrcase_checkTitleAdjustmentOptions(options, errorCode)) { + return; } /* set up local variables */ UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; - int32_t destIndex=0; int32_t prev=0; UBool isFirstIndex=TRUE; @@ -404,45 +452,36 @@ ucasemap_internalUTF8ToTitle( } /* - * Unicode 4 & 5 section 3.13 Default Case Operations: - * - * R3 toTitlecase(X): Find the word boundaries based on Unicode Standard Annex - * #29, "Text Boundaries." Between each pair of word boundaries, find the first - * cased character F. If F exists, map F to default_title(F); then map each - * subsequent character C to default_lower(C). - * - * In this implementation, segment [prev..index[ into 3 parts: - * a) uncased characters (copy as-is) [prev..titleStart[ - * b) first case letter (titlecase) [titleStart..titleLimit[ + * Segment [prev..index[ into 3 parts: + * a) skipped characters (copy as-is) [prev..titleStart[ + * b) first letter (titlecase) [titleStart..titleLimit[ * c) subsequent characters (lowercase) [titleLimit..index[ */ if(prevaddReplace(1, 1); - } + ByteSinkUtil::appendCodePoint(1, 0x004A, sink, edits); titleLimit++; } else if (src[titleStart+1] == 0x004A) { // Keep the capital J from getting lowercased. - destIndex=appendUnchanged(dest, destIndex, destCapacity, - src+titleStart+1, 1, options, edits); - if(destIndex<0) { - errorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; + if (!ByteSinkUtil::appendUnchanged(src+titleStart+1, 1, + sink, options, edits, errorCode)) { + return; } titleLimit++; } @@ -495,26 +524,17 @@ ucasemap_internalUTF8ToTitle( if(titleLimit nextIndex || @@ -662,148 +680,134 @@ int32_t toUpper(uint32_t options, edits->addUnchanged(oldLength); } // Write unchanged text? - change = (options & UCASEMAP_OMIT_UNCHANGED_TEXT) == 0; + change = (options & U_OMIT_UNCHANGED_TEXT) == 0; } } if (change) { - destIndex=appendTwoBytes(dest, destIndex, destCapacity, upper); - if (destIndex >= 0 && (data & HAS_EITHER_DIALYTIKA) != 0) { - destIndex=appendTwoBytes(dest, destIndex, destCapacity, u8"\u0308"); // restore or add a dialytika + ByteSinkUtil::appendTwoBytes(upper, sink); + if ((data & HAS_EITHER_DIALYTIKA) != 0) { + sink.Append(u8"\u0308", 2); // restore or add a dialytika } - if (destIndex >= 0 && addTonos) { - destIndex=appendTwoBytes(dest, destIndex, destCapacity, u8"\u0301"); + if (addTonos) { + sink.Append(u8"\u0301", 2); } - while (destIndex >= 0 && numYpogegrammeni > 0) { - destIndex=appendTwoBytes(dest, destIndex, destCapacity, u8"\u0399"); + while (numYpogegrammeni > 0) { + sink.Append(u8"\u0399", 2); --numYpogegrammeni; } - if(destIndex<0) { - errorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; - } } } else if(c>=0) { const UChar *s; c=ucase_toFullUpper(c, NULL, NULL, &s, UCASE_LOC_GREEK); - destIndex = appendResult(dest, destIndex, destCapacity, c, s, - nextIndex - i, options, edits); - if (destIndex < 0) { - errorCode = U_INDEX_OUTOFBOUNDS_ERROR; - return 0; + if (!appendResult(nextIndex - i, c, s, sink, options, edits, errorCode)) { + return; } } else { // Malformed UTF-8. - destIndex=appendUnchanged(dest, destIndex, destCapacity, - src+i, nextIndex-i, options, edits); - if(destIndex<0) { - errorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; + if (!ByteSinkUtil::appendUnchanged(src+i, nextIndex-i, + sink, options, edits, errorCode)) { + return; } } i = nextIndex; state = nextState; } - - return destIndex; } } // namespace GreekUpper U_NAMESPACE_END -static int32_t U_CALLCONV +static void U_CALLCONV ucasemap_internalUTF8ToLower(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_UNUSED - uint8_t *dest, int32_t destCapacity, const uint8_t *src, int32_t srcLength, - icu::Edits *edits, + icu::ByteSink &sink, icu::Edits *edits, UErrorCode &errorCode) { UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; - int32_t destIndex = _caseMap( - caseLocale, options, ucase_toFullLower, - dest, destCapacity, + toLower( + caseLocale, options, src, &csc, 0, srcLength, - edits, errorCode); - return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); + sink, edits, errorCode); } -static int32_t U_CALLCONV +static void U_CALLCONV ucasemap_internalUTF8ToUpper(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_UNUSED - uint8_t *dest, int32_t destCapacity, const uint8_t *src, int32_t srcLength, - icu::Edits *edits, + icu::ByteSink &sink, icu::Edits *edits, UErrorCode &errorCode) { - int32_t destIndex; if (caseLocale == UCASE_LOC_GREEK) { - destIndex = GreekUpper::toUpper(options, dest, destCapacity, - src, srcLength, edits, errorCode); + GreekUpper::toUpper(options, src, srcLength, sink, edits, errorCode); } else { UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; - destIndex = _caseMap( - caseLocale, options, ucase_toFullUpper, - dest, destCapacity, - src, &csc, 0, srcLength, - edits, errorCode); + toUpper( + caseLocale, options, + src, &csc, srcLength, + sink, edits, errorCode); } - return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); } -static int32_t U_CALLCONV +static void U_CALLCONV ucasemap_internalUTF8Fold(int32_t /* caseLocale */, uint32_t options, UCASEMAP_BREAK_ITERATOR_UNUSED - uint8_t *dest, int32_t destCapacity, const uint8_t *src, int32_t srcLength, - icu::Edits *edits, + icu::ByteSink &sink, icu::Edits *edits, UErrorCode &errorCode) { - /* case mapping loop */ - int32_t srcIndex = 0; - int32_t destIndex = 0; - while (srcIndex < srcLength) { - int32_t cpStart = srcIndex; - UChar32 c; - U8_NEXT(src, srcIndex, srcLength, c); - if(c<0) { - // Malformed UTF-8. - destIndex=appendUnchanged(dest, destIndex, destCapacity, - src+cpStart, srcIndex-cpStart, options, edits); - if(destIndex<0) { - errorCode=U_INDEX_OUTOFBOUNDS_ERROR; - return 0; - } - continue; - } - const UChar *s; - c = ucase_toFullFolding(c, &s, options); - destIndex = appendResult(dest, destIndex, destCapacity, c, s, - srcIndex - cpStart, options, edits); - if (destIndex < 0) { - errorCode = U_INDEX_OUTOFBOUNDS_ERROR; - return 0; - } + toLower( + -1, options, + src, nullptr, 0, srcLength, + sink, edits, errorCode); +} + +void +ucasemap_mapUTF8(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM + const char *src, int32_t srcLength, + UTF8CaseMapper *stringCaseMapper, + icu::ByteSink &sink, icu::Edits *edits, + UErrorCode &errorCode) { + /* check argument values */ + if (U_FAILURE(errorCode)) { + return; + } + if ((src == nullptr && srcLength != 0) || srcLength < -1) { + errorCode = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + + // Get the string length. + if (srcLength == -1) { + srcLength = (int32_t)uprv_strlen((const char *)src); } - return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); + if (edits != nullptr && (options & U_EDITS_NO_RESET) == 0) { + edits->reset(); + } + stringCaseMapper(caseLocale, options, UCASEMAP_BREAK_ITERATOR + (const uint8_t *)src, srcLength, sink, edits, errorCode); + sink.Flush(); + if (U_SUCCESS(errorCode)) { + if (edits != nullptr) { + edits->copyErrorTo(errorCode); + } + } } -U_CFUNC int32_t +int32_t ucasemap_mapUTF8(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM - uint8_t *dest, int32_t destCapacity, - const uint8_t *src, int32_t srcLength, + char *dest, int32_t destCapacity, + const char *src, int32_t srcLength, UTF8CaseMapper *stringCaseMapper, icu::Edits *edits, UErrorCode &errorCode) { - int32_t destLength; - /* check argument values */ if(U_FAILURE(errorCode)) { return 0; } if( destCapacity<0 || (dest==NULL && destCapacity>0) || - src==NULL || - srcLength<-1 + (src==NULL && srcLength!=0) || srcLength<-1 ) { errorCode=U_ILLEGAL_ARGUMENT_ERROR; return 0; @@ -823,12 +827,21 @@ ucasemap_mapUTF8(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_P return 0; } - if(edits!=NULL) { + CheckedArrayByteSink sink(dest, destCapacity); + if (edits != nullptr && (options & U_EDITS_NO_RESET) == 0) { edits->reset(); } - destLength=stringCaseMapper(caseLocale, options, UCASEMAP_BREAK_ITERATOR - dest, destCapacity, src, srcLength, edits, errorCode); - return u_terminateChars((char *)dest, destCapacity, destLength, &errorCode); + stringCaseMapper(caseLocale, options, UCASEMAP_BREAK_ITERATOR + (const uint8_t *)src, srcLength, sink, edits, errorCode); + sink.Flush(); + if (U_SUCCESS(errorCode)) { + if (sink.Overflowed()) { + errorCode = U_BUFFER_OVERFLOW_ERROR; + } else if (edits != nullptr) { + edits->copyErrorTo(errorCode); + } + } + return u_terminateChars(dest, destCapacity, sink.NumberOfBytesAppended(), &errorCode); } /* public API functions */ @@ -840,8 +853,8 @@ ucasemap_utf8ToLower(const UCaseMap *csm, UErrorCode *pErrorCode) { return ucasemap_mapUTF8( csm->caseLocale, csm->options, UCASEMAP_BREAK_ITERATOR_NULL - (uint8_t *)dest, destCapacity, - (const uint8_t *)src, srcLength, + dest, destCapacity, + src, srcLength, ucasemap_internalUTF8ToLower, NULL, *pErrorCode); } @@ -852,8 +865,8 @@ ucasemap_utf8ToUpper(const UCaseMap *csm, UErrorCode *pErrorCode) { return ucasemap_mapUTF8( csm->caseLocale, csm->options, UCASEMAP_BREAK_ITERATOR_NULL - (uint8_t *)dest, destCapacity, - (const uint8_t *)src, srcLength, + dest, destCapacity, + src, srcLength, ucasemap_internalUTF8ToUpper, NULL, *pErrorCode); } @@ -864,13 +877,43 @@ ucasemap_utf8FoldCase(const UCaseMap *csm, UErrorCode *pErrorCode) { return ucasemap_mapUTF8( UCASE_LOC_ROOT, csm->options, UCASEMAP_BREAK_ITERATOR_NULL - (uint8_t *)dest, destCapacity, - (const uint8_t *)src, srcLength, + dest, destCapacity, + src, srcLength, ucasemap_internalUTF8Fold, NULL, *pErrorCode); } U_NAMESPACE_BEGIN +void CaseMap::utf8ToLower( + const char *locale, uint32_t options, + StringPiece src, ByteSink &sink, Edits *edits, + UErrorCode &errorCode) { + ucasemap_mapUTF8( + ustrcase_getCaseLocale(locale), options, UCASEMAP_BREAK_ITERATOR_NULL + src.data(), src.length(), + ucasemap_internalUTF8ToLower, sink, edits, errorCode); +} + +void CaseMap::utf8ToUpper( + const char *locale, uint32_t options, + StringPiece src, ByteSink &sink, Edits *edits, + UErrorCode &errorCode) { + ucasemap_mapUTF8( + ustrcase_getCaseLocale(locale), options, UCASEMAP_BREAK_ITERATOR_NULL + src.data(), src.length(), + ucasemap_internalUTF8ToUpper, sink, edits, errorCode); +} + +void CaseMap::utf8Fold( + uint32_t options, + StringPiece src, ByteSink &sink, Edits *edits, + UErrorCode &errorCode) { + ucasemap_mapUTF8( + UCASE_LOC_ROOT, options, UCASEMAP_BREAK_ITERATOR_NULL + src.data(), src.length(), + ucasemap_internalUTF8Fold, sink, edits, errorCode); +} + int32_t CaseMap::utf8ToLower( const char *locale, uint32_t options, const char *src, int32_t srcLength, @@ -878,8 +921,8 @@ int32_t CaseMap::utf8ToLower( UErrorCode &errorCode) { return ucasemap_mapUTF8( ustrcase_getCaseLocale(locale), options, UCASEMAP_BREAK_ITERATOR_NULL - (uint8_t *)dest, destCapacity, - (const uint8_t *)src, srcLength, + dest, destCapacity, + src, srcLength, ucasemap_internalUTF8ToLower, edits, errorCode); } @@ -890,8 +933,8 @@ int32_t CaseMap::utf8ToUpper( UErrorCode &errorCode) { return ucasemap_mapUTF8( ustrcase_getCaseLocale(locale), options, UCASEMAP_BREAK_ITERATOR_NULL - (uint8_t *)dest, destCapacity, - (const uint8_t *)src, srcLength, + dest, destCapacity, + src, srcLength, ucasemap_internalUTF8ToUpper, edits, errorCode); } @@ -902,8 +945,8 @@ int32_t CaseMap::utf8Fold( UErrorCode &errorCode) { return ucasemap_mapUTF8( UCASE_LOC_ROOT, options, UCASEMAP_BREAK_ITERATOR_NULL - (uint8_t *)dest, destCapacity, - (const uint8_t *)src, srcLength, + dest, destCapacity, + src, srcLength, ucasemap_internalUTF8Fold, edits, errorCode); } diff --git a/icuSources/common/ucasemap_imp.h b/icuSources/common/ucasemap_imp.h index 79204226..7788fd93 100644 --- a/icuSources/common/ucasemap_imp.h +++ b/icuSources/common/ucasemap_imp.h @@ -9,16 +9,26 @@ #include "unicode/utypes.h" #include "unicode/ucasemap.h" +#include "unicode/uchar.h" #include "ucase.h" -#ifndef U_COMPARE_IGNORE_CASE -/* see also unorm.h */ /** - * Option bit for unorm_compare: - * Perform case-insensitive comparison. + * Bit mask for the titlecasing iterator options bit field. + * Currently only 3 out of 8 values are used: + * 0 (words), U_TITLECASE_WHOLE_STRING, U_TITLECASE_SENTENCES. + * See stringoptions.h. + * @internal */ -#define U_COMPARE_IGNORE_CASE 0x10000 -#endif +#define U_TITLECASE_ITERATOR_MASK 0xe0 + +/** + * Bit mask for the titlecasing index adjustment options bit set. + * Currently two bits are defined: + * U_TITLECASE_NO_BREAK_ADJUSTMENT, U_TITLECASE_ADJUST_TO_CASED. + * See stringoptions.h. + * @internal + */ +#define U_TITLECASE_ADJUSTMENT_MASK 0x600 /** * Internal API, used by u_strcasecmp() etc. @@ -32,7 +42,7 @@ u_strcmpFold(const UChar *s1, int32_t length1, UErrorCode *pErrorCode); /** - * Interanl API, used for detecting length of + * Internal API, used for detecting length of * shared prefix case-insensitively. * @param s1 input string 1 * @param length1 length of string 1, or -1 (NULL terminated) @@ -50,17 +60,46 @@ u_caseInsensitivePrefixMatch(const UChar *s1, int32_t length1, int32_t *matchLen1, int32_t *matchLen2, UErrorCode *pErrorCode); -/** - * Are the Unicode properties loaded? - * This must be used before internal functions are called that do - * not perform this check. - * Generate a debug assertion failure if data is not loaded. - */ -U_CFUNC UBool -uprv_haveProperties(UErrorCode *pErrorCode); - #ifdef __cplusplus +U_NAMESPACE_BEGIN + +class BreakIterator; // unicode/brkiter.h +class ByteSink; +class Locale; // unicode/locid.h + +/** Returns TRUE if the options are valid. Otherwise FALSE, and sets an error. */ +inline UBool ustrcase_checkTitleAdjustmentOptions(uint32_t options, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return FALSE; } + if ((options & U_TITLECASE_ADJUSTMENT_MASK) == U_TITLECASE_ADJUSTMENT_MASK) { + // Both options together. + errorCode = U_ILLEGAL_ARGUMENT_ERROR; + return FALSE; + } + return TRUE; +} + +inline UBool ustrcase_isLNS(UChar32 c) { + // Letter, number, symbol, + // or a private use code point because those are typically used as letters or numbers. + // Consider modifier letters only if they are cased. + const uint32_t LNS = (U_GC_L_MASK|U_GC_N_MASK|U_GC_S_MASK|U_GC_CO_MASK) & ~U_GC_LM_MASK; + int gc = u_charType(c); + return (U_MASK(gc) & LNS) != 0 || (gc == U_MODIFIER_LETTER && ucase_getType(c) != UCASE_NONE); +} + +#if !UCONFIG_NO_BREAK_ITERATION + +/** Returns nullptr if error. Pass in either locale or locID, not both. */ +U_CFUNC +BreakIterator *ustrcase_getTitleBreakIterator( + const Locale *locale, const char *locID, uint32_t options, BreakIterator *iter, + LocalPointer &ownedIter, UErrorCode &errorCode); + +#endif + +U_NAMESPACE_END + #include "unicode/unistr.h" // for UStringCaseMapper /* @@ -163,39 +202,43 @@ ustrcase_mapWithOverlap(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITE * UTF-8 version of UStringCaseMapper. * All error checking must be done. * The UCaseMap must be fully initialized, with locale and/or iter set as needed. - * src and dest must not overlap. */ -typedef int32_t U_CALLCONV +typedef void U_CALLCONV UTF8CaseMapper(int32_t caseLocale, uint32_t options, #if !UCONFIG_NO_BREAK_ITERATION icu::BreakIterator *iter, #endif - uint8_t *dest, int32_t destCapacity, const uint8_t *src, int32_t srcLength, - icu::Edits *edits, + icu::ByteSink &sink, icu::Edits *edits, UErrorCode &errorCode); #if !UCONFIG_NO_BREAK_ITERATION /** Implements UTF8CaseMapper. */ -U_CFUNC int32_t U_CALLCONV +U_CFUNC void U_CALLCONV ucasemap_internalUTF8ToTitle(int32_t caseLocale, uint32_t options, icu::BreakIterator *iter, - uint8_t *dest, int32_t destCapacity, const uint8_t *src, int32_t srcLength, - icu::Edits *edits, + icu::ByteSink &sink, icu::Edits *edits, UErrorCode &errorCode); #endif +void +ucasemap_mapUTF8(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM + const char *src, int32_t srcLength, + UTF8CaseMapper *stringCaseMapper, + icu::ByteSink &sink, icu::Edits *edits, + UErrorCode &errorCode); + /** * Implements argument checking and buffer handling * for UTF-8 string case mapping as a common function. */ -U_CFUNC int32_t +int32_t ucasemap_mapUTF8(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM - uint8_t *dest, int32_t destCapacity, - const uint8_t *src, int32_t srcLength, + char *dest, int32_t destCapacity, + const char *src, int32_t srcLength, UTF8CaseMapper *stringCaseMapper, icu::Edits *edits, UErrorCode &errorCode); diff --git a/icuSources/common/ucasemap_titlecase_brkiter.cpp b/icuSources/common/ucasemap_titlecase_brkiter.cpp index a253850f..c21dfb76 100644 --- a/icuSources/common/ucasemap_titlecase_brkiter.cpp +++ b/icuSources/common/ucasemap_titlecase_brkiter.cpp @@ -31,6 +31,29 @@ U_NAMESPACE_BEGIN +void CaseMap::utf8ToTitle( + const char *locale, uint32_t options, BreakIterator *iter, + StringPiece src, ByteSink &sink, Edits *edits, + UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { + return; + } + UText utext = UTEXT_INITIALIZER; + utext_openUTF8(&utext, src.data(), src.length(), &errorCode); + LocalPointer ownedIter; + iter = ustrcase_getTitleBreakIterator(nullptr, locale, options, iter, ownedIter, errorCode); + if (iter == nullptr) { + utext_close(&utext); + return; + } + iter->setText(&utext, errorCode); + ucasemap_mapUTF8( + ustrcase_getCaseLocale(locale), options, iter, + src.data(), src.length(), + ucasemap_internalUTF8ToTitle, sink, edits, errorCode); + utext_close(&utext); +} + int32_t CaseMap::utf8ToTitle( const char *locale, uint32_t options, BreakIterator *iter, const char *src, int32_t srcLength, @@ -42,19 +65,16 @@ int32_t CaseMap::utf8ToTitle( UText utext=UTEXT_INITIALIZER; utext_openUTF8(&utext, src, srcLength, &errorCode); LocalPointer ownedIter; + iter = ustrcase_getTitleBreakIterator(nullptr, locale, options, iter, ownedIter, errorCode); if(iter==NULL) { - iter=BreakIterator::createWordInstance(Locale(locale), errorCode); - ownedIter.adoptInstead(iter); - } - if(U_FAILURE(errorCode)) { utext_close(&utext); return 0; } iter->setText(&utext, errorCode); int32_t length=ucasemap_mapUTF8( ustrcase_getCaseLocale(locale), options, iter, - (uint8_t *)dest, destCapacity, - (const uint8_t *)src, srcLength, + dest, destCapacity, + src, srcLength, ucasemap_internalUTF8ToTitle, edits, errorCode); utext_close(&utext); return length; @@ -88,17 +108,24 @@ ucasemap_utf8ToTitle(UCaseMap *csm, } UText utext=UTEXT_INITIALIZER; utext_openUTF8(&utext, (const char *)src, srcLength, pErrorCode); - if(csm->iter==NULL) { - csm->iter=BreakIterator::createWordInstance(Locale(csm->locale), *pErrorCode); - } if (U_FAILURE(*pErrorCode)) { return 0; } + if(csm->iter==NULL) { + LocalPointer ownedIter; + BreakIterator *iter = ustrcase_getTitleBreakIterator( + nullptr, csm->locale, csm->options, nullptr, ownedIter, *pErrorCode); + if (iter == nullptr) { + utext_close(&utext); + return 0; + } + csm->iter = ownedIter.orphan(); + } csm->iter->setText(&utext, *pErrorCode); int32_t length=ucasemap_mapUTF8( csm->caseLocale, csm->options, csm->iter, - (uint8_t *)dest, destCapacity, - (const uint8_t *)src, srcLength, + dest, destCapacity, + src, srcLength, ucasemap_internalUTF8ToTitle, NULL, *pErrorCode); utext_close(&utext); return length; diff --git a/icuSources/common/uchar.cpp b/icuSources/common/uchar.cpp index 6d96f342..1b84a1d0 100644 --- a/icuSources/common/uchar.cpp +++ b/icuSources/common/uchar.cpp @@ -42,14 +42,6 @@ /* getting a uint32_t properties word from the data */ #define GET_PROPS(c, result) ((result)=UTRIE2_GET16(&propsTrie, c)); -U_CFUNC UBool -uprv_haveProperties(UErrorCode *pErrorCode) { - if(U_FAILURE(*pErrorCode)) { - return FALSE; - } - return TRUE; -} - /* API functions ------------------------------------------------------------ */ /* Gets the Unicode character's general category.*/ @@ -729,8 +721,5 @@ upropsvec_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { } /* add the start code point of each same-value range of the properties vectors trie */ - if(propsVectorsColumns>0) { - /* if propsVectorsColumns==0 then the properties vectors trie may not be there at all */ - utrie2_enum(&propsVectorsTrie, NULL, _enumPropertyStartsRange, sa); - } + utrie2_enum(&propsVectorsTrie, NULL, _enumPropertyStartsRange, sa); } diff --git a/icuSources/common/uchar_props_data.h b/icuSources/common/uchar_props_data.h index eaeb11a8..9422201c 100644 --- a/icuSources/common/uchar_props_data.h +++ b/icuSources/common/uchar_props_data.h @@ -11,157 +11,157 @@ #ifdef INCLUDED_FROM_UCHAR_C -static const UVersionInfo dataVersion={0xa,0,0,0}; +static const UVersionInfo dataVersion={0xb,0,0,0}; #if !U_PLATFORM_IS_DARWIN_BASED -static const uint16_t propsTrie_index[21148]={ -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -static const uint16_t propsTrie_index[21280]={ -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x45c,0x464,0x46c,0x474,0x48c,0x494,0x49c,0x4a4,0x4ac,0x4b4,0x4ba,0x4c2,0x4ca,0x4d2,0x4da,0x4e2, -0x4e8,0x4f0,0x4f8,0x500,0x503,0x50b,0x513,0x51b,0x523,0x52b,0x527,0x52f,0x537,0x53f,0x544,0x54c, -0x554,0x55c,0x560,0x568,0x570,0x578,0x580,0x588,0x584,0x58c,0x591,0x599,0x59f,0x5a7,0x5af,0x5b7, -0x5bf,0x5c7,0x5cf,0x5d7,0x5dc,0x5e4,0x5e7,0x5ef,0x5f7,0x5ff,0x605,0x60d,0x60c,0x614,0x61c,0x624, -0x634,0x62c,0x63c,0x644,0x47c,0x654,0x65c,0x64c,0x66c,0x66e,0x676,0x664,0x686,0x68c,0x694,0x67e, -0x6a4,0x6aa,0x6b2,0x69c,0x6c2,0x6c8,0x6d0,0x6ba,0x6e0,0x6e6,0x6ee,0x6d8,0x6fe,0x706,0x70e,0x6f6, -0x71e,0x724,0x72c,0x716,0x73c,0x742,0x74a,0x734,0x75a,0x75f,0x767,0x752,0x777,0x77e,0x786,0x76f, -0x608,0x78e,0x796,0x47c,0x79e,0x7a6,0x7ae,0x47c,0x7b6,0x7be,0x7c6,0x7cb,0x7d3,0x7da,0x7e2,0x47c, -0x5c7,0x7ea,0x7f2,0x7fa,0x802,0x554,0x812,0x80a,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x818,0x5c7,0x820,0x816,0x828,0x5c7,0x824,0x5c7,0x82e,0x836,0x83e,0x554,0x554,0x846, -0x84e,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x853,0x85b,0x5c7,0x5c7,0x863,0x86b,0x873,0x87b,0x883,0x5c7,0x88b,0x893,0x89b, -0x8ab,0x5c7,0x8b3,0x8b5,0x8bd,0x8a3,0x5c7,0x8c0,0x8d4,0x8c8,0x8d0,0x8dc,0x5c7,0x8e4,0x8ea,0x8f2, -0x8fa,0x5c7,0x90a,0x912,0x91a,0x902,0x47c,0x47c,0x92a,0x92d,0x935,0x922,0x945,0x93d,0x5c7,0x94c, -0x5c7,0x95b,0x954,0x963,0x96b,0x47c,0x973,0x97b,0x4fc,0x983,0x986,0x98c,0x993,0x986,0x523,0x99b, -0x4ac,0x4ac,0x4ac,0x4ac,0x9a3,0x4ac,0x4ac,0x4ac,0x9b3,0x9bb,0x9c3,0x9cb,0x9d3,0x9d7,0x9df,0x9ab, -0x9f7,0x9ff,0x9e7,0x9ef,0xa07,0xa0f,0xa17,0xa1f,0xa37,0xa27,0xa2f,0xa3f,0xa47,0xa56,0xa5b,0xa4e, -0xa63,0xa63,0xa63,0xa63,0xa63,0xa63,0xa63,0xa63,0xa6b,0xa73,0x8f2,0xa76,0xa7e,0xa85,0xa8a,0xa92, -0x8f2,0xa99,0xa98,0xaa9,0xaac,0x8f2,0x8f2,0xaa1,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0xabb,0xac3,0xab3, -0x8f2,0x8f2,0x8f2,0xac8,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0xace,0xad6,0x8f2,0xade,0xae5, -0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0xa63,0xa63,0xa63,0xa63,0xaed,0xa63,0xaf4,0xafb, -0xa63,0xa63,0xa63,0xa63,0xa63,0xa63,0xa63,0xa63,0x8f2,0xb03,0xb0a,0xb0e,0xb14,0xb1a,0xb22,0xb27, -0x554,0xb37,0xb2f,0xb3f,0x4ac,0x4ac,0x4ac,0xb47,0x4fc,0xb4f,0x5c7,0xb55,0xb65,0xb5d,0xb5d,0x523, -0xb6d,0xb75,0xb7d,0x47c,0xb85,0x8f2,0x8f2,0xb8c,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0xb94,0xb9a, -0xbaa,0xba2,0x608,0x5c7,0xbb2,0x84e,0x5c7,0xbba,0xbc2,0xbc7,0x5c7,0x5c7,0xbcc,0x5b3,0x8f2,0xbd3, -0xa93,0xbdb,0xbe1,0x8f2,0xbdb,0xbe9,0x8f2,0xa93,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2, -0xbf1,0x5c7,0x5c7,0x5c7,0xbf9,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0xbff,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xc04,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x8c0,0x8f2,0x8f2, -0xc0c,0x5c7,0xc0f,0x5c7,0xc17,0xc1d,0xc25,0xc2d,0xc32,0x5c7,0x5c7,0xc36,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xc3d,0x5c7,0xc44,0xc4a,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xc52,0x5c7,0x5c7,0x5c7,0xc5a,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xc5c,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xc63,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0xc6a,0x5c7,0x5c7,0x5c7,0xc71,0xc79,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xc7e,0x5c7,0x5c7,0xc86,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xc8a,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xc8d,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xc90,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0xc96,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0xc9e,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0xca3,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xca8,0x5c7,0x5c7,0x5c7,0xcad,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0xcb5,0xcbc,0xcc0,0x5c7,0x5c7,0x5c7,0xcc7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x644, -0xcd5,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0xccd,0x8f2,0xcdd,0x963,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0xce2,0xcea,0x4ac,0xcfa,0xcf2,0x5c7,0x5c7,0xd02,0xd0a,0xd1a,0x4ac,0xd1f,0xd27,0xd2d,0x47c,0xd12, -0xd35,0xd3d,0x5c7,0xd45,0xd55,0xd58,0xd4d,0xd60,0x61c,0xd68,0xd6f,0xd77,0x66c,0xd87,0xd7f,0xd8f, -0x5c7,0xd97,0xd9f,0xda7,0x5c7,0xdaf,0xdb7,0xdbf,0xdc7,0xdcf,0xdd3,0xddb,0x4fc,0x4fc,0x5c7,0xde3, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xdeb,0xdf2,0x8b4, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa, -0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -#if !U_PLATFORM_IS_DARWIN_BASED -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0x5c7,0x5c7,0x5c7,0xe0a,0x5c7,0xcc8,0xe11,0xe16, -0x5c7,0x5c7,0x5c7,0xe1e,0x5c7,0x5c7,0x8bf,0x47c,0xe34,0xe24,0xe2c,0x5c7,0x5c7,0xe3c,0xe44,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xe49,0xe51,0x5c7,0xe55,0x5c7,0xe5b,0xe5f, -0xe67,0xe6f,0xe76,0xe7e,0x5c7,0x5c7,0x5c7,0xe84,0xe9c,0x46c,0xea4,0xeac,0xeb1,0x8d4,0xe8c,0xe94, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe06, -0x8f2,0x8f2,0x8f2,0xe0b,0xe13,0xe1b,0xe23,0x8f2,0x5c7,0x5c7,0x5c7,0xe2b,0x5c7,0xcc8,0xe32,0xe37, -0x5c7,0x5c7,0x5c7,0xe3f,0x5c7,0x5c7,0x8bf,0x47c,0xe55,0xe45,0xe4d,0x5c7,0x5c7,0xe5d,0xe65,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xe6a,0xe72,0x5c7,0xe76,0x5c7,0xe7c,0xe80, -0xe88,0xe90,0xe97,0xe9f,0x5c7,0x5c7,0x5c7,0xea5,0xebd,0x46c,0xec5,0xecd,0xed2,0x8d4,0xead,0xeb5, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa, -0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa,0xdfa, -0x11f0,0x11f0,0x1230,0x1270,0x12b0,0x12e8,0x1328,0x1368,0x13a0,0x13e0,0x140c,0x144c,0x148c,0x149c,0x14dc,0x1510, -0x1550,0x1580,0x15c0,0x1600,0x1610,0x1644,0x167c,0x16bc,0x16fc,0x173c,0x1770,0x179c,0x17dc,0x1814,0x1830,0x1870, -0xa80,0xac0,0xb00,0xb3b,0xb7b,0xa40,0xbbb,0xa40,0xbdd,0xa40,0xa40,0xa40,0xa40,0xc1d,0x1db,0x1db, -0xc5d,0xc9d,0xa40,0xa40,0xa40,0xa40,0xcdd,0xcfd,0xa40,0xa40,0xd3d,0xd7d,0xdbd,0xdfd,0xe3d,0xe7d, -0xebd,0xef4,0x1db,0x1db,0xf18,0xf4c,0x1db,0xf74,0x1db,0x1db,0x1db,0x1db,0xfa1,0x1db,0x1db,0x1db, -0x1db,0x1db,0x1db,0x1db,0xfb5,0x1db,0xfed,0x102d,0x1db,0x1038,0x1db,0x1db,0x1db,0x106e,0xa40,0x10ae, +static const uint16_t propsTrie_index[21452]={ +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +static const uint16_t propsTrie_index[21584]={ +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x45d,0x465,0x46d,0x475,0x48d,0x495,0x49d,0x4a5,0x4ad,0x4b5,0x4bb,0x4c3,0x4cb,0x4d3,0x4db,0x4e3, +0x4e9,0x4f1,0x4f9,0x501,0x504,0x50c,0x514,0x51c,0x524,0x52c,0x528,0x530,0x538,0x540,0x545,0x54d, +0x555,0x55d,0x561,0x569,0x571,0x579,0x581,0x589,0x585,0x58d,0x592,0x59a,0x5a0,0x5a8,0x5b0,0x5b8, +0x5c0,0x5c8,0x5d0,0x5d8,0x5dd,0x5e5,0x5e8,0x5f0,0x5f8,0x600,0x606,0x60e,0x60d,0x615,0x61d,0x625, +0x635,0x62d,0x63d,0x645,0x47d,0x655,0x65d,0x64d,0x66d,0x66f,0x677,0x665,0x687,0x68d,0x695,0x67f, +0x6a5,0x6ab,0x6b3,0x69d,0x6c3,0x6c9,0x6d1,0x6bb,0x6e1,0x6e7,0x6ef,0x6d9,0x6ff,0x707,0x70f,0x6f7, +0x71f,0x725,0x72d,0x717,0x73d,0x743,0x74b,0x735,0x75b,0x760,0x768,0x753,0x778,0x77f,0x787,0x770, +0x609,0x78f,0x797,0x47d,0x79f,0x7a7,0x7af,0x47d,0x7b7,0x7bf,0x7c7,0x7cc,0x7d4,0x7db,0x7e3,0x47d, +0x5c8,0x7eb,0x7f3,0x7fb,0x803,0x555,0x813,0x80b,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x81b,0x5c8,0x823,0x827,0x82f,0x5c8,0x835,0x5c8,0x83b,0x843,0x84b,0x555,0x555,0x853, +0x85b,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x860,0x868,0x5c8,0x5c8,0x870,0x878,0x880,0x888,0x890,0x5c8,0x898,0x8a0,0x8a8, +0x8b8,0x5c8,0x8c0,0x8c2,0x8ca,0x8b0,0x5c8,0x8cd,0x8e1,0x8d5,0x8dd,0x8e9,0x5c8,0x8f1,0x8f7,0x8ff, +0x907,0x5c8,0x917,0x91f,0x927,0x90f,0x47d,0x47d,0x937,0x93a,0x942,0x92f,0x952,0x94a,0x5c8,0x959, +0x5c8,0x968,0x961,0x970,0x978,0x97c,0x984,0x98c,0x4fd,0x994,0x997,0x99d,0x9a4,0x997,0x524,0x9ac, +0x4ad,0x4ad,0x4ad,0x4ad,0x9b4,0x4ad,0x4ad,0x4ad,0x9c4,0x9cc,0x9d4,0x9dc,0x9e4,0x9e8,0x9f0,0x9bc, +0xa08,0xa10,0x9f8,0xa00,0xa18,0xa20,0xa28,0xa30,0xa48,0xa38,0xa40,0xa50,0xa58,0xa67,0xa6c,0xa5f, +0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa7c,0xa84,0x8ff,0xa87,0xa8f,0xa96,0xa9b,0xaa3, +0x8ff,0xaaa,0xaa9,0xaba,0xabd,0x8ff,0x8ff,0xab2,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0xacc,0xad4,0xac4, +0x8ff,0x8ff,0x8ff,0xad9,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0xadf,0xae7,0x8ff,0xaef,0xaf6, +0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0xa74,0xa74,0xa74,0xa74,0xafe,0xa74,0xb05,0xb0c, +0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0x8ff,0xb14,0xb1b,0xb1f,0xb25,0x8ff,0xb2b,0xaa4, +0x555,0xb3b,0xb33,0xb43,0x4ad,0x4ad,0x4ad,0xb4b,0x4fd,0xb53,0x5c8,0xb59,0xb69,0xb61,0xb61,0x524, +0xb71,0xb79,0xb81,0x47d,0xb89,0x8ff,0x8ff,0xb90,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0xb98,0xb9e, +0xbae,0xba6,0x609,0x5c8,0xbb6,0x85b,0x5c8,0xbbe,0xbc6,0xbca,0x5c8,0x5c8,0xbcf,0xbd7,0x8ff,0xbdf, +0xaa4,0xbe7,0xbed,0x8ff,0xbe7,0xbf5,0x8ff,0xaa4,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff, +0xbfd,0x5c8,0x5c8,0x5c8,0xc05,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0xc0b,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc10,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x8cd,0x8ff,0x8ff, +0xc18,0x5c8,0xc1b,0x5c8,0xc23,0xc29,0xc31,0xc39,0xc3e,0x5c8,0x5c8,0xc42,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc49,0x5c8,0xc50,0xc56,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc5e,0x5c8,0x5c8,0x5c8,0xc66,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc68,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc6f,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0xc76,0x5c8,0x5c8,0x5c8,0xc7d,0xc85,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc8a,0x5c8,0x5c8,0xc92,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc96,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc99,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xc9c,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0xca2,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0xcaa,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0xcaf,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xcb4,0x5c8,0x5c8,0x5c8,0xcb9,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0xcc1,0xcc8,0xccc,0x5c8,0x5c8,0x5c8,0xcd3,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xcd9, +0xce9,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0xce1,0x8ff,0xcf1,0x970,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0xcf6,0xcfe,0x4ad,0xd0e,0xd06,0x5c8,0x5c8,0xd16,0xd1e,0xd2e,0x4ad,0xd33,0xd3b,0xd41,0x47d,0xd26, +0xd49,0xd51,0x5c8,0xd59,0xd69,0xd6c,0xd61,0xd74,0x61d,0xd7c,0xd83,0x8c1,0x66d,0xd93,0xd8b,0xd9b, +0x5c8,0xda3,0xdab,0xdb3,0x5c8,0xdbb,0xdc3,0xdcb,0xdd3,0xddb,0xddf,0xde7,0x4fd,0x4fd,0x5c8,0xdef, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xdf7,0xe03,0xdfb, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b, +0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +#if !U_PLATFORM_IS_DARWIN_BASED +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0x5c8,0x5c8,0x5c8,0xe1b,0x5c8,0xcd4,0xe22,0xe27, +0x5c8,0x5c8,0x5c8,0xe2f,0x5c8,0x5c8,0x8cc,0x47d,0xe45,0xe35,0xe3d,0x5c8,0x5c8,0xe4d,0xe55,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xe5a,0xe62,0x5c8,0xe66,0x5c8,0xe6c,0xe70, +0xe78,0xe80,0xe87,0xe8f,0x5c8,0x5c8,0x5c8,0xe95,0xead,0x46d,0xeb5,0xebd,0xec2,0x8e1,0xe9d,0xea5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe17, +0x8ff,0x8ff,0x8ff,0xe1c,0xe24,0xe2c,0xe34,0x8ff,0x5c8,0x5c8,0x5c8,0xe3c,0x5c8,0xcd4,0xe43,0xe48, +0x5c8,0x5c8,0x5c8,0xe50,0x5c8,0x5c8,0x8cc,0x47d,0xe66,0xe56,0xe5e,0x5c8,0x5c8,0xe6e,0xe76,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xe7b,0xe83,0x5c8,0xe87,0x5c8,0xe8d,0xe91, +0xe99,0xea1,0xea8,0xeb0,0x5c8,0x5c8,0x5c8,0xeb6,0xece,0x46d,0xed6,0xede,0xee3,0x8e1,0xebe,0xec6, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b, +0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0xe0b, +0x11f4,0x11f4,0x1234,0x1274,0x12b4,0x12ec,0x132c,0x136c,0x13a4,0x13e4,0x1410,0x1450,0x1490,0x14a0,0x14e0,0x1514, +0x1554,0x1584,0x15c4,0x1604,0x1614,0x1648,0x1680,0x16c0,0x1700,0x1740,0x1774,0x17a0,0x17e0,0x1818,0x1834,0x1874, +0xa80,0xac0,0xb00,0xb40,0xb80,0xa40,0xbc0,0xa40,0xbe2,0xa40,0xa40,0xa40,0xa40,0xc22,0x1db,0x1db, +0xc62,0xca2,0xa40,0xa40,0xa40,0xa40,0xce2,0xd02,0xa40,0xa40,0xd42,0xd82,0xdc2,0xe02,0xe42,0xe82, +0xec2,0xef9,0x1db,0x1db,0xf1d,0xf51,0x1db,0xf79,0x1db,0x1db,0x1db,0x1db,0xfa6,0x1db,0x1db,0x1db, +0x1db,0x1db,0x1db,0x1db,0xfba,0x1db,0xff2,0x1032,0x1db,0x103d,0x1db,0x1db,0x1db,0x1073,0xa40,0x10b3, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, @@ -184,695 +184,694 @@ static const uint16_t propsTrie_index[21280]={ 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0x10ee,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, +0x10f3,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700, -0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x112e, +0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x1133, 0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700, -0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x112e, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -#if !U_PLATFORM_IS_DARWIN_BASED -0xeb9,0xec0,0xec8,0x47c,0x5c7,0x5c7,0x5c7,0x5b3,0xed8,0xed0,0xeef,0xee0,0xee7,0xef7,0xb81,0xeff, -0x47c,0x47c,0x47c,0x47c,0xd77,0x5c7,0xf07,0xf0f,0x5c7,0xf17,0xf1f,0xf23,0xf2b,0x5c7,0xf33,0x47c, -0x554,0x55e,0xf3b,0x5c7,0xf3f,0xf47,0xf57,0xf4f,0x5c7,0xf5f,0x5c7,0xf66,0x47c,0x47c,0x47c,0x47c, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xb65,0x8c0,0xe5b,0x47c,0x47c,0x47c,0x47c, -0xf76,0xf6e,0xf79,0xf81,0x8d4,0xf89,0x47c,0xf91,0xf99,0xfa1,0x47c,0x47c,0x5c7,0xfb1,0xfb9,0xfa9, -0xfc9,0xfd0,0xfc1,0xfd8,0xfe0,0x47c,0xff0,0xfe8,0x5c7,0xff3,0xffb,0x1003,0x100b,0x1013,0x47c,0x47c, -0x5c7,0x5c7,0x101b,0x47c,0x554,0x1023,0x4fc,0x102b,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x1033,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x1043,0x5fd,0x104b,0x103b,0x945,0x1053,0x105b,0x1061,0x1079,0x1069,0x1071,0x107d,0x945,0x108d,0x1085,0x1095, -0x10a5,0x109d,0x47c,0x47c,0x10ac,0x10b4,0x61f,0x10bc,0x10cc,0x6c8,0x10d4,0x10c4,0x47c,0x47c,0x47c,0x47c, -0x5c7,0x10dc,0x10e4,0x47c,0x5c7,0x10ec,0x10f4,0x47c,0x47c,0x47c,0x47c,0x47c,0x5c7,0x10fc,0x1104,0x47c, -0x5c7,0x110c,0x1114,0x111c,0x5c7,0x112c,0x1124,0x47c,0x113c,0x1134,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x554,0x4fc,0x1144,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x115c,0x114c,0x1154,0x5c7,0x116c, -0x1164,0x5c7,0x1174,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x118a,0x118f,0x117c,0x1184,0x119f, -0x1197,0x47c,0x47c,0x11ae,0x11b2,0x11a6,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xeda,0xee1,0xee9,0x47c,0x5c7,0x5c7,0x5c7,0x5b3,0xef9,0xef1,0xf10,0xf01,0xf08,0xf18,0xb81,0xf20, -0x47c,0x47c,0x47c,0x47c,0xd77,0x5c7,0xf28,0xf30,0x5c7,0xf38,0xf40,0xf44,0xf4c,0x5c7,0xf54,0x47c, -0x554,0x55e,0xf5c,0x5c7,0xf60,0xf68,0xf78,0xf70,0x5c7,0xf80,0x5c7,0xf87,0x47c,0x47c,0x47c,0x47c, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xb65,0x8c0,0xe7c,0x47c,0x47c,0x47c,0x47c, -0xf97,0xf8f,0xf9a,0xfa2,0x8d4,0xfaa,0x47c,0xfb2,0xfba,0xfc2,0x47c,0x47c,0x5c7,0xfd2,0xfda,0xfca, -0xfea,0xff1,0xfe2,0xff9,0x1001,0x47c,0x1011,0x1009,0x5c7,0x1014,0x101c,0x1024,0x102c,0x1034,0x47c,0x47c, -0x5c7,0x5c7,0x103c,0x47c,0x554,0x1044,0x4fc,0x104c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x1054,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x1064,0x5fd,0x106c,0x105c,0x945,0x1074,0x107c,0x1082,0x109a,0x108a,0x1092,0x109e,0x945,0x10ae,0x10a6,0x10b6, -0x10c6,0x10be,0x47c,0x47c,0x10cd,0x10d5,0x61f,0x10dd,0x10ed,0x6c8,0x10f5,0x10e5,0x47c,0x47c,0x47c,0x47c, -0x5c7,0x10fd,0x1105,0x47c,0x5c7,0x110d,0x1115,0x47c,0x47c,0x47c,0x47c,0x47c,0x5c7,0x111d,0x1125,0x47c, -0x5c7,0x112d,0x1135,0x113d,0x5c7,0x114d,0x1145,0x47c,0x115d,0x1155,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x554,0x4fc,0x1165,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x117d,0x116d,0x1175,0x5c7,0x118d, -0x1185,0x5c7,0x1195,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x11ab,0x11b0,0x119d,0x11a5,0x11c0, -0x11b8,0x47c,0x47c,0x11cf,0x11d3,0x11c7,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x1133, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x8bf,0x47c,0x47c,0x47c,0x11c2,0x11ca,0x11d2,0x11ba,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x11da,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0xeca,0xed1,0xed9,0x47d,0x5c8,0x5c8,0x5c8,0xbd7,0xee9,0xee1,0xf00,0xef1,0xef8,0xf08,0xb85,0xf10, +0x47d,0x47d,0x47d,0x47d,0x8c1,0x5c8,0xf18,0xf20,0x5c8,0xf28,0xf30,0xf34,0xf3c,0x5c8,0xf44,0x47d, +0x555,0x55f,0xf4c,0x5c8,0xf50,0xf58,0xf68,0xf60,0x5c8,0xf70,0x5c8,0xf77,0x47d,0x47d,0x47d,0x47d, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xb69,0x8cd,0xe6c,0x47d,0x47d,0x47d,0x47d, +0xf87,0xf7f,0xf8a,0xf92,0x8e1,0xf9a,0x47d,0xfa2,0xfaa,0xfb2,0x47d,0x47d,0x5c8,0xfc2,0xfca,0xfba, +0xfda,0xfe1,0xfd2,0xfe9,0xff1,0x47d,0x1001,0xff9,0x5c8,0x1004,0x100c,0x1014,0x101c,0x1024,0x47d,0x47d, +0x5c8,0x5c8,0x102c,0x47d,0x555,0x1034,0x4fd,0x103c,0x5c8,0x1044,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x104c,0x47d,0x47d,0x47d,0x47d,0x1054,0x105c,0x1063,0x47d,0x47d,0x47d,0x47d,0x47d, +0x1073,0x5fe,0x107b,0x106b,0x952,0x1083,0x108b,0x1091,0x10a9,0x1099,0x10a1,0x10ad,0x952,0x10bd,0x10b5,0x10c5, +0x10d5,0x10cd,0x47d,0x47d,0x10dc,0x10e4,0x620,0x10ec,0x10fc,0x1102,0x110a,0x10f4,0x47d,0x47d,0x47d,0x47d, +0x5c8,0x1112,0x111a,0x47d,0x5c8,0x1122,0x112a,0x47d,0x47d,0x47d,0x47d,0x47d,0x5c8,0x1132,0x113a,0x47d, +0x5c8,0x1142,0x114a,0x1152,0x5c8,0x1162,0x115a,0x47d,0x83b,0x116a,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x5c8,0x1172,0x47d,0x47d,0x47d,0x555,0x4fd,0x117a,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x1192,0x1182,0x118a,0x5c8,0x11a2,0x119a,0x5c8,0x8c2,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x11b8,0x11bd,0x11aa,0x11b2,0x11cd,0x11c5,0x47d,0x47d,0x11dc,0x11e0,0x11d4,0x11f0,0x11e8,0x115a,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x11f4,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x8bf,0x47c,0x47c,0x47c,0x11e3,0x11eb,0x11f3,0x11db,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x11fb,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0xeeb,0xef2,0xefa,0x47d,0x5c8,0x5c8,0x5c8,0xbd7,0xf0a,0xf02,0xf21,0xf12,0xf19,0xf29,0xb85,0xf31, +0x47d,0x47d,0x47d,0x47d,0x8c1,0x5c8,0xf39,0xf41,0x5c8,0xf49,0xf51,0xf55,0xf5d,0x5c8,0xf65,0x47d, +0x555,0x55f,0xf6d,0x5c8,0xf71,0xf79,0xf89,0xf81,0x5c8,0xf91,0x5c8,0xf98,0x47d,0x47d,0x47d,0x47d, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xb69,0x8cd,0xe8d,0x47d,0x47d,0x47d,0x47d, +0xfa8,0xfa0,0xfab,0xfb3,0x8e1,0xfbb,0x47d,0xfc3,0xfcb,0xfd3,0x47d,0x47d,0x5c8,0xfe3,0xfeb,0xfdb, +0xffb,0x1002,0xff3,0x100a,0x1012,0x47d,0x1022,0x101a,0x5c8,0x1025,0x102d,0x1035,0x103d,0x1045,0x47d,0x47d, +0x5c8,0x5c8,0x104d,0x47d,0x555,0x1055,0x4fd,0x105d,0x5c8,0x1065,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x106d,0x47d,0x47d,0x47d,0x47d,0x1075,0x107d,0x1084,0x47d,0x47d,0x47d,0x47d,0x47d, +0x1094,0x5fe,0x109c,0x108c,0x952,0x10a4,0x10ac,0x10b2,0x10ca,0x10ba,0x10c2,0x10ce,0x952,0x10de,0x10d6,0x10e6, +0x10f6,0x10ee,0x47d,0x47d,0x10fd,0x1105,0x620,0x110d,0x111d,0x1123,0x112b,0x1115,0x47d,0x47d,0x47d,0x47d, +0x5c8,0x1133,0x113b,0x47d,0x5c8,0x1143,0x114b,0x47d,0x47d,0x47d,0x47d,0x47d,0x5c8,0x1153,0x115b,0x47d, +0x5c8,0x1163,0x116b,0x1173,0x5c8,0x1183,0x117b,0x47d,0x83b,0x118b,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x5c8,0x1193,0x47d,0x47d,0x47d,0x555,0x4fd,0x119b,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x11b3,0x11a3,0x11ab,0x5c8,0x11c3,0x11bb,0x5c8,0x8c2,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x11d9,0x11de,0x11cb,0x11d3,0x11ee,0x11e6,0x47d,0x47d,0x11fd,0x1201,0x11f5,0x1211,0x1209,0x117b,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x1215,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x8cc,0x47d,0x47d,0x47d, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x11e2,0x47c,0x47c,0x47c, +0x1204,0x120c,0x1214,0x11fc,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x121c,0x47d,0x47d,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1203,0x47c,0x47c,0x47c, +0x1225,0x122d,0x1235,0x121d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x123d,0x47d,0x47d,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x5c7,0x5c7,0x5c7, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x11e4, +0x5c8,0x1224,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1205, +0x5c8,0x1245,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x5c7,0x5c7,0x5c7, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1174,0x8d4, -0x11ec,0x47c,0x47c,0xe51,0x11f4,0x5c7,0x1204,0x120c,0x1214,0x11fc,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x5c8,0x5c8,0x5c8,0x5c8,0x1226,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1195,0x8d4, -0x120d,0x47c,0x47c,0xe72,0x1215,0x5c7,0x1225,0x122d,0x1235,0x121d,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x5c8,0x5c8,0x5c8,0x5c8,0x1247,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #if !U_PLATFORM_IS_DARWIN_BASED -0x47c,0x47c,0x47c,0x47c,0x47c,0x5c7,0x5c7,0x121c,0x1221,0x1229,0x47c,0x47c,0x1231,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x8c2,0x8e1,0x122e,0x47d,0x47d,0xe62,0x1236,0x5c8,0x123e,0x1246,0x124e,0xcd9,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x5c7,0x5c7,0x123d,0x1242,0x124a,0x47c,0x47c,0x1252,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x8c2,0x8e1,0x124f,0x47d,0x47d,0xe83,0x1257,0x5c8,0x125f,0x1267,0x126f,0xcd9,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1239,0x5c7,0x5c7,0x5c7, +0x47d,0x47d,0x47d,0x47d,0x555,0x4fd,0x1256,0x47d,0x47d,0x47d,0x5c8,0x5c8,0x125e,0x1263,0x126b,0x47d, +0x47d,0x1273,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x125a,0x5c7,0x5c7,0x5c7, +0x47d,0x47d,0x47d,0x47d,0x555,0x4fd,0x1277,0x47d,0x47d,0x47d,0x5c8,0x5c8,0x127f,0x1284,0x128c,0x47d, +0x47d,0x1294,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x1241,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x5c8,0x127b,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x1283,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x1262,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x5c8,0x129c,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x12a4,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x5c7,0x5c7,0x5c7, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x8d4,0x47c,0x47c,0xe51,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x8e1,0x47d,0x47d,0xe62,0x5c8,0x5c8, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x8d4,0x47c,0x47c,0xe72,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x8e1,0x47d,0x47d,0xe83,0x5c8,0x5c8, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x8b4,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xdfb,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #if !U_PLATFORM_IS_DARWIN_BASED -0x1249,0x124e,0x1256,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x128b,0x1290,0x1298,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x126a,0x126f,0x1277,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x12ac,0x12b1,0x12b9,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x8f2,0x8f2,0x8f2, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #if !U_PLATFORM_IS_DARWIN_BASED -0x8f2,0x8f2,0x8f2,0x8f2,0xb94,0x8f2,0x125e,0x8f2,0x1265,0x126d,0x1273,0x8f2,0x1279,0x8f2,0x8f2,0x1281, -0x47c,0x47c,0x47c,0x47c,0x47c,0x8f2,0x8f2,0xa95,0x1289,0x47c,0x47c,0x47c,0x47c,0x1299,0x12a0,0x12a5, -0x12ab,0x12b3,0x12bb,0x12c3,0x129d,0x12cb,0x12d3,0x12db,0x12e0,0x12b2,0x1299,0x12a0,0x129c,0x12ab,0x12e8,0x129a, -0x12eb,0x129d,0x12f3,0x12fb,0x1303,0x130a,0x12f6,0x12fe,0x1306,0x130d,0x12f9,0x1315,0x1291,0x8f2,0x8f2,0x8f2, -0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x523,0x1325,0x523, -0x132c,0x1333,0x131d,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x47d,0x47d,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0xb98,0x8ff,0x12a0,0x8ff,0x12a7,0x12af,0x12b5, +0x8ff,0x12bb,0x8ff,0x8ff,0x12c3,0x47d,0x47d,0x47d,0x47d,0x12cb,0x8ff,0x8ff,0xaa6,0x12d3,0x47d,0x47d, +0x47d,0x47d,0x12e3,0x12ea,0x12ef,0x12f5,0x12fd,0x1305,0x130d,0x12e7,0x1315,0x131d,0x1325,0x132a,0x12fc,0x12e3, +0x12ea,0x12e6,0x12f5,0x1332,0x12e4,0x1335,0x12e7,0x133d,0x1345,0x134d,0x1354,0x1340,0x1348,0x1350,0x1357,0x1343, +0x135f,0x12db,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff, +0x8ff,0x8ff,0x524,0x136f,0x524,0x1376,0x137d,0x1367,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x8f2,0x8f2,0x8f2,0x8f2,0xb94,0x8f2,0x127f,0x8f2,0x1286,0x128e,0x1294,0x8f2,0x129a,0x8f2,0x8f2,0x12a2, -0x47c,0x47c,0x47c,0x47c,0x47c,0x8f2,0x8f2,0xa95,0x12aa,0x47c,0x47c,0x47c,0x47c,0x12ba,0x12c1,0x12c6, -0x12cc,0x12d4,0x12dc,0x12e4,0x12be,0x12ec,0x12f4,0x12fc,0x1301,0x12d3,0x12ba,0x12c1,0x12bd,0x12cc,0x1309,0x12bb, -0x130c,0x12be,0x1314,0x131c,0x1324,0x132b,0x1317,0x131f,0x1327,0x132e,0x131a,0x1336,0x12b2,0x8f2,0x8f2,0x8f2, -0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x523,0x1346,0x523, -0x134d,0x1354,0x133e,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x47d,0x47d,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0xb98,0x8ff,0x12c1,0x8ff,0x12c8,0x12d0,0x12d6, +0x8ff,0x12dc,0x8ff,0x8ff,0x12e4,0x47d,0x47d,0x47d,0x47d,0x12ec,0x8ff,0x8ff,0xaa6,0x12f4,0x47d,0x47d, +0x47d,0x47d,0x1304,0x130b,0x1310,0x1316,0x131e,0x1326,0x132e,0x1308,0x1336,0x133e,0x1346,0x134b,0x131d,0x1304, +0x130b,0x1307,0x1316,0x1353,0x1305,0x1356,0x1308,0x135e,0x1366,0x136e,0x1375,0x1361,0x1369,0x1371,0x1378,0x1364, +0x1380,0x12fc,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff, +0x8ff,0x8ff,0x524,0x1390,0x524,0x1397,0x139e,0x1388,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #if !U_PLATFORM_IS_DARWIN_BASED -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x133a,0x1342,0x47c, +0x47d,0x47d,0x1384,0x138c,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x135b,0x1363,0x47c, +0x47d,0x47d,0x13a5,0x13ad,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x5c7,0x5c7,0x5c7, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x134a,0x47c,0x554,0x135a,0x1352,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x1394,0x47d,0x555,0x13a4,0x139c,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x136b,0x47c,0x554,0x137b,0x1373,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x13b5,0x47d,0x555,0x13c5,0x13bd,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #if !U_PLATFORM_IS_DARWIN_BASED -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x136a,0x1372,0x137a, -0x1382,0x138a,0x1392,0x47c,0x1362,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x8f2,0x139a,0x8f2, -0x8f2,0xb8c,0x139f,0x13a3,0xb94,0x13ab,0x13b0,0x8f2,0x139a,0x8f2,0x1278,0x47c,0x13b8,0x13c0,0x13c4,0x13cc, -0x13d4,0x47c,0x47c,0x47c,0x47c,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x13dc,0x8f2,0x8f2,0x8f2, +0x47d,0x47d,0x47d,0x47d,0x47d,0x13ac,0x13bc,0x13b4,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x13cc,0x13d4,0x13dc,0x13e4,0x13ec,0x13f4,0x47d,0x13c4,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x8ff,0x13fc,0x8ff,0x8ff,0xb90,0x1401,0x1405,0xb98,0x140d,0x8ff,0x8ff,0x13fc,0x8ff,0x12ba, +0x47d,0x1415,0x141d,0x1421,0x1429,0x1431,0x47d,0x47d,0x47d,0x47d,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff, +0x8ff,0x1439,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff, +0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x1441,0x1449,0x8ff,0x8ff,0x8ff,0xb90,0x8ff,0x8ff, +0x1451,0x47d,0x13fc,0x8ff,0x1459,0x8ff,0x1461,0xb9a,0x47d,0x47d,0x13fc,0xaa4,0x8ff,0x1465,0x8ff,0x146d, +0x141d,0x8ff,0x47d,0x47d,0x47d,0xb9a,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x138b,0x1393,0x139b, -0x13a3,0x13ab,0x13b3,0x47c,0x1383,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x8f2,0x13bb,0x8f2, -0x8f2,0xb8c,0x13c0,0x13c4,0xb94,0x13cc,0x13d1,0x8f2,0x13bb,0x8f2,0x1299,0x47c,0x13d9,0x13e1,0x13e5,0x13ed, -0x13f5,0x47c,0x47c,0x47c,0x47c,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x13fd,0x8f2,0x8f2,0x8f2, +0x47d,0x47d,0x47d,0x47d,0x47d,0x13cd,0x13dd,0x13d5,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x13ed,0x13f5,0x13fd,0x1405,0x140d,0x1415,0x47d,0x13e5,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x8ff,0x141d,0x8ff,0x8ff,0xb90,0x1422,0x1426,0xb98,0x142e,0x8ff,0x8ff,0x141d,0x8ff,0x12db, +0x47d,0x1436,0x143e,0x1442,0x144a,0x1452,0x47d,0x47d,0x47d,0x47d,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff, +0x8ff,0x145a,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff, +0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x8ff,0x1462,0x146a,0x8ff,0x8ff,0x8ff,0xb90,0x8ff,0x8ff, +0x1472,0x47d,0x141d,0x8ff,0x147a,0x8ff,0x1482,0xb9a,0x47d,0x47d,0x141d,0xaa4,0x8ff,0x1486,0x8ff,0x148e, +0x143e,0x8ff,0x47d,0x47d,0x47d,0xb9a,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2,0x8f2, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #if !U_PLATFORM_IS_DARWIN_BASED -0x8f2,0x8f2,0x8f2,0x13e4,0x13ec,0x8f2,0x8f2,0x8f2,0xb8c,0x8f2,0x8f2,0x13e4,0x47c,0x139a,0x8f2,0x13f4, -0x8f2,0x13fc,0xb96,0x47c,0x47c,0x139a,0xa93,0x1401,0x1406,0x140e,0x47c,0x1416,0xa99,0x47c,0x47c,0x47c, +0x47d,0x47d,0x1475,0x5c8,0x5c8,0x147c,0x5c8,0x5c8,0x5c8,0x1484,0x5c8,0x148c,0x5c8,0x5c8,0x5c8,0x5c8, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x8f2,0x8f2,0x8f2,0x1405,0x140d,0x8f2,0x8f2,0x8f2,0xb8c,0x8f2,0x8f2,0x1405,0x47c,0x13bb,0x8f2,0x1415, -0x8f2,0x141d,0xb96,0x47c,0x47c,0x13bb,0xa93,0x1422,0x1427,0x142f,0x47c,0x1437,0xa99,0x47c,0x47c,0x47c, +0x47d,0x47d,0x1496,0x5c8,0x5c8,0x149d,0x5c8,0x5c8,0x5c8,0x14a5,0x5c8,0x14ad,0x5c8,0x5c8,0x5c8,0x5c8, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #if !U_PLATFORM_IS_DARWIN_BASED -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x141e,0x5c7,0x5c7, -0x1425,0x5c7,0x5c7,0x5c7,0x142d,0x5c7,0x1435,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0xc7a,0x5c8,0x5c8,0x1494,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x149c,0x14a4,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x143f,0x5c7,0x5c7, -0x1446,0x5c7,0x5c7,0x5c7,0x144e,0x5c7,0x1456,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0xc7a,0x5c8,0x5c8,0x14b5,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x14bd,0x14c5,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xc6e,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0xcb9,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #if !U_PLATFORM_IS_DARWIN_BASED -0x143d,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1445,0x144d,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x14ab,0x5c8,0x5c8, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x145e,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1466,0x146e,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x14cc,0x5c8,0x5c8, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0xcad,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1454,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x14b2,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1475,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x14d3,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x145b,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x14b9,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x147c,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x14da,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0xb69,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x1462,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x14bd,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0xf50,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x1483,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x14de,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0xf71,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xb65,0x47c,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1466,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xf3f,0x5c7,0x5c7, +0x5c8,0x5c8,0x127f,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1487,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xf60,0x5c7,0x5c7, +0x5c8,0x5c8,0x12a0,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x146e,0x5c7,0x5c7, +0x5c8,0x5c8,0x14c2,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x148f,0x5c7,0x5c7, +0x5c8,0x5c8,0x14e3,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1476,0x47c,0x47c, +0x47d,0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x14ca,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0xf50,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x1497,0x47c,0x47c, +0x47d,0x47d,0x47d,0x5c8,0x5c8,0x5c8,0x5c8,0x14eb,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8,0x5c8, +0x5c8,0x5c8,0x5c8,0xf71,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x5c7,0x5c7, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #if !U_PLATFORM_IS_DARWIN_BASED -0x5c7,0x5c7,0x147e,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xf3f,0x47c, +0x47d,0x47d,0x47d,0x14da,0x14d2,0x14d2,0x14d2,0x47d,0x47d,0x47d,0x47d,0x524,0x524,0x524,0x524,0x524, +0x524,0x524,0x14e2,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5c7,0x5c7,0x149f,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0xf60,0x47c, +0x47d,0x47d,0x47d,0x14fb,0x14f3,0x14f3,0x14f3,0x47d,0x47d,0x47d,0x47d,0x524,0x524,0x524,0x524,0x524, +0x524,0x524,0x1503,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -#if !U_PLATFORM_IS_DARWIN_BASED -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x148e,0x1486, -0x1486,0x1486,0x47c,0x47c,0x47c,0x47c,0x523,0x523,0x523,0x523,0x523,0x523,0x523,0x1496,0x47c,0x47c, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x14af,0x14a7, -0x14a7,0x14a7,0x47c,0x47c,0x47c,0x47c,0x523,0x523,0x523,0x523,0x523,0x523,0x523,0x14b7,0x47c,0x47c, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c, -0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0x47c,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d,0x47d, +0x47d,0x47d,0x47d,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, #if !U_PLATFORM_IS_DARWIN_BASED -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0x149e,0x45b,0x45b, +0xe13,0xe13,0x14ea,0x45c,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0xe02,0x14bf,0x45b,0x45b, +0xe13,0xe13,0x150b,0x45c,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, -0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, -0xc,0x17,0x17,0x17,0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x18,0x18,0x18,0x17, -0x17,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,0x14,0x17,0x15,0x1a,0x16, -0x1a,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,0x14,0x18,0x15,0x18,0xf, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xf,0xf,0xf,0xf,0xc,0x17,0x17,0x17,0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18, +0x17,0x13,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17, +0x18,0x18,0x18,0x17,0x17,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x14, +0x17,0x15,0x1a,0x16,0x1a,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0x14, +0x18,0x15,0x18,0xf,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, 0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, -0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, -0xc,0x17,0x19,0x19,0x19,0x19,0x1b,0x17,0x1a,0x1b,5,0x1c,0x18,0x10,0x1b,0x1a, -0x1b,0x18,0x34b,0x38b,0x1a,2,0x17,0x17,0x1a,0x30b,5,0x1d,0x34cb,0x344b,0x3ccb,0x17, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,0x18,1,1,1,1,1,1,1,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,0x18,2,2,2,2,2,2,2,2, -1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -1,2,1,2,1,2,1,2,2,1,2,1,2,1,2,1, -2,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, +0xf,0xf,0xf,0xf,0xc,0x17,0x19,0x19,0x19,0x19,0x1b,0x17,0x1a,0x1b,5,0x1c, +0x18,0x10,0x1b,0x1a,0x1b,0x18,0x34b,0x38b,0x1a,2,0x17,0x17,0x1a,0x30b,5,0x1d, +0x34cb,0x344b,0x3ccb,0x17,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,0x18,1,1,1,1, +1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,0x18,2,2,2,2, +2,2,2,2,1,2,1,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -1,1,2,1,2,1,2,2,2,1,1,2,1,2,1,1, -2,1,1,1,2,2,1,1,1,1,2,1,1,2,1,1, -1,2,2,2,1,1,2,1,1,2,1,2,1,2,1,1, -2,1,2,2,1,2,1,1,2,1,1,1,2,1,2,1, -1,2,2,5,1,2,2,2,5,5,5,5,1,3,2,1, -3,2,1,3,2,1,2,1,2,1,2,1,2,1,2,1, +1,2,1,2,1,2,1,2,1,2,1,2,2,1,2,1, 2,1,2,1,2,2,1,2,1,2,1,2,1,2,1,2, -1,2,1,2,1,2,1,2,2,1,3,2,1,2,1,1, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,1,2,1,2,1,2,2,2,1,1,2, +1,2,1,1,2,1,1,1,2,2,1,1,1,1,2,1, +1,2,1,1,1,2,2,2,1,1,2,1,1,2,1,2, +1,2,1,1,2,1,2,2,1,2,1,1,2,1,1,1, +2,1,2,1,1,2,2,5,1,2,2,2,5,5,5,5, +1,3,2,1,3,2,1,3,2,1,2,1,2,1,2,1, +2,1,2,1,2,1,2,1,2,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,2,1,3,2, +1,2,1,1,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -1,2,1,2,2,2,2,2,2,2,1,1,2,1,1,2, -2,1,2,1,1,1,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,2,2,2,2,2,2,1,1, +2,1,1,2,2,1,2,1,1,1,1,2,1,2,1,2, +1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,5,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,0x1a,0x1a, -0x1a,0x1a,4,4,4,4,4,4,4,4,4,4,4,4,0x1a,0x1a, -0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,4,4,4, -4,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,0x1a,4,0x1a,0x1a,0x1a,0x1a,0x1a, -0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,6,6,6,6, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,0x1a,0x1a,0x1a,0x1a,4,4,4,4,4,4,4,4,4,4, +4,4,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, +4,4,4,4,4,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,0x1a,4,0x1a, +0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,6,1,2,1,2, -4,0x1a,1,2,0,0,4,2,2,2,0x17,1,0,0,0,0, -0x1a,0x1a,1,0x17,1,1,1,0,1,0,1,1,2,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1, -1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, -2,2,1,1,1,2,2,2,1,2,1,2,1,2,1,2, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +1,2,1,2,4,0x1a,1,2,0,0,4,2,2,2,0x17,1, +0,0,0,0,0x1a,0x1a,1,0x17,1,1,1,0,1,0,1,1, +2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,1,2,2,1,1,1,2,2,2,1,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -2,2,2,2,1,2,0x18,1,2,1,1,2,2,1,1,1, +1,2,1,2,2,2,2,2,1,2,0x18,1,2,1,1,2, +2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,1,2,1,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,2,0x1b,6,6,6,6,6,7,7,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -1,2,0x1b,6,6,6,6,6,7,7,1,2,1,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,1,2,1,2,1,2,1,2,1,2,1, +2,1,2,2,1,2,1,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,0,0,4,0x17,0x17, -0x17,0x17,0x17,0x17,0,2,2,2,2,2,2,2,2,2,2,2, +1,2,1,2,0,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, +0,4,0x17,0x17,0x17,0x17,0x17,0x17,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,0,0x17,0x13,0,0,0x1b,0x1b,0x19,0,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +2,2,2,2,2,2,2,2,2,0x17,0x13,0,0,0x1b,0x1b,0x19, +0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,0x13,6,0x17,6,6,0x17, -6,6,0x17,6,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,0,0,0,0,5,5,5,0x17, -0x17,0,0,0,0,0,0,0,0,0,0,0,0x10,0x10,0x10,0x10, -0x10,0x10,0x18,0x18,0x18,0x17,0x17,0x19,0x17,0x17,0x1b,0x1b,6,6,6,6, -6,6,6,6,6,6,6,0x17,0x10,0,0x17,0x17,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5, -5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,6,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,5,5,6,5,5,5, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,0x13,6, +0x17,6,6,0x17,6,6,0x17,6,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,5, +5,5,5,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0, +0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x18,0x18,0x17,0x17,0x19,0x17,0x17,0x1b,0x1b, +6,6,6,6,6,6,6,6,6,6,6,0x17,0x10,0,0x17,0x17, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,5,5, +6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -0x17,5,6,6,6,6,6,6,6,0x10,0x1b,6,6,6,6,6, -6,4,4,6,6,0x1b,6,6,6,6,5,5,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,0x1b,0x1b,5,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0x10,5,6,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0, -0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0x17,5,6,6,6,6,6,6,6,0x10,0x1b,6, +6,6,6,6,6,4,4,6,6,0x1b,6,6,6,6,5,5, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,0x1b,0x1b,5, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0x10, +5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6, -6,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,0,0,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6, -6,6,6,6,4,4,0x1b,0x17,0x17,0x17,4,0,0,0,0,0, -6,6,6,6,4,6,6,6,4,6,6,6,6,6,0,0, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,6,6,6,6,4,6,6,6,6,6, +5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6, +6,6,6,6,6,5,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,6,6,6,0,0,0x17,0, -5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6, +6,6,6,6,6,6,6,6,4,4,0x1b,0x17,0x17,0x17,4,0, +0,6,0x19,0x19,6,6,6,6,4,6,6,6,4,6,6,6, +6,6,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,6,6,6,6,4,6, +6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6, +0,0,0x17,0,5,5,5,5,5,5,5,5,5,5,5,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -6,6,0x10,6,6,6,6,6,6,6,6,6,6,6,6,6, +0,0,0,0,6,6,0x10,6,6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5, +5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6, +6,6,6,6,5,5,6,6,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189, +0x1c9,0x209,0x249,0x289,0x17,4,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,6,6,6,8,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0,5,5,5,5,5,5,5,5,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6, -5,5,6,6,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, -0x17,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -6,6,6,8,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,6,8,6,5,8,8,8,6,6,6, +6,6,6,6,6,8,8,8,8,6,8,8,5,6,6,6, +6,6,6,6,5,5,5,5,5,5,5,5,5,5,6,6, +0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,0x19,0x19, +0x37cb,0x35cb,0x3fcb,0x34cb,0x3ccb,0x94b,0x1b,0x19,5,0x17,6,0,5,6,8,8, +0,5,5,5,5,5,5,5,5,0,0,5,5,0,0,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5, +5,5,5,5,5,0,5,0,0,0,5,5,5,5,0,0, +6,5,8,8,8,6,6,6,6,0,0,8,8,0,0,8, +8,6,5,0,0,0,0,0,0,0,0,8,0,0,0,0, +5,5,0,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189, +0x1c9,0x209,0x249,0x289,6,6,5,5,5,6,0x17,0,0,0,0,0, +0,0,0,0,0,6,6,8,0,5,5,5,5,5,5,0, +0,0,0,5,5,0,0,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,5,5,5,5,5,5,5,0,5,5, +0,5,5,0,5,5,0,0,6,0,8,8,8,6,6,0, +0,0,0,6,6,0,0,6,6,6,0,0,0,6,0,0, +0,0,0,0,0,5,5,5,5,0,5,0,5,5,6,6, +0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x19,0,0, +0,0,0,0,0,5,6,6,6,6,6,6,0,6,6,8, +0,5,5,5,5,5,5,5,5,5,0,5,5,5,0,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5, +5,5,5,5,5,0,5,5,0,5,5,5,5,5,0,0, +6,5,8,8,8,6,6,6,6,6,0,6,6,8,0,8, +8,6,0,0,5,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189, +0x1c9,0x209,0x249,0x289,0x1b,5,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0,0,0,0, +0,0,0,0,0,6,8,8,0,5,5,5,5,5,5,5, +5,0,0,5,5,0,0,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,5,5,5,5,5,5,5,0,5,5, +0,5,5,5,5,5,0,0,6,5,8,6,8,6,6,6, +6,0,0,8,8,0,0,8,8,6,0,0,0,0,0,0, +0,0,6,8,0,0,0,0,5,5,0,5,0,0,0,0, +0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0x1e4b,0x784b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x1b,0,0,0,0,0,0,0,6,5, +0,5,5,5,5,5,5,0,0,0,5,5,5,0,5,5, +5,5,0,0,0,5,5,0,5,0,5,5,0,0,0,5, +5,0,0,0,5,5,5,0,0,0,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,0,0,8,8,6,8,8,0, +0,0,8,8,8,0,8,8,8,6,0,0,5,0,0,0, +0,0,0,8,0,0,0,0,0,0,0,0,5,5,6,6, +0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0, +0,0,0,0,0x54b,0x58b,0x5cb,0x60b,0x58b,0x5cb,0x60b,0x1b,6,8,8,8, +6,5,5,5,5,5,5,5,5,0,5,5,5,0,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, +0,5,6,6,6,8,8,8,8,0,6,6,6,0,6,6, +6,6,0,0,0,0,0,0,0,6,6,0,5,5,5,0, +0,0,0,0,5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189, +0x1c9,0x209,0x249,0x289,0,5,5,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,6,8,8,0x17,5,5,5,5,5,5,5, +5,0,5,5,5,0,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5, +0,5,5,5,5,5,0,0,6,5,8,6,8,8,8,8, +8,0,6,8,8,0,8,8,6,6,0,0,0,0,0,0, +0,8,8,0,0,0,0,0,0,0,5,0,5,5,6,6, +0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0x1e4b,0x784b,0x34cb, +0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,5,5,5,5,5,5,6,6,8,8, +0,5,5,5,5,5,5,5,5,0,5,5,5,0,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,6,8,6,5,8,8,8,6,6,6,6,6,6,6, -6,8,8,8,8,6,8,8,5,6,6,6,6,6,6,6, -5,5,5,5,5,5,5,5,5,5,6,6,0,0,0x49,0x89, -0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,0x19,0x19,0x37cb,0x35cb,0x3fcb,0x34cb, -0x3ccb,0x94b,0x1b,0x19,5,0x17,0,0,5,6,8,8,0,5,5,5, -5,5,5,5,5,0,0,5,5,0,0,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5, -5,0,5,0,0,0,5,5,5,5,0,0,6,5,8,8, -8,6,6,6,6,0,0,8,8,0,0,8,8,6,5,0, -0,0,0,0,0,0,0,8,0,0,0,0,5,5,0,5, +5,5,5,5,5,5,5,5,5,5,5,6,6,5,8,8, +8,6,6,6,6,0,8,8,8,0,8,8,8,6,5,0x1b, +0,0,0,0,5,5,5,8,0xcc0b,0xca0b,0xcb4b,0xc90b,0x364b,0xc94b,0x350b,5, 0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, -6,6,5,5,5,6,0,0,0,0,0,0,0,0,0,0, -0,6,6,8,0,5,5,5,5,5,5,0,0,0,0,5, -5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0,5,5,5,5,5,5,5,0,5,5,0,5,5,0, -5,5,0,0,6,0,8,8,8,6,6,0,0,0,0,6, -6,0,0,6,6,6,0,0,0,6,0,0,0,0,0,0, -0,5,5,5,5,0,5,0,5,5,6,6,0,0,0x49,0x89, -0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x19,0,0,0,0,0,0, -0,5,6,6,6,6,6,6,0,6,6,8,0,5,5,5, -5,5,5,5,5,5,0,5,5,5,0,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5, -5,0,5,5,0,5,5,5,5,5,0,0,6,5,8,8, -8,6,6,6,6,6,0,6,6,8,0,8,8,6,0,0, -5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, -0x1b,5,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0,0,0,0,0,0,0,0, -0,6,8,8,0,5,5,5,5,5,5,5,5,0,0,5, -5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0,5,5,5,5,5,5,5,0,5,5,0,5,5,5, -5,5,0,0,6,5,8,6,8,6,6,6,6,0,0,8, -8,0,0,8,8,6,0,0,0,0,0,0,0,0,6,8, -0,0,0,0,5,5,0,5,0,0,0,0,0,0,0x49,0x89, -0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0x1e4b,0x784b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x19,0x1b,0,0,0,0,0,0,0,6,5,0,5,5,5, -5,5,5,0,0,0,5,5,5,0,5,5,5,5,0,0, -0,5,5,0,5,0,5,5,0,0,0,5,5,0,0,0, -5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5, -5,5,0,0,0,0,8,8,6,8,8,0,0,0,8,8, -8,0,8,8,8,6,0,0,5,0,0,0,0,0,0,8, -0,0,0,0,0,0,0,0,5,5,6,6,0,0,0x49,0x89, -0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0,0, -0x54b,0x58b,0x5cb,0x60b,0x58b,0x5cb,0x60b,0x1b,6,8,8,8,0,5,5,5, -5,5,5,5,5,0,5,5,5,0,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,0,0,5,6,6, -6,8,8,8,8,0,6,6,6,0,6,6,6,6,0,0, -0,0,0,0,0,6,6,0,5,5,5,0,0,0,0,0, -5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, -0,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0, -5,6,8,8,0,5,5,5,5,5,5,5,5,0,5,5, -5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0,5,5,5,5,5,5,5,5,5,5,0,5,5,5, -5,5,0,0,6,5,8,6,8,8,8,8,8,0,6,8, -8,0,8,8,6,6,0,0,0,0,0,0,0,8,8,0, -0,0,0,0,0,0,5,0,5,5,6,6,0,0,0x49,0x89, -0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0x1e4b,0x784b,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb, -0x3fcb,0x1b,5,5,5,5,5,5,6,6,8,8,0,5,5,5, -5,5,5,5,5,0,5,5,5,0,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,6,6,5,8,8,8,6,6,6, -6,0,8,8,8,0,8,8,8,6,5,0x1b,0,0,0,0, -5,5,5,8,0xcc0b,0xca0b,0xcb4b,0xc90b,0x364b,0xc94b,0x350b,5,0,0,0,0, -0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,8,8, -0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8, -0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5, -5,5,5,5,0,5,0,0,5,5,5,5,5,5,5,0, -0,0,6,0,0,0,0,8,8,8,6,6,6,0,6,0, -8,8,8,8,8,8,8,8,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6, -6,6,6,0,0,0,0,0x19,5,5,5,5,5,5,4,6, -6,6,6,6,6,6,6,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x17,0x17,0,0,0,0,0,5,5,0,5,0,0,5, -5,0,5,0,0,5,0,0,0,0,0,0,5,5,5,5, -0,5,5,5,5,5,5,5,0,5,5,5,0,5,0,5, -0,0,5,5,0,5,5,5,5,6,5,5,6,6,6,6, -6,6,0,6,6,5,0,0,5,5,5,5,5,0,4,0, -6,6,6,6,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,5,5,5,5,5,0x1b,0x1b,0x1b,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1b,0x17,0x1b,0x1b,0x1b, -6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x344b,0x3c4b,0x444b,0x4c4b,0x544b,0x5c4b,0x644b,0x6c4b,0x744b,0x2c4b,0x1b,6,0x1b,6, -0x1b,6,0x14,0x15,0x14,0x15,8,8,5,5,5,5,5,5,5,5, -0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,0,0,0,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,8,6,6,6,6, -6,0x17,6,6,5,5,5,5,5,6,6,6,6,6,6,6, -6,6,6,6,0,6,6,6,6,6,6,6,6,6,6,6, +0,0,8,8,0x17,0,0,0,0,0,0,0,0,0,0,0, +0,0,8,8,0,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0,0,0,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5, +5,5,5,5,5,5,5,5,0,5,0,0,5,5,5,5, +5,5,5,0,0,0,6,0,0,0,0,8,8,8,6,6, +6,0,6,0,8,8,8,8,8,8,8,8,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5, +6,6,6,6,6,6,6,0,0,0,0,0x19,5,5,5,5, +5,5,4,6,6,6,6,6,6,6,6,0x17,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0,0,0,0,0,5,5,0, +5,0,0,5,5,0,5,0,0,5,0,0,0,0,0,0, +5,5,5,5,0,5,5,5,5,5,5,5,0,5,5,5, +0,5,0,5,0,0,5,5,0,5,5,5,5,6,5,5, +6,6,6,6,6,6,0,6,6,5,0,0,5,5,5,5, +5,0,4,0,6,6,6,6,6,6,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,5,5,5,5,5,0x1b,0x1b,0x1b, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1b, +0x17,0x1b,0x1b,0x1b,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0x344b,0x3c4b,0x444b,0x4c4b,0x544b,0x5c4b,0x644b,0x6c4b,0x744b,0x2c4b, +0x1b,6,0x1b,6,0x1b,6,0x14,0x15,0x14,0x15,8,8,5,5,5,5, +5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, +0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8, +6,6,6,6,6,0x17,6,6,5,5,5,5,5,6,6,6, +6,6,6,6,6,6,6,6,0,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b, -0x1b,0x17,0x17,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,8,8,6,6,6,6,8,6,6,6,6,6,6, -8,6,6,8,8,6,6,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5,5,5,8,8, -6,6,5,5,5,5,6,6,6,5,8,8,8,5,5,8, -8,8,8,8,8,8,5,5,5,6,6,6,6,5,5,5, -5,5,5,5,5,5,5,5,5,5,6,8,8,6,6,8, -8,8,8,8,8,6,5,8,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,8,8,8,6,0x1b,0x1b,5,5,5,5,5,5,5,5, +6,6,6,6,6,6,6,6,6,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x17,0x17,0x17,0x17, +0x17,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,8,8,6,6,6,6,8,6,6, +6,6,6,6,8,6,6,8,8,6,6,5,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5, +5,5,8,8,6,6,5,5,5,5,6,6,6,5,8,8, +8,5,5,8,8,8,8,8,8,8,5,5,5,6,6,6, +6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,8, +8,6,6,8,8,8,8,8,8,6,5,8,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,8,8,8,6,0x1b,0x1b,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,0x17,4,2,2,2,1,1,1,1, +1,1,0,1,0,0,0,0,0,1,0,0,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,5, +5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5, +5,5,5,0,5,0,5,5,5,5,0,0,5,5,5,5, +5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5, +5,5,0,0,5,5,5,5,5,5,5,0,5,0,5,5, +5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0x17,4,5,5,5,1,1,1,1,1,1,0,1, -0,0,0,0,0,1,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0, -5,5,5,5,5,5,5,0,5,0,5,5,5,5,0,0, -5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0, +5,5,5,5,5,5,5,0,0,6,6,6,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b, +0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x788b,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,0,0,2,2,2,2,2,2,0,0,0x13,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0,0,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b, -0x16cb,0x194b,0x1bcb,0x1e4b,0x788b,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0,0,0,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0, -2,2,2,2,2,2,0,0,0x13,5,5,5,5,5,5,5, +0xc,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0x14,0x15,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x98a,0x9ca, +0xa0a,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5, +5,5,6,6,6,0,0,0,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0x17,0x17,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0xc,5,5,5, +5,5,6,6,6,0x17,0x17,0,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0x14,0x15,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,0x17,0x17,0x17,0x98a,0x9ca,0xa0a,5,5,5, -5,5,5,5,5,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,5,5,5,5,6,6, -6,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6, -6,0x17,0x17,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,5,5,5,0,6,6, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,6,6,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5, +5,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -6,6,8,6,6,6,6,6,6,6,8,8,8,8,8,8, -8,8,6,8,8,6,6,6,6,6,6,6,6,6,6,6, -0x17,0x17,0x17,4,0x17,0x17,0x17,0x19,5,6,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x54b,0x58b,0x5cb,0x60b, -0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,6,5,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x17, -0x17,0x17,0x13,0x17,0x17,0x17,0x17,6,6,6,0x10,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,4, +5,5,5,5,6,6,8,6,6,6,6,6,6,6,8,8, +8,8,8,8,8,8,6,8,8,6,6,6,6,6,6,6, +6,6,6,6,0x17,0x17,0x17,4,0x17,0x17,0x17,0x19,5,6,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, +0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,6,5,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, -0,0,0,0,5,5,5,5,5,6,6,5,5,5,5,5, +0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x17,0x17,6,6,6,0x10,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, +5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0, -6,6,6,8,8,8,8,6,6,8,8,8,0,0,0,0, -8,8,6,8,8,8,8,8,8,6,6,6,0,0,0,0, -0x1b,0,0,0,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, +5,0,0,0,0,0,0,0,5,5,5,5,5,6,6,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, -5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, -5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0, +0,0,0,0,6,6,6,8,8,8,8,6,6,8,8,8, +0,0,0,0,8,8,6,8,8,8,8,8,8,6,6,6, +0,0,0,0,0x1b,0,0,0,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189, +0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x30b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,0,5,5,5,5,5,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0x30b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6, -6,8,8,6,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,4, -0x17,0x17,0x17,0x17,0x17,0x17,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,7,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,8,6,8, -6,6,6,6,6,6,6,0,6,8,6,8,8,6,6,6, -6,6,6,6,6,8,8,8,8,8,8,6,6,6,6,6, -6,6,6,6,6,0,0,6,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0,0,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,6,6,6,6,8,5,5,5, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,6,6,8,8,6,0,0,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,0x17,0x17,0,0,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,7,0,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,6,8,6,6,6,6,6,8, -6,8,8,8,8,8,6,8,8,5,5,5,5,5,5,5, -0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17, -0x17,0x17,0x17,0x17,5,8,6,6,6,6,8,8,6,6,8,6, -6,6,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5, -5,5,5,5,6,6,8,5,5,5,5,5,5,5,5,5, +5,8,6,8,6,6,6,6,6,6,6,0,6,8,6,8, +8,6,6,6,6,6,6,6,6,8,8,8,8,8,8,6, +6,6,6,6,6,6,6,6,6,0,0,6,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x17,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,6,6,6,6, +8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,6,8,6,6, +6,6,6,8,6,8,8,8,8,8,6,8,8,5,5,5, +5,5,5,5,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,8,6,6,6,6,8,8, +6,6,8,6,6,6,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,5,5,5,5,5,5,6,6,8,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,6,8,6,6,8,8,8,6,8,6, -6,6,8,8,0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,5,5,5, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5, -8,8,8,8,8,8,8,8,6,6,6,6,6,6,6,6, -8,8,6,6,0,0,0,0x17,0x17,0x17,0x17,0x17,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,6,8,6,6,8,8, +8,6,8,6,6,6,8,8,0,0,0,0,0,0,0,0, +0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5, +5,5,5,5,8,8,8,8,8,8,8,8,6,6,6,6, +6,6,6,6,8,8,6,6,0,0,0,0x17,0x17,0x17,0x17,0x17, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,4,4,4,4,4,4,0x17,0x17,2,2,2,2, -2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,6,6,6,0x17, -6,6,6,6,6,6,6,6,6,6,6,6,6,8,6,6, -6,6,6,6,6,5,5,5,5,6,5,5,5,5,8,8, -6,5,5,8,6,6,0,0,0,0,0,0,2,2,2,2, -2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4, +5,5,5,5,5,5,5,5,4,4,4,4,4,4,0x17,0x17, +2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0, +6,6,6,0x17,6,6,6,6,6,6,6,6,6,6,6,6, +6,8,6,6,6,6,6,6,6,5,5,5,5,6,5,5, +5,5,8,8,6,5,5,8,6,6,0,0,0,0,0,0, +2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2, -2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2, +2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,4,4,4,4,4,6,6,6,6, +2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,0,6,6,6,6,6,1,2,1,2, +6,6,6,6,6,6,6,6,6,6,0,6,6,6,6,6, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2, -2,2,2,2,1,1,1,1,1,0x1a,0x1a,0x1a,0,0,2,2, -2,0,2,2,1,1,1,1,3,0x1a,0x1a,0,2,2,2,2, -2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2, -2,2,0,0,1,1,1,1,1,1,0,0,2,2,2,2, -2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2, -2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2, -2,2,0,0,1,1,1,1,1,1,0,0,2,2,2,2, -2,2,2,2,0,1,0,1,0,1,0,1,2,2,2,2, -2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2, -2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2, -2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2, -2,0,2,2,1,1,1,1,3,0x1a,2,0x1a,0x1a,0x1a,2,2, -2,0,2,2,1,1,1,1,3,0x1a,0x1a,0x1a,2,2,2,2, -0,0,2,2,1,1,1,1,0,0x1a,0x1a,0x1a,0x16,0x17,0x17,0x17, -0x18,0x14,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17, -0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xc,0x10,0x10,0x10,0x10, -0x10,0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x2cb,4,0,0, -0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,4,0xc,0xc,0xc,0xc, -0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x10,0x10,0x10,0x10,0x10,0x13,0x13,0x13,0x13, -0x13,0x13,0x17,0x17,0x1c,0x1d,0x14,0x1c,0x1c,0x1d,0x14,0x1c,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0xd,0xe,0x10,0x10,0x10,0x10,0x10,0xc,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x16,0x2cb,0x30b,0x34b,0x38b, -0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,0,4,4,4,4, -4,4,4,4,4,4,4,4,4,0,0,0,0x19,0x19,0x19,0x19, +1,2,1,2,1,2,2,2,2,2,2,2,2,2,1,2, +2,2,2,2,2,2,2,2,1,1,1,1,1,0x1a,0x1a,0x1a, +0,0,2,2,2,0,2,2,1,1,1,1,3,0x1a,0x1a,0, +2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, +2,2,2,2,2,2,0,0,1,1,1,1,1,1,0,0, +2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, +2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, +2,2,2,2,2,2,0,0,1,1,1,1,1,1,0,0, +2,2,2,2,2,2,2,2,0,1,0,1,0,1,0,1, +2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0, +2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3, +2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3, +2,2,2,2,2,0,2,2,1,1,1,1,3,0x1a,2,0x1a, +0x1a,0x1a,2,2,2,0,2,2,1,1,1,1,3,0x1a,0x1a,0x1a, +2,2,2,2,0,0,2,2,1,1,1,1,0,0x1a,0x1a,0x1a, +0x16,0x17,0x17,0x17,0x18,0x14,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x18,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xc, +0x10,0x10,0x10,0x10,0x10,0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +0x2cb,4,0,0,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,4, +0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x10,0x10,0x10,0x10,0x10, +0x13,0x13,0x13,0x13,0x13,0x13,0x17,0x17,0x1c,0x1d,0x14,0x1c,0x1c,0x1d,0x14,0x1c, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xd,0xe,0x10,0x10,0x10,0x10,0x10,0xc, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x16, +0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,0, +4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0, 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, -0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6, -6,6,6,6,6,6,6,6,6,7,7,7,7,6,7,7, -7,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, -1,0x1b,1,0x1b,1,0x1b,1,1,1,1,0x1b,2,1,1,1,1, -2,5,5,5,5,2,0x1b,0x1b,2,2,1,1,0x18,0x18,0x18,0x18, -0x18,1,2,2,2,2,0x1b,0x18,0x1b,0x1b,2,0x1b,0x358b,0x360b,0x364b,0x348b, -0x388b,0x350b,0x390b,0x3d0b,0x410b,0x354b,0x454b,0x35cb,0x3dcb,0x45cb,0x4dcb,0x58b,0x1b,0x1b,1,0x1b, -0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1,1,1,2,2,1,1,1,2, -0x1b,1,0x1b,0x1b,0x18,1,1,1,1,1,0x1b,0x1b,0x58a,0x5ca,0x60a,0x64a, -0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a,0x58a,0x5ca,0x60a,0x64a, -0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a,0x784a,0x984a,0x788a,1, -2,0x6ca,0x11ca,0x988a,0x78ca,0x54b,0x1b,0x1b,0,0,0,0,0x18,0x18,0x18,0x18, -0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x18,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x18,0x1b, -0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18, +0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7, +7,6,7,7,7,6,6,6,6,6,6,6,6,6,6,6, +6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x1b,0x1b,0x1b,0x1b,1,0x1b,1,0x1b,1,0x1b,1,1,1,1,0x1b,2, +1,1,1,1,2,5,5,5,5,2,0x1b,0x1b,2,2,1,1, +0x18,0x18,0x18,0x18,0x18,1,2,2,2,2,0x1b,0x18,0x1b,0x1b,2,0x1b, +0x358b,0x360b,0x364b,0x348b,0x388b,0x350b,0x390b,0x3d0b,0x410b,0x354b,0x454b,0x35cb,0x3dcb,0x45cb,0x4dcb,0x58b, +0x1b,0x1b,1,0x1b,0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1,1,1,2,2, +1,1,1,2,0x1b,1,0x1b,0x1b,0x18,1,1,1,1,1,0x1b,0x1b, +0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a, +0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a, +0x784a,0x984a,0x788a,1,2,0x6ca,0x11ca,0x988a,0x78ca,0x54b,0x1b,0x1b,0,0,0,0, +0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18, +0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18, +0x1b,0x1b,0x18,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x80b, -0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b, -0x4cb,0x50b,0x7cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b, -0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb, -0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x2cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b, +0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb, +0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb, +0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x30b,0x34b, -0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb, -0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15, -0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14, -0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15, +0x14,0x15,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb, +0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18, -0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b, +0x18,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15, +0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14, +0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14, +0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2, +0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,0,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,0,2,2,2,2, @@ -892,8 +891,8 @@ static const uint16_t propsTrie_index[21280]={ 0x1c,0x1d,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x13,0x17, 0x1c,0x1d,0x17,0x17,0x1c,0x1d,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17, 0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x13, -0x17,0x17,0x17,0x17,0x13,0x17,0x14,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x17,0x17,0x17,0x17,0x13,0x17,0x14,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, @@ -911,9 +910,11 @@ static const uint16_t propsTrie_index[21280]={ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,0x17,4,4,4,5,0,0,0,0,0,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,0,0,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, -0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,0x1b,0x1b,0x58b,0x5cb, +0x60b,0x64b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, 0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,0x58b,0x5cb,0x60b,0x64b, 0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, @@ -977,6 +978,8 @@ static const uint16_t propsTrie_index[21280]={ 5,5,5,5,5,5,5,5,0x6c5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,0x545,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, 5,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5, @@ -1001,7 +1004,7 @@ static const uint16_t propsTrie_index[21280]={ 2,2,2,2,2,1,2,1,2,1,1,2,1,2,1,2, 1,2,1,2,4,0x1a,0x1a,1,2,1,2,5,1,2,1,2, 2,2,1,2,1,2,1,2,1,2,1,2,1,2,1,1, -1,1,1,0,1,1,1,1,1,2,1,2,0,0,0,0, +1,1,1,2,1,1,1,1,1,2,1,2,1,2,0,0, 0,0,0,0,5,5,6,5,5,5,6,5,5,5,5,6, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,8,8,6,6,8,0x1b,0x1b,0x1b,0x1b, @@ -1014,13 +1017,11 @@ static const uint16_t propsTrie_index[21280]={ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,8,8,8,8,8,8,8,8,8,8,8,8, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,5,5,5,5,5,5,0x17,0x17,0x17,5,0x17,5,0,0, +6,6,5,5,5,5,5,5,0x17,0x17,0x17,5,0x17,5,5,6, 5,5,5,5,5,5,6,6,6,6,6,6,6,6,0x17,0x17, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,6,6,6,6,6,6,6,6,6,6,6,8,8, -0,0,0,0,0,0,0,0,0,0,0,0x17,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,0,0,8,0x17,0x17,0x17, +0,0,0,0,0,0,0,0,0,0,0,0x17,8,0x17,0x17,0x17, 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,4,0x49,0x89,0xc9,0x109, 0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6, @@ -1049,48 +1050,34 @@ static const uint16_t propsTrie_index[21280]={ 8,6,8,8,6,8,8,0x17,8,6,0,0,0x49,0x89,0xc9,0x109, 0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,5, 0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, -0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0,0,0,0,5,5,5,5, +5,5,5,0,0,0,0,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x12,0x12,0x12,0x12, 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11, 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, #if !U_PLATFORM_IS_DARWIN_BASED -0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,5,5,5,5,5,5,5,5, -5,5,5,0x605,5,5,5,5,5,5,5,0x7c5,5,5,5,5, -0x5c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x6c5,5,0x6c5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x7c5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0x18,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,5,5,5,5,5,0,5,0, -5,5,0,5,5,0,5,5,5,5,5,5,5,5,5,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,6,0x1b,0x1b,5,0x19, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,5,5,5,5,5,6,0x19,0x2cb,0x88a,0x8ca, -0x90a,0x88a,0x8ca,0x90a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x15,0x17,0x17,0x17,4,0x13,0x13,0x17,0x18,0x18,0x14,0x15,0x18,5,5,5, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -#if !U_PLATFORM_IS_DARWIN_BASED -2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0, -0,0,0,2,2,2,2,2,0,0,0,0,0,5,6,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5, +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,5,5,5,5, 5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,5,0x7c5, 5,5,5,5,0x5c5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,0x6c5,5,0x6c5,5,5,5,5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +0x1b,0x1b,5,0x19,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,6, +0x19,0x2cb,0x88a,0x8ca,0x90a,0x88a,0x8ca,0x90a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x15,0x17,0x17,0x17,4,0x13,0x13,0x17,0x18,0x18,0x14,0x15, +0x18,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +5,5,5,5,5,5,5,5,5,5,5,0x605,5,5,5,5, +5,5,5,0x7c5,5,5,5,5,0x5c5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x6c5,5,0x6c5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, -0x1a,0x1a,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,0x7c5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,0x18,5,5, @@ -1103,35 +1090,12 @@ static const uint16_t propsTrie_index[21280]={ 5,5,5,5,5,5,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,5,5,5,5,5,5,5,0x7c5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,0x15,0x14,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0,0,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,0x19,0x1b,0,0,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,6,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x14,0x15,0x17,0,0,0,0,0,0,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,6,0x17,0x13,0x13,0x16, -0x16,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x14, -0x15,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x17,0x17,0x17,0,0x17,0x17,0x17,0x17, -0x13,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x17,0x18,0x13,0x18,0x18,0x18,0, -0x17,0x19,0x17,0x17,0,0,0,0,5,5,5,5,5,0,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0x10, -0,0,5,5,5,5,5,5,0,0,5,5,5,5,5,5, -0,0,5,5,5,5,5,5,0,0,5,5,5,0,0,0, -0x19,0x19,0x18,0x1a,0x1b,0x19,0x19,0,0x1b,0x18,0x18,0x18,0x18,0x1b,0x1b,0, -0,0,0,0,0,0,0,0,0,0x10,0x10,0x10,0x1b,0x1b,0,0, -0,0x17,0x17,0x17,0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x18,0x18,0x18,0x17, -0x1a,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,0x14,0x18,0x15,0x18,0x14, -0x15,0x17,0x14,0x15,0x17,0x17,5,5,5,5,5,5,5,5,5,5, -4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,0x15,0x14,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5, @@ -1146,26 +1110,7 @@ static const uint16_t propsTrie_index[21280]={ 0x17,0x17,0x17,0x17,0x13,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x17,0x18,0x13, 0x18,0x18,0x18,0,0x17,0x19,0x17,0x17,0,0,0,0,5,5,5,5, 5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -#if !U_PLATFORM_IS_DARWIN_BASED -5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5, -0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,0,5,5,0,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, -0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b, -0xa08b,0xa88b,0xb08b,0xb88b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x17,0x17,0x17,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b, -0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b, -0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0xcca,0x11ca,0x11ca,0x11ca,0x11ca,0x1e4a,0x880a,0x980a,0x980a,0x980a,0x980a, -0x980a,0x784a,0x984a,0x68a,0x11ca,0x344b,0x344b,0x388b,0x3ccb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x54b,0x34cb,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x34ca,0x344a,0x58a,0x68a, -0x11ca,0x980a,0x984a,0x988a,0x68a,0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x984a,0x68a,0x7ca,0x11ca,0x1e4a,0x980a, -0x784a,0x788a,0x988a,0x7ca,0x58a,0x58a,0x58a,0x5ca,0x5ca,0x5ca,0x5ca,0x68a,0x1b,0,0,0, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,0,0,0x10,0,0,5,5,5,5,5,5,0,0,5,5, 5,5,5,5,0,0,5,5,5,5,5,5,0,0,5,5, 5,0,0,0,0x19,0x19,0x18,0x1a,0x1b,0x19,0x19,0,0x1b,0x18,0x18,0x18, @@ -1176,7 +1121,12 @@ static const uint16_t propsTrie_index[21280]={ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0x14, 0x18,0x15,0x18,0x14,0x15,0x17,0x14,0x15,0x17,0x17,5,5,5,5,5,5, 5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,0x18,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +5,5,5,5,5,0,5,0,5,5,0,5,5,0,5,5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#if !U_PLATFORM_IS_DARWIN_BASED 5,5,5,5,5,5,4,4,5,5,5,5,5,5,5,5, 5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5, @@ -1194,167 +1144,81 @@ static const uint16_t propsTrie_index[21280]={ 0x34ca,0x344a,0x58a,0x68a,0x11ca,0x980a,0x984a,0x988a,0x68a,0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x984a,0x68a, 0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x788a,0x988a,0x7ca,0x58a,0x58a,0x58a,0x5ca,0x5ca,0x5ca,0x5ca,0x68a, 0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -#if !U_PLATFORM_IS_DARWIN_BASED -0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, -#endif /* ! U_PLATFORM_IS_DARWIN_BASED */ 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -#if !U_PLATFORM_IS_DARWIN_BASED -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,6,0x58b,0x5cb,0x60b, -0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b, -0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0,0,0,0,0x58b,0x68b,0x7cb,0x11cb, -0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,0x1bca,5,5, -5,5,5,5,5,5,0xb80a,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,6,6,6,6,6,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,0x17,5,5,5,5, -0,0,0,0,5,5,5,5,5,5,5,5,0x17,0x58a,0x5ca,0x7ca, -0xa4a,0x1e4a,0,0,0,0,0,0,0,0,0,0,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,0,0,0,0,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -0,0,0,0,2,2,2,2,2,2,2,2,5,5,5,5, -5,5,5,5,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, -0,0,0,0,0,0,0,0x17,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5, -5,0,0,0,5,0,0,5,5,5,5,5,5,5,0,0, -5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,0x17,0x58b,0x5cb,0x60b,0x7cb, -0xa4b,0x1e4b,0x784b,0x788b,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,0x1b,0x1b,0x58b,0x5cb,0x60b, -0x64b,0x68b,0x7cb,0xa4b,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x64b, -0x68b,0x7cb,0xa4b,0x1e4b,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,5,5,0,0,0,0,0,0x58b, -0x68b,0x7cb,0xa4b,0x1e4b,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0x58b,0x7cb,0xa4b,0x1e4b,0x5cb,0x60b, -0,0,0,0x17,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, -0,0,0,0x17,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b, -0xb88b,0x78cb,0x80cb,0x88cb,0x90cb,0x98cb,0xa0cb,0xa8cb,0xb0cb,0xb8cb,0x36cb,0x354b,0x34cb,0x348b,0x46cb,0x344b, -0x4ecb,0x388b,0x3ccb,0x454b,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, -0x5ecb,0x344b,5,5,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb, -0xf4b,0x11cb,0x144b,0x16cb,0,0,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x784b, -0x804b,0x884b,0x904b,0x984b,0x30b,0x34b,0x38b,0x3cb,0x7cb,0xa4b,0x1e4b,0x784b,0,0,0,0, -0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0, -0,0,0,0,5,6,6,6,0,6,6,0,0,0,0,0, -6,6,6,6,5,5,5,5,0,5,5,5,0,5,5,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0,0, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -#if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,0,0,0,0,6,6,6,0,0,0,0,6, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 6,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b, 0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0,0,0,0, 0x58b,0x68b,0x7cb,0x11cb,0,0,0,0,0,0,0,0,0,5,5,5, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -#if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,5,5,5,5,5,5,5,5,0x58b,0x11cb,0x17, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,0x1bca,5,5,5,5,5,5,5,5,0xb80a,0,0,0,0,0, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -#if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,5,5,5,5,5,5,5,5,0x58b,0x7cb,0xa4b, -5,5,5,5,5,6,6,0,0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0, -5,5,5,5,5,5,5,5,0x1b,5,5,5,5,5,5,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,6,6,6,6,6,0,0,0,0,0, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -#if !U_PLATFORM_IS_DARWIN_BASED -5,5,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0x17, 5,5,5,5,0,0,0,0,5,5,5,5,5,5,5,5, 0x17,0x58a,0x5ca,0x7ca,0xa4a,0x1e4a,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,5,5,2,2,2,2,2,2,2,0, +0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2, +0,0,0,0,0,5,6,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, +0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, -0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5, -#endif /* ! U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, -#if !U_PLATFORM_IS_DARWIN_BASED -0,0,0,0,0,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0, -0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, -0,0,0,0,0,0,0x58b,0x68b,0x7cb,0x11cb,0x1e4b,0x784b,0x30b,0x34b,0x38b,0x3cb, -0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b, -0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x344b,0x34cb,0x348b,0x388b,0,0x144b,0x16cb,0x194b,0x1bcb, -0x1e4b,0x784b,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,6,8,6,8,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,5,5,5,5,0x15,0x14,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0,0,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +0x19,0x1b,0,0,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,0x15,0x17,0,0, +0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,0x17,0x13,0x13,0x16,0x16,0x14,0x15,0x14,0x15,0x14,0x15,0x14, +0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x14,0x15,0x17,0x17,0x17,0x17,0x16,0x16,0x16, +0x17,0x17,0x17,0,0x17,0x17,0x17,0x17,0x13,0x14,0x15,0x14,0x15,0x14,0x15,0x17, +0x17,0x17,0x18,0x13,0x18,0x18,0x18,0,0x17,0x19,0x17,0x17,0,0,0,0, +5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,0,0x10,0,0,5,5,5,5,5,5, +0,0,5,5,5,5,5,5,0,0,5,5,5,5,5,5, +0,0,5,5,5,0,0,0,0x19,0x19,0x18,0x1a,0x1b,0x19,0x19,0, +0x1b,0x18,0x18,0x18,0x18,0x1b,0x1b,0,0,0,0,0,0,0,0,0, +0,0x10,0x10,0x10,0x1b,0x1b,0,0,0,0x17,0x17,0x17,0x19,0x17,0x17,0x17, +0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0x17,0x17,0x18,0x18,0x18,0x17,0x1a,2,2,2,2,2,2,2, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +#if !U_PLATFORM_IS_DARWIN_BASED 2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,0,0,0,0,2,2,2,2,2,2,2,2, 5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +2,2,2,0x14,0x18,0x15,0x18,0x14,0x15,0x17,0x14,0x15,0x17,0x17,5,5, +5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6, -6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0x30b,0x34b, -0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,6, -6,6,6,8,8,6,6,0x17,0x17,0x10,0x17,0x17,0x17,0x17,0,0, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0,0,0,0,0,0,0,0x17,0,0,0,0, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -#if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, -0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, -0,0,0,0,5,5,5,5,5,5,5,6,6,6,6,6, -8,6,6,6,6,6,6,6,6,0,0x49,0x89,0xc9,0x109,0x149,0x189, -0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5, -#endif /* ! U_PLATFORM_IS_DARWIN_BASED */ +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,5,5,5,5,4,4,5,5,5,5, +5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,5,5,6,0x17,0x17,5,0,0,0,0,0, -0,0,0,0,8,5,5,5,5,0x17,0x17,0x17,0x17,0x17,6,6, -6,0x17,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,0x17, -5,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,8,8,8,6,6,6,6,6,6, -6,6,6,8,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b, -0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -8,8,8,6,6,6,8,8,6,8,6,6,0x17,0x17,0x17,0x17, -0x17,0x17,6,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,5,0,5,5,5,5,0,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5, -5,5,5,5,5,5,5,5,5,0x17,0,0,0,0,0,0, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,0,5,5,0,0,0,5,0,0,5,5,5,5,5, 5,5,0,0,5,0,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0x17, @@ -1375,149 +1239,246 @@ static const uint16_t propsTrie_index[21280]={ 0,0,0,0,0x5ecb,0x344b,5,5,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b, 0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0,0,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b, 0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0x30b,0x34b,0x38b,0x3cb,0x7cb,0xa4b,0x1e4b,0x784b, -0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x344b,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, 0x17,0,0,0,0,0,0,0,5,6,6,6,0,6,6,0, 0,0,0,0,6,6,6,6,5,5,5,5,0,5,5,5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,0,5,5,0,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0xa04b, +0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0,0,0,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0x17,0,0,0,0,0x58b, +0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b, +0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0xcca,0x11ca,0x11ca, +0x11ca,0x11ca,0x1e4a,0x880a,0x980a,0x980a,0x980a,0x980a,0x980a,0x784a,0x984a,0x68a,0x11ca,0x344b,0x344b,0x388b, +0x3ccb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x54b,0x34cb, +0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0x34ca,0x344a,0x58a,0x68a,0x11ca,0x980a,0x984a,0x988a,0x68a,0x7ca,0x11ca,0x1e4a, +0x980a,0x784a,0x984a,0x68a,0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x788a,0x988a,0x7ca,0x58a,0x58a,0x58a,0x5ca, +0x5ca,0x5ca,0x5ca,0x68a,0x1b,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,6,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,6,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b, +0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b, +0,0,0,0,0x58b,0x68b,0x7cb,0x11cb,0,0,0,0,0,0,0,0, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0,0,0,0,6,6,6,0, +#if !U_PLATFORM_IS_DARWIN_BASED +5,5,5,5,5,5,5,5,5,5,0,0,6,6,6,0, 0,0,0,6,5,5,5,5,5,5,5,5,5,5,5,5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,0x1bca,5,5,5,5,5,5,5,5,0xb80a,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -8,8,8,6,6,6,6,6,6,6,6,0,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, -5,5,8,8,0,0,6,6,6,6,6,6,6,0,0,0, -6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0, -6,6,8,8,0,5,5,5,5,5,5,5,5,0,0,5, -5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5, -6,8,8,8,8,0,0,8,8,0,0,8,8,8,0,0, -5,0,0,0,0,0,0,8,0,0,0,0,0,5,5,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,0x58b,0x11cb,0x17,5,5,5,5,5,5,5,5,5,5,5,5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,0,0x17,5,5,5,5,0,0,0,0,5,5,5,5, +5,5,5,5,0x17,0x58a,0x5ca,0x7ca,0xa4a,0x1e4a,0,0,0,0,0,0, +0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,5,5,5,5,5,5,5,5,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,8,8,8,6,6,6,6,6,6,6,6, -8,8,6,6,6,8,6,5,5,5,5,0x17,0x17,0x17,0x17,0x17, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x17,0,0x17,0,0, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,0x58b,0x7cb,0xa4b,5,5,5,5,5,6,6,0,0,0,0,0x58b, 0x68b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0, 0,0,0,0,5,5,5,5,5,5,5,5,0x1b,5,5,5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0,0,0,0,2,2,2,2, +2,2,2,2,5,5,5,5,5,5,5,5,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0x17, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -8,8,8,6,6,6,6,6,6,8,6,8,8,8,8,6, -6,8,6,6,5,5,0x17,5,0,0,0,0,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8, -8,8,6,6,6,6,0,0,8,8,8,8,6,6,8,6, -6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5,6,6,0,0, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,0,5,5,0,0,0,5,0,0,5, +5,5,5,5,5,5,0,0,5,0,5,5,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -8,8,8,6,6,6,6,6,6,6,6,8,8,6,8,6, -6,0x17,0x17,0x17,5,0,0,0,0,0,0,0,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -5,5,5,5,5,5,5,5,5,5,5,6,8,6,8,8, -6,6,6,6,6,6,8,6,0,0,0,0,0,0,0,0, -8,8,6,6,6,6,8,6,6,6,6,6,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b,0x17,0x17,0x17,0x1b, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,0,0,6,6,6, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b, -0x16cb,0x194b,0x1bcb,0,0,0,0,0,0,0,0,0,0,0,0,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,6,6,6,6,6,6,8,5,6,6,6,6,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,6,0,0,0,0,0,0,0,0, -5,6,6,6,6,6,6,8,8,6,6,6,5,5,5,5, -5,6,6,6,6,6,6,8,8,6,6,5,5,5,5,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,0,0x17,0x58b,0x5cb,0x60b,0x7cb,0xa4b,0x1e4b,0x784b,0x788b,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -5,5,5,5,0,0,5,5,5,5,6,6,6,6,6,6, -6,6,6,6,6,6,6,8,6,6,0x17,0x17,0x17,0,0x17,0x17, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,0,0,0,0, +0,0,0,0x58b,0x5cb,0x60b,0x64b,0x64b,0x68b,0x7cb,0xa4b,0x1e4b,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +5,5,0,0,0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -#if U_PLATFORM_IS_DARWIN_BASED +#if !U_PLATFORM_IS_DARWIN_BASED 5,5,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0,0,0, 0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -#endif /* U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0, -#if !U_PLATFORM_IS_DARWIN_BASED -5,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb, -0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0,0,0, -0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,8,6,6,6,6, -6,6,6,0,6,6,6,6,6,6,8,6,6,6,6,6, -6,6,6,6,0,8,6,6,6,6,6,6,6,8,6,6, -8,6,6,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0,0,6,6, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6, -0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0,0,5,5,5,5,5,5,5,0, -5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,0, -0,0,6,0,6,6,0,6,0x34ca,0x354a,0x34ca,0x34ca,0x344a,0x348a,0x388a,0xf4a, -0x11ca,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0,0x17,0x17,0x17,0x17,0x17,0,0,0, -0,0,0,0,0,0,0,0,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a, -0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a, -0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x5ca,0x60a,0x60a,0x64a,0x68a, -0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0xc08a,0xc18a,0x58a,0x5ca,0x60a,0x60a, -0x64a,0x68a,0x60a,0x60a,0x64a,0x64a,0x64a,0x64a,0x6ca,0x70a,0x70a,0x70a,0x74a,0x74a,0x78a,0x78a, -0x78a,0x78a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x58a,0x5ca,0x60a,0x64a,0x64a,0x68a,0x68a,0x5ca,0x60a, -0x58a,0x5ca,0x348a,0x388a,0x454a,0x348a,0x388a,0x35ca,5,5,5,5,0,0,0,0, -#endif /* ! U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -#if U_PLATFORM_IS_DARWIN_BASED 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,0,0,0,0,0,0,0,0x58b,0x68b,0x7cb,0x11cb,0x1e4b,0x784b, +5,5,5,5,6,6,6,6,0,0,0,0,0,0,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, 0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb, 0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x344b,0x34cb,0x348b,0x388b,0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,0x58b,0x7cb,0xa4b,0x1e4b,0x5cb,0x60b,0,0,0,0x17,5,5,5,5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#if !U_PLATFORM_IS_DARWIN_BASED +5,5,5,5,5,5,5,5,5,5,5,5,5,0x58b,0x5cb,0x60b, +0x64b,0x68b,0x7cb,0xa4b,0xccb,0x1e4b,0x344b,5,0,0,0,0,0,0,0,0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,0,0,0,0,0,0x17,0xa04b,0xa84b,0xb04b,0xb84b, +0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x88cb,0x90cb,0x98cb,0xa0cb,0xa8cb, +0xb0cb,0xb8cb,0x36cb,0x354b,0x34cb,0x348b,0x46cb,0x344b,0x4ecb,0x388b,0x3ccb,0x454b,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0,0,0,0,0x5ecb,0x344b,5,5,0x58b,0x5cb,0x60b,0x64b, +0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0,0,0x1e4b,0x800b, +0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0x30b,0x34b,0x38b,0x3cb, +0x7cb,0xa4b,0x1e4b,0x784b,0x344b,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,5,6,6,6, +0,6,6,0,0,0,0,0,6,6,6,6,5,5,5,5, +0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, +6,6,6,0,0,0,0,6,5,5,5,5,5,5,5,5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#if !U_PLATFORM_IS_DARWIN_BASED +5,5,6,6,6,6,6,6,6,6,6,6,6,0x58b,0x7cb,0xa4b, +0x1e4b,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0x144b,0x16cb,0x194b,0x1bcb, +0x1e4b,0x784b,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,6,8,6,8,5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,0x58b,0x11cb,0x17,5,5,5,5,5,5,5,5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#if !U_PLATFORM_IS_DARWIN_BASED +5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6, +6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0x30b,0x34b, +0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,6, +6,6,6,8,8,6,6,0x17,0x17,0x10,0x17,0x17,0x17,0x17,0,0, +0,0,0,0,0,0,0,0,0,0x10,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,0x58b,0x7cb,0xa4b,5,5,5,5,5,6,6,0, +0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +0x1b,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0,0,0,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0,0,0x58b,0x5cb,0x60b,0x64b, +0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b, +0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,0,0,0,0,0,0x17,0x17,0x17, +0x17,0,0,0,0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b, +0x64b,0x7cb,0xa4b,0x1e4b,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,0,0,0,0,0,0,0,0x58b,0x68b, +0x7cb,0x11cb,0x1e4b,0x784b,5,5,5,5,6,6,6,6,0,0,0,0, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +#if !U_PLATFORM_IS_DARWIN_BASED +0,0,0,0,5,5,5,5,5,5,5,6,6,6,6,6, +8,6,6,6,6,6,6,6,6,0,0x49,0x89,0xc9,0x109,0x149,0x189, +0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,5,8,8,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0,0,0,0,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb, +0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x344b, +0x34cb,0x348b,0x388b,0,5,5,5,5,5,5,5,5,5,5,5,5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#if !U_PLATFORM_IS_DARWIN_BASED +5,5,5,5,5,5,5,6,0x17,0x17,5,0,0,0,0,0, +0,0,0,0,8,5,5,5,5,0x17,0x17,0x17,0x17,6,6,6, +6,0x17,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,0x17, +5,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,8,8,8,6,6,6,6,6,6, +6,6,6,8,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b, +0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0,0,0,0,0,0,0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,0xccb,0x1e4b,0x344b,5,0,0,0,0, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +#if !U_PLATFORM_IS_DARWIN_BASED +8,8,8,6,6,6,8,8,6,8,6,6,0x17,0x17,0x17,0x17, +0x17,0x17,6,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0,5,0,5,5,5,5,0,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5, +5,5,5,5,5,5,5,5,5,0x17,0,0,0,0,0,0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6, +6,0x58b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0, 0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6, 8,6,8,5,5,5,5,5,5,5,5,5,5,5,5,5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#if !U_PLATFORM_IS_DARWIN_BASED +8,8,8,6,6,6,6,6,6,6,6,0,0,0,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, +5,5,8,8,0,0,6,6,6,6,6,6,6,0,0,0, +6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0, +6,6,8,8,0,5,5,5,5,5,5,5,5,0,0,5, +5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,5,5,5,5,5,5,5,0,5,5,0,5,5,5, +5,5,0,6,6,5,8,8,6,8,8,8,8,0,0,8, +8,0,0,8,8,8,0,0,5,0,0,0,0,0,0,8, +0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,8,8,8, +6,6,6,6,6,6,6,6,8,8,6,6,6,8,6,5, +5,5,5,0x17,0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0x17,0,0x17,6,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6, +6,8,6,8,8,8,8,6,6,8,6,6,5,5,0x17,5, +0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,8,8,8,6,6,6,6,0,0, +8,8,8,8,6,6,8,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ 6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0, 0,0,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 8,8,8,6,6,6,6,8,8,6,6,0x17,0x17,0x10,0x17,0x17, -0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,0x10,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, 0x249,0x289,0,0,0,0,0,0,5,5,5,5,5,5,5,6, 6,6,6,6,8,6,6,6,6,6,6,6,6,0,0x49,0x89, -0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0,0,0,0, -#endif /* U_PLATFORM_IS_DARWIN_BASED */ +0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,5,8,8,0, 0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -#if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,6,0x17,0x17,5,0, 0,0,0,0,0,0,0,0,8,5,5,5,5,0x17,0x17,0x17, -0x17,0x17,6,6,6,0x17,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x17,6,6,6,6,0x17,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, 0x249,0x289,5,0x17,5,0x17,0x17,0x17,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,8,8,8,6,6, 6,6,6,6,6,6,6,8,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b, @@ -1536,454 +1497,534 @@ static const uint16_t propsTrie_index[21280]={ 6,0,0,0,6,6,6,6,6,0,0,0,0,0,0,0, 0,0,0,0,6,6,8,8,0,5,5,5,5,5,5,5, 5,0,0,5,5,0,0,5,5,5,5,5,5,5,5,5, -5,5,5,5,6,8,8,8,8,0,0,8,8,0,0,8, -8,8,0,0,5,0,0,0,0,0,0,8,0,0,0,0, -0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,8,8,8,6,6,6,6, -6,6,6,6,8,8,6,6,6,8,6,5,5,5,5,0x17, -0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x17, -0,0x17,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,8,8,8,6,6,6,6,6,6,8,6,8, -8,8,8,6,6,8,6,6,5,5,0x17,5,0,0,0,0, -0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,8,8,8,6,6,6,6,0,0,8,8,8,8, -6,6,8,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5, -6,6,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,8,8,8,6,6,6,6,6,6,6,6,8, -8,6,8,6,6,0x17,0x17,0x17,5,0,0,0,0,0,0,0, -0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, -0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +5,5,5,5,5,0,5,5,5,5,5,5,5,0,5,5, +0,5,5,5,5,5,0,6,6,5,8,8,6,8,8,8, +8,0,0,8,8,0,0,8,8,8,0,0,5,0,0,0, +0,0,0,8,0,0,0,0,0,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,8,8,8,6,6,6,6,6,6,6,6,8,8,6,6, +6,8,6,5,5,5,5,0x17,0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x17,0,0x17,6,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,6, +6,6,6,6,6,8,6,8,8,8,8,6,6,8,6,6, +5,5,0x17,5,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,8,8,8,6,6, +6,6,0,0,8,8,8,8,6,6,8,6,6,0x17,0x17,0x17, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -#if U_PLATFORM_IS_DARWIN_BASED -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,6, -8,6,8,8,6,6,6,6,6,6,8,6,0,0,0,0, -0,0,0,0,8,8,6,6,6,6,8,6,6,6,6,6, -0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b, -0x17,0x17,0x17,0x1b,5,5,5,5,5,5,5,5,5,5,5,5, -#endif /* U_PLATFORM_IS_DARWIN_BASED */ -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, #if !U_PLATFORM_IS_DARWIN_BASED -6,6,6,6,6,0x17,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,6,6,0,0,5,5,5,5,5,5,5,5, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0,6,6,6,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b, -0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0,0,0,0,0,0,0,0, -0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,6,6,6,6,6,6,8,5,6, -6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,6,0,0,0,0, -0,0,0,0,5,6,6,6,6,6,6,8,8,6,6,6, -5,5,5,5,5,6,6,6,6,6,6,8,8,6,6,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,0,0,5,5,5,5,6,6, -6,6,6,6,6,6,6,6,6,6,6,8,6,6,0x17,0x17, -0x17,0,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, -0,0,0,0,5,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0, -0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x58b,0x5cb, -0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb, -0x1e4b,0,0,0,0x17,0x17,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8, -6,6,6,6,6,6,6,0,6,6,6,6,6,6,8,6, -6,6,6,6,6,6,6,6,0,8,6,6,6,6,6,6, -6,8,6,6,8,6,6,0,0,0,0,0,0,0,0,0, +0x17,0x17,0x17,0x17,5,5,5,5,6,6,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,6, +6,6,6,6,6,6,6,8,8,6,8,6,6,0x17,0x17,0x17, +5,0,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,6,8,6,8,8,6,6,6,6, +6,6,8,6,0,0,0,0,0,0,0,0,8,8,6,6, +6,6,8,6,6,6,6,6,0,0,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b,0x17,0x17,0x17,0x1b,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -#if U_PLATFORM_IS_DARWIN_BASED -0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,5,6,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,5, -5,5,5,0,5,5,0,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6, -6,6,6,0,0,0,6,0,6,6,0,6,0x34ca,0x354a,0x34ca,0x34ca, -0x344a,0x348a,0x388a,0xf4a,0x11ca,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0,0x17,0x17,0x17,0x17, -0x17,0,0,0,0,0,0,0,0,0,0,0,0x5ca,0x60a,0x64a,0x68a, -0x6ca,0x70a,0x74a,0x78a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x64a,0x68a,0x6ca,0x70a,0x74a, -0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x5ca, -0x60a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0xc08a,0xc18a, -0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x60a,0x60a,0x64a,0x64a,0x64a,0x64a,0x6ca,0x70a,0x70a,0x70a, -0x74a,0x74a,0x78a,0x78a,0x78a,0x78a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x58a,0x5ca,0x60a,0x64a,0x64a, -0x68a,0x68a,0x5ca,0x60a,0x58a,0x5ca,0x348a,0x388a,0x454a,0x348a,0x388a,0x35ca,5,5,5,5, -#endif /* U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b, -4,4,4,4,0x17,0x1b,0,0,0,0,0,0,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x7cb,0x1e4b,0x788b,0x790b,0x798b, -0x7a0b,0x7a8b,0,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0,0,0,0,0,5,5,5, -5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, -5,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, -8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, -8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,6,6,6,6,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0, +6,6,6,8,8,6,8,6,6,0x17,0x17,0x17,5,0,0,0, +0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0,0,0,0,0,0,0,0,0,0,0,0,0, #else /* !U_PLATFORM_IS_DARWIN_BASED */ +6,6,6,6,8,6,6,0x17,0,0,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0, +0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6, +6,6,6,6,6,8,5,6,6,6,6,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,6,0,0,0,0,0,0,0,0,5,6,6,6, +6,6,6,8,8,6,6,6,5,5,5,5,5,6,6,6, +6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0x17,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0, +0,0,5,5,5,5,6,6,6,6,6,6,6,6,6,6, +6,6,6,8,6,6,0x17,0x17,0x17,5,0x17,0x17,5,0x17,0x17,0x17, +0x17,0x17,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb, +0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0,0,0,0x17,0x17,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,8,6,6,6,6,6,6,6,0, +6,6,6,6,6,6,8,6,6,6,6,6,6,6,6,6, +0,8,6,6,6,6,6,6,6,8,6,6,8,6,6,0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +#if !U_PLATFORM_IS_DARWIN_BASED +5,5,5,6,8,6,8,8,6,6,6,6,6,6,8,6, +0,0,0,0,0,0,0,0,8,8,6,6,6,6,8,6, +6,6,6,6,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0x7cb,0xa4b,0x17,0x17,0x17,0x1b,5,5,5,5,5,5,5,5, +5,5,5,5,8,8,8,6,6,6,6,6,6,6,6,6, +8,6,6,0x17,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0,0,0,0, +0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6, +6,8,5,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,6, +0,0,0,0,0,0,0,0,5,6,6,6,6,6,6,8, +8,6,6,6,5,5,5,5,5,6,6,6,6,6,6,6, +6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0x17,0x17,0x17,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -#if U_PLATFORM_IS_DARWIN_BASED +0,0,0,0,0,0,0,0,5,5,5,5,0,0,5,5, +5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,8, +6,6,0x17,0x17,0x17,5,0x17,0x17,5,0x17,0x17,0x17,0x17,0x17,0,0, +0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb, +0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0,0,0,0x17,0x17,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,5,5,0,0,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,5,6,0,0,0,0, 0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, -0,0,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,0, -#endif /* U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +0,0,0,0,5,5,5,5,5,5,5,0,5,5,0,5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,8,6,6,6,6,6,6,6,0,6,6,6,6, +6,6,8,6,6,6,6,6,6,6,6,6,0,8,6,6, +6,6,6,6,6,8,6,6,8,6,6,0,0,0,0,0, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -5,5,0,0,6,6,6,6,6,0x17,0,0,0,0,0,0, +5,5,5,5,5,6,6,6,6,6,6,0,0,0,6,0, +6,6,0,6,5,5,5,5,5,5,5,5,5,5,8,8, +8,8,8,0,6,6,0,8,8,6,8,6,5,0,0,0, +0,0,0,0,5,5,5,5,5,5,0,5,5,0,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,6,6,8,8,0x17,0x17,0,0,0, +0,0,0,0,0x34ca,0x354a,0x34ca,0x34ca,0x344a,0x348a,0x388a,0xf4a,0x11ca,0x64a,0x68a,0x6ca, +0x70a,0x74a,0x78a,0,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0, +0,0,0,0,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x60a,0x64a,0x68a,0x6ca, +0x70a,0x74a,0x78a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a, +0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a, +0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0xc08a,0xc18a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x60a,0x60a, +0x64a,0x64a,0x64a,0x64a,0x6ca,0x70a,0x70a,0x70a,0x74a,0x74a,0x78a,0x78a,0x78a,0x78a,0x5ca,0x60a, +0x64a,0x68a,0x6ca,0x58a,0x5ca,0x60a,0x64a,0x64a,0x68a,0x68a,0x5ca,0x60a,0x58a,0x5ca,0x348a,0x388a, +0x454a,0x348a,0x388a,0x35ca,5,5,5,5,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,0, +5,5,5,5,0,0,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,5,6,0,0,0,0,0,0,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, +5,5,5,5,5,5,5,0,5,5,0,5,5,5,5,5, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0,0,6,6,6,6, +6,0x17,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6, +6,6,6,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,4,4,4,4, +0x17,0x1b,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x7cb,0x1e4b,0x788b,0x790b,0x798b,0x7a0b,0x7a8b,0,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,0,0,0x1b,6,6,0x17,0x10,0x10,0x10,0x10,0,0,0,0, +5,6,6,6,6,6,6,0,0,0,6,0,6,6,0,6, +5,5,5,5,5,5,5,5,5,5,8,8,8,8,8,0, +6,6,0,8,8,6,8,6,5,0,0,0,0,0,0,0, +5,5,5,5,5,5,0,5,5,0,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,6,6,8,8,0x17,0x17,0,0,0,0,0,0,0, +0x34ca,0x354a,0x34ca,0x34ca,0x344a,0x348a,0x388a,0xf4a,0x11ca,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0, +0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0, +0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x64a, +0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca, +0x60a,0x64a,0x68a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x60a, +0x64a,0x68a,0xc08a,0xc18a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x60a,0x60a,0x64a,0x64a,0x64a,0x64a, +0x6ca,0x70a,0x70a,0x70a,0x74a,0x74a,0x78a,0x78a,0x78a,0x78a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x58a, +0x5ca,0x60a,0x64a,0x64a,0x68a,0x68a,0x5ca,0x60a,0x58a,0x5ca,0x348a,0x388a,0x454a,0x348a,0x388a,0x35ca, +5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, -0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,8,8,6,6,6,0x1b,0x1b, -0x1b,8,8,8,8,8,8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6, -6,6,6,6,6,6,6,0x1b,0x1b,6,6,6,6,6,6,6, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0,0,0,0x17,0x17,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,6,6,6,6,6,0x17,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,0x17, +0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,4,4,4,4,0x17,0x1b,0,0, +0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0x7cb,0x1e4b,0x788b,0x790b,0x798b,0x7a0b,0x7a8b,0,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +0,0,0,0,0,5,5,5,0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b, +0x74b,0x78b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0x58b,0x5cb,0x60b,0x17, +0x17,0x17,0x17,0,0,0,0,0,5,5,5,5,5,0,0,0, +0,0,0,0,0,0,0,0,5,8,8,8,8,8,8,8, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -5,5,5,5,6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17, -0x1b,0x1b,0x1b,0x1b,4,4,4,4,0x17,0x1b,0,0,0,0,0,0, -0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x7cb, -0x1e4b,0x788b,0x790b,0x798b,0x7a0b,0x7a8b,0,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, -0,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0, -0,0,0,0,5,8,8,8,8,8,8,8,8,8,8,8, +5,5,5,5,0,0,0,0,0,5,5,5,0x54b,0x58b,0x5cb,0x60b, +0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b, +0x58b,0x5cb,0x60b,0x17,0x17,0x17,0x17,0,0,0,0,0,5,5,5,5, +5,0,0,0,0,0,0,0,0,0,0,0,5,8,8,8, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, -8,8,8,8,8,8,8,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,6,6,6,6,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0, +#if !U_PLATFORM_IS_DARWIN_BASED +8,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,4, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6, +6,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0,0,0,0,0x1b,0x1b,6,6,6,0x1b,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,0,0,0x1b,6,6,0x17, +0x10,0x10,0x10,0x10,0,0,0,0,0,0,0,0,0,0,0,0, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,0,0,0x1b,6,6,0x17,0x10,0x10,0x10,0x10, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,0,0, +0x1b,6,6,0x17,0x10,0x10,0x10,0x10,0,0,0,0,0,0,0,0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb, -0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189, -0x1c9,0x209,0x249,0x289,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,2,2,2,2,2,2,2,0,2,2,2,2,2,2, -2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,1,0,1,1,0,0,1,0, -0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1, -1,1,2,2,2,2,0,2,0,2,2,2,2,2,2,2, -0,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2, -1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1, -1,0,1,1,1,1,1,1,1,0,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,1,1,0,1,1,1,1,0,1,1,1,1, -1,0,1,0,0,0,1,1,1,1,1,1,1,0,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,8,8,6, -6,6,0x1b,0x1b,0x1b,8,8,8,8,8,8,0x10,0x10,0x10,0x10,0x10, -0x10,0x10,0x10,6,6,6,6,6,6,6,6,0x1b,0x1b,6,6,6, -6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,0x1b,0x1b, +0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x1b,0x1b,6,6,6,0x1b,0,0, +#if !U_PLATFORM_IS_DARWIN_BASED +0x1b,8,8,6,6,6,0x1b,0x1b,0x1b,8,8,8,8,8,8,0x10, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,6,6,6,6,6,6,6,6,0x1b, +0x1b,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6, +6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,6,6, +6,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x54b,0x58b,0x5cb,0x60b, +0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b, +0,0,0,0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b, +0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x58b,0x5cb, +0x60b,0x64b,0x68b,0x58b,0x68b,0,0,0,0,0,0,0,0x249,0x289,0x49,0x89, +0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,1,1,1,1, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1b,0x1b,0x1b,0x1b,0x1b,8,8,6,6,6,0x1b,0x1b,0x1b,8,8,8, +8,8,8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6,6,6,6,6, +6,6,6,0x1b,0x1b,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b, -0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189, -0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89, -0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,2,2,2,2,2,2,2,0,2,2, -2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, +0x1b,0x1b,6,6,6,0x1b,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b, +0x94b,0x98b,0x9cb,0xa0b,0,0,0,0,0,0,0,0,0,0,0,0, +0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb, +0x194b,0x1bcb,0x58b,0x5cb,0x60b,0x64b,0x68b,0x58b,0x68b,0,0,0,0,0,0,0, +0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, #if !U_PLATFORM_IS_DARWIN_BASED +1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2, -2,2,0,0,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,0x18,2,2, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -2,2,2,2,2,2,2,2,2,2,2,2,1,0,1,1, -0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1, -1,1,1,1,1,1,2,2,2,2,0,2,0,2,2,2, -2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2, +#endif /* ! U_PLATFORM_IS_DARWIN_BASED */ +1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2, +#if !U_PLATFORM_IS_DARWIN_BASED +2,0,2,2,2,2,2,2,2,2,2,2,1,1,1,1, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, +2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -2,2,2,2,1,1,0,1,1,1,1,0,0,1,1,1, -1,1,1,1,1,0,1,1,1,1,1,1,1,0,2,2, +#if !U_PLATFORM_IS_DARWIN_BASED +1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, #if !U_PLATFORM_IS_DARWIN_BASED -2,2,2,2,2,2,2,0x18,2,2,2,2,2,2,1,1, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -2,2,2,2,2,2,2,2,1,1,0,1,1,1,1,0, -1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1, +1,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1, +1,0,1,1,1,1,1,1,1,1,2,2,2,2,0,2, +0,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2, +2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,2,2,2,2,1,1,0,1,1,1,1,0, +0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, 1,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,1, +1,1,1,0,1,1,1,1,1,0,1,0,0,0,1,1, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +2,2,2,2,1,0,1,1,0,0,1,0,0,1,1,0, +0,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2, +2,2,0,2,0,2,2,2,2,2,2,2,0,2,2,2, +2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,2,2,2,2,1,1,0,1, +1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0,2,2,2,2,2,2,2,2,2,2, #if !U_PLATFORM_IS_DARWIN_BASED -1,1,1,1,1,1,1,0x18,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,0x18,2,2, 2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,2,2,2,0x18,2,2,2,2,2,2,1,2, -0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,6, -6,6,6,6,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -6,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,0, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,0,0,6,6,6,6,6,6,6,0,6,6,0,6,6, -6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,0,0,0x58b, -0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,6,6,6,6,6,6,6,0, -0,0,0,0,0,0,0,0,2,2,2,2,6,6,6,6, -6,6,6,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0x17,0x17,1,1,2,2,2,2,2,2, +1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2, +#endif /* ! U_PLATFORM_IS_DARWIN_BASED */ +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +#if !U_PLATFORM_IS_DARWIN_BASED +2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2, +1,1,0,1,1,1,1,0,1,1,1,1,1,0,1,0, +0,0,1,1,1,1,1,1,1,0,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,2,2,2,2,2,2,0,0, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +#if !U_PLATFORM_IS_DARWIN_BASED +1,1,1,1,1,0x18,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0x18, +2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x18, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +1,1,1,1,1,1,1,1,1,0x18,2,2,2,2,2,2, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, #if !U_PLATFORM_IS_DARWIN_BASED -2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x18,0x18,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,5,5,0,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0,5,5,0,5,0,0,5, -0,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5, -0,5,0,5,0,0,0,0,0,0,5,0,0,0,0,5, -0,5,0,5,0,5,5,5,0,5,5,0,5,0,0,5, -0,5,0,5,0,5,0,5,0,5,5,0,5,0,0,5, -5,5,5,0,5,5,5,5,5,5,5,0,5,5,5,5, -0,5,5,5,5,0,5,0,5,5,5,5,5,5,5,5, -5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0,0,0,0,0,5,5,5,0,5,5,5, -5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x2cb,0x30b,0x34b, -0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x54b,0x54b,0,0,0,0x1b,0x1b,0x1b,0x1b, +2,2,2,2,2,0x18,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,0x18, +2,2,2,2,2,2,1,2,0,0,0x49,0x89,0xc9,0x109,0x149,0x189, +0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6, #else /* !U_PLATFORM_IS_DARWIN_BASED */ +2,2,2,0x18,2,2,2,2,2,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -2,2,2,2,2,2,0,0,1,1,1,1,1,1,1,1, +1,1,1,0x18,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,0x18,2,2,2,2,2,2, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,0x18,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,0x18,2,2,2,2, -2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,0x18,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,0x18,2,2,2,2,2,2,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,2,2,2,0x18,2,2,2,2, -2,2,1,2,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0,6,6,6,6,6,6,6, -6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0x1b, -0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6, -6,6,6,0,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,0,0,6,6,6,6,6,6,6,0,6, -6,0,6,6,6,6,6,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,6,6,6,6, -6,6,6,0,0,0,0,0,0,0,0,0,2,2,2,2, -6,6,6,6,6,6,6,0,0,0,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17,1,1,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x18,0x18,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,0, -5,0,0,5,0,5,5,5,5,5,5,5,5,5,5,0, -5,5,5,5,0,5,0,5,0,0,0,0,0,0,5,0, -0,0,0,5,0,5,0,5,0,5,5,5,0,5,5,0, -5,0,0,5,0,5,0,5,0,5,0,5,0,5,5,0, -5,0,0,5,5,5,5,0,5,5,5,5,5,5,5,0, -5,5,5,5,0,5,5,5,5,0,5,0,5,5,5,5, -5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0,0,0,0,0,5,5,5, -0,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0,0,0,0,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b, +2,2,2,0x18,2,2,2,2,2,2,1,2,0,0,0x49,0x89, +0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, -#if U_PLATFORM_IS_DARWIN_BASED -0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x2cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x54b,0x54b,0,0,0, -#endif /* U_PLATFORM_IS_DARWIN_BASED */ -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, #if !U_PLATFORM_IS_DARWIN_BASED -0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +6,6,6,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6, +6,6,6,6,6,6,6,0,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,6,6,6,6,6, +6,6,0,6,6,0,6,6,6,6,6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b, +6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0, +2,2,2,2,6,6,6,6,6,6,6,0,0,0,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17, +1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x17, +0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,6,6,6,6,6,6,6,6,0,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,6, +6,6,6,6,6,6,0,6,6,0,6,6,6,6,6,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b, +0x6cb,0x70b,0x74b,0x78b,6,6,6,6,6,6,6,0,0,0,0,0, +0,0,0,0,2,2,2,2,6,6,6,6,6,6,6,0, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,0,0x17,0x17,1,1,2,2,2,2,2,2,2,2,2,2, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, #if !U_PLATFORM_IS_DARWIN_BASED -0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b, +0x78cb,0x794b,0x814b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x1b,0x34cb,0x344b,0x3ccb, +0x19,0x58b,0x5cb,0x788b,0x78cb,0,0,0,0,0,0,0,0,0,0,0, +0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b, +0x984b,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x18,0x18,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5, #else /* !U_PLATFORM_IS_DARWIN_BASED */ +2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b, +0xccb,0xf4b,0x11cb,0x144b,0x78cb,0x794b,0x814b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b, +0x1b,0x34cb,0x344b,0x3ccb,0x19,0x58b,0x5cb,0x788b,0x78cb,0,0,0,0,0,0,0, +0,0,0,0,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b, +0x784b,0x804b,0x884b,0x904b,0x984b,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b, +0xb08b,0xb88b,0x78cb,0x80cb,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x18,0x18,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,0,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0,5,5,0,5,0,0,5,0,5,5,5, +5,5,5,5,5,5,5,0,5,5,5,5,0,5,0,5, +0,0,0,0,0,0,5,0,0,0,0,5,0,5,0,5, +0,5,5,5,0,5,5,0,5,0,0,5,0,5,0,5, +0,5,0,5,0,5,5,0,5,0,0,5,5,5,5,0, +5,5,5,5,5,5,5,0,5,5,5,5,0,5,5,5, +5,0,5,0,5,5,5,5,5,5,5,5,5,5,0,5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +#if !U_PLATFORM_IS_DARWIN_BASED +0,5,5,0,5,0,0,5,0,5,5,5,5,5,5,5, +5,5,5,0,5,5,5,5,0,5,0,5,0,0,0,0, +0,0,5,0,0,0,0,5,0,5,0,5,0,5,5,5, +0,5,5,0,5,0,0,5,0,5,0,5,0,5,0,5, +0,5,5,0,5,0,0,5,5,5,5,0,5,5,5,5, +5,5,5,0,5,5,5,5,0,5,5,5,5,0,5,0, +5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, +0,5,5,5,0,5,5,5,5,5,0,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x2cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x54b, +0x54b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0,0,0,0,0,5,5,5,0,5,5,5,5,5,0,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +#if U_PLATFORM_IS_DARWIN_BASED +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b, +0x48b,0x4cb,0x50b,0x54b,0x54b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b, +#endif /* U_PLATFORM_IS_DARWIN_BASED */ 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, #if !U_PLATFORM_IS_DARWIN_BASED -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0, -0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, 0,0,0,0,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0,0,0,0,0,0,0,0x1b,0x1b,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a, 0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0, -#if U_PLATFORM_IS_DARWIN_BASED 0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, +0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0, +0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, +#if !U_PLATFORM_IS_DARWIN_BASED 0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, 0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0, 0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, 0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0, +0,0,0,0,5,0x705,5,5,5,5,5,5,5,5,5,5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -#endif /* U_PLATFORM_IS_DARWIN_BASED */ -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, -#if !U_PLATFORM_IS_DARWIN_BASED -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, +0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0, +0x1b,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -#if !U_PLATFORM_IS_DARWIN_BASED -0,0,0,0,0,0,0,0,0x1b,0,0,0,0,0,0,0, +0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,0x705,5,5,5,5,5,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0x1b,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,0x705,5,5, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0, +0,0,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0,0,0,0,0,0,5,0x705,5,5,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,5,5,5,0x645,5,5,5,5,5,5,5, +5,5,5,5,0x645,5,5,5,5,5,5,5,5,5,5,5, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -5,5,5,5,5,5,5,5,5,5,5,5,0x645,5,5,5, +5,5,5,5,5,5,5,5,0x645,5,5,5,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,5,0x645,5,5,5,5,5,5,5,5,5, +5,5,0x645,5,5,5,5,5,5,5,5,5,5,5,5,5, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -5,5,5,5,5,5,5,5,5,5,0x645,5,5,5,5,5, +5,5,5,5,5,5,0x645,5,5,5,5,5,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,0x685,5,5,5,5,5,5,5,5,5,5, +5,0x685,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -5,5,5,5,5,5,5,5,5,0x685,5,5,5,5,5,5, +5,5,5,5,5,0x685,5,5,5,5,5,5,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED +5,5,5,0xcc5,5,5,5,5,5,5,5,5,0xf45,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0xf45,5,5,5, +5,5,5,5,5,5,5,5,5,5,0x6c5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x605,5,5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,0xcc5,5,5,5,5,5,5,5,5, 0xf45,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 0xf45,5,5,5,5,5,5,5,5,5,5,5,5,5,0x6c5,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -5,5,5,5,5,5,5,5,5,5,5,0xcc5,5,5,5,5, -5,5,5,5,0xf45,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0xf45,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x6c5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x605,5,5,5,5,5,5,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,5,5,5,5,5,5,5,5,0x605,5,5, +5,5,5,5,5,5,5,5,5,0x605,5,5,5,5,5,5, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -5,5,5,5,5,5,5,5,5,5,5,5,0x605,5,5,5, +5,0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x605,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED -5,5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,5, +5,5,5,5,0x605,5,5,5,5,5,5,5,5,5,5,5, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -5,5,5,5,5,5,5,5,5,5,5,0x605,5,5,5,5, -5,5,5,5,5,5,5,5,5,0x645,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, #if !U_PLATFORM_IS_DARWIN_BASED +5,5,5,0x605,5,5,5,5,5,5,5,5,5,5,5,5, +5,0x645,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,5,5, 5,5,5,5,5,0x645,5,5,5,5,5,5,5,5,5,5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -5,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, -#if !U_PLATFORM_IS_DARWIN_BASED -0,0,0,0,0,0,0,0,5,5,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0, -#endif /* ! U_PLATFORM_IS_DARWIN_BASED */ +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED 0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, @@ -2020,3539 +2061,3466 @@ static const uint16_t propsTrie_index[21280]={ static const UTrie2 propsTrie={ propsTrie_index, - propsTrie_index+4464, + propsTrie_index+4468, NULL, - 4464, + 4468, #if !U_PLATFORM_IS_DARWIN_BASED - 16684, + 16984, #else /* !U_PLATFORM_IS_DARWIN_BASED */ - 16816, + 17116, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0xa40, - 0x11f0, + 0x11f4, 0x0, 0x0, 0x110000, #if !U_PLATFORM_IS_DARWIN_BASED - 0x5298, + 0x53c8, #else /* !U_PLATFORM_IS_DARWIN_BASED */ - 0x531c, + 0x544c, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ NULL, 0, FALSE, FALSE, 0, NULL }; #if !U_PLATFORM_IS_DARWIN_BASED -static const uint16_t propsVectorsTrie_index[29236]={ -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -static const uint16_t propsVectorsTrie_index[29432]={ -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4c4,0x4cc,0x4d4,0x4dc,0x4f4,0x4fc,0x504,0x50c,0x514,0x51c,0x524,0x52c,0x534,0x53c,0x544,0x54c, -0x553,0x55b,0x563,0x56b,0x56e,0x576,0x57e,0x586,0x58e,0x596,0x59e,0x5a6,0x5ae,0x5b6,0x5be,0x5c6, -0x5ce,0x5d6,0x5dd,0x5e5,0x5ed,0x5f5,0x5fd,0x605,0x60d,0x615,0x61a,0x622,0x629,0x631,0x639,0x641, -0x649,0x651,0x659,0x661,0x668,0x670,0x678,0x680,0x688,0x690,0x698,0x6a0,0x6a8,0x6b0,0x6b8,0x6c0, -#if !U_PLATFORM_IS_DARWIN_BASED -0x193e,0xd41,0xe2e,0x6c8,0x4e4,0xe95,0xe9d,0x1ad4,0x120d,0x1225,0x1215,0x121d,0x781,0x787,0x78f,0x797, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x196f,0xd41,0xe2e,0x6c8,0x4e4,0xe95,0xe9d,0x1b05,0x120d,0x1225,0x1215,0x121d,0x781,0x787,0x78f,0x797, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x79f,0x7a5,0x7ad,0x7b5,0x7bd,0x7c3,0x7cb,0x7d3,0x7db,0x7e1,0x7e9,0x7f1,0x7f9,0x801,0x809,0x810, -0x818,0x81e,0x826,0x82e,0x836,0x83c,0x844,0x84c,0x854,0x122d,0x85c,0x864,0x86c,0x873,0x87b,0x883, -#if !U_PLATFORM_IS_DARWIN_BASED -0x88b,0x88f,0x897,0x89e,0x8a6,0x8ae,0x8b6,0x8be,0x153d,0x1545,0x8c6,0x8ce,0x8d6,0x8de,0x8e6,0x8ed, -0x15a3,0x1593,0x159b,0x1879,0x1881,0x123d,0x8f5,0x1235,0x147f,0x147f,0x1481,0x1251,0x1252,0x1245,0x1247,0x1249, -0x15ab,0x15ad,0x8fd,0x15ad,0x905,0x90a,0x912,0x15b2,0x918,0x15ad,0x91e,0x926,0xc18,0x15ba,0x15ba,0x92e, -0x15ca,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb, -0x15cb,0x15cb,0x15cb,0x15c2,0x936,0x15d3,0x15d3,0x93e,0xb25,0xb2d,0xb35,0xb3d,0x15e3,0x15db,0x946,0x94e, -0x956,0x15ed,0x15f5,0x95e,0x15eb,0x966,0x1946,0xd49,0xb45,0xb4d,0xb55,0xb5a,0x17e7,0xc4b,0xc52,0x174f, -0xbe8,0x194e,0xd51,0xd59,0xd61,0xd69,0xf4d,0xf4d,0x183f,0x1844,0xc85,0xc8d,0x18b5,0x18bd,0x19ef,0xe36, -0x18c5,0xcd5,0xcdd,0x18cd,0x6d0,0x4e4,0xf2d,0xd71,0x176f,0x1757,0x1767,0x175f,0x17ff,0x17f7,0x17bf,0xbf8, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x88b,0x88f,0x897,0x89e,0x8a6,0x8ae,0x8b6,0x8be,0x156e,0x1576,0x8c6,0x8ce,0x8d6,0x8de,0x8e6,0x8ed, -0x15d4,0x15c4,0x15cc,0x18aa,0x18b2,0x123d,0x8f5,0x1235,0x14b0,0x14b0,0x14b2,0x1251,0x1252,0x1245,0x1247,0x1249, -0x15dc,0x15de,0x8fd,0x15de,0x905,0x90a,0x912,0x15e3,0x918,0x15de,0x91e,0x926,0xc18,0x15eb,0x15eb,0x92e, -0x15fb,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc, -0x15fc,0x15fc,0x15fc,0x15f3,0x936,0x1604,0x1604,0x93e,0xb25,0xb2d,0xb35,0xb3d,0x1614,0x160c,0x946,0x94e, -0x956,0x161e,0x1626,0x95e,0x161c,0x966,0x1977,0xd49,0xb45,0xb4d,0xb55,0xb5a,0x1818,0xc4b,0xc52,0x1780, -0xbe8,0x197f,0xd51,0xd59,0xd61,0xd69,0xf4d,0xf4d,0x1870,0x1875,0xc85,0xc8d,0x18e6,0x18ee,0x1a20,0xe36, -0x18f6,0xcd5,0xcdd,0x18fe,0x6d0,0x4e4,0xf2d,0xd71,0x17a0,0x1788,0x1798,0x1790,0x1830,0x1828,0x17f0,0xbf8, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x125a,0x125a,0x125a,0x125a,0x125d,0x125a,0x125a,0x1265,0x96e,0x126d,0x972,0x97a,0x126d,0x982,0x98a,0x992, -0x127d,0x1275,0x1285,0x99a,0x9a2,0x128d,0x9aa,0x9b2,0x1295,0x129d,0x12a5,0x12ad,0x9ba,0x12b5,0x12bc,0x12c4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x12cc,0x12d4,0x12dc,0x12e4,0x12ec,0x12f3,0x12fb,0x1303,0x130b,0x1313,0x1316,0x1318,0x15fd,0x16e2,0x16e8,0x182f, -0x1320,0x9c2,0x9ca,0x143a,0x143f,0x1442,0x144a,0x1328,0x1452,0x1452,0x1338,0x1330,0x1340,0x1348,0x1350,0x1358, -0x1360,0x1368,0x1370,0x1378,0x16f0,0x1747,0x1889,0x19cf,0x1388,0x138f,0x1397,0x139f,0x1380,0x13a7,0x16f8,0x16ff, -0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1707,0x170a,0x1707,0x1707,0x1712,0x1719,0x171b,0x1722, -0x172a,0x172e,0x172e,0x1731,0x172e,0x172e,0x1737,0x172e,0x1777,0x1837,0x1891,0xb62,0xb68,0xb6e,0xb76,0xb7b, -0x17d7,0xc28,0xc2c,0x184c,0x17c7,0x17c7,0x17c7,0xc00,0x17cf,0xc20,0x1817,0xc75,0xc08,0xc10,0xc10,0x18d5, -0x1807,0x1899,0xc62,0xc65,0x9d2,0x160d,0x160d,0x9da,0x1615,0x1615,0x1615,0x1615,0x1615,0x1615,0x9e2,0x6d4, -0x1489,0x1491,0x9ea,0x1499,0x9f2,0x14a1,0x14a9,0x14b1,0x9fa,0x9ff,0x14b9,0x14c0,0xa04,0xa0c,0x1827,0xbf0, -0xa14,0x1517,0x151e,0x14c8,0x1526,0x152d,0x14d0,0xa1c,0x14e9,0x14e9,0x14eb,0x14d8,0x14e0,0x14e0,0x14e1,0x1535, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, -0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x11c2,0x177f,0x177f, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3, -0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14f3,0x14fa,0x1936,0x11ca, -0x1625,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b, -0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b,0x162b, -0x162b,0x162b,0x162b,0x162b,0xa24,0x1633,0xa2c,0x1956,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1, -0x18dd,0xce5,0x18f1,0x18e9,0x18f3,0x195e,0x195e,0xd79,0x17df,0x1854,0x18a9,0x18ad,0x18a1,0xc95,0xc9b,0xc9e, -0x180f,0xc6d,0x185c,0xca6,0x18fb,0x18fe,0xced,0xd81,0x190e,0x1906,0xcf5,0xd89,0x1966,0x196a,0xd91,0xff3, -0x1916,0xcfd,0xd05,0x1972,0x1982,0x197a,0xd99,0xef0,0xe3e,0xe46,0x1b47,0xfab,0x1bec,0x1bec,0x198a,0xda1, -0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586, -0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588, -0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a, -0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585, -0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587, -0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589, -0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b, -0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586, -0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588, -0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a, -0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585, -0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587, -0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589, -0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b, -0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586, -0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588, -0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a, -0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585, -0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587, -0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589, -0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b, -0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0x158b,0x1585,0x1586,0x1587,0x1588,0x1589,0x158a,0xa34,0xda9,0xdac, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x12cc,0x12d4,0x12dc,0x12e4,0x12ec,0x12f3,0x12fb,0x1303,0x130b,0x1313,0x1316,0x1318,0x162e,0x1713,0x1719,0x1860, -0x1320,0x9c2,0x9ca,0x1463,0x1468,0x146b,0x1473,0x1328,0x147b,0x147b,0x1338,0x1330,0x1340,0x1348,0x1350,0x1358, -0x1360,0x1368,0x1370,0x1378,0x1721,0x1778,0x18ba,0x1a00,0x1388,0x138f,0x1397,0x139f,0x1380,0x13a7,0x1729,0x1730, -0x1636,0x1636,0x1636,0x1636,0x1636,0x1636,0x1636,0x1636,0x1738,0x173b,0x1738,0x1738,0x1743,0x174a,0x174c,0x1753, -0x175b,0x175f,0x175f,0x1762,0x175f,0x175f,0x1768,0x175f,0x17a8,0x1868,0x18c2,0xb62,0xb68,0xb6e,0xb76,0xb7b, -0x1808,0xc28,0xc2c,0x187d,0x17f8,0x17f8,0x17f8,0xc00,0x1800,0xc20,0x1848,0xc75,0xc08,0xc10,0xc10,0x1906, -0x1838,0x18ca,0xc62,0xc65,0x9d2,0x163e,0x163e,0x9da,0x1646,0x1646,0x1646,0x1646,0x1646,0x1646,0x9e2,0x6d4, -0x14ba,0x14c2,0x9ea,0x14ca,0x9f2,0x14d2,0x14da,0x14e2,0x9fa,0x9ff,0x14ea,0x14f1,0xa04,0xa0c,0x1858,0xbf0, -0xa14,0x1548,0x154f,0x14f9,0x1557,0x155e,0x1501,0xa1c,0x151a,0x151a,0x151c,0x1509,0x1511,0x1511,0x1512,0x1566, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e, -0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x164e,0x11c2,0x17b0,0x17b0, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524, -0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x152b,0x1967,0x11ca, -0x1656,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c, -0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c, -0x165c,0x165c,0x165c,0x165c,0xa24,0x1664,0xa2c,0x1987,0x1912,0x1912,0x1912,0x1912,0x1912,0x1912,0x1912,0x1912, -0x190e,0xce5,0x1922,0x191a,0x1924,0x198f,0x198f,0xd79,0x1810,0x1885,0x18da,0x18de,0x18d2,0xc95,0xc9b,0xc9e, -0x1840,0xc6d,0x188d,0xca6,0x192c,0x192f,0xced,0xd81,0x193f,0x1937,0xcf5,0xd89,0x1997,0x199b,0xd91,0xff3, -0x1947,0xcfd,0xd05,0x19a3,0x19b3,0x19ab,0xd99,0xef0,0xe3e,0xe46,0x1b78,0xfab,0x1c1d,0x1c1d,0x19bb,0xda1, -0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7, -0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9, -0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb, -0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6, -0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8, -0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba, -0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc, -0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7, -0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9, -0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb, -0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6, -0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8, -0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba, -0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc, -0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7, -0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9, -0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb, -0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6, -0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8, -0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba, -0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc, -0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0x15bc,0x15b6,0x15b7,0x15b8,0x15b9,0x15ba,0x15bb,0xa34,0xda9,0xdac, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d, -0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a, -0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x145a,0x1502,0x1502,0x1502,0x1502,0x1502,0x1502,0x1502,0x1502, -0x1507,0x150f,0x173f,0x11d2,0x181f,0x181f,0x11d6,0x11dd,0xa3c,0xa44,0xa4c,0x13c7,0x13ce,0x13d6,0xa54,0x13de, -0x140f,0x140f,0x13b7,0x13bf,0x13e6,0x1406,0x1407,0x1417,0x13ee,0x13af,0xa5c,0x13f6,0xa64,0x13fe,0xa6c,0xa70, -0xc7d,0x141f,0xa78,0xa80,0x1427,0x142d,0x1432,0xa88,0xa98,0x146f,0x1477,0x1462,0x1467,0xaa0,0xaa8,0xa90, -0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d, -0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x154d,0x1555,0x1555,0x1555,0x1555, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e, -0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e,0x158e, -0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, -0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, -0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, -0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, -0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, -0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, -0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, -0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, -0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, -0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, -0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, -0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x13b7, -0x13bc,0x13bc,0x13c0,0x1483,0x13af,0x13d0,0x13c8,0x13bc,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533, -0x1538,0x1540,0x1770,0x11d2,0x1850,0x1850,0x11d6,0x11dd,0xa3c,0xa44,0xa4c,0x13f0,0x13f7,0x13ff,0xa54,0x1407, -0x1438,0x1438,0x13e0,0x13e8,0x140f,0x142f,0x1430,0x1440,0x1417,0x13d8,0xa5c,0x141f,0xa64,0x1427,0xa6c,0xa70, -0xc7d,0x1448,0xa78,0xa80,0x1450,0x1456,0x145b,0xa88,0xa98,0x14a0,0x14a8,0x1493,0x1498,0xaa0,0xaa8,0xa90, -0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e, -0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x1586,0x1586,0x1586,0x1586, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1390,0x1390,0x13d0,0x1410,0x1450,0x1490,0x14d0,0x1510,0x154c,0x158c,0x15b8,0x15f8,0x1638,0x1678,0x16b8,0x16f8, -0x1738,0x1774,0x17b4,0x17f4,0x1834,0x1868,0x18a4,0x18e4,0x1924,0x1964,0x19a0,0x19e0,0x1a20,0x1a60,0x1aa0,0x1ae0, -0xa80,0xac0,0xb00,0xb3b,0xb7b,0xa40,0xbbb,0xa40,0xe65,0xa40,0xa40,0xa40,0xa40,0xbfb,0x1290,0x1290, -0xea5,0xee5,0xa40,0xa40,0xa40,0xa40,0xc3b,0xc5b,0xa40,0xa40,0xc9b,0xcdb,0xd1b,0xe2d,0xded,0xd5d, -0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0, -0x11d0,0x11d0,0x11d0,0x11d0,0xf25,0x1210,0x1045,0x1085,0x1250,0x1090,0x12d0,0x12d0,0x12d0,0xf65,0xf85,0xfc5, -0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85, -0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0xf85,0x1005, +static const uint16_t propsVectorsTrie_index[30012]={ +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +static const uint16_t propsVectorsTrie_index[30208]={ +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x4d5,0x4dd,0x4e5,0x4ed,0x505,0x50d,0x515,0x51d,0x525,0x52d,0x535,0x53d,0x545,0x54d,0x555,0x55d, +0x564,0x56c,0x574,0x57c,0x57f,0x587,0x58f,0x597,0x59f,0x5a7,0x5af,0x5b7,0x5bf,0x5c7,0x5cf,0x5d7, +0x5df,0x5e7,0x5ee,0x5f6,0x5fe,0x606,0x60e,0x616,0x61e,0x626,0x62b,0x633,0x63a,0x642,0x64a,0x652, +0x65a,0x662,0x66a,0x672,0x679,0x681,0x689,0x691,0x699,0x6a1,0x6a9,0x6b1,0x6b9,0x6c1,0x6c9,0x6d1, +#if !U_PLATFORM_IS_DARWIN_BASED +0x19a7,0xd68,0xe47,0x6d9,0x4f5,0xeae,0xeb6,0x1b46,0x1276,0x128e,0x127e,0x1286,0x7ae,0x7b4,0x7bc,0x7c4, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x19d8,0xd68,0xe47,0x6d9,0x4f5,0xeae,0xeb6,0x1b77,0x1276,0x128e,0x127e,0x1286,0x7ae,0x7b4,0x7bc,0x7c4, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x7cc,0x7d2,0x7da,0x7e2,0x7ea,0x7f0,0x7f8,0x800,0x808,0x80e,0x816,0x81e,0x826,0x82e,0x836,0x83d, +0x845,0x84b,0x853,0x85b,0x863,0x869,0x871,0x879,0x881,0x1296,0x889,0x891,0x899,0x8a0,0x8a8,0x8b0, +#if !U_PLATFORM_IS_DARWIN_BASED +0x8b8,0x8bc,0x8c4,0x8cb,0x8d3,0x8db,0x8e3,0x8eb,0x15a6,0x15ae,0x8f3,0x8fb,0x903,0x90b,0x913,0x91a, +0x160c,0x15fc,0x1604,0x18e2,0x18ea,0x12a6,0x922,0x129e,0x14f0,0x14f0,0x14f2,0x12ba,0x12bb,0x12ae,0x12b0,0x12b2, +0x1614,0x1616,0x92a,0x1616,0x932,0x937,0x93f,0x161b,0x945,0x1616,0x94b,0x953,0xc3d,0x1623,0x1623,0x95b, +0x1633,0x1634,0x1634,0x1634,0x1634,0x1634,0x1634,0x1634,0x1634,0x1634,0x1634,0x1634,0x1634,0x1634,0x1634,0x1634, +0x1634,0x1634,0x1634,0x162b,0x963,0x163c,0x163c,0x96b,0xb52,0xb5a,0xb62,0xb6a,0x164c,0x1644,0x973,0x97b, +0x983,0x1656,0x165e,0x98b,0x1654,0x993,0x19af,0xd70,0xb72,0xb7a,0xb82,0xb87,0x1850,0xc70,0xc77,0x17b8, +0xc0d,0x19b7,0xd78,0xd80,0xd88,0xd90,0xf66,0xf66,0x18a8,0x18ad,0xcab,0xcb3,0x191e,0x1926,0x1a68,0xe4f, +0x192e,0xcfc,0xd04,0x1936,0x112a,0x11ca,0xf46,0xd98,0x17d8,0x17c0,0x17d0,0x17c8,0x1868,0x1860,0x1828,0xc1d, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x8b8,0x8bc,0x8c4,0x8cb,0x8d3,0x8db,0x8e3,0x8eb,0x15d7,0x15df,0x8f3,0x8fb,0x903,0x90b,0x913,0x91a, +0x163d,0x162d,0x1635,0x1913,0x191b,0x12a6,0x922,0x129e,0x1521,0x1521,0x1523,0x12ba,0x12bb,0x12ae,0x12b0,0x12b2, +0x1645,0x1647,0x92a,0x1647,0x932,0x937,0x93f,0x164c,0x945,0x1647,0x94b,0x953,0xc3d,0x1654,0x1654,0x95b, +0x1664,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665, +0x1665,0x1665,0x1665,0x165c,0x963,0x166d,0x166d,0x96b,0xb52,0xb5a,0xb62,0xb6a,0x167d,0x1675,0x973,0x97b, +0x983,0x1687,0x168f,0x98b,0x1685,0x993,0x19e0,0xd70,0xb72,0xb7a,0xb82,0xb87,0x1881,0xc70,0xc77,0x17e9, +0xc0d,0x19e8,0xd78,0xd80,0xd88,0xd90,0xf66,0xf66,0x18d9,0x18de,0xcab,0xcb3,0x194f,0x1957,0x1a99,0xe4f, +0x195f,0xcfc,0xd04,0x1967,0x112a,0x11ca,0xf46,0xd98,0x1809,0x17f1,0x1801,0x17f9,0x1899,0x1891,0x1859,0xc1d, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x12c3,0x12c3,0x12c3,0x12c3,0x12c6,0x12c3,0x12c3,0x12ce,0x99b,0x12d6,0x99f,0x9a7,0x12d6,0x9af,0x9b7,0x9bf, +0x12e6,0x12de,0x12ee,0x9c7,0x9cf,0x12f6,0x9d7,0x9df,0x12fe,0x1306,0x130e,0x1316,0x9e7,0x131e,0x1325,0x132d, +#if !U_PLATFORM_IS_DARWIN_BASED +0x1335,0x133d,0x1345,0x134d,0x1355,0x135c,0x1364,0x136c,0x1374,0x137c,0x137f,0x1381,0x1666,0x174b,0x1751,0x1898, +0x1389,0x9ef,0x9f7,0x14a3,0x14a8,0x14ab,0x14b3,0x1391,0x14bb,0x14bb,0x13a1,0x1399,0x13a9,0x13b1,0x13b9,0x13c1, +0x13c9,0x13d1,0x13d9,0x13e1,0x1759,0x17b0,0x18f2,0x1a48,0x13f1,0x13f8,0x1400,0x1408,0x13e9,0x1410,0x1761,0x1768, +0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x1770,0x1773,0x1770,0x1770,0x177b,0x1782,0x1784,0x178b, +0x1793,0x1797,0x1797,0x179a,0x1797,0x1797,0x17a0,0x1797,0x17e0,0x18a0,0x18fa,0xb8f,0xb95,0x1b7a,0xb9b,0xba0, +0x1840,0xc4d,0xc51,0x18b5,0x1830,0x1830,0x1830,0xc25,0x1838,0xc45,0x1880,0xc9b,0xc2d,0xc35,0xc35,0x193e, +0x1870,0x1902,0xc87,0xc8b,0x9ff,0x1676,0x1676,0xa07,0x167e,0x167e,0x167e,0x167e,0x167e,0x167e,0xa0f,0x6dd, +0x14d8,0x14fa,0xa17,0x1502,0xa1f,0x150a,0x1512,0x151a,0xa27,0xa2c,0x1522,0x1529,0xa31,0xa39,0x1890,0xc15, +0xa41,0x1580,0x1587,0x1531,0x158f,0x1596,0x1539,0xa49,0x1552,0x1552,0x1554,0x1541,0x1549,0x1549,0x154a,0x159e, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x122b,0x17e8,0x17e8, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c, +0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x155c,0x1563,0x199f,0x1233, +0x168e,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694, +0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694,0x1694, +0x1694,0x1694,0x1694,0x1694,0xa51,0x169c,0xa59,0x19bf,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a, +0x1946,0xd0c,0x195a,0x1952,0x195c,0x19c7,0x19c7,0xda0,0x1848,0x18bd,0x1912,0x1916,0x190a,0xcbb,0xcc2,0xcc5, +0x1878,0xc93,0x18c5,0xccd,0x1964,0x1967,0xd14,0x19cf,0x1977,0x196f,0xd1c,0xda8,0x19d7,0x19db,0xdb0,0x100d, +0x197f,0xd24,0xd2c,0x19e3,0x19f3,0x19eb,0xdb8,0xf09,0xe57,0xe5f,0x1bc1,0xfc5,0x1c66,0x1c66,0x19fb,0xdc0, +0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef, +0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1, +0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3, +0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee, +0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0, +0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2, +0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4, +0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef, +0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1, +0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3, +0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee, +0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0, +0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2, +0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4, +0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef, +0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1, +0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3, +0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee, +0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0, +0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2, +0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4, +0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0x15f4,0x15ee,0x15ef,0x15f0,0x15f1,0x15f2,0x15f3,0xa61,0xdc8,0xdcb, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6, +0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3, +0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x14c3,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b, +0x1570,0x1578,0x17a8,0x123b,0x1888,0x1888,0x123f,0x1246,0xa69,0xa71,0xa79,0x1430,0x1437,0x143f,0xa81,0x1447, +0x1478,0x1478,0x1420,0x1428,0x144f,0x146f,0x1470,0x1480,0x1457,0x1418,0xa89,0x145f,0xa91,0x1467,0xa99,0xa9d, +0xca3,0x1488,0xaa5,0xaad,0x1490,0x1496,0x149b,0xab5,0xac5,0x14e0,0x14e8,0x14cb,0x14d0,0xacd,0xad5,0xabd, +0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6, +0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15be,0x15be,0x15be,0x15be, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1335,0x133d,0x1345,0x134d,0x1355,0x135c,0x1364,0x136c,0x1374,0x137c,0x137f,0x1381,0x1697,0x177c,0x1782,0x18c9, +0x1389,0x9ef,0x9f7,0x14cc,0x14d1,0x14d4,0x14dc,0x1391,0x14e4,0x14e4,0x13a1,0x1399,0x13a9,0x13b1,0x13b9,0x13c1, +0x13c9,0x13d1,0x13d9,0x13e1,0x178a,0x17e1,0x1923,0x1a79,0x13f1,0x13f8,0x1400,0x1408,0x13e9,0x1410,0x1792,0x1799, +0x169f,0x169f,0x169f,0x169f,0x169f,0x169f,0x169f,0x169f,0x17a1,0x17a4,0x17a1,0x17a1,0x17ac,0x17b3,0x17b5,0x17bc, +0x17c4,0x17c8,0x17c8,0x17cb,0x17c8,0x17c8,0x17d1,0x17c8,0x1811,0x18d1,0x192b,0xb8f,0xb95,0x1bab,0xb9b,0xba0, +0x1871,0xc4d,0xc51,0x18e6,0x1861,0x1861,0x1861,0xc25,0x1869,0xc45,0x18b1,0xc9b,0xc2d,0xc35,0xc35,0x196f, +0x18a1,0x1933,0xc87,0xc8b,0x9ff,0x16a7,0x16a7,0xa07,0x16af,0x16af,0x16af,0x16af,0x16af,0x16af,0xa0f,0x6dd, +0x1509,0x152b,0xa17,0x1533,0xa1f,0x153b,0x1543,0x154b,0xa27,0xa2c,0x1553,0x155a,0xa31,0xa39,0x18c1,0xc15, +0xa41,0x15b1,0x15b8,0x1562,0x15c0,0x15c7,0x156a,0xa49,0x1583,0x1583,0x1585,0x1572,0x157a,0x157a,0x157b,0x15cf, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7, +0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x16b7,0x122b,0x1819,0x1819, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, +0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x1594,0x19d0,0x1233, +0x16bf,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5, +0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5,0x16c5, +0x16c5,0x16c5,0x16c5,0x16c5,0xa51,0x16cd,0xa59,0x19f0,0x197b,0x197b,0x197b,0x197b,0x197b,0x197b,0x197b,0x197b, +0x1977,0xd0c,0x198b,0x1983,0x198d,0x19f8,0x19f8,0xda0,0x1879,0x18ee,0x1943,0x1947,0x193b,0xcbb,0xcc2,0xcc5, +0x18a9,0xc93,0x18f6,0xccd,0x1995,0x1998,0xd14,0x1a00,0x19a8,0x19a0,0xd1c,0xda8,0x1a08,0x1a0c,0xdb0,0x100d, +0x19b0,0xd24,0xd2c,0x1a14,0x1a24,0x1a1c,0xdb8,0xf09,0xe57,0xe5f,0x1bf2,0xfc5,0x1c97,0x1c97,0x1a2c,0xdc0, +0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620, +0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622, +0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624, +0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f, +0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621, +0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623, +0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625, +0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620, +0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622, +0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624, +0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f, +0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621, +0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623, +0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625, +0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620, +0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622, +0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624, +0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f, +0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621, +0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623, +0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625, +0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0x1625,0x161f,0x1620,0x1621,0x1622,0x1623,0x1624,0xa61,0xdc8,0xdcb, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7, +0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7,0x15f7, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x1420, +0x1425,0x1425,0x1429,0x14ec,0x1418,0x1439,0x1431,0x1425,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c, +0x15a1,0x15a9,0x17d9,0x123b,0x18b9,0x18b9,0x123f,0x1246,0xa69,0xa71,0xa79,0x1459,0x1460,0x1468,0xa81,0x1470, +0x14a1,0x14a1,0x1449,0x1451,0x1478,0x1498,0x1499,0x14a9,0x1480,0x1441,0xa89,0x1488,0xa91,0x1490,0xa99,0xa9d, +0xca3,0x14b1,0xaa5,0xaad,0x14b9,0x14bf,0x14c4,0xab5,0xac5,0x1511,0x1519,0x14fc,0x1501,0xacd,0xad5,0xabd, +0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7, +0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15ef,0x15ef,0x15ef,0x15ef, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x13d4,0x13d4,0x1414,0x1454,0x1494,0x14d4,0x1514,0x1554,0x1590,0x15d0,0x15fc,0x163c,0x167c,0x16bc,0x16fc,0x173c, +0x177c,0x17b8,0x17f8,0x1838,0x1878,0x18ac,0x18e8,0x1928,0x1968,0x19a8,0x19e4,0x1a24,0x1a64,0x1aa4,0x1ae4,0x1b24, +0xa80,0xac0,0xb00,0xb40,0xb80,0xa40,0xbc0,0xa40,0xea8,0xa40,0xa40,0xa40,0xa40,0xc00,0x12d3,0x12d3, +0xee8,0xf28,0xa40,0xa40,0xa40,0xa40,0xc40,0xc60,0xa40,0xa40,0xca0,0xce0,0xd20,0xd60,0xe68,0xdd8, +0x1213,0x1213,0x1213,0x1213,0x1213,0x1213,0x1213,0x1213,0x1213,0x1213,0x1213,0x1213,0x1213,0x1213,0x1213,0x1213, +0x1213,0x1213,0x1213,0x1213,0xf68,0x1253,0x1088,0x10c8,0x1293,0x10d3,0x1313,0x1313,0x1313,0xfa8,0xfc8,0x1008, +0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8, +0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0xfc8,0x1048, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd98, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd98, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd98, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd98, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd98, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd98, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd98, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd98, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd98, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, -0xd9d,0xdad,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd1d, -0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150, -0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x1150,0x10d0, -0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190, -0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1190,0x1110, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#if !U_PLATFORM_IS_DARWIN_BASED -0xb83,0xb8a,0xb92,0xb9a,0x1787,0x1787,0x1787,0xba2,0xbaa,0xbad,0x17b7,0x17af,0xbe0,0xd0d,0xd11,0xd15, -0x4e4,0x4e4,0x4e4,0x4e4,0xd1d,0x191e,0xd25,0xf45,0x163b,0xab0,0xab6,0x1003,0xbb5,0x17ef,0xc5a,0x4e4, -0x1650,0x1643,0x1648,0x178f,0xbbd,0xbc5,0x115c,0x1162,0x1b2f,0xf62,0x1b1f,0x6dc,0x4e4,0x4e4,0x4e4,0x4e4, -0x1b4f,0x1b4f,0x1b4f,0x1b4f,0x1b4f,0x1b4f,0x1b4f,0x1b4f,0x1b4f,0xfb3,0xfbb,0xfc3,0x4e4,0x4e4,0x4e4,0x4e4, -0xbcd,0xbd0,0xdb4,0x1b97,0xffb,0x6e4,0x4e4,0x1094,0xcae,0xd2d,0x4e4,0x4e4,0x1ae4,0xef8,0xf00,0x1bd7, -0xc34,0xc3b,0xc43,0x1992,0x1b77,0x4e4,0x1b57,0xfd3,0x199a,0xdbc,0xdc4,0xdcc,0x1023,0x6ec,0x4e4,0x4e4, -0x19a2,0x19a2,0x6f4,0x4e4,0x1c04,0x10ac,0x1bfc,0x10b4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xb83,0xb8a,0xb92,0xb9a,0x17b8,0x17b8,0x17b8,0xba2,0xbaa,0xbad,0x17e8,0x17e0,0xbe0,0xd0d,0xd11,0xd15, -0x4e4,0x4e4,0x4e4,0x4e4,0xd1d,0x194f,0xd25,0xf45,0x166c,0xab0,0xab6,0x1003,0xbb5,0x1820,0xc5a,0x4e4, -0x1681,0x1674,0x1679,0x17c0,0xbbd,0xbc5,0x115c,0x1162,0x1b60,0xf62,0x1b50,0x6dc,0x4e4,0x4e4,0x4e4,0x4e4, -0x1b80,0x1b80,0x1b80,0x1b80,0x1b80,0x1b80,0x1b80,0x1b80,0x1b80,0xfb3,0xfbb,0xfc3,0x4e4,0x4e4,0x4e4,0x4e4, -0xbcd,0xbd0,0xdb4,0x1bc8,0xffb,0x6e4,0x4e4,0x1094,0xcae,0xd2d,0x4e4,0x4e4,0x1b15,0xef8,0xf00,0x1c08, -0xc34,0xc3b,0xc43,0x19c3,0x1ba8,0x4e4,0x1b88,0xfd3,0x19cb,0xdbc,0xdc4,0xdcc,0x1023,0x6ec,0x4e4,0x4e4, -0x19d3,0x19d3,0x6f4,0x4e4,0x1c35,0x10ac,0x1c2d,0x10b4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0xdd4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x19f7,0x19f9,0xe4e,0xe55,0x19aa,0x19b2,0xddc,0xf25,0x1adc,0xee0,0xee8,0xfcb,0x1af4,0x1af8,0xf1d,0x1043, -0xf96,0xf9b,0x6fc,0x4e4,0x109c,0x10a4,0x1b3f,0xfa3,0xf78,0xf7e,0xf86,0xf8e,0x4e4,0x4e4,0x4e4,0x4e4, -0x1c44,0x1c3c,0x114c,0x1154,0x1bbf,0x1bb7,0x106a,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1ba7,0x102b,0x1033,0x103b, -0x1b6f,0x1b67,0xfe3,0x1144,0x1b00,0xf35,0x704,0x4e4,0x107a,0x1082,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x1bcf,0x1bc7,0x1072,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1c6c,0x1c64,0x11a6,0x1c5c,0x119e, -0x70c,0x1b9f,0x101b,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x110a,0x110f,0x1117,0x111e,0x1136, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1a28,0x1a2a,0xe4e,0xe55,0x19db,0x19e3,0xddc,0xf25,0x1b0d,0xee0,0xee8,0xfcb,0x1b25,0x1b29,0xf1d,0x1043, -0xf96,0xf9b,0x6fc,0x4e4,0x109c,0x10a4,0x1b70,0xfa3,0xf78,0xf7e,0xf86,0xf8e,0x4e4,0x4e4,0x4e4,0x4e4, -0x1c75,0x1c6d,0x114c,0x1154,0x1bf0,0x1be8,0x106a,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1bd8,0x102b,0x1033,0x103b, -0x1ba0,0x1b98,0xfe3,0x1144,0x1b31,0xf35,0x704,0x4e4,0x107a,0x1082,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x1c00,0x1bf8,0x1072,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1c9d,0x1c95,0x11a6,0x1c8d,0x119e, -0x70c,0x1bd0,0x101b,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x110a,0x110f,0x1117,0x111e,0x1136, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x113c,0x4e4,0x4e4,0x1182,0x1186,0x118e,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1864,0x1864,0x1864,0x1864,0x1864, -0x1864,0x1864,0x1864,0x1864,0x1864,0x1864,0x1864,0x1864,0x1864,0x1864,0x1864,0x1864,0x1864,0x1864,0x1864,0x1864, -0x1864,0x1864,0x1864,0x1864,0x1864,0x1864,0x1869,0xcb6,0xcbd,0xcbd,0xcbd,0x1871,0x1871,0x1871,0xcc5,0x1bf4, -0x1bf4,0x1bf4,0x1bf4,0x1bf4,0x1bf4,0x714,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x19ba,0x19ba,0x19ba,0x19ba,0x19ba, -0x19ba,0x19ba,0x19ba,0x19ba,0x19ba,0x19ba,0x19ba,0x19ba,0x19ba,0x19ba,0x19ba,0x19ba,0x19ba,0x19bc,0x19ba,0x19c4, -0x19ba,0x19ba,0x19ba,0x19ba,0x19ba,0x19ba,0x19c7,0x19ba,0x19ba,0x19ba,0x19ba,0x19ba,0x71c,0x4e4,0x4e4,0x4e4, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1895,0x1895,0x1895,0x1895,0x1895, -0x1895,0x1895,0x1895,0x1895,0x1895,0x1895,0x1895,0x1895,0x1895,0x1895,0x1895,0x1895,0x1895,0x1895,0x1895,0x1895, -0x1895,0x1895,0x1895,0x1895,0x1895,0x1895,0x189a,0xcb6,0xcbd,0xcbd,0xcbd,0x18a2,0x18a2,0x18a2,0xcc5,0x1c25, -0x1c25,0x1c25,0x1c25,0x1c25,0x1c25,0x714,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x19eb,0x19eb,0x19eb,0x19eb,0x19eb, -0x19eb,0x19eb,0x19eb,0x19eb,0x19eb,0x19eb,0x19eb,0x19eb,0x19eb,0x19eb,0x19eb,0x19eb,0x19eb,0x19ed,0x19eb,0x19f5, -0x19eb,0x19eb,0x19eb,0x19eb,0x19eb,0x19eb,0x19f8,0x19eb,0x19eb,0x19eb,0x19eb,0x19eb,0x71c,0x4e4,0x4e4,0x4e4, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01, -0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0xe5d,0xfeb,0x724,0x4e4, -0x4e4,0x728,0xf3d,0x1b8f,0x1b87,0x100b,0x1013,0x730,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1a32,0x1a32,0x1a32,0x1a32,0x1a32, -0x1a32,0x1a32,0x1a32,0x1a32,0x1a32,0x1a32,0x1a32,0x1a32,0x1a32,0x1a32,0x1a32,0x1a32,0xe5d,0xfeb,0x724,0x4e4, -0x4e4,0x728,0xf3d,0x1bc0,0x1bb8,0x100b,0x1013,0x730,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x4e4,0x4e4,0x4e4,0x1aec,0x1aec,0xf08,0xf0d,0xf15,0x4e4,0x4e4,0x112e,0x1a11,0x1c74,0x1c74,0x1c74,0x1c74, -0x1c74,0x1c74,0x1c74,0x117a,0x738,0x4e4,0x73c,0x1c84,0x1c84,0x1c84,0x1c84,0x1c84,0x1c84,0x1c84,0x1c84,0x1c84, -0x1c84,0x1c84,0x1196,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x1b1d,0x1b1d,0xf08,0xf0d,0xf15,0x4e4,0x4e4,0x112e,0x1a42,0x1ca5,0x1ca5,0x1ca5,0x1ca5, -0x1ca5,0x1ca5,0x1ca5,0x117a,0x738,0x4e4,0x73c,0x1cb5,0x1cb5,0x1cb5,0x1cb5,0x1cb5,0x1cb5,0x1cb5,0x1cb5,0x1cb5, -0x1cb5,0x1cb5,0x1196,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1b27,0x1b27,0x1b27,0xf55,0xf5a, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1b58,0x1b58,0x1b58,0xf55,0xf5a, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x744,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1658,0x1658,0x1658,0x1658,0x1658, -0x1658,0x1658,0xabe,0x1668,0xac6,0x1669,0x1660,0x1671,0x1677,0x167f,0xace,0x17a7,0x17a7,0x74c,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x1797,0x1797,0xbd8,0xccd,0x4e4,0x4e4,0x4e4,0x4e4,0x16b0,0x16b7,0xad6,0x16ba,0xade, -0xae6,0xaee,0x16b4,0xaf6,0xafe,0xb06,0x16b9,0x16c1,0x16b0,0x16b7,0x16b3,0x16ba,0x16c2,0x16b1,0x16b8,0x16b4, -0xb0d,0x1687,0x168f,0x1696,0x169d,0x168a,0x1692,0x1699,0x16a0,0xb15,0x16a8,0x1c1c,0x1c1c,0x1c1c,0x1c1c,0x1c1c, -0x1c1c,0x1c1c,0x1c1c,0x1c1c,0x1c1c,0x1c1c,0x1c1c,0x1c1c,0x1c1c,0x1c1c,0x1c1c,0x1c0c,0x1c0f,0x1c0c,0x1c16,0x10fa, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1689,0x1689,0x1689,0x1689,0x1689, -0x1689,0x1689,0xabe,0x1699,0xac6,0x169a,0x1691,0x16a2,0x16a8,0x16b0,0xace,0x17d8,0x17d8,0x74c,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x17c8,0x17c8,0xbd8,0xccd,0x4e4,0x4e4,0x4e4,0x4e4,0x16e1,0x16e8,0xad6,0x16eb,0xade, -0xae6,0xaee,0x16e5,0xaf6,0xafe,0xb06,0x16ea,0x16f2,0x16e1,0x16e8,0x16e4,0x16eb,0x16f3,0x16e2,0x16e9,0x16e5, -0xb0d,0x16b8,0x16c0,0x16c7,0x16ce,0x16bb,0x16c3,0x16ca,0x16d1,0xb15,0x16d9,0x1c4d,0x1c4d,0x1c4d,0x1c4d,0x1c4d, -0x1c4d,0x1c4d,0x1c4d,0x1c4d,0x1c4d,0x1c4d,0x1c4d,0x1c4d,0x1c4d,0x1c4d,0x1c4d,0x1c3d,0x1c40,0x1c3d,0x1c47,0x10fa, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x754,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1126,0x75c,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x760,0x104b,0x1baf,0x1051, -0x1baf,0x1059,0x105e,0x1062,0x1062,0x10bc,0x10c4,0x10cc,0x10d4,0x10dc,0x10e2,0x10ea,0x10f2,0x768,0x768,0x768, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x760,0x104b,0x1be0,0x1051, -0x1be0,0x1059,0x105e,0x1062,0x1062,0x10bc,0x10c4,0x10cc,0x10d4,0x10dc,0x10e2,0x10ea,0x10f2,0x768,0x768,0x768, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768, -0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768, -#if !U_PLATFORM_IS_DARWIN_BASED -0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x769,0xb1d,0x16ca,0x16ca, -0x16ca,0x771,0x771,0x771,0x771,0x179f,0x179f,0x179f,0x179f,0x179f,0x179f,0x179f,0x779,0x771,0x771,0x771, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x768,0x769,0xb1d,0x16fb,0x16fb, -0x16fb,0x771,0x771,0x771,0x771,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x779,0x771,0x771,0x771, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771, -0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771, -0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771, -#if !U_PLATFORM_IS_DARWIN_BASED -0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x1926,0xd35,0x192e, -0x192e,0xd39,0xe65,0xe6d,0xe75,0xde4,0xdea,0x19df,0xdf2,0x19d7,0xdfa,0xdfe,0xe05,0xe0d,0xe14,0xe1c, -0xe24,0xe26,0xe26,0xe26,0xe26,0x1a38,0x1a40,0x1a48,0x1a4c,0x1a54,0x1a19,0x1a5c,0x1a64,0x1a48,0x1a6c,0x1a74, -0x1a7b,0x1a83,0x1a21,0x1a48,0x1a86,0x1a29,0x1a30,0x1a8e,0x1a94,0x1b10,0x1b17,0x1b08,0x1a9c,0x1aa4,0x1aac,0x1ab4, -0x1b7f,0x1abc,0x1ac4,0xe7d,0xe85,0x1a09,0x1a09,0x1a09,0xe8d,0x1b37,0x1b37,0xf6a,0xf70,0x1b5f,0x1b5f,0x1b5f, -0x1b5f,0x1b5f,0x1b5f,0xfdb,0x4e4,0x1c34,0x1c2c,0x1102,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x771,0x1957,0xd35,0x195f, -0x195f,0xd39,0xe65,0xe6d,0xe75,0xde4,0xdea,0x1a10,0xdf2,0x1a08,0xdfa,0xdfe,0xe05,0xe0d,0xe14,0xe1c, -0xe24,0xe26,0xe26,0xe26,0xe26,0x1a69,0x1a71,0x1a79,0x1a7d,0x1a85,0x1a4a,0x1a8d,0x1a95,0x1a79,0x1a9d,0x1aa5, -0x1aac,0x1ab4,0x1a52,0x1a79,0x1ab7,0x1a5a,0x1a61,0x1abf,0x1ac5,0x1b41,0x1b48,0x1b39,0x1acd,0x1ad5,0x1add,0x1ae5, -0x1bb0,0x1aed,0x1af5,0xe7d,0xe85,0x1a3a,0x1a3a,0x1a3a,0xe8d,0x1b68,0x1b68,0xf6a,0xf70,0x1b90,0x1b90,0x1b90, -0x1b90,0x1b90,0x1b90,0xfdb,0x4e4,0x1c65,0x1c5d,0x1102,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0xea5,0xead,0xeb5, -0xebd,0xec5,0xecd,0xed4,0xed8,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1bdf,0x1bdf,0x1bdf,0x1bdf,0x1bdf,0x1bdf,0x1bdf,0x1bdf,0x1bdf,0x1bdf,0x1bdf, -0x1bdf,0x1bdf,0x1bdf,0x1be4,0x1bdf,0x1bdf,0x1bdf,0x108a,0x108c,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c, -0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c, -0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c, -0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c, -0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x116a,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54, -0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1c54,0x1172,0x4e4,0x4e4,0x4e4, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1c10,0x1c10,0x1c10,0x1c10,0x1c10,0x1c10,0x1c10,0x1c10,0x1c10,0x1c10,0x1c10, -0x1c10,0x1c10,0x1c10,0x1c15,0x1c10,0x1c10,0x1c10,0x108a,0x108c,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d, -0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d, -0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d, -0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d, -0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x116a,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85, -0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1c85,0x1172,0x4e4,0x4e4,0x4e4, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x4e4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2, -0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2, -0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2, -0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x11e5,0x11ae,0x19e7,0x19e7,0x19e7, -0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c, -0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c, -0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x11b6,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x4e4,0x4e4,0x4e4,0x4e4,0x4e4,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703, -0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703, -0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703, -0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x11e5,0x11ae,0x1a18,0x1a18,0x1a18, -0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad, -0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad, -0x1cad,0x1cad,0x1cad,0x1cad,0x11b6,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -#if !U_PLATFORM_IS_DARWIN_BASED -0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da, -0x16da,0x16da,0x16da,0x16da,0x16da,0x11ed,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x170b,0x170b,0x170b,0x170b,0x170b,0x170b,0x170b,0x170b,0x170b,0x170b,0x170b, -0x170b,0x170b,0x170b,0x170b,0x170b,0x11ed,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -0x11ae,0x11ae,0x11ae,0x11ae,0x11ba,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae,0x11ae, -#if !U_PLATFORM_IS_DARWIN_BASED -0x11ae,0x11ae,0x11ae,0x11ae,0x11ba,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7, -0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7, -0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7, -0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x11f5,0x1acc, -0x1acc,0x1acc,0x1acc,0x1acc,0x1acc,0x11fd,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24, -0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24, -0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24, -0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24, -0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1205,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c, -0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575, -0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575, -0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575, -0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1565, -0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d, -0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d, -0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d, -0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x156d, -0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575, -0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575, -0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575, -0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575, -0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d, -0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d, -0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d, -0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d,0x157d, -0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2, -0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2, -0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2, -0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2, -0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7, -0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7, -0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7, -0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7,0x19e7, -0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24, -0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24, -0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24, -0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24,0x1c24, -0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c, -0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c, -0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c, -0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c,0x1c4c, -0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c, -0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c, -0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c, -0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c,0x1c7c, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x11ae,0x11ae,0x11ae,0x11ae,0x11ba,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18, -0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18, -0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18, -0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x11f5,0x1afd, -0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,0x11fd,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55, -0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55, -0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55, -0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55, -0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1205,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad, -0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6, -0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6, -0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6, -0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x1596, -0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae, -0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae, -0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae, -0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x159e, -0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6, -0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6, -0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6, -0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6,0x15a6, -0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae, -0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae, -0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae, -0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae, -0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703, -0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703, -0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703, -0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703,0x1703, -0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18, -0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18, -0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18, -0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18,0x1a18, -0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55, -0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55, -0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55, -0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55,0x1c55, -0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d, -0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d, -0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d, -0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d,0x1c7d, -0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad, -0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad, -0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad, -0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad,0x1cad, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x285,0x28e,0x288,0x288,0x28b,0x282,0x282, -0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282, -#if !U_PLATFORM_IS_DARWIN_BASED -0x7b0,0x7aa,0x78f,0x786,0x77d,0x77a,0x771,0x78c,0x777,0x783,0x786,0x7a1,0x798,0x789,0x7ad,0x780, -0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x76e,0x795,0x792,0x79b,0x79b,0x79b,0x7aa, -0x771,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7bc,0x7b6,0x7b6,0x7b6,0x7b6,0x7b6,0x7b6,0x7b6,0x7b6,0x7b6, -0x7b6,0x7b6,0x7b6,0x7b6,0x7b6,0x7b6,0x7b6,0x7b6,0x7b6,0x7b6,0x7b6,0x777,0x77d,0x783,0x7a7,0x76b, -0x7a4,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3, -0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x777,0x79e,0x774,0x79b,0x282, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x7ce,0x7c8,0x7ad,0x7a4,0x79b,0x798,0x78f,0x7aa,0x795,0x7a1,0x7a4,0x7bf,0x7b6,0x7a7,0x7cb,0x79e, -0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x7b3,0x7b0,0x7b9,0x7b9,0x7b9,0x7c8, -0x78f,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4, -0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x795,0x79b,0x7a1,0x7c5,0x789, -0x7c2,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1, -0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x795,0x7bc,0x792,0x7b9,0x282, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd98, +0xe18,0xe28,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd98, +0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193, +0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1193,0x1113, +0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3, +0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x1153, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#if !U_PLATFORM_IS_DARWIN_BASED +0xba8,0xbaf,0xbb7,0xbbf,0x17f0,0x17f0,0x17f0,0xbc7,0xbcf,0xbd2,0x1820,0x1818,0xc05,0xd34,0xd38,0xd3c, +0x4f5,0x4f5,0x4f5,0x4f5,0xd44,0x1987,0xd4c,0xf5e,0x16a4,0xadd,0xae3,0x101d,0xbda,0x1858,0xc7f,0x4f5, +0x16b9,0x16ac,0x16b1,0x17f8,0xbe2,0xbea,0x1168,0x116e,0x1ba9,0xf7b,0x1b99,0x6e5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1bc9,0x1bc9,0x1bc9,0x1bc9,0x1bc9,0x1bc9,0x1bc9,0x1bc9,0x1bc9,0xfcd,0xfd5,0xfdd,0x4f5,0x4f5,0x4f5,0x4f5, +0xbf2,0xbf5,0xdd3,0x1c11,0x1015,0x6ed,0x4f5,0x10ae,0xcd5,0xd54,0x4f5,0x4f5,0x1b56,0xf11,0xf19,0x1c51, +0xc59,0xc60,0xc68,0x1a03,0x1bf1,0x4f5,0x1bd1,0xfed,0x1a0b,0xddb,0xde3,0xdeb,0x103d,0x6f5,0x4f5,0x4f5, +0x1a13,0x1a13,0x6fd,0x4f5,0x1c7e,0x10c6,0x1c76,0x10ce,0x1d26,0x11e0,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0xdf3,0x4f5,0x4f5,0x4f5,0x4f5,0x1d46,0x1208,0x120f,0x705,0x4f5,0x4f5,0x4f5,0x4f5, +0x1a70,0x1a72,0xe67,0xe6e,0x1a1b,0x1a23,0xdfb,0xf3e,0x1b4e,0xef9,0xf01,0xfe5,0x1b66,0x1b6a,0xf36,0x105d, +0xfb0,0xfb5,0x70d,0x4f5,0x10b6,0x10be,0x1bb9,0xfbd,0xf92,0xf98,0xfa0,0xfa8,0x4f5,0x4f5,0x4f5,0x4f5, +0x1cc6,0x1cbe,0x1158,0x1160,0x1c39,0x1c31,0x1084,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x1c21,0x1045,0x104d,0x1055, +0x1be9,0x1be1,0xffd,0x1150,0x1b72,0xf4e,0x715,0x4f5,0x1094,0x109c,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1d1e,0x11c2,0x71d,0x4f5,0x4f5,0x1c49,0x1c41,0x108c,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1cf6,0x1cee,0x11b2,0x1ce6,0x11aa,0x725,0x1c19,0x1035,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xba8,0xbaf,0xbb7,0xbbf,0x1821,0x1821,0x1821,0xbc7,0xbcf,0xbd2,0x1851,0x1849,0xc05,0xd34,0xd38,0xd3c, +0x4f5,0x4f5,0x4f5,0x4f5,0xd44,0x19b8,0xd4c,0xf5e,0x16d5,0xadd,0xae3,0x101d,0xbda,0x1889,0xc7f,0x4f5, +0x16ea,0x16dd,0x16e2,0x1829,0xbe2,0xbea,0x1168,0x116e,0x1bda,0xf7b,0x1bca,0x6e5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1bfa,0x1bfa,0x1bfa,0x1bfa,0x1bfa,0x1bfa,0x1bfa,0x1bfa,0x1bfa,0xfcd,0xfd5,0xfdd,0x4f5,0x4f5,0x4f5,0x4f5, +0xbf2,0xbf5,0xdd3,0x1c42,0x1015,0x6ed,0x4f5,0x10ae,0xcd5,0xd54,0x4f5,0x4f5,0x1b87,0xf11,0xf19,0x1c82, +0xc59,0xc60,0xc68,0x1a34,0x1c22,0x4f5,0x1c02,0xfed,0x1a3c,0xddb,0xde3,0xdeb,0x103d,0x6f5,0x4f5,0x4f5, +0x1a44,0x1a44,0x6fd,0x4f5,0x1caf,0x10c6,0x1ca7,0x10ce,0x1d57,0x11e0,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0xdf3,0x4f5,0x4f5,0x4f5,0x4f5,0x1d77,0x1208,0x120f,0x705,0x4f5,0x4f5,0x4f5,0x4f5, +0x1aa1,0x1aa3,0xe67,0xe6e,0x1a4c,0x1a54,0xdfb,0xf3e,0x1b7f,0xef9,0xf01,0xfe5,0x1b97,0x1b9b,0xf36,0x105d, +0xfb0,0xfb5,0x70d,0x4f5,0x10b6,0x10be,0x1bea,0xfbd,0xf92,0xf98,0xfa0,0xfa8,0x4f5,0x4f5,0x4f5,0x4f5, +0x1cf7,0x1cef,0x1158,0x1160,0x1c6a,0x1c62,0x1084,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x1c52,0x1045,0x104d,0x1055, +0x1c1a,0x1c12,0xffd,0x1150,0x1ba3,0xf4e,0x715,0x4f5,0x1094,0x109c,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1d4f,0x11c2,0x71d,0x4f5,0x4f5,0x1c7a,0x1c72,0x108c,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1d27,0x1d1f,0x11b2,0x1d17,0x11aa,0x725,0x1c4a,0x1035,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x110e,0x1113,0x111b,0x1122,0x1142,0x1148,0x4f5,0x4f5,0x118e,0x1192,0x119a,0x11d2,0x11d8,0x72d,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x11f0,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#if !U_PLATFORM_IS_DARWIN_BASED +0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd, +0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18cd,0x18d2,0xcdd,0xce4,0xce4,0xce4, +0x18da,0x18da,0x18da,0xcec,0x1c6e,0x1c6e,0x1c6e,0x1c6e,0x1c6e,0x1c6e,0x735,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b, +0x1a2b,0x1a2b,0x1a2d,0x1a2b,0x1a35,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a2b,0x1a38,0x1a2b,0x1a2b,0x1a2b,0x1a2b, +0x1a2b,0x73d,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1a7a,0x1a7a,0x1a7a,0x1a7a,0x1a7a,0x1a7a,0x1a7a,0x1a7a,0x1a7a,0x1a7a,0x1a7a,0x1a7a,0x1a7a,0x1a7a,0x1a7a,0x1a7a, +0x1a7a,0xe76,0x1005,0x745,0x4f5,0x4f5,0x749,0xf56,0x1c09,0x1c01,0x1025,0x102d,0x751,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x1d3e,0x1d36,0x1200,0x4f5,0x4f5,0x4f5,0x1b5e,0x1b5e,0xf21,0xf26,0xf2e,0x4f5,0x4f5,0x113a, +0x1a8a,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1cfe,0x1186,0x759,0x4f5,0x75d,0x1d16,0x1d16,0x1d16,0x1d16, +0x1d16,0x1d16,0x1d16,0x1d16,0x1d16,0x1d16,0x1d16,0x11a2,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1ba1,0x1ba1,0x1ba1,0xf6e,0xf73,0x765,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x16c1,0x16c1,0x16c1,0x16c1,0x16c1,0x16c1,0x16c1,0xaeb,0x16d1,0xaf3,0x16d2,0x16c9,0x16da,0x16e0,0x16e8,0xafb, +0x1810,0x1810,0x76d,0x4f5,0x4f5,0x4f5,0x4f5,0x11f8,0x1800,0x1800,0xbfd,0xcf4,0x4f5,0x4f5,0x4f5,0x4f5, +0x1719,0x1720,0xb03,0x1723,0xb0b,0xb13,0xb1b,0x171d,0xb23,0xb2b,0xb33,0x1722,0x172a,0x1719,0x1720,0x171c, +0x1723,0x172b,0x171a,0x1721,0x171d,0xb3a,0x16f0,0x16f8,0x16ff,0x1706,0x16f3,0x16fb,0x1702,0x1709,0xb42,0x1711, +0x1c96,0x1c96,0x1c96,0x1c96,0x1c96,0x1c96,0x1c96,0x1c96,0x1c96,0x1c96,0x1c96,0x1c96,0x1c96,0x1c96,0x1c96,0x1c96, +0x1c86,0x1c89,0x1c86,0x1c90,0x10fe,0x775,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe, +0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x18fe,0x1903,0xcdd,0xce4,0xce4,0xce4, +0x190b,0x190b,0x190b,0xcec,0x1c9f,0x1c9f,0x1c9f,0x1c9f,0x1c9f,0x1c9f,0x735,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c, +0x1a5c,0x1a5c,0x1a5e,0x1a5c,0x1a66,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a5c,0x1a69,0x1a5c,0x1a5c,0x1a5c,0x1a5c, +0x1a5c,0x73d,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1aab,0x1aab,0x1aab,0x1aab,0x1aab,0x1aab,0x1aab,0x1aab,0x1aab,0x1aab,0x1aab,0x1aab,0x1aab,0x1aab,0x1aab,0x1aab, +0x1aab,0xe76,0x1005,0x745,0x4f5,0x4f5,0x749,0xf56,0x1c3a,0x1c32,0x1025,0x102d,0x751,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x1d6f,0x1d67,0x1200,0x4f5,0x4f5,0x4f5,0x1b8f,0x1b8f,0xf21,0xf26,0xf2e,0x4f5,0x4f5,0x113a, +0x1abb,0x1d2f,0x1d2f,0x1d2f,0x1d2f,0x1d2f,0x1d2f,0x1d2f,0x1186,0x759,0x4f5,0x75d,0x1d47,0x1d47,0x1d47,0x1d47, +0x1d47,0x1d47,0x1d47,0x1d47,0x1d47,0x1d47,0x1d47,0x11a2,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1bd2,0x1bd2,0x1bd2,0xf6e,0xf73,0x765,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0xaeb,0x1702,0xaf3,0x1703,0x16fa,0x170b,0x1711,0x1719,0xafb, +0x1841,0x1841,0x76d,0x4f5,0x4f5,0x4f5,0x4f5,0x11f8,0x1831,0x1831,0xbfd,0xcf4,0x4f5,0x4f5,0x4f5,0x4f5, +0x174a,0x1751,0xb03,0x1754,0xb0b,0xb13,0xb1b,0x174e,0xb23,0xb2b,0xb33,0x1753,0x175b,0x174a,0x1751,0x174d, +0x1754,0x175c,0x174b,0x1752,0x174e,0xb3a,0x1721,0x1729,0x1730,0x1737,0x1724,0x172c,0x1733,0x173a,0xb42,0x1742, +0x1cc7,0x1cc7,0x1cc7,0x1cc7,0x1cc7,0x1cc7,0x1cc7,0x1cc7,0x1cc7,0x1cc7,0x1cc7,0x1cc7,0x1cc7,0x1cc7,0x1cc7,0x1cc7, +0x1cb7,0x1cba,0x1cb7,0x1cc1,0x10fe,0x775,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x1132,0x77d,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#if !U_PLATFORM_IS_DARWIN_BASED +0x1bd9,0x1bd9,0x1bd9,0x1bd9,0x1bd9,0x1bd9,0xff5,0x4f5,0x1cb6,0x1cae,0x1106,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1c0a,0x1c0a,0x1c0a,0x1c0a,0x1c0a,0x1c0a,0xff5,0x4f5,0x1ce7,0x1cdf,0x1106,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#if !U_PLATFORM_IS_DARWIN_BASED +0x4f5,0x4f5,0x4f5,0x781,0x1d2e,0x11e8,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x4f5,0x4f5,0x4f5,0x781,0x1d5f,0x11e8,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0xebe,0xec6,0xece,0xed6,0xede,0xee6,0xeed,0xef1,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +#if !U_PLATFORM_IS_DARWIN_BASED +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x789,0x1065,0x1c29,0x106b,0x1c29,0x1073,0x1078,0x107c,0x107c, +0x10d6,0x10de,0x1cce,0x10e6,0x1ca6,0x10ee,0x10f6,0x1d06,0x11ba,0x11ba,0x11ba,0x791,0x795,0x795,0x795,0x795, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x789,0x1065,0x1c5a,0x106b,0x1c5a,0x1073,0x1078,0x107c,0x107c, +0x10d6,0x10de,0x1cff,0x10e6,0x1cd7,0x10ee,0x10f6,0x1d37,0x11ba,0x11ba,0x11ba,0x791,0x795,0x795,0x795,0x795, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795, +0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x795, +#if !U_PLATFORM_IS_DARWIN_BASED +0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x796,0xb4a,0x1733,0x1733,0x1733,0x79e,0x79e,0x79e,0x79e, +0x1808,0x1808,0x1808,0x1808,0x1808,0x1808,0x1808,0x7a6,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x795,0x795,0x795,0x795,0x795,0x795,0x795,0x796,0xb4a,0x1764,0x1764,0x1764,0x79e,0x79e,0x79e,0x79e, +0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x7a6,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e, +0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e, +0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e, +#if !U_PLATFORM_IS_DARWIN_BASED +0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x198f,0xd5c,0x1997,0x1997,0xd60,0xe7e,0xe86,0xe8e, +0xe03,0x1a40,0x1a58,0xe0b,0x1a50,0xe13,0xe17,0xe1e,0xe26,0xe2d,0xe35,0xe3d,0xe3f,0xe3f,0xe3f,0xe3f, +0x1ab1,0x1ab9,0x1ab1,0x1abf,0x1ac7,0x1a92,0x1acf,0x1ad7,0x1ab1,0x1adf,0x1ae7,0x1aee,0x1af6,0x1a9a,0x1ab1,0x1af8, +0x1aa2,0x1aa9,0x1b00,0x1b06,0x1b8a,0x1b91,0x1b82,0x1b0e,0x1b16,0x1b1e,0x1b26,0x1bf9,0x1b2e,0x1b36,0xe96,0xe9e, +0x1a82,0x1a82,0x1a82,0xea6,0x1bb1,0x1bb1,0xf83,0xf8a,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x1c59,0x1c59,0x1c59,0x1c59,0x1c59,0x1c59,0x1c59,0x1c59, +0x1c59,0x1c59,0x1c59,0x1c59,0x1c59,0x1c59,0x1c5e,0x1c59,0x1c59,0x1c59,0x10a4,0x10a6,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6, +0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6, +0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6, +0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6, +0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1176,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde, +0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x1cde,0x117e, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b, +0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b, +0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b, +0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x124e,0x1217, +0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e, +0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e, +0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x121f,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x79e,0x19c0,0xd5c,0x19c8,0x19c8,0xd60,0xe7e,0xe86,0xe8e, +0xe03,0x1a71,0x1a89,0xe0b,0x1a81,0xe13,0xe17,0xe1e,0xe26,0xe2d,0xe35,0xe3d,0xe3f,0xe3f,0xe3f,0xe3f, +0x1ae2,0x1aea,0x1ae2,0x1af0,0x1af8,0x1ac3,0x1b00,0x1b08,0x1ae2,0x1b10,0x1b18,0x1b1f,0x1b27,0x1acb,0x1ae2,0x1b29, +0x1ad3,0x1ada,0x1b31,0x1b37,0x1bbb,0x1bc2,0x1bb3,0x1b3f,0x1b47,0x1b4f,0x1b57,0x1c2a,0x1b5f,0x1b67,0xe96,0xe9e, +0x1ab3,0x1ab3,0x1ab3,0xea6,0x1be2,0x1be2,0xf83,0xf8a,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x1c8a,0x1c8a,0x1c8a,0x1c8a,0x1c8a,0x1c8a,0x1c8a,0x1c8a, +0x1c8a,0x1c8a,0x1c8a,0x1c8a,0x1c8a,0x1c8a,0x1c8f,0x1c8a,0x1c8a,0x1c8a,0x10a4,0x10a6,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07, +0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07, +0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07, +0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07, +0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1176,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f, +0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x1d0f,0x117e, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c, +0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c, +0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c, +0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x124e,0x1217, +0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f, +0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f, +0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x121f,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +#if !U_PLATFORM_IS_DARWIN_BASED +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743, +0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1256,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1774,0x1774,0x1774,0x1774,0x1774,0x1774,0x1774,0x1774, +0x1774,0x1774,0x1774,0x1774,0x1774,0x1774,0x1774,0x1774,0x1256,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1223,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217, +#if !U_PLATFORM_IS_DARWIN_BASED +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1223,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60, +0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60, +0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60, +0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60, +0x1a60,0x125e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1266,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e, +0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e, +0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e, +0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e, +0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x126e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e, +0x1d0e,0x1d0e,0x1d0e,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, +0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, +0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, +0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, +0x15de,0x15de,0x15ce,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6, +0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6, +0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6, +0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6, +0x15e6,0x15e6,0x15d6,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, +0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, +0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, +0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, +0x15de,0x15de,0x15de,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6, +0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6, +0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6, +0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6,0x15e6, +0x15e6,0x15e6,0x15e6,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b, +0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b, +0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b, +0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b,0x173b, +0x173b,0x173b,0x173b,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60, +0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60, +0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60, +0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60,0x1a60, +0x1a60,0x1a60,0x1a60,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e, +0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e, +0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e, +0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e,0x1c9e, +0x1c9e,0x1c9e,0x1c9e,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6, +0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6, +0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6, +0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6,0x1cd6, +0x1cd6,0x1cd6,0x1cd6,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e, +0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e, +0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e, +0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e,0x1d0e, +0x1d0e,0x1d0e,0x1d0e,0x4d4,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a3,0x2ac,0x2a6, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1217,0x1223,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91, +0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91, +0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91, +0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91, +0x1a91,0x125e,0x1b6f,0x1b6f,0x1b6f,0x1b6f,0x1b6f,0x1b6f,0x1266,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf, +0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf, +0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf, +0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf, +0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x126e,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f, +0x1d3f,0x1d3f,0x1d3f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f, +0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f, +0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f, +0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f, +0x160f,0x160f,0x15ff,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617, +0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617, +0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617, +0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617, +0x1617,0x1617,0x1607,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f, +0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f, +0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f, +0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f,0x160f, +0x160f,0x160f,0x160f,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617, +0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617, +0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617, +0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617, +0x1617,0x1617,0x1617,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c, +0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c, +0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c, +0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c,0x176c, +0x176c,0x176c,0x176c,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91, +0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91, +0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91, +0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91, +0x1a91,0x1a91,0x1a91,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf, +0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf, +0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf, +0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf,0x1ccf, +0x1ccf,0x1ccf,0x1ccf,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07, +0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07, +0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07, +0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07,0x1d07, +0x1d07,0x1d07,0x1d07,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f, +0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f, +0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f, +0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f,0x1d3f, +0x1d3f,0x1d3f,0x1d3f,0x4d4,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a3,0x2ac,0x2a6, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x2a6,0x2a9,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0, +#if !U_PLATFORM_IS_DARWIN_BASED +0x2a0,0x2a0,0x2a0,0x2a0,0x7d4,0x7ce,0x7b3,0x7aa,0x7a1,0x79e,0x795,0x7b0,0x79b,0x7a7,0x7aa,0x7c5, +0x7bc,0x7ad,0x7d1,0x7a4,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x792,0x7b9,0x7b6, +0x7bf,0x7bf,0x7bf,0x7ce,0x795,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7da,0x7da,0x7da,0x7da,0x7da, +0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x79b, +0x7a1,0x7a7,0x7cb,0x78f,0x7c8,0x7dd,0x7dd,0x7dd,0x7dd,0x7dd,0x7dd,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7, +0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x79b, +0x7c2,0x798,0x7bf,0x2a0,0,0,0,0,0,0,0,0,0,0,0,0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x2a0,0x2a0,0x2a0,0x2a0,0x7f2,0x7ec,0x7d1,0x7c8,0x7bf,0x7bc,0x7b3,0x7ce,0x7b9,0x7c5,0x7c8,0x7e3, +0x7da,0x7cb,0x7ef,0x7c2,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7d7,0x7d4, +0x7dd,0x7dd,0x7dd,0x7ec,0x7b3,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8, +0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7b9, +0x7bf,0x7c5,0x7e9,0x7ad,0x7e6,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5, +0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7b9, +0x7e0,0x7b6,0x7dd,0x2a0,0,0,0,0,0,0,0,0,0,0,0,0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x291,0x291,0x291,0x291,0x291,0x2a0,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291, -0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291, -#if !U_PLATFORM_IS_DARWIN_BASED -0x294,0x609,0x7c5,0x7c8,0x60f,0x7c8,0x7c2,0x606,0x5fd,0x29a,0x61b,0x29d,0x7cb,0x5f4,0x612,0x7bf, -0x60c,0x618,0x5fa,0x5fa,0x600,0x297,0x606,0x603,0x5fd,0x5fa,0x61b,0x29d,0x5f7,0x5f7,0x5f7,0x609, -0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x624,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6, -0x624,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x615,0x624,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x624,0x61e, -0x621,0x621,0x2a3,0x2a3,0x2a3,0x2a3,0x61e,0x2a3,0x621,0x621,0x621,0x2a3,0x621,0x621,0x2a3,0x2a3, -0x61e,0x2a3,0x621,0x621,0x2a3,0x2a3,0x2a3,0x615,0x61e,0x621,0x621,0x2a3,0x621,0x2a3,0x61e,0x2a3, -0x2b2,0x62a,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9, -0x2af,0x627,0x2b2,0x62a,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x62a,0x2b2,0x2a9,0x2b2,0x2a9, -0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x630,0x627,0x2b2,0x2a9,0x2b2,0x62a,0x2b2,0x2a9,0x2b2,0x2a9, -0x2b2,0x627,0x633,0x62d,0x2b2,0x2a9,0x2b2,0x2a9,0x627,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x633, -0x62d,0x630,0x627,0x2b2,0x62a,0x2b2,0x2a9,0x2b2,0x62a,0x636,0x630,0x627,0x2b2,0x62a,0x2b2,0x2a9, -0x2b2,0x2a9,0x630,0x627,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9, -0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x630,0x627,0x2b2,0x2a9,0x2b2,0x62a,0x2b2,0x2a9,0x2b2,0x2a9, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x294,0x615,0x7e3,0x7e6,0x61b,0x7e6,0x7e0,0x612,0x609,0x29a,0x627,0x29d,0x7e9,0x600,0x61e,0x7dd, -0x618,0x624,0x606,0x606,0x60c,0x297,0x612,0x60f,0x609,0x606,0x627,0x29d,0x603,0x603,0x603,0x615, -0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x630,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6, -0x630,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x621,0x630,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x630,0x62a, -0x62d,0x62d,0x2a3,0x2a3,0x2a3,0x2a3,0x62a,0x2a3,0x62d,0x62d,0x62d,0x2a3,0x62d,0x62d,0x2a3,0x2a3, -0x62a,0x2a3,0x62d,0x62d,0x2a3,0x2a3,0x2a3,0x621,0x62a,0x62d,0x62d,0x2a3,0x62d,0x2a3,0x62a,0x2a3, -0x2b2,0x636,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9, -0x2af,0x633,0x2b2,0x636,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x636,0x2b2,0x2a9,0x2b2,0x2a9, -0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x63c,0x633,0x2b2,0x2a9,0x2b2,0x636,0x2b2,0x2a9,0x2b2,0x2a9, -0x2b2,0x633,0x63f,0x639,0x2b2,0x2a9,0x2b2,0x2a9,0x633,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x63f, -0x639,0x63c,0x633,0x2b2,0x636,0x2b2,0x2a9,0x2b2,0x636,0x642,0x63c,0x633,0x2b2,0x636,0x2b2,0x2a9, -0x2b2,0x2a9,0x63c,0x633,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9, -0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x63c,0x633,0x2b2,0x2a9,0x2b2,0x636,0x2b2,0x2a9,0x2b2,0x2a9, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2b2,0x2a9,0x2b2,0x2a9,0x2b2,0x2a9,0x2ac, -0x2b5,0x2c1,0x2c1,0x2b5,0x2c1,0x2b5,0x2c1,0x2c1,0x2b5,0x2c1,0x2c1,0x2c1,0x2b5,0x2b5,0x2c1,0x2c1, -0x2c1,0x2c1,0x2b5,0x2c1,0x2c1,0x2b5,0x2c1,0x2c1,0x2c1,0x2b5,0x2b5,0x2b5,0x2c1,0x2c1,0x2b5,0x2c1, -0x2c4,0x2b8,0x2c1,0x2b5,0x2c1,0x2b5,0x2c1,0x2c1,0x2b5,0x2c1,0x2b5,0x2b5,0x2c1,0x2b5,0x2c1,0x2c4, -0x2b8,0x2c1,0x2c1,0x2c1,0x2b5,0x2c1,0x2b5,0x2c1,0x2c1,0x2b5,0x2b5,0x2be,0x2c1,0x2b5,0x2b5,0x2b5, -#if !U_PLATFORM_IS_DARWIN_BASED -0x2be,0x2be,0x2be,0x2be,0x2c7,0x2c7,0x2bb,0x2c7,0x2c7,0x2bb,0x2c7,0x2c7,0x2bb,0x2c4,0x639,0x2c4, -0x639,0x2c4,0x639,0x2c4,0x639,0x2c4,0x639,0x2c4,0x639,0x2c4,0x639,0x2c4,0x639,0x2b5,0x2c4,0x2b8, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x2be,0x2be,0x2be,0x2be,0x2c7,0x2c7,0x2bb,0x2c7,0x2c7,0x2bb,0x2c7,0x2c7,0x2bb,0x2c4,0x645,0x2c4, -0x645,0x2c4,0x645,0x2c4,0x645,0x2c4,0x645,0x2c4,0x645,0x2c4,0x645,0x2c4,0x645,0x2b5,0x2c4,0x2b8, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x2c4,0x2b8,0x2c4,0x2b8,0x2c1,0x2b5,0x2c4,0x2b8,0x2c4,0x2b8,0x2c4,0x2b8,0x2c4,0x2b8,0x2c4,0x2b8, -#if !U_PLATFORM_IS_DARWIN_BASED -0x2b8,0x2c7,0x2c7,0x2bb,0x2c4,0x2b8,0x9a2,0x9a2,0x9a5,0x99f,0x2c4,0x2b8,0x2c4,0x2b8,0x2c4,0x2b8, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x2b8,0x2c7,0x2c7,0x2bb,0x2c4,0x2b8,0x9d8,0x9d8,0x9db,0x9d5,0x2c4,0x2b8,0x2c4,0x2b8,0x2c4,0x2b8, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x2c4,0x2b8,0x2c4,0x2b8,0x2c4,0x2b8,0x2c4,0x2b8,0x2c4,0x2b8,0x2c4,0x2b8,0x2c4,0x2b8,0x2c4,0x2b8, -#if !U_PLATFORM_IS_DARWIN_BASED -0x2c4,0x2b8,0x2c4,0x2b8,0x9a5,0x99f,0x9a5,0x99f,0x9a2,0x99c,0x9a5,0x99f,0xb61,0xc63,0x9a2,0x99c, -0x9a2,0x99c,0x9a5,0x99f,0x9a5,0x99f,0x9a5,0x99f,0x9a5,0x99f,0x9a5,0x99f,0x9a5,0x99f,0x9a5,0x99f, -0xc63,0xc63,0xc63,0xd5c,0xd5c,0xd5c,0xd5f,0xd5f,0xd5c,0xd5f,0xd5f,0xd5c,0xd5c,0xd5f,0xea3,0xea6, -0xea6,0xea6,0xea6,0xea3,0xea6,0xea3,0xea6,0xea3,0xea6,0xea3,0xea6,0xea3,0x2ca,0x63c,0x2ca,0x2ca, -0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x63c,0x2ca,0x2ca, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x2c4,0x2b8,0x2c4,0x2b8,0x9db,0x9d5,0x9db,0x9d5,0x9d8,0x9d2,0x9db,0x9d5,0xb9a,0xc9f,0x9d8,0x9d2, -0x9d8,0x9d2,0x9db,0x9d5,0x9db,0x9d5,0x9db,0x9d5,0x9db,0x9d5,0x9db,0x9d5,0x9db,0x9d5,0x9db,0x9d5, -0xc9f,0xc9f,0xc9f,0xd98,0xd98,0xd98,0xd9b,0xd9b,0xd98,0xd9b,0xd9b,0xd98,0xd98,0xd9b,0xedf,0xee2, -0xee2,0xee2,0xee2,0xedf,0xee2,0xedf,0xee2,0xedf,0xee2,0xedf,0xee2,0xedf,0x2ca,0x648,0x2ca,0x2ca, -0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x648,0x2ca,0x2ca, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca, -0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2cd,0x2ca,0x2ca,0x2ca, -0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca, -#if !U_PLATFORM_IS_DARWIN_BASED -0x2ca,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0xc66,0xc66,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5, -0x2e5,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2d9,0x2d9,0x2d6,0x2d6,0x642,0x2d6,0x2dc,0x645, -0x2df,0x645,0x645,0x645,0x2df,0x645,0x2dc,0x2dc,0x648,0x2e2,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6, -0x63f,0x63f,0x63f,0x63f,0x2d3,0x63f,0x2d6,0xada,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2d0,0x2d0,0x2d0, -0x2d0,0x2d0,0x9b1,0x9b1,0x9ae,0x9ab,0x9ae,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69, -0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b, -0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b, -0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b, -0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b, -0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64e,0x64e,0x906,0x64e,0x64e,0x909,0xadd,0xadd, -0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xadd,0xc1b,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c, -0xe6a,0xe6a,0xe6a,0xe6a,0xe6d,0xd2f,0xd2f,0xd2f,0x651,0x651,0xae0,0xc60,0xc60,0xc60,0xc60,0xc60, -0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xf51,0xf4e,0xf51,0xf4e,0x2f1,0x2fa,0xf51,0xf4e, -9,9,0x300,0xea9,0xea9,0xea9,0x2e8,0x14a6,9,9,9,9,0x2fd,0x2eb,0x30f,0x2ee, -0x30f,0x30f,0x30f,9,0x30f,9,0x30f,0x30f,0x306,0x657,0x657,0x657,0x657,0x657,0x657,0x657, -0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,9,0x657,0x657,0x657,0x657,0x657, -0x657,0x657,0x30f,0x30f,0x306,0x306,0x306,0x306,0x306,0x654,0x654,0x654,0x654,0x654,0x654,0x654, -0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x654,0x303,0x654,0x654,0x654,0x654,0x654, -0x654,0x654,0x306,0x306,0x306,0x306,0x306,0xf51,0x312,0x312,0x315,0x30f,0x30f,0x312,0x309,0x9b4, -0xb6a,0xb67,0x30c,0x9b4,0x30c,0x9b4,0x30c,0x9b4,0x30c,0x9b4,0x2f7,0x2f4,0x2f7,0x2f4,0x2f7,0x2f4, -0x2f7,0x2f4,0x2f7,0x2f4,0x2f7,0x2f4,0x2f7,0x2f4,0x312,0x312,0x309,0x303,0xb19,0xb16,0xb64,0xc6f, -0xc6c,0xc72,0xc6f,0xc6c,0xd62,0xd65,0xd65,0xd65,0x9c3,0x663,0x321,0x324,0x321,0x321,0x321,0x324, -0x321,0x321,0x321,0x321,0x324,0x9c3,0x324,0x321,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660, -0x660,0x663,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660, -0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a, -0x65a,0x65d,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a,0x65a, -0x65a,0x65a,0x65a,0x65a,0x9bd,0x65d,0x31b,0x31e,0x31b,0x31b,0x31b,0x31e,0x31b,0x31b,0x31b,0x31b, -0x31e,0x9bd,0x31e,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x2ca,0x9de,0x9de,0x9de,0x9de,0x9de,0xca2,0xca2,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5, -0x2e5,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2dc,0x2d9,0x2d9,0x2d6,0x2d6,0x64e,0x2d6,0x2dc,0x651, -0x2df,0x651,0x651,0x651,0x2df,0x651,0x2dc,0x2dc,0x654,0x2e2,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6, -0x64b,0x64b,0x64b,0x64b,0x2d3,0x64b,0x2d6,0xb13,0x2e5,0x2e5,0x2e5,0x2e5,0x2e5,0x2d0,0x2d0,0x2d0, -0x2d0,0x2d0,0x9e7,0x9e7,0x9e4,0x9e1,0x9e4,0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0xca5, -0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657, -0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657, -0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657, -0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657, -0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x657,0x65a,0x65a,0x93c,0x65a,0x65a,0x93f,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xc54,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68, -0xea6,0xea6,0xea6,0xea6,0xea9,0xd6b,0xd6b,0xd6b,0x65d,0x65d,0xb19,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c, -0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xc9c,0xf8d,0xf8a,0xf8d,0xf8a,0x2f1,0x2fa,0xf8d,0xf8a, -9,9,0x300,0xee5,0xee5,0xee5,0x2e8,0x14e2,9,9,9,9,0x2fd,0x2eb,0x30f,0x2ee, -0x30f,0x30f,0x30f,9,0x30f,9,0x30f,0x30f,0x306,0x663,0x663,0x663,0x663,0x663,0x663,0x663, -0x663,0x663,0x663,0x663,0x663,0x663,0x663,0x663,0x663,0x663,9,0x663,0x663,0x663,0x663,0x663, -0x663,0x663,0x30f,0x30f,0x306,0x306,0x306,0x306,0x306,0x660,0x660,0x660,0x660,0x660,0x660,0x660, -0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x660,0x303,0x660,0x660,0x660,0x660,0x660, -0x660,0x660,0x306,0x306,0x306,0x306,0x306,0xf8d,0x312,0x312,0x315,0x30f,0x30f,0x312,0x309,0x9ea, -0xba3,0xba0,0x30c,0x9ea,0x30c,0x9ea,0x30c,0x9ea,0x30c,0x9ea,0x2f7,0x2f4,0x2f7,0x2f4,0x2f7,0x2f4, -0x2f7,0x2f4,0x2f7,0x2f4,0x2f7,0x2f4,0x2f7,0x2f4,0x312,0x312,0x309,0x303,0xb52,0xb4f,0xb9d,0xcab, -0xca8,0xcae,0xcab,0xca8,0xd9e,0xda1,0xda1,0xda1,0x9f9,0x66f,0x321,0x324,0x321,0x321,0x321,0x324, -0x321,0x321,0x321,0x321,0x324,0x9f9,0x324,0x321,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c, -0x66c,0x66f,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c, -0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666, -0x666,0x669,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666,0x666, -0x666,0x666,0x666,0x666,0x9f3,0x669,0x31b,0x31e,0x31b,0x31b,0x31b,0x31e,0x31b,0x31b,0x31b,0x31b, -0x31e,0x9f3,0x31e,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x324,0x31e,0x321,0x31b,0x321,0x31b, -#if !U_PLATFORM_IS_DARWIN_BASED -0x321,0x31b,0x321,0x31b,0x321,0x31b,0x318,0x912,0x915,0x8f7,0x8f7,0x10fb,0x9b7,0x9b7,0xb70,0xb6d, -0x9c0,0x9ba,0x9c0,0x9ba,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x321,0x31b,0x321,0x31b,0x321,0x31b,0x318,0x948,0x94b,0x92d,0x92d,0x1137,0x9ed,0x9ed,0xba9,0xba6, -0x9f6,0x9f0,0x9f6,0x9f0,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b, -0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b,0x321,0x31b, -#if !U_PLATFORM_IS_DARWIN_BASED -0x321,0x31b,0x321,0x31b,0x321,0x324,0x31e,0x321,0x31b,0xb70,0xb6d,0x321,0x31b,0xb70,0xb6d,0x321, -0x31b,0xb70,0xb6d,0xeac,0x324,0x31e,0x324,0x31e,0x321,0x31b,0x324,0x31e,0x321,0x31b,0x324,0x31e, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x321,0x31b,0x321,0x31b,0x321,0x324,0x31e,0x321,0x31b,0xba9,0xba6,0x321,0x31b,0xba9,0xba6,0x321, -0x31b,0xba9,0xba6,0xee8,0x324,0x31e,0x324,0x31e,0x321,0x31b,0x324,0x31e,0x321,0x31b,0x324,0x31e, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x324,0x31e,0x324,0x31e,0x321,0x31b,0x324,0x31e,0x324,0x31e,0x324,0x31e,0x321,0x31b,0x324,0x31e, -#if !U_PLATFORM_IS_DARWIN_BASED -0x9c3,0x9bd,0x324,0x31e,0x324,0x31e,0x324,0x31e,0x324,0x31e,0xd6b,0xd68,0x324,0x31e,0xeaf,0xeac, -0xeaf,0xeac,0xeaf,0xeac,0xbdc,0xbd9,0xbdc,0xbd9,0xbdc,0xbd9,0xbdc,0xbd9,0xbdc,0xbd9,0xbdc,0xbd9, -0xbdc,0xbd9,0xbdc,0xbd9,0xedc,0xed9,0xedc,0xed9,0xfcf,0xfcc,0xfcf,0xfcc,0xfcf,0xfcc,0xfcf,0xfcc, -0xfcf,0xfcc,0xfcf,0xfcc,0xfcf,0xfcc,0xfcf,0xfcc,0x1134,0x1131,0x130e,0x130b,0x14df,0x14dc,0x14df,0x14dc, -0x14df,0x14dc,0x14df,0x14dc,0xc,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x9f9,0x9f3,0x324,0x31e,0x324,0x31e,0x324,0x31e,0x324,0x31e,0xda7,0xda4,0x324,0x31e,0xeeb,0xee8, -0xeeb,0xee8,0xeeb,0xee8,0xc15,0xc12,0xc15,0xc12,0xc15,0xc12,0xc15,0xc12,0xc15,0xc12,0xc15,0xc12, -0xc15,0xc12,0xc15,0xc12,0xf18,0xf15,0xf18,0xf15,0x100b,0x1008,0x100b,0x1008,0x100b,0x1008,0x100b,0x1008, -0x100b,0x1008,0x100b,0x1008,0x100b,0x1008,0x100b,0x1008,0x1170,0x116d,0x134a,0x1347,0x151b,0x1518,0x151b,0x1518, -0x151b,0x1518,0x151b,0x1518,0xc,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0x333,0xc, -0xc,0x336,0x327,0x327,0x327,0x32a,0x327,0x327,0xc,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d, -0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d, -#if !U_PLATFORM_IS_DARWIN_BASED -0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x330,0xc,0x870,0x9c6,0xc, -0xc,0x14a9,0x14a9,0x13c2,0xf,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936, -0x936,0x936,0x936,0x936,0x936,0x936,0xd6e,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936, -0x936,0x936,0x936,0x936,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0xeb2,0x339, -0x339,0x339,0x345,0x339,0x33c,0x339,0x339,0x348,0x939,0xd71,0xd74,0xd71,0xf,0xf,0xf,0xf, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x32d,0x330,0xc,0x8a6,0x9fc,0xc, -0xc,0x14e5,0x14e5,0x13fe,0xf,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c, -0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0xdaa,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c, -0x96c,0x96c,0x96c,0x96c,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0xeee,0x339, -0x339,0x339,0x345,0x339,0x33c,0x339,0x339,0x348,0x96f,0xdad,0xdb0,0xdad,0xf,0xf,0xf,0xf, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0xf,0xf,0xf,0xf,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b, -0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0xf, -0xf,0xf,0xf,0xf,0x34b,0x34b,0x34b,0x342,0x33f,0xf,0xf,0xf,0xf,0xf,0xf,0xf, -#if !U_PLATFORM_IS_DARWIN_BASED -0xf,0xf,0xf,0xf,0xc87,0xc87,0xc87,0xc87,0x13c5,0x14ac,0xf5a,0xf5a,0xf5a,0xf57,0xf57,0xd7d, -0x876,0xc81,0xc7e,0xc7e,0xc75,0xc75,0xc75,0xc75,0xc75,0xc75,0xf54,0xf54,0xf54,0xf54,0xf54,0x873, -0x14a3,0x12,0xd7a,0x879,0x12d5,0x366,0x369,0x369,0x369,0x369,0x369,0x366,0x366,0x366,0x366,0x366, -0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0xf5d, -0xf5d,0xf5d,0xf5d,0xf5d,0x87c,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x8fd, -0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0xb10,0xb10,0xb10,0xc75,0xc7b,0xc78,0xd77,0xd77,0xd77, -0xd77,0xd77,0xd77,0x12d2,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x360,0x35d, -0x35a,0x357,0xb73,0xb73,0x8fa,0x366,0x366,0x372,0x366,0x36c,0x36c,0x36c,0x36c,0x366,0x366,0x366, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xf,0xf,0xf,0xf,0xcc3,0xcc3,0xcc3,0xcc3,0x1401,0x14e8,0xf96,0xf96,0xf96,0xf93,0xf93,0xdb9, -0x8ac,0xcbd,0xcba,0xcba,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xf90,0xf90,0xf90,0xf90,0xf90,0x8a9, -0x14df,0x12,0xdb6,0x8af,0x1311,0x366,0x369,0x369,0x369,0x369,0x369,0x366,0x366,0x366,0x366,0x366, -0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0xf99, -0xf99,0xf99,0xf99,0xf99,0x8b2,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x933, -0x933,0x933,0x933,0x933,0x933,0x933,0x933,0xb49,0xb49,0xb49,0xcb1,0xcb7,0xcb4,0xdb3,0xdb3,0xdb3, -0xdb3,0xdb3,0xdb3,0x130e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x94e,0x360,0x35d, -0x35a,0x357,0xbac,0xbac,0x930,0x366,0x366,0x372,0x366,0x36c,0x36c,0x36c,0x36c,0x366,0x366,0x366, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366, -0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366, -0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366, -#if !U_PLATFORM_IS_DARWIN_BASED -0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x9cc,0x9cc,0x366,0x366,0x366,0x366,0x366,0x9cc, -0x369,0x366,0x369,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x9cc, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0xa02,0xa02,0x366,0x366,0x366,0x366,0x366,0xa02, -0x369,0x366,0x369,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0x366,0xa02, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x366,0x366,0x366,0x369,0x375,0x366,0x351,0x351,0x351,0x351,0x351,0x351,0x351,0x34e,0x357,0x354, -#if !U_PLATFORM_IS_DARWIN_BASED -0x354,0x351,0x351,0x351,0x351,0x36f,0x36f,0x351,0x351,0x357,0x354,0x354,0x354,0x351,0xc84,0xc84, -0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x9cc,0x9cc,0x9cc,0x9c9,0x9c9,0xc84, -0x9e1,0x9e1,0x9e1,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9d8,0x9db,0x9d8,0x15,0x9e4, -0x9de,0x9cf,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de, -0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0x9de,0xc8a,0xc8a,0xc8a, -0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5, -0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x15,0x15,0xc8a,0xc8a,0xc8a, -0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0, -0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xfe1,0xfe1, -0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1, -0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea, -0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea, -0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7, -0x9e7,0xb76,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7, -0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7, -0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xef7,0xeeb,0xeeb,0xeeb,0xeeb,0xeeb, -0xeeb,0xeeb,0xeeb,0xeeb,0xefa,0xefa,0xeee,0xeee,0xef1,0xf00,0xefd,0x10e,0x10e,0x10e,0x10e,0x10e, -0x18a2,0x18a2,0x18a2,0x18a2,0x18a2,0x18a2,0x18a2,0x18a2,0x18a2,0x18a2,0x18a2,0x25e,0x25e,0x25e,0x25e,0x25e, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x237,0x237,0x237,0x237,0x237,0x237,0x237, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x354,0x351,0x351,0x351,0x351,0x36f,0x36f,0x351,0x351,0x357,0x354,0x354,0x354,0x351,0xcc0,0xcc0, -0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0x363,0xa02,0xa02,0xa02,0x9ff,0x9ff,0xcc0, -0xa17,0xa17,0xa17,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa11,0xa0e,0xa11,0xa0e,0x15,0xa1a, -0xa14,0xa05,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14, -0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xa14,0xcc6,0xcc6,0xcc6, -0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b, -0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0x15,0x15,0xcc6,0xcc6,0xcc6, -0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c, -0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0x101d,0x101d, -0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d, -0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20, -0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20, -0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d, -0xa1d,0xbaf,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xf30,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33, -0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33, -0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf27,0xf27,0xf27,0xf27,0xf27, -0xf27,0xf27,0xf27,0xf27,0xf36,0xf36,0xf2a,0xf2a,0xf2d,0xf3c,0xf39,0x10e,0x10e,0x10e,0x10e,0x10e, -0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x25e,0x25e,0x25e,0x25e,0x25e, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x237,0x237,0x237,0x237,0x237,0x237,0x237, +0,0,0,0,0x2af,0x2af,0x2af,0x2af,0x2af,0x2be,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af, +0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af, +#if !U_PLATFORM_IS_DARWIN_BASED +0x2af,0x2af,0x2af,0x2af,0x2b2,0x62a,0x7e9,0x7ec,0x630,0x7ec,0x7e6,0x627,0x61e,0x2b8,0x63c,0x2bb, +0x7ef,0x615,0x633,0x7e3,0x62d,0x639,0x61b,0x61b,0x621,0x2b5,0x627,0x624,0x61e,0x61b,0x63c,0x2bb, +0x618,0x618,0x618,0x62a,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x645,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4, +0x2c4,0x2c4,0x2c4,0x2c4,0x645,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x636,0x645,0x2c4,0x2c4,0x2c4, +0x2c4,0x2c4,0x645,0x63f,0x642,0x642,0x2c1,0x2c1,0x2c1,0x2c1,0x63f,0x2c1,0x642,0x642,0x642,0x2c1, +0x642,0x642,0x2c1,0x2c1,0x63f,0x2c1,0x642,0x642,0x2c1,0x2c1,0x2c1,0x636,0x63f,0x642,0x642,0x2c1, +0x642,0x2c1,0x63f,0x2c1,0x2d0,0x64b,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7, +0x2d0,0x2c7,0x2d0,0x2c7,0x2cd,0x648,0x2d0,0x64b,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x64b, +0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x651,0x648,0x2d0,0x2c7,0x2d0,0x64b, +0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x648,0x654,0x64e,0x2d0,0x2c7,0x2d0,0x2c7,0x648,0x2d0,0x2c7,0x2d0, +0x2c7,0x2d0,0x2c7,0x654,0x64e,0x651,0x648,0x2d0,0x64b,0x2d0,0x2c7,0x2d0,0x64b,0x657,0x651,0x648, +0x2d0,0x64b,0x2d0,0x2c7,0x2d0,0x2c7,0x651,0x648,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7, +0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x651,0x648,0x2d0,0x2c7,0x2d0,0x64b, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x2af,0x2af,0x2af,0x2af,0x2b2,0x636,0x807,0x80a,0x63c,0x80a,0x804,0x633,0x62a,0x2b8,0x648,0x2bb, +0x80d,0x621,0x63f,0x801,0x639,0x645,0x627,0x627,0x62d,0x2b5,0x633,0x630,0x62a,0x627,0x648,0x2bb, +0x624,0x624,0x624,0x636,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x651,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4, +0x2c4,0x2c4,0x2c4,0x2c4,0x651,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x642,0x651,0x2c4,0x2c4,0x2c4, +0x2c4,0x2c4,0x651,0x64b,0x64e,0x64e,0x2c1,0x2c1,0x2c1,0x2c1,0x64b,0x2c1,0x64e,0x64e,0x64e,0x2c1, +0x64e,0x64e,0x2c1,0x2c1,0x64b,0x2c1,0x64e,0x64e,0x2c1,0x2c1,0x2c1,0x642,0x64b,0x64e,0x64e,0x2c1, +0x64e,0x2c1,0x64b,0x2c1,0x2d0,0x657,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7, +0x2d0,0x2c7,0x2d0,0x2c7,0x2cd,0x654,0x2d0,0x657,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x657, +0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x65d,0x654,0x2d0,0x2c7,0x2d0,0x657, +0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x654,0x660,0x65a,0x2d0,0x2c7,0x2d0,0x2c7,0x654,0x2d0,0x2c7,0x2d0, +0x2c7,0x2d0,0x2c7,0x660,0x65a,0x65d,0x654,0x2d0,0x657,0x2d0,0x2c7,0x2d0,0x657,0x663,0x65d,0x654, +0x2d0,0x657,0x2d0,0x2c7,0x2d0,0x2c7,0x65d,0x654,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7, +0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x65d,0x654,0x2d0,0x2c7,0x2d0,0x657, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2c7,0x2d0,0x2d0,0x2c7,0x2d0, +0x2c7,0x2d0,0x2c7,0x2ca,0x2d3,0x2df,0x2df,0x2d3,0x2df,0x2d3,0x2df,0x2df,0x2d3,0x2df,0x2df,0x2df, +0x2d3,0x2d3,0x2df,0x2df,0x2df,0x2df,0x2d3,0x2df,0x2df,0x2d3,0x2df,0x2df,0x2df,0x2d3,0x2d3,0x2d3, +0x2df,0x2df,0x2d3,0x2df,0x2e2,0x2d6,0x2df,0x2d3,0x2df,0x2d3,0x2df,0x2df,0x2d3,0x2df,0x2d3,0x2d3, +0x2df,0x2d3,0x2df,0x2e2,0x2d6,0x2df,0x2df,0x2df,0x2d3,0x2df,0x2d3,0x2df,0x2df,0x2d3,0x2d3,0x2dc, +0x2df,0x2d3,0x2d3,0x2d3,0x2dc,0x2dc,0x2dc,0x2dc,0x2e5,0x2e5,0x2d9,0x2e5,0x2e5,0x2d9,0x2e5,0x2e5, +#if !U_PLATFORM_IS_DARWIN_BASED +0x2d9,0x2e2,0x65a,0x2e2,0x65a,0x2e2,0x65a,0x2e2,0x65a,0x2e2,0x65a,0x2e2,0x65a,0x2e2,0x65a,0x2e2, +0x65a,0x2d3,0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6,0x2df,0x2d3,0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6, +0x2e2,0x2d6,0x2e2,0x2d6,0x2d6,0x2e5,0x2e5,0x2d9,0x2e2,0x2d6,0x9c3,0x9c3,0x9c6,0x9c0,0x2e2,0x2d6, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x2d9,0x2e2,0x666,0x2e2,0x666,0x2e2,0x666,0x2e2,0x666,0x2e2,0x666,0x2e2,0x666,0x2e2,0x666,0x2e2, +0x666,0x2d3,0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6,0x2df,0x2d3,0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6, +0x2e2,0x2d6,0x2e2,0x2d6,0x2d6,0x2e5,0x2e5,0x2d9,0x2e2,0x2d6,0x9f9,0x9f9,0x9fc,0x9f6,0x2e2,0x2d6, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6, +#if !U_PLATFORM_IS_DARWIN_BASED +0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6,0x9c6,0x9c0,0x9c6,0x9c0,0x9c3,0x9bd,0x9c6,0x9c0, +0xb88,0xc90,0x9c3,0x9bd,0x9c3,0x9bd,0x9c6,0x9c0,0x9c6,0x9c0,0x9c6,0x9c0,0x9c6,0x9c0,0x9c6,0x9c0, +0x9c6,0x9c0,0x9c6,0x9c0,0xc90,0xc90,0xc90,0xd8f,0xd8f,0xd8f,0xd92,0xd92,0xd8f,0xd92,0xd92,0xd8f, +0xd8f,0xd92,0xed3,0xed6,0xed6,0xed6,0xed6,0xed3,0xed6,0xed3,0xed6,0xed3,0xed6,0xed3,0xed6,0xed3, +0x2e8,0x65d,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8, +0x2e8,0x65d,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6,0x2e2,0x2d6,0x9fc,0x9f6,0x9fc,0x9f6,0x9f9,0x9f3,0x9fc,0x9f6, +0xbbe,0xcc6,0x9f9,0x9f3,0x9f9,0x9f3,0x9fc,0x9f6,0x9fc,0x9f6,0x9fc,0x9f6,0x9fc,0x9f6,0x9fc,0x9f6, +0x9fc,0x9f6,0x9fc,0x9f6,0xcc6,0xcc6,0xcc6,0xdc5,0xdc5,0xdc5,0xdc8,0xdc8,0xdc5,0xdc8,0xdc8,0xdc5, +0xdc5,0xdc8,0xf09,0xf0c,0xf0c,0xf0c,0xf0c,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf0c,0xf09, +0x2e8,0x669,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8, +0x2e8,0x669,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8, +0x2eb,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x2e8, +#if !U_PLATFORM_IS_DARWIN_BASED +0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0xc93,0xc93,0x303,0x303,0x303,0x303, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x2e8,0x2e8,0x2e8,0x2e8,0x2e8,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0xcc9,0xcc9,0x303,0x303,0x303,0x303, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x303,0x303,0x303,0x303,0x303,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2fa,0x2f7,0x2f7,0x2f4,0x2f4, +#if !U_PLATFORM_IS_DARWIN_BASED +0x663,0x2f4,0x2fa,0x666,0x2fd,0x666,0x666,0x666,0x2fd,0x666,0x2fa,0x2fa,0x669,0x300,0x2f4,0x2f4, +0x2f4,0x2f4,0x2f4,0x2f4,0x660,0x660,0x660,0x660,0x2f1,0x660,0x2f4,0xb01,0x303,0x303,0x303,0x303, +0x303,0x2ee,0x2ee,0x2ee,0x2ee,0x2ee,0x9d2,0x9d2,0x9cf,0x9cc,0x9cf,0xc96,0xc96,0xc96,0xc96,0xc96, +0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0xc96,0x66c,0x66c,0x66c,0x66c, +0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c, +0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c, +0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c, +0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66c,0x66f,0x66f,0x927,0x66f, +0x66f,0x92a,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xc45,0xd5c,0xd5c,0xd5c,0xd5c, +0xd5c,0xd5c,0xd5c,0xd5c,0xe9a,0xe9a,0xe9a,0xe9a,0xe9d,0xd5f,0xd5f,0xd5f,0x672,0x672,0xb07,0xc8d, +0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xc8d,0xf81,0xf7e,0xf81,0xf7e, +0x30f,0x318,0xf81,0xf7e,9,9,0x31e,0xed9,0xed9,0xed9,0x306,0x14d6,9,9,9,9, +0x31b,0x309,0x32d,0x30c,0x32d,0x32d,0x32d,9,0x32d,9,0x32d,0x32d,0x324,0x678,0x678,0x678, +0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,9,0x678, +0x678,0x678,0x678,0x678,0x678,0x678,0x32d,0x32d,0x324,0x324,0x324,0x324,0x324,0x675,0x675,0x675, +0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x675,0x321,0x675, +0x675,0x675,0x675,0x675,0x675,0x675,0x324,0x324,0x324,0x324,0x324,0xf81,0x330,0x330,0x333,0x32d, +0x32d,0x330,0x327,0x9d5,0xb91,0xb8e,0x32a,0x9d5,0x32a,0x9d5,0x32a,0x9d5,0x32a,0x9d5,0x315,0x312, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x66f,0x2f4,0x2fa,0x672,0x2fd,0x672,0x672,0x672,0x2fd,0x672,0x2fa,0x2fa,0x675,0x300,0x2f4,0x2f4, +0x2f4,0x2f4,0x2f4,0x2f4,0x66c,0x66c,0x66c,0x66c,0x2f1,0x66c,0x2f4,0xb37,0x303,0x303,0x303,0x303, +0x303,0x2ee,0x2ee,0x2ee,0x2ee,0x2ee,0xa08,0xa08,0xa05,0xa02,0xa05,0xccc,0xccc,0xccc,0xccc,0xccc, +0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0x678,0x678,0x678,0x678, +0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678, +0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678, +0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678, +0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x678,0x67b,0x67b,0x95d,0x67b, +0x67b,0x960,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xc7b,0xd92,0xd92,0xd92,0xd92, +0xd92,0xd92,0xd92,0xd92,0xed0,0xed0,0xed0,0xed0,0xed3,0xd95,0xd95,0xd95,0x67e,0x67e,0xb3d,0xcc3, +0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xfb7,0xfb4,0xfb7,0xfb4, +0x30f,0x318,0xfb7,0xfb4,9,9,0x31e,0xf0f,0xf0f,0xf0f,0x306,0x150c,9,9,9,9, +0x31b,0x309,0x32d,0x30c,0x32d,0x32d,0x32d,9,0x32d,9,0x32d,0x32d,0x324,0x684,0x684,0x684, +0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,9,0x684, +0x684,0x684,0x684,0x684,0x684,0x684,0x32d,0x32d,0x324,0x324,0x324,0x324,0x324,0x681,0x681,0x681, +0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x321,0x681, +0x681,0x681,0x681,0x681,0x681,0x681,0x324,0x324,0x324,0x324,0x324,0xfb7,0x330,0x330,0x333,0x32d, +0x32d,0x330,0x327,0xa0b,0xbc7,0xbc4,0x32a,0xa0b,0x32a,0xa0b,0x32a,0xa0b,0x32a,0xa0b,0x315,0x312, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x315,0x312,0x315,0x312,0x315,0x312,0x315,0x312,0x315,0x312,0x315,0x312,0x330,0x330,0x327,0x321, +#if !U_PLATFORM_IS_DARWIN_BASED +0xb40,0xb3d,0xb8b,0xc9c,0xc99,0xc9f,0xc9c,0xc99,0xd95,0xd98,0xd98,0xd98,0x9e4,0x684,0x33f,0x342, +0x33f,0x33f,0x33f,0x342,0x33f,0x33f,0x33f,0x33f,0x342,0x9e4,0x342,0x33f,0x681,0x681,0x681,0x681, +0x681,0x681,0x681,0x681,0x681,0x684,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681, +0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x681,0x67b,0x67b,0x67b,0x67b, +0x67b,0x67b,0x67b,0x67b,0x67b,0x67e,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b, +0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x9de,0x67e,0x339,0x33c,0x339,0x339,0x339,0x33c, +0x339,0x339,0x339,0x339,0x33c,0x9de,0x33c,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xb76,0xb73,0xbc1,0xcd2,0xccf,0xcd5,0xcd2,0xccf,0xdcb,0xdce,0xdce,0xdce,0xa1a,0x690,0x33f,0x342, +0x33f,0x33f,0x33f,0x342,0x33f,0x33f,0x33f,0x33f,0x342,0xa1a,0x342,0x33f,0x68d,0x68d,0x68d,0x68d, +0x68d,0x68d,0x68d,0x68d,0x68d,0x690,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d, +0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x68d,0x687,0x687,0x687,0x687, +0x687,0x687,0x687,0x687,0x687,0x68a,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687, +0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0xa14,0x68a,0x339,0x33c,0x339,0x339,0x339,0x33c, +0x339,0x339,0x339,0x339,0x33c,0xa14,0x33c,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x342,0x33c, +#if !U_PLATFORM_IS_DARWIN_BASED +0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x336,0x933,0x936,0x918,0x918,0x112b, +0x9d8,0x9d8,0xb97,0xb94,0x9e1,0x9db,0x9e1,0x9db,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x336,0x969,0x96c,0x94e,0x94e,0x1161, +0xa0e,0xa0e,0xbcd,0xbca,0xa17,0xa11,0xa17,0xa11,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339, +0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339, +#if !U_PLATFORM_IS_DARWIN_BASED +0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x342,0x33c,0x33f,0x339,0xb97,0xb94,0x33f, +0x339,0xb97,0xb94,0x33f,0x339,0xb97,0xb94,0xedc,0x342,0x33c,0x342,0x33c,0x33f,0x339,0x342,0x33c, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x339,0x33f,0x342,0x33c,0x33f,0x339,0xbcd,0xbca,0x33f, +0x339,0xbcd,0xbca,0x33f,0x339,0xbcd,0xbca,0xf12,0x342,0x33c,0x342,0x33c,0x33f,0x339,0x342,0x33c, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x33f,0x339,0x342,0x33c,0x342,0x33c,0x342,0x33c,0x33f,0x339,0x342,0x33c,0x342,0x33c,0x342,0x33c, +#if !U_PLATFORM_IS_DARWIN_BASED +0x33f,0x339,0x342,0x33c,0x9e4,0x9de,0x342,0x33c,0x342,0x33c,0x342,0x33c,0x342,0x33c,0xd9e,0xd9b, +0x342,0x33c,0xedf,0xedc,0xedf,0xedc,0xedf,0xedc,0xc06,0xc03,0xc06,0xc03,0xc06,0xc03,0xc06,0xc03, +0xc06,0xc03,0xc06,0xc03,0xc06,0xc03,0xc06,0xc03,0xf0c,0xf09,0xf0c,0xf09,0xfff,0xffc,0xfff,0xffc, +0xfff,0xffc,0xfff,0xffc,0xfff,0xffc,0xfff,0xffc,0xfff,0xffc,0xfff,0xffc,0x1164,0x1161,0x134a,0x1347, +0x150f,0x150c,0x150f,0x150c,0x150f,0x150c,0x150f,0x150c,0xc,0x354,0x354,0x354,0x354,0x354,0x354,0x354, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x33f,0x339,0x342,0x33c,0xa1a,0xa14,0x342,0x33c,0x342,0x33c,0x342,0x33c,0x342,0x33c,0xdd4,0xdd1, +0x342,0x33c,0xf15,0xf12,0xf15,0xf12,0xf15,0xf12,0xc3c,0xc39,0xc3c,0xc39,0xc3c,0xc39,0xc3c,0xc39, +0xc3c,0xc39,0xc3c,0xc39,0xc3c,0xc39,0xc3c,0xc39,0xf42,0xf3f,0xf42,0xf3f,0x1035,0x1032,0x1035,0x1032, +0x1035,0x1032,0x1035,0x1032,0x1035,0x1032,0x1035,0x1032,0x1035,0x1032,0x1035,0x1032,0x119a,0x1197,0x1380,0x137d, +0x1545,0x1542,0x1545,0x1542,0x1545,0x1542,0x1545,0x1542,0xc,0x354,0x354,0x354,0x354,0x354,0x354,0x354, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354,0x354, +#if !U_PLATFORM_IS_DARWIN_BASED +0x354,0x354,0x354,0xc,0xc,0x357,0x345,0x348,0x348,0x34b,0x348,0x345,0x1917,0x34e,0x34e,0x34e, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x354,0x354,0x354,0xc,0xc,0x357,0x345,0x348,0x348,0x34b,0x348,0x345,0x194d,0x34e,0x34e,0x34e, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e, +0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x34e,0x351, +#if !U_PLATFORM_IS_DARWIN_BASED +0x1917,0x89d,0x9e7,0xc,0xc,0x14d9,0x14d9,0x13f5,0xf,0x957,0x957,0x957,0x957,0x957,0x957,0x957, +0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0xda1,0x957,0x957,0x957,0x957,0x957, +0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x957,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a, +0x35a,0x35a,0xee2,0x35a,0x35a,0x35a,0x366,0x35a,0x35d,0x35a,0x35a,0x369,0x95a,0xda4,0xda7,0xda4, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x194d,0x8d3,0xa1d,0xc,0xc,0x150f,0x150f,0x142b,0xf,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d, +0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0xdd7,0x98d,0x98d,0x98d,0x98d,0x98d, +0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a, +0x35a,0x35a,0xf18,0x35a,0x35a,0x35a,0x366,0x35a,0x35d,0x35a,0x35a,0x369,0x990,0xdda,0xddd,0xdda, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c, +0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c,0x36c, +#if !U_PLATFORM_IS_DARWIN_BASED +0x36c,0x36c,0x36c,0xf,0xf,0xf,0xf,0x191a,0x36c,0x36c,0x36c,0x363,0x360,0xf,0xf,0xf, +0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xcb4,0xcb4,0xcb4,0xcb4,0x13f8,0x14dc,0xf8a,0xf8a, +0xf8a,0xf87,0xf87,0xdad,0x8a3,0xcae,0xcab,0xcab,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xf84,0xf84, +0xf84,0xf84,0xf84,0x8a0,0x14d3,0x12,0xdb0,0x8a6,0x1311,0x387,0x38a,0x38a,0x38a,0x38a,0x38a,0x387, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x36c,0x36c,0x36c,0xf,0xf,0xf,0xf,0x1950,0x36c,0x36c,0x36c,0x363,0x360,0xf,0xf,0xf, +0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xcea,0xcea,0xcea,0xcea,0x142e,0x1512,0xfc0,0xfc0, +0xfc0,0xfbd,0xfbd,0xde3,0x8d9,0xce4,0xce1,0xce1,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xfba,0xfba, +0xfba,0xfba,0xfba,0x8d6,0x1509,0x12,0xde6,0x8dc,0x1347,0x387,0x38a,0x38a,0x38a,0x38a,0x38a,0x387, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -#if !U_PLATFORM_IS_DARWIN_BASED -0xaec,0xaec,0xaef,0xaef,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0x72,0x72,0x72,0x72, -0x1563,0x1563,0x1563,0x1563,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1560, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xb25,0xb25,0xb28,0xb28,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0x72,0x72,0x72,0x72, -0x159f,0x159f,0x159f,0x159f,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x159c, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387, #if !U_PLATFORM_IS_DARWIN_BASED -0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, +0x387,0x387,0x387,0xf8d,0xf8d,0xf8d,0xf8d,0xf8d,0x8a9,0x387,0x387,0x387,0x387,0x387,0x387,0x387, +0x387,0x387,0x387,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0xb37,0xb37,0xb37,0xca2,0xca8, +0xca5,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0x130e,0x939,0x939,0x939,0x939,0x939,0x939,0x939,0x939, +0x939,0x939,0x381,0x37e,0x37b,0x378,0xb9a,0xb9a,0x91b,0x387,0x387,0x393,0x387,0x38d,0x38d,0x38d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659, +0x387,0x387,0x387,0xfc3,0xfc3,0xfc3,0xfc3,0xfc3,0x8df,0x387,0x387,0x387,0x387,0x387,0x387,0x387, +0x387,0x387,0x387,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0xb6d,0xb6d,0xb6d,0xcd8,0xcde, +0xcdb,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0x1344,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f, +0x96f,0x96f,0x381,0x37e,0x37b,0x378,0xbd0,0xbd0,0x951,0x387,0x387,0x393,0x387,0x38d,0x38d,0x38d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x38d,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387, +0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387, +0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387, #if !U_PLATFORM_IS_DARWIN_BASED -0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656, +0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x9ed,0x9ed,0x387,0x387, +0x387,0x387,0x387,0x9ed,0x38a,0x387,0x38a,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387, +0x387,0x387,0x387,0x9ed,0x387,0x387,0x387,0x38a,0x93c,0x387,0x372,0x372,0x372,0x372,0x372,0x372, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692, +0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0xa23,0xa23,0x387,0x387, +0x387,0x387,0x387,0xa23,0x38a,0x387,0x38a,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387, +0x387,0x387,0x387,0xa23,0x387,0x387,0x387,0x38a,0x972,0x387,0x372,0x372,0x372,0x372,0x372,0x372, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x372,0x36f,0x378,0x375,0x375,0x372,0x372,0x372,0x372,0x390,0x390,0x372,0x372,0x378,0x375,0x375, #if !U_PLATFORM_IS_DARWIN_BASED -0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a, +0x375,0x372,0xcb1,0xcb1,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x9ed,0x9ed, +0x9ed,0x9ea,0x9ea,0xcb1,0xa02,0xa02,0xa02,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9f9, +0x9fc,0x9f9,0x15,0xa05,0x9ff,0x9f0,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff, +0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff,0x9ff, +0x9ff,0xcb7,0xcb7,0xcb7,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6, +0x9f6,0x9f6,0x9f6,0x9f6,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x15, +0x15,0xcb7,0xcb7,0xcb7,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10, +0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10, +0xe10,0xe10,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011, +0x1011,0x1011,0x1011,0x1011,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b, +0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b, +0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa0b,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08, +0xa08,0xa08,0xa08,0xa08,0xa08,0xb9d,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0xf24,0xf24,0xf24,0xf24,0xf24,0xf24,0xf24,0xf24,0xf24,0xf24,0xf27,0xf27, +0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27, +0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf1b, +0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf2a,0xf2a,0xf1e,0xf1e,0xf21,0xf30,0xf2d,0x10e, +0x10e,0x193e,0x1941,0x1941,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x25b, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x375,0x372,0xce7,0xce7,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0xa23,0xa23, +0xa23,0xa20,0xa20,0xce7,0xa38,0xa38,0xa38,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa2f, +0xa32,0xa2f,0x15,0xa3b,0xa35,0xa26,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35, +0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35, +0xa35,0xced,0xced,0xced,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c,0xa2c, +0xa2c,0xa2c,0xa2c,0xa2c,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0x15, +0x15,0xced,0xced,0xced,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46, +0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46, +0xe46,0xe46,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047, +0x1047,0x1047,0x1047,0x1047,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41, +0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41, +0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e, +0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xbd3,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5d,0xf5d, +0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d, +0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf51, +0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf60,0xf60,0xf54,0xf54,0xf57,0xf66,0xf63,0x10e, +0x10e,0x1974,0x1977,0x1977,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x25b, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x25b,0x25b,0x25b,0x25b,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf, +0,0,0,0,0xb13,0xb13,0xb16,0xb16,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, +0x72,0x72,0x72,0x72,0x1593,0x1593,0x1593,0x1593,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2, +0x1c2,0x1c2,0x1c2,0x1590,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x164d,0x164d,0x164d,0x164d,0x164d, +0x164d,0x164d,0x164d,0x164d,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x177,0x177,0x177, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf, +0,0,0,0,0xb49,0xb49,0xb4c,0xb4c,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49, +0x72,0x72,0x72,0x72,0x15c9,0x15c9,0x15c9,0x15c9,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2, +0x1c2,0x1c2,0x1c2,0x15c6,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1683,0x1683,0x1683,0x1683,0x1683, +0x1683,0x1683,0x1683,0x1683,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x16bc,0x16bc,0x16bc, +0x16bc,0x16bc,0x16bc,0x16bc,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x177,0x177,0x177, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x177,0x177,0x177,0x177,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f, +0x27f,0x27f,0x27f,0x27f,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7, +0x1d7,0x1d7,0x1d7,0x1d7,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0x1890,0x1893,0x1893,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b, +0,0,0,0,0x14af,0x14af,0x14af,0x14af,0x14af,0x14af,0x14af,0x14af,0x14af,0x14af,0x1bc,0x1bc, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x18cc,0x18cf,0x18cf,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b, +0,0,0,0,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x1bc,0x1bc, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x1bc,0x1bc,0x1bc,0x1bc,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264, +0x264,0x264,0x264,0x264,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0x1752,0x1752,0x1752,0x1752,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f, +0,0,0,0,0x18c0,0x18c3,0x18c3,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x178e,0x178e,0x178e,0x178e,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f, +0,0,0,0,0x18f6,0x18f9,0x18f9,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x258,0x258,0x258,0x258,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x183, +0,0,0,0,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x26a,0x26a, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x183, +0,0,0,0,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x26a,0x26a, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x26a,0x26a,0x26a,0x26a,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1f2,0x1f2,0x1f2,0x1f2,0x160e,0x160e, +0,0,0,0,0x1782,0x1782,0x1782,0x1782,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1f2,0x1f2,0x1f2,0x1f2,0x164a,0x164a, +0,0,0,0,0x17b8,0x17b8,0x17b8,0x17b8,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x21c,0x21c,0x21c,0x21c,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a, -0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644, +0,0,0,0,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b, +0x127b,0x127b,0x127b,0x180,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1ef,0x1ef, +0x1ef,0x1ef,0x163e,0x163e,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a, +0x158a,0x158a,0x158a,0x158a,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674, +0x1674,0x1674,0x1674,0x1674,0,0,0,0,0,0,0,0,0,0,0,0, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596, -0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680, +0,0,0,0,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1, +0x12b1,0x12b1,0x12b1,0x180,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x1ef,0x1ef, +0x1ef,0x1ef,0x1674,0x1674,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0, +0x15c0,0x15c0,0x15c0,0x15c0,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa, +0x16aa,0x16aa,0x16aa,0x16aa,0,0,0,0,0,0,0,0,0,0,0,0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f, +0x24f,0x24f,0x24f,0x24f,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1, -0x16bc,0x16bc,0x16bc,0x16bc,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207, +0,0,0,0,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911, +0x1911,0x1911,0x1911,0x1911,0x16ec,0x16ec,0x16ec,0x16ec,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d, -0x16f8,0x16f8,0x16f8,0x16f8,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207, +0,0,0,0,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947, +0x1947,0x1947,0x1947,0x1947,0x1722,0x1722,0x1722,0x1722,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x204,0x204,0x204,0x204,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0xdd7,0xdd7,0xdd4,0xdd4,0xdd4,0xdd7,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb, +0,0,0,0,0xe07,0xe07,0xe04,0xe04,0xe04,0xe07,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xe13,0xe13,0xe10,0xe10,0xe10,0xe13,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb, +0,0,0,0,0xe3d,0xe3d,0xe3a,0xe3a,0xe3a,0xe3d,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xdb,0xdb,0xdb,0xdb,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0x22e,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a, +0,0,0,0,0x22b,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a, +0x179a,0x179a,0x179a,0x179a,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x181b,0x181b,0x237,0x181b,0x181b,0x237,0x181b,0x181b,0x181b,0x181b,0x181b,0x237, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x22e,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6, +0,0,0,0,0x22b,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0, +0x17d0,0x17d0,0x17d0,0x17d0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1851,0x1851,0x237,0x1851,0x1851,0x237,0x1851,0x1851,0x1851,0x1851,0x1851,0x237, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x237,0x237,0x237,0x237,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0x17eb,0x17eb,0x23a,0x17eb,0x17eb,0x23a,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x23a,0x23a,0x23a,0x23a,0x23a, +0,0,0,0,0x270,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1, +0x19a1,0x19a1,0x19a1,0x19a1,0,0,0,0,0,0,0,0,0,0,0,0, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1827,0x1827,0x23a,0x1827,0x1827,0x23a,0x1827,0x1827,0x1827,0x1827,0x1827,0x23a,0x23a,0x23a,0x23a,0x23a, +0,0,0,0,0x270,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7, +0x19d7,0x19d7,0x19d7,0x19d7,0,0,0,0,0,0,0,0,0,0,0,0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, #if !U_PLATFORM_IS_DARWIN_BASED -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x933,0x933, +0,0,0x954,0x954,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e, +0x196e,0x196e,0x261,0x261,3,3,3,3,3,3,3,3,3,3,3,3, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x969,0x969, +0,0,0x98a,0x98a,0x19a4,0x19a4,0x19a4,0x19a4,0x19a4,0x19a4,0x19a4,0x19a4,0x19a4,0x19a4,0x19a4,0x19a4, +0x19a4,0x19a4,0x261,0x261,3,3,3,3,3,3,3,3,3,3,3,3, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, #if !U_PLATFORM_IS_DARWIN_BASED -3,3,0x933,0x933,6,6,6,6,6,6,6,6,6,6,6,6, +3,3,3,3,3,3,0x954,0x954,6,6,6,6,6,6,6,6, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -3,3,0x969,0x969,6,6,6,6,6,6,6,6,6,6,6,6, +3,3,3,3,3,3,0x98a,0x98a,6,6,6,6,6,6,6,6, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, #if !U_PLATFORM_IS_DARWIN_BASED -6,6,6,6,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35, -0xd35,0xd35,0xd35,0xd35,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,0x14b2,0x38d,0x39c,0x39c,0x1b,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2, +6,6,6,6,6,6,6,6,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65, +0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,0x14e2,0x3ab,0x3ba,0x3ba,0x1b,0x3c0,0x3c0,0x3c0, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -6,6,6,6,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71, -0xd71,0xd71,0xd71,0xd71,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,0x14ee,0x38d,0x39c,0x39c,0x1b,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2, +6,6,6,6,6,6,6,6,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b, +0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,0x1518,0x3ab,0x3ba,0x3ba,0x1b,0x3c0,0x3c0,0x3c0, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x3a2,0x1b,0x1b,0x3a2,0x3a2,0x1b,0x1b,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2, -0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x1b,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x3a2,0x1b,0x3a2,0x1b, +0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x1b,0x1b,0x3c0,0x3c0,0x1b,0x1b,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0, +0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x1b,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0, #if !U_PLATFORM_IS_DARWIN_BASED -0x1b,0x1b,0x3a2,0x3a2,0x3a2,0x3a2,0x1b,0x1b,0x390,0xc90,0x38d,0x39c,0x39c,0x38d,0x38d,0x38d, -0x38d,0x1b,0x1b,0x39c,0x39c,0x1b,0x1b,0x39f,0x39f,0x393,0xd83,0x1b,0x1b,0x1b,0x1b,0x1b, +0x3c0,0x1b,0x3c0,0x1b,0x1b,0x1b,0x3c0,0x3c0,0x3c0,0x3c0,0x1b,0x1b,0x3ae,0xcbd,0x3ab,0x3ba, +0x3ba,0x3ab,0x3ab,0x3ab,0x3ab,0x1b,0x1b,0x3ba,0x3ba,0x1b,0x1b,0x3bd,0x3bd,0x3b1,0xdb6,0x1b, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1b,0x1b,0x3a2,0x3a2,0x3a2,0x3a2,0x1b,0x1b,0x390,0xccc,0x38d,0x39c,0x39c,0x38d,0x38d,0x38d, -0x38d,0x1b,0x1b,0x39c,0x39c,0x1b,0x1b,0x39f,0x39f,0x393,0xdbf,0x1b,0x1b,0x1b,0x1b,0x1b, +0x3c0,0x1b,0x3c0,0x1b,0x1b,0x1b,0x3c0,0x3c0,0x3c0,0x3c0,0x1b,0x1b,0x3ae,0xcf3,0x3ab,0x3ba, +0x3ba,0x3ab,0x3ab,0x3ab,0x3ab,0x1b,0x1b,0x3ba,0x3ba,0x1b,0x1b,0x3bd,0x3bd,0x3b1,0xdec,0x1b, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1b,0x1b,0x1b,0x38d,0x1b,0x1b,0x1b,0x1b,0x3a5,0x3a5,0x1b,0x3a5,0x3a2,0x3a2,0x38d,0x38d, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x3ab,0x1b,0x1b,0x1b,0x1b,0x3c3,0x3c3,0x1b,0x3c3, #if !U_PLATFORM_IS_DARWIN_BASED -0x1b,0x1b,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x3a2,0x3a2,0x399,0x399, -0x396,0x396,0x396,0x396,0x396,0x399,0x396,0x110a,0x184b,0x1848,0x1b,0x1b,0x1e,0xc93,0x3a8,0xc96, +0x3c0,0x3c0,0x3ab,0x3ab,0x1b,0x1b,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942, +0x3c0,0x3c0,0x3b7,0x3b7,0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x3b7,0x3b4,0x113a,0x187b,0x1878,0x191d,0x1b, +0x1e,0xcc0,0x3c6,0xcc3,0x1e,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x1e,0x1e,0x1e,0x1e,0x3d2, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1b,0x1b,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x3a2,0x3a2,0x399,0x399, -0x396,0x396,0x396,0x396,0x396,0x399,0x396,0x1146,0x1887,0x1884,0x1b,0x1b,0x1e,0xccf,0x3a8,0xcd2, +0x3c0,0x3c0,0x3ab,0x3ab,0x1b,0x1b,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x3c0,0x3c0,0x3b7,0x3b7,0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x3b7,0x3b4,0x1170,0x18b1,0x18ae,0x1953,0x1b, +0x1e,0xcf6,0x3c6,0xcf9,0x1e,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x1e,0x1e,0x1e,0x1e,0x3d2, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1e,0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x1e,0x1e,0x1e,0x1e,0x3b4,0x3b4,0x1e,0x1e,0x3b4, -0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x1e,0x3b4,0x3b4, -0x3b4,0x3b4,0x3b4,0x3b4,0x3b4,0x1e,0x3b4,0x3b7,0x1e,0x3b4,0x3b7,0x1e,0x3b4,0x3b4,0x1e,0x1e, -0x3ab,0x1e,0x3b1,0x3b1,0x3b1,0x3a8,0x3a8,0x1e,0x1e,0x1e,0x1e,0x3a8,0x3a8,0x1e,0x1e,0x3a8, +0x3d2,0x1e,0x1e,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2, +0x3d2,0x1e,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x1e,0x3d2,0x3d5,0x1e,0x3d2,0x3d5,0x1e, +0x3d2,0x3d2,0x1e,0x1e,0x3c9,0x1e,0x3cf,0x3cf,0x3cf,0x3c6,0x3c6,0x1e,0x1e,0x1e,0x1e,0x3c6, #if !U_PLATFORM_IS_DARWIN_BASED -0x3a8,0x3ae,0x1e,0x1e,0x1e,0xf66,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x3b7,0x3b7,0x3b7, -0x3b4,0x1e,0x3b7,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x921,0x921,0x921,0x921,0x921,0x921, -0x921,0x921,0x921,0x921,0x3a8,0x3a8,0x3b4,0x3b4,0x3b4,0xf66,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, +0x3c6,0x1e,0x1e,0x3c6,0x3c6,0x3cc,0x1e,0x1e,0x1e,0xf96,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, +0x1e,0x3d5,0x3d5,0x3d5,0x3d2,0x1e,0x3d5,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x945,0x945, +0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x3c6,0x3c6,0x3d2,0x3d2,0x3d2,0xf96,0x1920,0x1e, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x3a8,0x3ae,0x1e,0x1e,0x1e,0xfa2,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x3b7,0x3b7,0x3b7, -0x3b4,0x1e,0x3b7,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x957,0x957,0x957,0x957,0x957,0x957, -0x957,0x957,0x957,0x957,0x3a8,0x3a8,0x3b4,0x3b4,0x3b4,0xfa2,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, +0x3c6,0x1e,0x1e,0x3c6,0x3c6,0x3cc,0x1e,0x1e,0x1e,0xfcc,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, +0x1e,0x3d5,0x3d5,0x3d5,0x3d2,0x1e,0x3d5,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x97b,0x97b, +0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x3c6,0x3c6,0x3d2,0x3d2,0x3d2,0xfcc,0x1956,0x1e, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1e,0x1e,0x1e,0x1e,0x21,0x3ba,0x3ba,0x3c3,0x21,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6, +0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x21,0x3d8,0x3d8,0x3e1,0x21,0x3e4,0x3e4,0x3e4, #if !U_PLATFORM_IS_DARWIN_BASED -0xc9f,0x3c6,0x21,0x3c6,0x3c6,0x3c6,0x21,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6, +0x3e4,0x3e4,0x3e4,0x3e4,0xccc,0x3e4,0x21,0x3e4,0x3e4,0x3e4,0x21,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xcdb,0x3c6,0x21,0x3c6,0x3c6,0x3c6,0x21,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6, +0x3e4,0x3e4,0x3e4,0x3e4,0xd02,0x3e4,0x21,0x3e4,0x3e4,0x3e4,0x21,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x21,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x21,0x3c6,0x3c6, -0x21,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x21,0x21,0x3bd,0x3c6,0x3c3,0x3c3,0x3c3,0x3ba,0x3ba,0x3ba, -0x3ba,0x3ba,0x21,0x3ba,0x3ba,0x3c3,0x21,0x3c3,0x3c3,0x3c0,0x21,0x21,0x3c6,0x21,0x21,0x21, +0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x21,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4, +0x3e4,0x21,0x3e4,0x3e4,0x21,0x3e4,0x3e4,0x3e4,0x3e4,0x3e4,0x21,0x21,0x3db,0x3e4,0x3e1,0x3e1, +0x3e1,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x21,0x3d8,0x3d8,0x3e1,0x21,0x3e1,0x3e1,0x3de,0x21,0x21, +0x3e4,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, #if !U_PLATFORM_IS_DARWIN_BASED -0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x3c6,0xc9f,0xc99,0xc99, -0x21,0x21,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x13c8,0xc9c,0x21,0x21, -0x21,0x21,0x21,0x21,0x21,0x16ce,0x184e,0x184e,0x184e,0x1851,0x1851,0x1851,0x24,0x3c9,0x3d8,0x3d8, +0x3e4,0xccc,0xcc6,0xcc6,0x21,0x21,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948, +0x13fb,0xcc9,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x16fe,0x187e,0x187e,0x187e,0x1881,0x1881,0x1881, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x3c6,0xcdb,0xcd5,0xcd5, -0x21,0x21,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x1404,0xcd8,0x21,0x21, -0x21,0x21,0x21,0x21,0x21,0x170a,0x188a,0x188a,0x188a,0x188d,0x188d,0x188d,0x24,0x3c9,0x3d8,0x3d8, +0x3e4,0xd02,0xcfc,0xcfc,0x21,0x21,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e, +0x1431,0xcff,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x1734,0x18b4,0x18b4,0x18b4,0x18b7,0x18b7,0x18b7, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x24,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x24,0x24,0x3de,0x3de,0x24,0x24,0x3de, -0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x24,0x3de,0x3de, +0x24,0x3e7,0x3f6,0x3f6,0x24,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x24,0x24,0x3fc, +0x3fc,0x24,0x24,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc, #if !U_PLATFORM_IS_DARWIN_BASED -0x3de,0x3de,0x3de,0x3de,0x3de,0x24,0x3de,0x3de,0x24,0xca2,0x3de,0x3de,0x3de,0x3de,0x24,0x24, -0x3cc,0x3de,0x3c9,0x3c9,0x3d8,0x3c9,0x3c9,0x3c9,0xf69,0x24,0x24,0x3d8,0x3db,0x24,0x24,0x3db, +0x3fc,0x24,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x24,0x3fc,0x3fc,0x24,0xccf,0x3fc,0x3fc, +0x3fc,0x3fc,0x24,0x24,0x3ea,0x3fc,0x3e7,0x3e7,0x3f6,0x3e7,0x3e7,0x3e7,0xf99,0x24,0x24,0x3f6, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x3de,0x3de,0x3de,0x3de,0x3de,0x24,0x3de,0x3de,0x24,0xcde,0x3de,0x3de,0x3de,0x3de,0x24,0x24, -0x3cc,0x3de,0x3c9,0x3c9,0x3d8,0x3c9,0x3c9,0x3c9,0xfa5,0x24,0x24,0x3d8,0x3db,0x24,0x24,0x3db, +0x3fc,0x24,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x24,0x3fc,0x3fc,0x24,0xd05,0x3fc,0x3fc, +0x3fc,0x3fc,0x24,0x24,0x3ea,0x3fc,0x3e7,0x3e7,0x3f6,0x3e7,0x3e7,0x3e7,0xfcf,0x24,0x24,0x3f6, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x3db,0x3cf,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x3c9,0x3c9,0x24,0x24,0x24,0x24, +0x3f9,0x24,0x24,0x3f9,0x3f9,0x3ed,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x3e7,0x3e7, #if !U_PLATFORM_IS_DARWIN_BASED -0x3e1,0x3e1,0x24,0x3de,0x3de,0x3de,0xf69,0xf69,0x24,0x24,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, -0x3d5,0x3d5,0x3d5,0x3d5,0x3d2,0xca2,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x24,0x24,0x24,0x24, +0x24,0x24,0x24,0x24,0x3ff,0x3ff,0x24,0x3fc,0x3fc,0x3fc,0xf99,0xf99,0x24,0x24,0x3f3,0x3f3, +0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f0,0xccf,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x3e1,0x3e1,0x24,0x3de,0x3de,0x3de,0xfa5,0xfa5,0x24,0x24,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5,0x3d5, -0x3d5,0x3d5,0x3d5,0x3d5,0x3d2,0xcde,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x24,0x24,0x24,0x24, +0x24,0x24,0x24,0x24,0x3ff,0x3ff,0x24,0x3fc,0x3fc,0x3fc,0xfcf,0xfcf,0x24,0x24,0x3f3,0x3f3, +0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f0,0xd05,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x24,0x24,0x24,0x24,0x27,0x27,0x3e4,0x3f0,0x27,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x27, -0x27,0x27,0x3f0,0x3f0,0x3f0,0x27,0x3f0,0x3f0,0x3f3,0x3f0,0x27,0x27,0x27,0x3f0,0x3f0,0x27, +0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x27,0x27,0x402,0x40e,0x27,0x40e,0x40e,0x40e, +0x40e,0x40e,0x40e,0x27,0x27,0x27,0x40e,0x40e,0x40e,0x27,0x40e,0x40e,0x411,0x40e,0x27,0x27, +0x27,0x40e,0x40e,0x27,0x40e,0x27,0x40e,0x40e,0x27,0x27,0x27,0x40e,0x40e,0x27,0x27,0x27, #if !U_PLATFORM_IS_DARWIN_BASED -0x3f0,0x27,0x3f0,0x3f0,0x27,0x27,0x27,0x3f0,0x3f0,0x27,0x27,0x27,0x3f0,0x3f0,0x92d,0x27, -0x27,0x27,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x92d,0xd86,0x3f0,0x3f0,0x3f0,0x27,0x27, +0x40e,0x40e,0x40e,0x27,0x27,0x27,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0xdb9,0x40e, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x3f0,0x27,0x3f0,0x3f0,0x27,0x27,0x27,0x3f0,0x3f0,0x27,0x27,0x27,0x3f0,0x3f0,0x963,0x27, -0x27,0x27,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x963,0xdc2,0x3f0,0x3f0,0x3f0,0x27,0x27, +0x40e,0x40e,0x40e,0x27,0x27,0x27,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0xdef,0x40e, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x27,0x27,0x3e4,0x3ea,0x3e4,0x3ea,0x3ea,0x27,0x27,0x27,0x3ea,0x3ea,0x3ea,0x27,0x3ed,0x3ed, +0x40e,0x40e,0x27,0x27,0x27,0x27,0x402,0x408,0x402,0x408,0x408,0x27,0x27,0x27,0x408,0x408, #if !U_PLATFORM_IS_DARWIN_BASED -0x3ed,0x3e7,0x27,0x27,0xf6c,0x27,0x27,0x27,0x27,0x27,0x27,0x3e4,0x27,0x27,0x27,0x27, -0x27,0x27,0x27,0x27,0x27,0x27,0xea0,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a, -0x927,0x927,0x927,0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0xca8,0xca5,0x27,0x27,0x27,0x27,0x27, -0x14b5,0x402,0x402,0x402,0x2a,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x2a,0x405,0x405, +0x408,0x27,0x40b,0x40b,0x40b,0x405,0x27,0x27,0xf9c,0x27,0x27,0x27,0x27,0x27,0x27,0x402, +0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0xed0,0x94e,0x94e,0x94e,0x94e,0x94e, +0x94e,0x94e,0x94e,0x94e,0x94b,0x94b,0x94b,0xd89,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd5,0xcd2,0x27, +0x27,0x27,0x27,0x27,0x14e5,0x420,0x420,0x420,0x1923,0x423,0x423,0x423,0x423,0x423,0x423,0x423, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x3ed,0x3e7,0x27,0x27,0xfa8,0x27,0x27,0x27,0x27,0x27,0x27,0x3e4,0x27,0x27,0x27,0x27, -0x27,0x27,0x27,0x27,0x27,0x27,0xedc,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960, -0x95d,0x95d,0x95d,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce4,0xce1,0x27,0x27,0x27,0x27,0x27, -0x14f1,0x402,0x402,0x402,0x2a,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x2a,0x405,0x405, +0x408,0x27,0x40b,0x40b,0x40b,0x405,0x27,0x27,0xfd2,0x27,0x27,0x27,0x27,0x27,0x27,0x402, +0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0xf06,0x984,0x984,0x984,0x984,0x984, +0x984,0x984,0x984,0x984,0x981,0x981,0x981,0xdbf,0xd08,0xd08,0xd08,0xd08,0xd08,0xd0b,0xd08,0x27, +0x27,0x27,0x27,0x27,0x151b,0x420,0x420,0x420,0x1959,0x423,0x423,0x423,0x423,0x423,0x423,0x423, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x405,0x2a,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405, +0x423,0x2a,0x423,0x423,0x423,0x2a,0x423,0x423,0x423,0x423,0x423,0x423,0x423,0x423,0x423,0x423, +0x423,0x423,0x423,0x423,0x423,0x2a,0x423,0x423,0x423,0x423,0x423,0x423,0x423,0x423,0x423,0x423, #if !U_PLATFORM_IS_DARWIN_BASED -0x405,0x2a,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x14b8,0x405,0x405,0x405, -0x405,0x405,0x2a,0x2a,0x2a,0xf75,0x3f6,0x3f6,0x3f6,0x402,0x402,0x402,0x402,0x2a,0x3f6,0x3f6, +0x14e8,0x423,0x423,0x423,0x423,0x423,0x2a,0x2a,0x2a,0xfa5,0x414,0x414,0x414,0x420,0x420,0x420, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x405,0x2a,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x405,0x14f4,0x405,0x405,0x405, -0x405,0x405,0x2a,0x2a,0x2a,0xfb1,0x3f6,0x3f6,0x3f6,0x402,0x402,0x402,0x402,0x2a,0x3f6,0x3f6, +0x151e,0x423,0x423,0x423,0x423,0x423,0x2a,0x2a,0x2a,0xfdb,0x414,0x414,0x414,0x420,0x420,0x420, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x3f9,0x2a,0x3f6,0x3f6,0x3f6,0x3fc,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x3f6,0x3f6,0x2a, +0x420,0x2a,0x414,0x414,0x417,0x2a,0x414,0x414,0x414,0x41a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, #if !U_PLATFORM_IS_DARWIN_BASED -0xf75,0xf75,0x16d1,0x2a,0x2a,0x2a,0x2a,0x2a,0x405,0x405,0xf6f,0xf6f,0x2a,0x2a,0x3ff,0x3ff, +0x2a,0x414,0x414,0x2a,0xfa5,0xfa5,0x1701,0x2a,0x2a,0x2a,0x2a,0x2a,0x423,0x423,0xf9f,0xf9f, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xfb1,0xfb1,0x170d,0x2a,0x2a,0x2a,0x2a,0x2a,0x405,0x405,0xfab,0xfab,0x2a,0x2a,0x3ff,0x3ff, +0x2a,0x414,0x414,0x2a,0xfdb,0xfdb,0x1737,0x2a,0x2a,0x2a,0x2a,0x2a,0x423,0x423,0xfd5,0xfd5, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, +0x2a,0x2a,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,0x2a,0x2a,0x2a,0x2a, #if !U_PLATFORM_IS_DARWIN_BASED -0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0x178e,0x14bb,0x411,0x411,0x2d,0x417,0x417,0x417, +0x2a,0x2a,0x2a,0x2a,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0x17be,0x14eb,0x42f,0x42f, +0x1926,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x2d,0x435,0x435,0x435,0x2d,0x435,0x435, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0x17ca,0x14f7,0x411,0x411,0x2d,0x417,0x417,0x417, +0x2a,0x2a,0x2a,0x2a,0xfd8,0xfd8,0xfd8,0xfd8,0xfd8,0xfd8,0xfd8,0xfd8,0x17f4,0x1521,0x42f,0x42f, +0x195c,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x2d,0x435,0x435,0x435,0x2d,0x435,0x435, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x417,0x417,0x417,0x417,0x417,0x2d,0x417,0x417,0x417,0x2d,0x417,0x417,0x417,0x417,0x417,0x417, -0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x2d,0x417,0x417,0x417,0x417,0x417,0x417, +0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x2d,0x435,0x435, +0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x2d,0x435,0x435,0x435,0x435,0x435,0x2d,0x2d, #if !U_PLATFORM_IS_DARWIN_BASED -0x417,0x417,0x417,0x417,0x2d,0x417,0x417,0x417,0x417,0x417,0x2d,0x2d,0xcab,0xcae,0x411,0x408, +0xcd8,0xcdb,0x42f,0x426,0x432,0x42f,0x426,0x42f,0x42f,0x2d,0x426,0x432,0x432,0x2d,0x432,0x432, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x417,0x417,0x417,0x417,0x2d,0x417,0x417,0x417,0x417,0x417,0x2d,0x2d,0xce7,0xcea,0x411,0x408, +0xd0e,0xd11,0x42f,0x426,0x432,0x42f,0x426,0x42f,0x42f,0x2d,0x426,0x432,0x432,0x2d,0x432,0x432, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x414,0x411,0x408,0x411,0x411,0x2d,0x408,0x414,0x414,0x2d,0x414,0x414,0x408,0x40b,0x2d,0x2d, -0x2d,0x2d,0x2d,0x2d,0x2d,0x408,0x408,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x417,0x2d, +0x426,0x429,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x426,0x426,0x2d,0x2d,0x2d,0x2d,0x2d, #if !U_PLATFORM_IS_DARWIN_BASED -0x417,0x417,0xeb8,0xeb8,0x2d,0x2d,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e, -0x2d,0xebb,0xebb,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, -0x1854,0x14be,0x423,0x423,0x30,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x30,0x429,0x429, +0x2d,0x2d,0x435,0x2d,0x435,0x435,0xee8,0xee8,0x2d,0x2d,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c, +0x42c,0x42c,0x42c,0x42c,0x2d,0xeeb,0xeeb,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, +0x2d,0x2d,0x2d,0x2d,0x1884,0x14ee,0x441,0x441,0x30,0x447,0x447,0x447,0x447,0x447,0x447,0x447, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x417,0x417,0xef4,0xef4,0x2d,0x2d,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e, -0x2d,0xef7,0xef7,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, -0x1890,0x14fa,0x423,0x423,0x30,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x30,0x429,0x429, +0x2d,0x2d,0x435,0x2d,0x435,0x435,0xf1e,0xf1e,0x2d,0x2d,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c, +0x42c,0x42c,0x42c,0x42c,0x2d,0xf21,0xf21,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, +0x2d,0x2d,0x2d,0x2d,0x18ba,0x1524,0x441,0x441,0x30,0x447,0x447,0x447,0x447,0x447,0x447,0x447, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x429,0x30,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429, +0x447,0x30,0x447,0x447,0x447,0x30,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447, #if !U_PLATFORM_IS_DARWIN_BASED -0x423,0x41a,0x41a,0x41a,0xf78,0x30,0x423,0x423,0x423,0x30,0x426,0x426,0x426,0x41d,0x12e7,0x1791, -0x30,0x30,0x30,0x30,0x1794,0x1794,0x1794,0x41a,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x16d4, -0x429,0x429,0xf78,0xf78,0x30,0x30,0x420,0x420,0x420,0x420,0x420,0x420,0x420,0x420,0x420,0x420, -0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0x1791,0x1791,0x1791,0xf7e,0xf81,0xf81,0xf81,0xf81,0xf81,0xf81, -0x33,0x33,0x9f6,0x9f6,0x33,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x33,0x33,0x33,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x33,0x9fc, -0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x33,0x9fc,0x33,0x33,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x33,0x33,0x33,0x9f0,0x33,0x33,0x33,0x33,0x9ed,0x9f6,0x9f6,0x9ed,0x9ed, -0x9ed,0x33,0x9ed,0x33,0x9f6,0x9f6,0x9f9,0x9f6,0x9f9,0x9f9,0x9f9,0x9ed,0x33,0x33,0x33,0x33, -0x33,0x33,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x33,0x33,0x9f6,0x9f6, -0x9f3,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x444,0x444,0x444, +0x447,0x447,0x447,0x447,0x441,0x438,0x438,0x438,0xfa8,0x30,0x441,0x441,0x441,0x30,0x444,0x444, +0x444,0x43b,0x1323,0x17c1,0x30,0x30,0x30,0x30,0x17c4,0x17c4,0x17c4,0x438,0x17c1,0x17c1,0x17c1,0x17c1, +0x17c1,0x17c1,0x17c1,0x1704,0x447,0x447,0xfa8,0xfa8,0x30,0x30,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, +0x43e,0x43e,0x43e,0x43e,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0x17c1,0x17c1,0x17c1,0xfae,0xfb1,0xfb1, +0xfb1,0xfb1,0xfb1,0xfb1,0x33,0x33,0xa17,0xa17,0x33,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d, +0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0x33,0x33,0x33,0xa1d,0xa1d, +0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d, +0xa1d,0xa1d,0x33,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0x33,0xa1d,0x33,0x33, +0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0x33,0x33,0x33,0xa11,0x33,0x33,0x33,0x33,0xa0e, +0xa17,0xa17,0xa0e,0xa0e,0xa0e,0x33,0xa0e,0x33,0xa17,0xa17,0xa1a,0xa17,0xa1a,0xa1a,0xa1a,0xa0e, +0x33,0x33,0x33,0x33,0x33,0x33,0x14f1,0x14f1,0x14f1,0x14f1,0x14f1,0x14f1,0x14f1,0x14f1,0x14f1,0x14f1, +0x33,0x33,0xa17,0xa17,0xa14,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x423,0x41a,0x41a,0x41a,0xfb4,0x30,0x423,0x423,0x423,0x30,0x426,0x426,0x426,0x41d,0x1323,0x17cd, -0x30,0x30,0x30,0x30,0x17d0,0x17d0,0x17d0,0x41a,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x1710, -0x429,0x429,0xfb4,0xfb4,0x30,0x30,0x420,0x420,0x420,0x420,0x420,0x420,0x420,0x420,0x420,0x420, -0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0x17cd,0x17cd,0x17cd,0xfba,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd,0xfbd, -0x33,0x33,0xa2c,0xa2c,0x33,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32, -0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0x33,0x33,0x33,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32, -0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0x33,0xa32, -0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0x33,0xa32,0x33,0x33,0xa32,0xa32,0xa32,0xa32, -0xa32,0xa32,0xa32,0x33,0x33,0x33,0xa26,0x33,0x33,0x33,0x33,0xa23,0xa2c,0xa2c,0xa23,0xa23, -0xa23,0x33,0xa23,0x33,0xa2c,0xa2c,0xa2f,0xa2c,0xa2f,0xa2f,0xa2f,0xa23,0x33,0x33,0x33,0x33, -0x33,0x33,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x33,0x33,0xa2c,0xa2c, -0xa29,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x444,0x444,0x444, +0x447,0x447,0x447,0x447,0x441,0x438,0x438,0x438,0xfde,0x30,0x441,0x441,0x441,0x30,0x444,0x444, +0x444,0x43b,0x1359,0x17f7,0x30,0x30,0x30,0x30,0x17fa,0x17fa,0x17fa,0x438,0x17f7,0x17f7,0x17f7,0x17f7, +0x17f7,0x17f7,0x17f7,0x173a,0x447,0x447,0xfde,0xfde,0x30,0x30,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, +0x43e,0x43e,0x43e,0x43e,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0x17f7,0x17f7,0x17f7,0xfe4,0xfe7,0xfe7, +0xfe7,0xfe7,0xfe7,0xfe7,0x33,0x33,0xa4d,0xa4d,0x33,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53, +0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0x33,0x33,0x33,0xa53,0xa53, +0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53, +0xa53,0xa53,0x33,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0x33,0xa53,0x33,0x33, +0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0x33,0x33,0x33,0xa47,0x33,0x33,0x33,0x33,0xa44, +0xa4d,0xa4d,0xa44,0xa44,0xa44,0x33,0xa44,0x33,0xa4d,0xa4d,0xa50,0xa4d,0xa50,0xa50,0xa50,0xa44, +0x33,0x33,0x33,0x33,0x33,0x33,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527, +0x33,0x33,0xa4d,0xa4d,0xa4a,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444, -0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x42f,0x444,0x441, -0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x435,0x36,0x36,0x36,0x36,0x42c,0x44a,0x44a,0x44a,0x44a, -0x44a,0x444,0x447,0x432,0x432,0x432,0x432,0x432,0x432,0x42f,0x432,0x438,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43b,0x43b,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +0x36,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462, +0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462,0x462, +0x462,0x44d,0x462,0x45f,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x453,0x36,0x36,0x36,0x36,0x44a, +0x468,0x468,0x468,0x468,0x468,0x462,0x465,0x450,0x450,0x450,0x450,0x450,0x450,0x44d,0x450,0x456, +0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x459,0x459,0x36,0x36,0x36,0x36, 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, -0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x39,0x459,0x459,0x39,0x459,0x39,0x39,0x459, -0x459,0x39,0x459,0x39,0x39,0x459,0x39,0x39,0x39,0x39,0x39,0x39,0x459,0x459,0x459,0x459, -0x39,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x39,0x459,0x459,0x459,0x39,0x459,0x39,0x459, -0x39,0x39,0x459,0x459,0x39,0x459,0x459,0x459,0x459,0x44d,0x459,0x456,0x44d,0x44d,0x44d,0x44d, -0x44d,0x44d,0x39,0x44d,0x44d,0x459,0x39,0x39,0x462,0x462,0x462,0x462,0x462,0x39,0x45f,0x39, -0x450,0x450,0x450,0x450,0x450,0x44d,0x39,0x39,0x453,0x453,0x453,0x453,0x453,0x453,0x453,0x453, +0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x39,0x477,0x477,0x39, +0x477,0x39,0x39,0x477,0x477,0x39,0x477,0x39,0x39,0x477,0x39,0x39,0x39,0x39,0x39,0x39, +0x477,0x477,0x477,0x477,0x39,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x39,0x477,0x477,0x477, +0x39,0x477,0x39,0x477,0x39,0x39,0x477,0x477,0x39,0x477,0x477,0x477,0x477,0x46b,0x477,0x474, +0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x39,0x46b,0x46b,0x477,0x39,0x39,0x480,0x480,0x480,0x480, +0x480,0x39,0x47d,0x39,0x46e,0x46e,0x46e,0x46e,0x46e,0x46b,0x39,0x39,0x471,0x471,0x471,0x471, #if !U_PLATFORM_IS_DARWIN_BASED -0x453,0x453,0x39,0x39,0x45c,0x45c,0x13cb,0x13cb,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, +0x471,0x471,0x471,0x471,0x471,0x471,0x39,0x39,0x47a,0x47a,0x13fe,0x13fe,0x39,0x39,0x39,0x39, #else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x453,0x453,0x39,0x39,0x45c,0x45c,0x1407,0x1407,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, +0x471,0x471,0x471,0x471,0x471,0x471,0x39,0x39,0x47a,0x47a,0x1434,0x1434,0x39,0x39,0x39,0x39, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, #if !U_PLATFORM_IS_DARWIN_BASED -0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x96f,0x96f,0x96f,0x972,0x96f,0x96f,0x96f,0x96f, -0x3c,0x96f,0x96f,0x96f,0x96f,0x972,0x96f,0x96f,0x96f,0x96f,0x972,0x96f,0x96f,0x96f,0x96f,0x972, -0x96f,0x96f,0x96f,0x96f,0x972,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f, -0x96f,0x972,0xa0b,0xf8d,0xf8d,0x3c,0x3c,0x3c,0x3c,0x93c,0x93c,0x93f,0x93c,0x93f,0x93f,0x948, -0x93f,0x948,0x93c,0x93c,0x93c,0x93c,0x93c,0x969,0x93c,0x93f,0x942,0x942,0x945,0x94e,0x942,0x942, -0x96f,0x96f,0x96f,0x96f,0x12f0,0x12ea,0x12ea,0x12ea,0x93c,0x93c,0x93c,0x93f,0x93c,0x93c,0x9ff,0x93c, -0x3c,0x93c,0x93c,0x93c,0x93c,0x93f,0x93c,0x93c,0x93c,0x93c,0x93f,0x93c,0x93c,0x93c,0x93c,0x93f, -0x93c,0x93c,0x93c,0x93c,0x93f,0x93c,0x9ff,0x9ff,0x9ff,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c, -0x9ff,0x93f,0x9ff,0x9ff,0x9ff,0x3c,0xa08,0xa08,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa02,0xa05, -0xa05,0xa05,0xa05,0xa05,0xa05,0x3c,0xf84,0xa05,0xd89,0xd89,0xf87,0xf8a,0xf84,0x110d,0x110d,0x110d, -0x110d,0x12ed,0x12ed,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x9a5,0x9a5,0x9a5,0x9a8,0x9a5,0x9a5,0x9a5,0x9a5, -0x3c,0x9a5,0x9a5,0x9a5,0x9a5,0x9a8,0x9a5,0x9a5,0x9a5,0x9a5,0x9a8,0x9a5,0x9a5,0x9a5,0x9a5,0x9a8, -0x9a5,0x9a5,0x9a5,0x9a5,0x9a8,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5, -0x9a5,0x9a8,0xa41,0xfc9,0xfc9,0x3c,0x3c,0x3c,0x3c,0x972,0x972,0x975,0x972,0x975,0x975,0x97e, -0x975,0x97e,0x972,0x972,0x972,0x972,0x972,0x99f,0x972,0x975,0x978,0x978,0x97b,0x984,0x978,0x978, -0x9a5,0x9a5,0x9a5,0x9a5,0x132c,0x1326,0x1326,0x1326,0x972,0x972,0x972,0x975,0x972,0x972,0xa35,0x972, -0x3c,0x972,0x972,0x972,0x972,0x975,0x972,0x972,0x972,0x972,0x975,0x972,0x972,0x972,0x972,0x975, -0x972,0x972,0x972,0x972,0x975,0x972,0xa35,0xa35,0xa35,0x972,0x972,0x972,0x972,0x972,0x972,0x972, -0xa35,0x975,0xa35,0xa35,0xa35,0x3c,0xa3e,0xa3e,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa38,0xa3b, -0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0x3c,0xfc0,0xa3b,0xdc5,0xdc5,0xfc3,0xfc6,0xfc0,0x1149,0x1149,0x1149, -0x1149,0x1329,0x1329,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, +0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x990,0x990,0x990,0x993, +0x990,0x990,0x990,0x990,0x3c,0x990,0x990,0x990,0x990,0x993,0x990,0x990,0x990,0x990,0x993,0x990, +0x990,0x990,0x990,0x993,0x990,0x990,0x990,0x990,0x993,0x990,0x990,0x990,0x990,0x990,0x990,0x990, +0x990,0x990,0x990,0x990,0x990,0x993,0xa2c,0xfbd,0xfbd,0x3c,0x3c,0x3c,0x3c,0x95d,0x95d,0x960, +0x95d,0x960,0x960,0x969,0x960,0x969,0x95d,0x95d,0x95d,0x95d,0x95d,0x98a,0x95d,0x960,0x963,0x963, +0x966,0x96f,0x963,0x963,0x990,0x990,0x990,0x990,0x132c,0x1326,0x1326,0x1326,0x95d,0x95d,0x95d,0x960, +0x95d,0x95d,0xa20,0x95d,0x3c,0x95d,0x95d,0x95d,0x95d,0x960,0x95d,0x95d,0x95d,0x95d,0x960,0x95d, +0x95d,0x95d,0x95d,0x960,0x95d,0x95d,0x95d,0x95d,0x960,0x95d,0xa20,0xa20,0xa20,0x95d,0x95d,0x95d, +0x95d,0x95d,0x95d,0x95d,0xa20,0x960,0xa20,0xa20,0xa20,0x3c,0xa29,0xa29,0xa26,0xa26,0xa26,0xa26, +0xa26,0xa26,0xa23,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0x3c,0xfb4,0xa26,0xdbc,0xdbc,0xfb7,0xfba, +0xfb4,0x113d,0x113d,0x113d,0x113d,0x1329,0x1329,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x9c6,0x9c6,0x9c6,0x9c9, +0x9c6,0x9c6,0x9c6,0x9c6,0x3c,0x9c6,0x9c6,0x9c6,0x9c6,0x9c9,0x9c6,0x9c6,0x9c6,0x9c6,0x9c9,0x9c6, +0x9c6,0x9c6,0x9c6,0x9c9,0x9c6,0x9c6,0x9c6,0x9c6,0x9c9,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6, +0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c9,0xa62,0xff3,0xff3,0x3c,0x3c,0x3c,0x3c,0x993,0x993,0x996, +0x993,0x996,0x996,0x99f,0x996,0x99f,0x993,0x993,0x993,0x993,0x993,0x9c0,0x993,0x996,0x999,0x999, +0x99c,0x9a5,0x999,0x999,0x9c6,0x9c6,0x9c6,0x9c6,0x1362,0x135c,0x135c,0x135c,0x993,0x993,0x993,0x996, +0x993,0x993,0xa56,0x993,0x3c,0x993,0x993,0x993,0x993,0x996,0x993,0x993,0x993,0x993,0x996,0x993, +0x993,0x993,0x993,0x996,0x993,0x993,0x993,0x993,0x996,0x993,0xa56,0xa56,0xa56,0x993,0x993,0x993, +0x993,0x993,0x993,0x993,0xa56,0x996,0xa56,0xa56,0xa56,0x3c,0xa5f,0xa5f,0xa5c,0xa5c,0xa5c,0xa5c, +0xa5c,0xa5c,0xa59,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0x3c,0xfea,0xa5c,0xdf2,0xdf2,0xfed,0xff0, +0xfea,0x1173,0x1173,0x1173,0x1173,0x135f,0x135f,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, #if !U_PLATFORM_IS_DARWIN_BASED -0x3c,0x3c,0x3c,0x3c,0x468,0x468,0x468,0x468,0x468,0x468,0x3f,0x13d1,0x3f,0x3f,0x3f,0x3f, -0x3f,0x13d1,0x3f,0x3f,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465, -0x465,0x465,0x465,0x465,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xd98,0xa35,0x42,0xa35,0xa35, -0xa35,0xa35,0x42,0x42,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0x42,0xa35,0x42,0xa35,0xa35, -0xa35,0xa35,0x42,0x42,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xd98,0xa35,0x42,0xa35,0xa35, -0xa35,0xa35,0x42,0x42,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35, -0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xd98,0xa35,0x42,0xa35,0xa35,0xa35,0xa35,0x42,0x42, -0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0x42,0xa35,0x42,0xa35,0xa35,0xa35,0xa35,0x42,0x42, -0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xd98,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0x42, -0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xd98, -0xa35,0x42,0xa35,0xa35,0xa35,0xa35,0x42,0x42,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xd98, -0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35, -0xa35,0xa35,0xa35,0x42,0x42,0x12f3,0x12f3,0xd92,0xd95,0xa2f,0xa38,0xa2c,0xa2c,0xa2c,0xa2c,0xa38, -0xa38,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, -0xa29,0xa29,0xa29,0xa29,0xa29,0x42,0x42,0x42,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b, -0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0x16da,0x45,0x45, -0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x45,0x45,0xa4d,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50, -0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50, -0xa50,0xa50,0xa50,0xa4a,0xa47,0x48,0x48,0x48,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56, -0xa56,0xa56,0xa56,0xa53,0xa53,0xa53,0xa56,0xa56,0xa56,0x14c4,0x14c4,0x14c4,0x14c4,0x14c4,0x14c4,0x14c4, -0x14c4,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa59,0xa77, -0xa77,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5f,0xa5c,0xa6e,0xa6e,0xa71,0xa7a, -0xa68,0xa65,0xa6e,0xa6b,0xa7a,0xcb1,0x4e,0x4e,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74, -0xa74,0xa74,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4, -0xcb4,0xcb4,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xa89,0xa89,0xb07,0xb0a,0xa8f,0xb04,0xa8c,0xa89, -0xa92,0xaa1,0xa95,0xaa4,0xaa4,0xaa4,0xa80,0x51,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98, -0xa98,0xa98,0x51,0x51,0x51,0x51,0x51,0x51,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b, -0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b, -0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b, -0xa9b,0xa83,0xfae,0x51,0x51,0x51,0x51,0x51,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161, -0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x3c,0x3c,0x3c,0x3c,0x468,0x468,0x468,0x468,0x468,0x468,0x3f,0x140d,0x3f,0x3f,0x3f,0x3f, -0x3f,0x140d,0x3f,0x3f,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465, -0x465,0x465,0x465,0x465,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xdd4,0xa6b,0x42,0xa6b,0xa6b, -0xa6b,0xa6b,0x42,0x42,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0x42,0xa6b,0x42,0xa6b,0xa6b, -0xa6b,0xa6b,0x42,0x42,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xdd4,0xa6b,0x42,0xa6b,0xa6b, -0xa6b,0xa6b,0x42,0x42,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b, -0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xdd4,0xa6b,0x42,0xa6b,0xa6b,0xa6b,0xa6b,0x42,0x42, -0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0x42,0xa6b,0x42,0xa6b,0xa6b,0xa6b,0xa6b,0x42,0x42, -0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xdd4,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0x42, -0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xdd4, -0xa6b,0x42,0xa6b,0xa6b,0xa6b,0xa6b,0x42,0x42,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xdd4, -0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b, -0xa6b,0xa6b,0xa6b,0x42,0x42,0x132f,0x132f,0xdce,0xdd1,0xa65,0xa6e,0xa62,0xa62,0xa62,0xa62,0xa6e, -0xa6e,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0x42,0x42,0x42,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71, -0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0x1716,0x45,0x45, -0x1713,0x1713,0x1713,0x1713,0x1713,0x1713,0x45,0x45,0xa83,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86, -0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86, -0xa86,0xa86,0xa86,0xa80,0xa7d,0x48,0x48,0x48,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c, -0xa8c,0xa8c,0xa8c,0xa89,0xa89,0xa89,0xa8c,0xa8c,0xa8c,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500, -0x1500,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xa8f,0xaad, -0xaad,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa95,0xa92,0xaa4,0xaa4,0xaa7,0xab0, -0xa9e,0xa9b,0xaa4,0xaa1,0xab0,0xced,0x4e,0x4e,0xaaa,0xaaa,0xaaa,0xaaa,0xaaa,0xaaa,0xaaa,0xaaa, -0xaaa,0xaaa,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0, -0xcf0,0xcf0,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xabf,0xabf,0xb40,0xb43,0xac5,0xb3d,0xac2,0xabf, -0xac8,0xad7,0xacb,0xada,0xada,0xada,0xab6,0x51,0xace,0xace,0xace,0xace,0xace,0xace,0xace,0xace, -0xace,0xace,0x51,0x51,0x51,0x51,0x51,0x51,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, -0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, -0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, -0xad1,0xab9,0xfea,0x51,0x51,0x51,0x51,0x51,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d, -0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x486,0x486,0x486,0x486,0x486,0x486,0x54,0x54, -0x489,0x489,0x489,0x489,0x489,0x489,0x54,0x54,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486, -0x54,0x489,0x54,0x489,0x54,0x489,0x54,0x489,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486, -0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486, -0x486,0x486,0x486,0x486,0x486,0x486,0x54,0x54,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486, -0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x486,0x486,0x486,0x486,0x486,0x54,0x486,0x486, -0x489,0x489,0x489,0x489,0x489,0x480,0x486,0x480,0x480,0x47d,0x486,0x486,0x486,0x54,0x486,0x486, -0x489,0x489,0x489,0x489,0x489,0x47d,0x47d,0x47d,0x486,0x486,0x486,0x486,0x54,0x54,0x486,0x486, -0x489,0x489,0x489,0x489,0x54,0x47d,0x47d,0x47d,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486, -0x489,0x489,0x489,0x489,0x489,0x47d,0x47d,0x47d,0x54,0x54,0x486,0x486,0x486,0x54,0x486,0x486, -#if !U_PLATFORM_IS_DARWIN_BASED -0x489,0x489,0x489,0x489,0x489,0x483,0x480,0x54,0xb7c,0xb7f,0xb7f,0xb7f,0xfb7,0x57,0x14a0,0x14a0, -0x14a0,0x14a0,0x492,0x492,0x492,0x492,0x492,0x492,0x4dd,0xb91,0x5a,0x5a,0x699,0x4dd,0x4dd,0x4dd, -0x4dd,0x4dd,0x4e3,0x4f5,0x4e3,0x4ef,0x4e9,0x69c,0x4da,0x696,0x696,0x696,0x696,0x4da,0x4da,0x4da, -0x4da,0x4da,0x4e0,0x4f2,0x4e0,0x4ec,0x4e6,0x5a,0xda1,0xda1,0xda1,0xda1,0xda1,0x12f6,0x12f6,0x12f6, -0x12f6,0x12f6,0x12f6,0x12f6,0x12f6,0x5a,0x5a,0x5a,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x489,0x489,0x489,0x489,0x489,0x483,0x480,0x54,0xbb5,0xbb8,0xbb8,0xbb8,0xff3,0x57,0x14dc,0x14dc, -0x14dc,0x14dc,0x492,0x492,0x492,0x492,0x492,0x492,0x4dd,0xbca,0x5a,0x5a,0x6a5,0x4dd,0x4dd,0x4dd, -0x4dd,0x4dd,0x4e3,0x4f5,0x4e3,0x4ef,0x4e9,0x6a8,0x4da,0x6a2,0x6a2,0x6a2,0x6a2,0x4da,0x4da,0x4da, -0x4da,0x4da,0x4e0,0x4f2,0x4e0,0x4ec,0x4e6,0x5a,0xddd,0xddd,0xddd,0xddd,0xddd,0x1332,0x1332,0x1332, -0x1332,0x1332,0x1332,0x1332,0x1332,0x5a,0x5a,0x5a,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x504,0x504,0x504,0x504,0x504,0x504,0x504,0x504, -#if !U_PLATFORM_IS_DARWIN_BASED -0x504,0x504,0x504,0x504,0x504,0x501,0x501,0x501,0x501,0x504,0xab6,0xab6,0xb97,0xb9d,0xb9d,0xb9a, -0xb9a,0xb9a,0xb9a,0xda7,0xebe,0xebe,0xebe,0xebe,0x10f8,0x60,0x60,0x60,0x60,0x60,0x60,0x60, -0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x534,0x534,0x534,0xabf,0xec7,0xfbd,0xfbd,0xfbd, -0xfbd,0x1254,0x16e0,0x16e0,0x63,0x63,0x63,0x63,0x6c3,0x6c3,0x6c3,0x6c3,0x6c6,0x6c6,0x6c6,0x6c6, -0x6c6,0x6c6,0x540,0x540,0x53d,0x53d,0x53d,0x53d,0x567,0x567,0x567,0x567,0x567,0xac8,0xac8,0x66, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x504,0x504,0x504,0x504,0x504,0x501,0x501,0x501,0x501,0x504,0xaec,0xaef,0xbd0,0xbd6,0xbd6,0xbd3, -0xbd3,0xbd3,0xbd3,0xde3,0xefa,0xefa,0xefa,0xefa,0x1134,0x60,0x60,0x60,0x60,0x60,0x60,0x60, -0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x534,0x534,0x534,0xaf8,0xf03,0xff9,0xff9,0xff9, -0xff9,0x1290,0x171c,0x171c,0x63,0x63,0x63,0x63,0x6cf,0x6cf,0x6cf,0x6cf,0x6d2,0x6d2,0x6d2,0x6d2, -0x6d2,0x6d2,0x540,0x540,0x53d,0x53d,0x53d,0x53d,0x567,0x567,0x567,0x567,0x567,0xb01,0xb01,0x66, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, -0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a, -0x56a,0x56a,0x56a,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, -#if !U_PLATFORM_IS_DARWIN_BASED -0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3, -0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3, -0xae3,0xae3,0x6c,0xae3,0xae3,0xae3,0xae3,0xae6,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3, -0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae6,0x6c,0x6c,0x6c,0x6c, -0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, -0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0x6f,0x6f, -0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x75,0x7ef,0x7e9,0x7ef,0x7e9,0x7ef,0x7e9,0x7ef, -0x7e9,0x7ef,0x7e9,0x7e9,0x7ec,0x7e9,0x7ec,0x7e9,0x7ec,0x7e9,0x7ec,0x7e9,0x7ec,0x7e9,0x7ec,0x7e9, -0x7ec,0x7e9,0x7ec,0x7e9,0x7ec,0x7e9,0x7ec,0x7e9,0x7e9,0x7e9,0x7e9,0x7ef,0x7e9,0x7ef,0x7e9,0x7ef, -0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7ef,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7ec,0xc3f,0xc3f,0x75, -0x75,0x90f,0x90f,0x8d9,0x8d9,0x7f2,0x7f5,0xc3c,0x78,0x78,0x78,0x78,0x78,0x807,0x807,0x807, -0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807, -0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x807,0x10e6,0x18c3,0x78,0x7b,0x80a,0x80a,0x80a, -0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x7b, -0x8e2,0x8e2,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5, -0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5, -0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0x1389,0x1389,0x1389,0x7e,0x7e,0x7e,0x7e,0x7e, -0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813, -0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0xd41,0xd41,0x81, -0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819, -0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x81, -0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0x84,0x84,0x84, -0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01, -0xb01,0xc48,0xb01,0xb01,0xb01,0xc48,0xb01,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87, -0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188, -0x993,0x993,0x993,0x993,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, -0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd, -0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, -0x8d,0x8d,0x8d,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x8d,0x8d,0x8d,0x8d,0x8d,0xad4,0x5b5,0x5bb, -0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5b8,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb, -0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x8d,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x8d,0x5bb,0x8d, -0x5bb,0x5bb,0x8d,0x5bb,0x5bb,0x8d,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5be, -0x5d6,0x5d0,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0, -0x1308,0x1308,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, -0x90,0x90,0x90,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0,0x5d6,0x5d0,0x5d6,0x5d0,0x5d6,0x5d6,0x5d0, -0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, -0x5d3,0x5d0,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d0,0x5d3,0x5d0,0x5d0,0x5d3,0x5d3,0x5d0,0x5d0, -0x5d0,0x5d0,0x5d0,0x5d3,0x5d0,0x5d0,0x5d3,0x5d0,0x5d3,0x5d3,0x5d3,0x5d0,0x5d3,0x5d3,0x5d3,0x5d3, -0x90,0x90,0x5d3,0x5d3,0x5d3,0x5d3,0x5d0,0x5d0,0x5d3,0x5d0,0x5d0,0x5d0,0x5d0,0x5d3,0x5d0,0x5d0, -0x5d0,0x5d0,0x5d0,0x5d3,0x5d3,0x5d3,0x5d0,0x5d0,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, -#if !U_PLATFORM_IS_DARWIN_BASED -0x5d6,0x5d6,0x930,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5cd,0x5cd,0xbd3,0xd59,0x90,0x90, -0x82b,0x83d,0x83a,0x83d,0x83a,0xc5d,0xc5d,0xd4d,0xd4a,0x82e,0x82e,0x82e,0x82e,0x840,0x840,0x840, -0x858,0x85b,0x86a,0x93,0x85e,0x861,0x86d,0x86d,0x855,0x84c,0x846,0x84c,0x846,0x84c,0x846,0x849, -0x849,0x864,0x864,0x867,0x864,0x864,0x864,0x93,0x864,0x852,0x84f,0x849,0x93,0x93,0x93,0x93, -0x5e2,0x5ee,0x5e2,0xbd6,0x5e2,0x96,0x5e2,0x5ee,0x5e2,0x5ee,0x5e2,0x5ee,0x5e2,0x5ee,0x5e2,0x5ee, -0x5ee,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5eb, -0x5e5,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5eb,0x5e5,0x5eb,0x5e5,0x5eb,0x5e5,0x96,0x96,0x5df, -0x732,0x735,0x74a,0x74d,0x72c,0x735,0x735,0x9c,0x717,0x71a,0x71a,0x71a,0x71a,0x717,0x717,0x9c, -0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xad7,0xad7,0xad7,0x996,0x711,0x5f1,0x5f1, -0x9c,0x75c,0x73b,0x72c,0x735,0x732,0x72c,0x73e,0x72f,0x729,0x72c,0x74a,0x741,0x738,0x759,0x72c, -0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x747,0x744,0x74a,0x74a,0x74a,0x75c, -0x720,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d, -0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x9c, -0x9c,0x9c,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x9c,0x9c,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d, -0x9c,0x9c,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x9c,0x9c,0x71d,0x71d,0x71d,0x9c,0x9c,0x9c, -0xb1f,0xb1f,0xb1f,0xb1f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x1860,0x1860,0x1860, -0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25,0xb25, -0xb25,0xb25,0xb25,0xa2,0xa2,0xa2,0xa2,0xa2,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c, -0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e, -0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xa5,0xa5, -0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xa8, -0xa8,0xfc9,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, -0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6, -0x16e6,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, -0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52, -0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xab,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb52,0xb52,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb52,0xab,0xb52,0xb52,0xab,0xab,0xb52,0xab,0xab,0xb52,0xb52,0xab, -0xab,0xb52,0xb52,0xb52,0xb52,0xab,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb4f,0xb4f, -0xb4f,0xb4f,0xab,0xb4f,0xab,0xb4f,0xb4f,0xb4f,0xb4f,0xcd2,0xb4f,0xb4f,0xab,0xb4f,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52, -0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb4f,0xb4f,0xb4f,0xb4f,0xb52,0xb52,0xab,0xb52, -0xb52,0xb52,0xb52,0xab,0xab,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xab,0xb52,0xb52, -0xb52,0xb52,0xb52,0xb52,0xb52,0xab,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, -0xb52,0xb52,0xab,0xb52,0xb52,0xb52,0xb52,0xab,0xb52,0xb52,0xb52,0xb52,0xb52,0xab,0xb52,0xab, -0xab,0xab,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xab,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xdbf,0xdbf,0xab,0xab,0xb52,0xb52,0xb52,0xb52, -0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52, -0xb52,0xb52,0xb52,0xb52,0xb4f,0xb4f,0xb4f,0xb49,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xed6,0xed3, -0xab,0xab,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, -0xb4c,0xb4c,0xb4c,0xb4c,0xae,0xb58,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xb1c,0xb1c,0x6c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1f,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, -0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1f,0x6c,0x6c,0x6c,0x6c, -0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, -0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0x6f,0x6f, -0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x75,0x80d,0x807,0x80d,0x807,0x80d,0x807,0x80d, -0x807,0x80d,0x807,0x807,0x80a,0x807,0x80a,0x807,0x80a,0x807,0x80a,0x807,0x80a,0x807,0x80a,0x807, -0x80a,0x807,0x80a,0x807,0x80a,0x807,0x80a,0x807,0x807,0x807,0x807,0x80d,0x807,0x80d,0x807,0x80d, -0x807,0x807,0x807,0x807,0x807,0x807,0x80d,0x807,0x807,0x807,0x807,0x807,0x80a,0xc7b,0xc7b,0x75, -0x75,0x945,0x945,0x90f,0x90f,0x810,0x813,0xc78,0x78,0x78,0x78,0x78,0x78,0x825,0x825,0x825, -0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825, -0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x1122,0x18ff,0x78,0x7b,0x828,0x828,0x828, -0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x7b, -0x918,0x918,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b, -0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e, -0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0x13c5,0x13c5,0x13c5,0x7e,0x7e,0x7e,0x7e,0x7e, -0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831, -0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0x831,0xd7d,0xd7d,0x81, -0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837, -0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x81, -0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0x84,0x84,0x84, -0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, -0xb3a,0xc84,0xb3a,0xb3a,0xb3a,0xc84,0xb3a,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87, -0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4, -0x9c9,0x9c9,0x9c9,0x9c9,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, -0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239, -0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, -0x8d,0x8d,0x8d,0x5be,0x5be,0x5be,0x5be,0x5be,0x8d,0x8d,0x8d,0x8d,0x8d,0xb0d,0x5c1,0x5c7, -0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5c4,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, -0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x8d,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x8d,0x5c7,0x8d, -0x5c7,0x5c7,0x8d,0x5c7,0x5c7,0x8d,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5ca, -0x5e2,0x5dc,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc, -0x1344,0x1344,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, -0x90,0x90,0x90,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc,0x5e2,0x5dc,0x5e2,0x5dc,0x5e2,0x5e2,0x5dc, -0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, -0x5df,0x5dc,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5dc,0x5df,0x5dc,0x5dc,0x5df,0x5df,0x5dc,0x5dc, -0x5dc,0x5dc,0x5dc,0x5df,0x5dc,0x5dc,0x5df,0x5dc,0x5df,0x5df,0x5df,0x5dc,0x5df,0x5df,0x5df,0x5df, -0x90,0x90,0x5df,0x5df,0x5df,0x5df,0x5dc,0x5dc,0x5df,0x5dc,0x5dc,0x5dc,0x5dc,0x5df,0x5dc,0x5dc, -0x5dc,0x5dc,0x5dc,0x5df,0x5df,0x5df,0x5dc,0x5dc,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, +0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x486,0x486,0x486,0x486,0x486,0x486,0x3f,0x1404, +0x3f,0x3f,0x3f,0x3f,0x3f,0x1404,0x3f,0x3f,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483, +0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xdcb, +0xa56,0x42,0xa56,0xa56,0xa56,0xa56,0x42,0x42,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0x42, +0xa56,0x42,0xa56,0xa56,0xa56,0xa56,0x42,0x42,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xdcb, +0xa56,0x42,0xa56,0xa56,0xa56,0xa56,0x42,0x42,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56, +0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xdcb,0xa56,0x42,0xa56,0xa56, +0xa56,0xa56,0x42,0x42,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0x42,0xa56,0x42,0xa56,0xa56, +0xa56,0xa56,0x42,0x42,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xdcb,0xa56,0xa56,0xa56,0xa56, +0xa56,0xa56,0xa56,0x42,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56, +0xa56,0xa56,0xa56,0xdcb,0xa56,0x42,0xa56,0xa56,0xa56,0xa56,0x42,0x42,0xa56,0xa56,0xa56,0xa56, +0xa56,0xa56,0xa56,0xdcb,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56, +0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0x42,0x42,0x132f,0x132f,0xdc5,0xdc8,0xa50,0xa59,0xa4d, +0xa4d,0xa4d,0xa4d,0xa59,0xa59,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa53,0xa4a,0xa4a, +0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0x42,0x42,0x42,0xa5c,0xa5c,0xa5c,0xa5c, +0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c, +0xa5c,0x170a,0x45,0x45,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x45,0x45,0xa6e,0xa71,0xa71,0xa71, +0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71, +0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa6b,0xa68,0x48,0x48,0x48,0xa77,0xa77,0xa77,0xa77, +0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa74,0xa74,0xa74,0xa77,0xa77,0xa77,0x14f4,0x14f4,0x14f4, +0x14f4,0x14f4,0x14f4,0x14f4,0x14f4,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xa98,0xa98,0xa98,0xa98, +0xa98,0xa98,0xa7a,0xa98,0xa98,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa80,0xa7d, +0xa8f,0xa8f,0xa92,0xa9b,0xa89,0xa86,0xa8f,0xa8c,0xa9b,0xcde,0x4e,0x4e,0xa95,0xa95,0xa95,0xa95, +0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xce1,0xce1,0xce1,0xce1, +0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xaaa,0xaaa,0xb2e,0xb31, +0xab0,0xb2b,0xaad,0xaaa,0xab3,0xac2,0xab6,0xac5,0xac5,0xac5,0xaa1,0x51,0xab9,0xab9,0xab9,0xab9, +0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0x51,0x51,0x51,0x51,0x51,0x51,0xabc,0xabc,0xabc,0xabc, +0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc, +0xabc,0xabc,0xabc,0xabc,0x1929,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0xabc,0xabc,0xabc,0xabc, +0xabc,0xabc,0xabc,0xabc,0xabc,0xaa4,0xfde,0x51,0x51,0x51,0x51,0x51,0x1194,0x1194,0x1194,0x1194, +0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x4a4,0x4a4,0x4a4,0x4a4, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x486,0x486,0x486,0x486,0x486,0x486,0x3f,0x143a, +0x3f,0x3f,0x3f,0x3f,0x3f,0x143a,0x3f,0x3f,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483, +0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xe01, +0xa8c,0x42,0xa8c,0xa8c,0xa8c,0xa8c,0x42,0x42,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0x42, +0xa8c,0x42,0xa8c,0xa8c,0xa8c,0xa8c,0x42,0x42,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xe01, +0xa8c,0x42,0xa8c,0xa8c,0xa8c,0xa8c,0x42,0x42,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c, +0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xe01,0xa8c,0x42,0xa8c,0xa8c, +0xa8c,0xa8c,0x42,0x42,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0x42,0xa8c,0x42,0xa8c,0xa8c, +0xa8c,0xa8c,0x42,0x42,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xe01,0xa8c,0xa8c,0xa8c,0xa8c, +0xa8c,0xa8c,0xa8c,0x42,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c, +0xa8c,0xa8c,0xa8c,0xe01,0xa8c,0x42,0xa8c,0xa8c,0xa8c,0xa8c,0x42,0x42,0xa8c,0xa8c,0xa8c,0xa8c, +0xa8c,0xa8c,0xa8c,0xe01,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c, +0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0x42,0x42,0x1365,0x1365,0xdfb,0xdfe,0xa86,0xa8f,0xa83, +0xa83,0xa83,0xa83,0xa8f,0xa8f,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa80,0xa80, +0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0xa80,0x42,0x42,0x42,0xa92,0xa92,0xa92,0xa92, +0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92, +0xa92,0x1740,0x45,0x45,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x45,0x45,0xaa4,0xaa7,0xaa7,0xaa7, +0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7, +0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa1,0xa9e,0x48,0x48,0x48,0xaad,0xaad,0xaad,0xaad, +0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaaa,0xaaa,0xaaa,0xaad,0xaad,0xaad,0x152a,0x152a,0x152a, +0x152a,0x152a,0x152a,0x152a,0x152a,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xace,0xace,0xace,0xace, +0xace,0xace,0xab0,0xace,0xace,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab6,0xab3, +0xac5,0xac5,0xac8,0xad1,0xabf,0xabc,0xac5,0xac2,0xad1,0xd14,0x4e,0x4e,0xacb,0xacb,0xacb,0xacb, +0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xd17,0xd17,0xd17,0xd17, +0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xae0,0xae0,0xb64,0xb67, +0xae6,0xb61,0xae3,0xae0,0xae9,0xaf8,0xaec,0xafb,0xafb,0xafb,0xad7,0x51,0xaef,0xaef,0xaef,0xaef, +0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0x51,0x51,0x51,0x51,0x51,0x51,0xaf2,0xaf2,0xaf2,0xaf2, +0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, +0xaf2,0xaf2,0xaf2,0xaf2,0x195f,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0xaf2,0xaf2,0xaf2,0xaf2, +0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xada,0x1014,0x51,0x51,0x51,0x51,0x51,0x11ca,0x11ca,0x11ca,0x11ca, +0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x4a4,0x4a4,0x4a4,0x4a4, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x4a4,0x4a4,0x4a4,0x4a4,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a4,0x4a4,0x4a4,0x4a4, +0x4a4,0x4a4,0x54,0x54,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x54,0x54,0x4a4,0x4a4,0x4a4,0x4a4, +0x4a4,0x4a4,0x4a4,0x4a4,0x54,0x4a7,0x54,0x4a7,0x54,0x4a7,0x54,0x4a7,0x4a4,0x4a4,0x4a4,0x4a4, +0x4a4,0x4a4,0x4a4,0x4a4,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a4,0x4a4,0x4a4,0x4a4, +0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x54,0x54,0x4a4,0x4a4,0x4a4,0x4a4, +0x4a4,0x4a4,0x4a4,0x4a4,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a4,0x4a4,0x4a4,0x4a4, +0x4a4,0x54,0x4a4,0x4a4,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x49e,0x4a4,0x49e,0x49e,0x49b,0x4a4,0x4a4, +0x4a4,0x54,0x4a4,0x4a4,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x49b,0x49b,0x49b,0x4a4,0x4a4,0x4a4,0x4a4, +0x54,0x54,0x4a4,0x4a4,0x4a7,0x4a7,0x4a7,0x4a7,0x54,0x49b,0x49b,0x49b,0x4a4,0x4a4,0x4a4,0x4a4, +0x4a4,0x4a4,0x4a4,0x4a4,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x49b,0x49b,0x49b,0x54,0x54,0x4a4,0x4a4, +#if !U_PLATFORM_IS_DARWIN_BASED +0x4a4,0x54,0x4a4,0x4a4,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a1,0x49e,0x54,0xba3,0xba6,0xba6,0xba6, +0xfe7,0x57,0x14d0,0x14d0,0x14d0,0x14d0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4fb,0xbb8,0x5a,0x5a, +0x6ba,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x501,0x513,0x501,0x50d,0x507,0x6bd,0x4f8,0x6b7,0x6b7,0x6b7, +0x6b7,0x4f8,0x4f8,0x4f8,0x4f8,0x4f8,0x4fe,0x510,0x4fe,0x50a,0x504,0x5a,0xdd4,0xdd4,0xdd4,0xdd4, +0xdd4,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x5a,0x5a,0x5a,0x5d,0x5d,0x5d,0x5d, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x4a4,0x54,0x4a4,0x4a4,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a1,0x49e,0x54,0xbd9,0xbdc,0xbdc,0xbdc, +0x101d,0x57,0x1506,0x1506,0x1506,0x1506,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4fb,0xbee,0x5a,0x5a, +0x6c6,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x501,0x513,0x501,0x50d,0x507,0x6c9,0x4f8,0x6c3,0x6c3,0x6c3, +0x6c3,0x4f8,0x4f8,0x4f8,0x4f8,0x4f8,0x4fe,0x510,0x4fe,0x50a,0x504,0x5a,0xe0a,0xe0a,0xe0a,0xe0a, +0xe0a,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x5a,0x5a,0x5a,0x5d,0x5d,0x5d,0x5d, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x522,0x522,0x522,0x522, +#if !U_PLATFORM_IS_DARWIN_BASED +0x522,0x522,0x522,0x522,0x522,0x522,0x522,0x522,0x522,0x51f,0x51f,0x51f,0x51f,0x522,0xad7,0xada, +0xbbe,0xbc4,0xbc4,0xbc1,0xbc1,0xbc1,0xbc1,0xdda,0xeee,0xeee,0xeee,0xeee,0x1128,0x60,0x60,0x60, +0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x552,0x552,0x552,0xae3, +0xef7,0xfed,0xfed,0xfed,0xfed,0x1287,0x1710,0x1710,0x63,0x63,0x63,0x63,0x6e4,0x6e4,0x6e4,0x6e4, +0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x55e,0x55e,0x55b,0x55b,0x55b,0x55b,0x585,0x585,0x585,0x585, +0x585,0xaef,0xaef,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x522,0x522,0x522,0x522,0x522,0x522,0x522,0x522,0x522,0x51f,0x51f,0x51f,0x51f,0x522,0xb0d,0xb10, +0xbf4,0xbfa,0xbfa,0xbf7,0xbf7,0xbf7,0xbf7,0xe10,0xf24,0xf24,0xf24,0xf24,0x115e,0x60,0x60,0x60, +0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x552,0x552,0x552,0xb19, +0xf2d,0x1023,0x1023,0x1023,0x1023,0x12bd,0x1746,0x1746,0x63,0x63,0x63,0x63,0x6f0,0x6f0,0x6f0,0x6f0, +0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x55e,0x55e,0x55b,0x55b,0x55b,0x55b,0x585,0x585,0x585,0x585, +0x585,0xb25,0xb25,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x588,0x588,0x588,0x588, +0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, +#if !U_PLATFORM_IS_DARWIN_BASED +0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0xb0a,0xb0a,0xb0a,0xb0a, +0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a, +0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0x6c,0xb0a,0xb0a,0xb0a,0xb0a,0xb0d,0xb0a,0xb0a,0xb0a,0xb0a, +0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0d, +0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xb10,0xb10,0xb10,0xb10, +0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10, +0xb10,0xb10,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x75,0x81c,0x816,0x81c, +0x816,0x81c,0x816,0x81c,0x816,0x81c,0x816,0x816,0x819,0x816,0x819,0x816,0x819,0x816,0x819,0x816, +0x819,0x816,0x819,0x816,0x819,0x816,0x819,0x816,0x819,0x816,0x819,0x816,0x816,0x816,0x816,0x81c, +0x816,0x81c,0x816,0x81c,0x816,0x816,0x816,0x816,0x816,0x816,0x81c,0x816,0x816,0x816,0x816,0x816, +0x819,0xc6c,0xc6c,0x75,0x75,0x930,0x930,0x8fa,0x8fa,0x81f,0x822,0xc69,0x78,0x78,0x78,0x78, +0x78,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834, +0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x1116,0x18f3,0x19d7, +0x7b,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837, +0x837,0x837,0x837,0x7b,0x903,0x903,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906, +0x906,0x906,0x906,0x906,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, +0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0x13c5,0x13c5,0x13c5,0x7e, +0x7e,0x7e,0x7e,0x7e,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840, +0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840, +0x840,0xd71,0xd71,0x81,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846, +0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846, +0x846,0x846,0x846,0x81,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, +0xb22,0x84,0x84,0x84,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xc75,0xb28,0xb28,0xb28,0xc75,0xb28,0x87,0x87,0x87,0x87,0x87, +0x87,0x87,0x87,0x87,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb, +0x11bb,0x11bb,0x11bb,0x11bb,0x9b4,0x9b4,0x9b4,0x9b4,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, +0x8a,0x8a,0x8a,0x8a,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230, +0x1230,0x1230,0x1230,0x1230,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x8d,0x8d,0x8d,0x8d,0x8d, +0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x8d,0x8d,0x8d,0x8d, +0x8d,0xafb,0x5d6,0x5dc,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5d9,0x5dc,0x5dc, +0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x8d,0x5dc,0x5dc,0x5dc,0x5dc, +0x5dc,0x8d,0x5dc,0x8d,0x5dc,0x5dc,0x8d,0x5dc,0x5dc,0x8d,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc, +0x5dc,0x5dc,0x5dc,0x5df,0x5f7,0x5f1,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1, +0x5f4,0x5fa,0x5f7,0x5f1,0x1344,0x1344,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, +0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7, +0x5f1,0x5f7,0x5f7,0x5f1,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, +0x90,0x90,0x90,0x90,0x5f4,0x5f1,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f1,0x5f4,0x5f1,0x5f1, +0x5f4,0x5f4,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f4,0x5f1,0x5f1,0x5f4,0x5f1,0x5f4,0x5f4,0x5f4,0x5f1, +0x5f4,0x5f4,0x5f4,0x5f4,0x90,0x90,0x5f4,0x5f4,0x5f4,0x5f4,0x5f1,0x5f1,0x5f4,0x5f1,0x5f1,0x5f1, +0x5f1,0x5f4,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f4,0x5f4,0x5f4,0x5f1,0x5f1,0x90,0x90,0x90,0x90, +0x90,0x90,0x90,0x90,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43, +0xb43,0xb43,0xb43,0xb43,0x5f7,0x5f7,0x951,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5ee,0x5ee, +0xbfd,0xd8c,0x90,0x90,0x858,0x86a,0x867,0x86a,0x867,0xc8a,0xc8a,0xd7d,0xd7a,0x85b,0x85b,0x85b, +0x85b,0x86d,0x86d,0x86d,0x885,0x888,0x897,0x93,0x88b,0x88e,0x89a,0x89a,0x882,0x879,0x873,0x879, +0x873,0x879,0x873,0x876,0x876,0x891,0x891,0x894,0x891,0x891,0x891,0x93,0x891,0x87f,0x87c,0x876, +0x93,0x93,0x93,0x93,0x603,0x60f,0x603,0xc00,0x603,0x96,0x603,0x60f,0x603,0x60f,0x603,0x60f, +0x603,0x60f,0x603,0x60f,0x60f,0x60c,0x606,0x609,0x60f,0x60c,0x606,0x609,0x60f,0x60c,0x606,0x609, +0x60f,0x60c,0x606,0x60c,0x606,0x60c,0x606,0x609,0x60f,0x60c,0x606,0x60c,0x606,0x60c,0x606,0x60c, +0x606,0x96,0x96,0x600,0x756,0x759,0x76e,0x771,0x750,0x759,0x759,0x9c,0x738,0x73b,0x73b,0x73b, +0x73b,0x738,0x738,0x9c,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xafe,0xafe,0xafe, +0x9b7,0x732,0x612,0x612,0x9c,0x780,0x75f,0x750,0x759,0x756,0x750,0x762,0x753,0x74d,0x750,0x76e, +0x765,0x75c,0x77d,0x750,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x77a,0x76b,0x768, +0x76e,0x76e,0x76e,0x780,0x741,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e, +0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e, +0x73e,0x73e,0x73e,0x9c,0x9c,0x9c,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x9c,0x9c,0x73e,0x73e, +0x73e,0x73e,0x73e,0x73e,0x9c,0x9c,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x9c,0x9c,0x73e,0x73e, +0x73e,0x9c,0x9c,0x9c,0xb46,0xb46,0xb46,0xb46,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f, +0x9f,0x1890,0x1890,0x1890,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, +0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xa2,0xa2,0xa2,0xa2,0xa2,0x165c,0x165c,0x165c,0x165c, +0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0xb55,0xb55,0xb55,0xb55, 0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55, -0x5e2,0x5e2,0x966,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5d9,0x5d9,0xc0c,0xd95,0x90,0x90, -0x861,0x873,0x870,0x873,0x870,0xc99,0xc99,0xd89,0xd86,0x864,0x864,0x864,0x864,0x876,0x876,0x876, -0x88e,0x891,0x8a0,0x93,0x894,0x897,0x8a3,0x8a3,0x88b,0x882,0x87c,0x882,0x87c,0x882,0x87c,0x87f, -0x87f,0x89a,0x89a,0x89d,0x89a,0x89a,0x89a,0x93,0x89a,0x888,0x885,0x87f,0x93,0x93,0x93,0x93, -0x5ee,0x5fa,0x5ee,0xc0f,0x5ee,0x96,0x5ee,0x5fa,0x5ee,0x5fa,0x5ee,0x5fa,0x5ee,0x5fa,0x5ee,0x5fa, -0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f7, -0x5f1,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x96,0x96,0x5eb, -0x750,0x753,0x768,0x76b,0x74a,0x753,0x753,0x9c,0x729,0x72c,0x72c,0x72c,0x72c,0x729,0x729,0x9c, -0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xb10,0xb10,0xb10,0x9cc,0x723,0x5fd,0x5fd, -0x9c,0x77a,0x759,0x74a,0x753,0x750,0x74a,0x75c,0x74d,0x747,0x74a,0x768,0x75f,0x756,0x777,0x74a, -0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x765,0x762,0x768,0x768,0x768,0x77a, -0x732,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f, -0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x9c, -0x9c,0x9c,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x9c,0x9c,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f, -0x9c,0x9c,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x9c,0x9c,0x72f,0x72f,0x72f,0x9c,0x9c,0x9c, -0xb58,0xb58,0xb58,0xb58,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x189c,0x189c,0x189c, -0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e, -0xb5e,0xb5e,0xb5e,0xa2,0xa2,0xa2,0xa2,0xa2,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668, -0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67, -0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xa5,0xa5, -0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xa8, -0xa8,0x1005,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73, -0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0x1722,0x1722,0x1722,0x1722,0x1722,0x1722,0x1722,0x1722, -0x1722,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, -0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b, -0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xab,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb8b,0xb8b,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb8b,0xab,0xb8b,0xb8b,0xab,0xab,0xb8b,0xab,0xab,0xb8b,0xb8b,0xab, -0xab,0xb8b,0xb8b,0xb8b,0xb8b,0xab,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb88,0xb88, -0xb88,0xb88,0xab,0xb88,0xab,0xb88,0xb88,0xb88,0xb88,0xd0e,0xb88,0xb88,0xab,0xb88,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b, -0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb88,0xb88,0xb88,0xb88,0xb8b,0xb8b,0xab,0xb8b, -0xb8b,0xb8b,0xb8b,0xab,0xab,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xab,0xb8b,0xb8b, -0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xab,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88, -0xb8b,0xb8b,0xab,0xb8b,0xb8b,0xb8b,0xb8b,0xab,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xab,0xb8b,0xab, -0xab,0xab,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xab,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xdfb,0xdfb,0xab,0xab,0xb8b,0xb8b,0xb8b,0xb8b, +0xb55,0xb55,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xb61,0xb61,0xb61,0xb61, +0xb61,0xb61,0xb61,0xa8,0xa8,0xff9,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61, +0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0x1716,0x1716,0x1716,0x1716, +0x1716,0x1716,0x1716,0x1716,0x1716,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, +0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xb79,0xb79,0xb79,0xb79, +0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76, +0xb76,0xab,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb79,0xb79,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb79,0xab,0xb79,0xb79,0xab,0xab,0xb79,0xab, +0xab,0xb79,0xb79,0xab,0xab,0xb79,0xb79,0xb79,0xb79,0xab,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79, +0xb79,0xb79,0xb76,0xb76,0xb76,0xb76,0xab,0xb76,0xab,0xb76,0xb76,0xb76,0xb76,0xd02,0xb76,0xb76, +0xab,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb79,0xb79,0xb79,0xb79, +0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb76,0xb76,0xb76,0xb76, +0xb79,0xb79,0xab,0xb79,0xb79,0xb79,0xb79,0xab,0xab,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79, +0xb79,0xab,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xab,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb79,0xb79,0xab,0xb79,0xb79,0xb79,0xb79,0xab,0xb79,0xb79,0xb79,0xb79, +0xb79,0xab,0xb79,0xab,0xab,0xab,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xab,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xdef,0xdef,0xab,0xab, +0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79, +0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb76,0xb76,0xb76,0xb70,0xb76,0xb76,0xb76,0xb76, +0xb76,0xb76,0xf06,0xf03,0xab,0xab,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73, +0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xae,0xb7f,0xae,0xae,0xae,0xae,0xae,0xae, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0x6c,0xb40,0xb40,0xb40,0xb40,0xb43,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb43, +0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xb46,0xb46,0xb46,0xb46, +0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46, +0xb46,0xb46,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x75,0x83a,0x834,0x83a, +0x834,0x83a,0x834,0x83a,0x834,0x83a,0x834,0x834,0x837,0x834,0x837,0x834,0x837,0x834,0x837,0x834, +0x837,0x834,0x837,0x834,0x837,0x834,0x837,0x834,0x837,0x834,0x837,0x834,0x834,0x834,0x834,0x83a, +0x834,0x83a,0x834,0x83a,0x834,0x834,0x834,0x834,0x834,0x834,0x83a,0x834,0x834,0x834,0x834,0x834, +0x837,0xca2,0xca2,0x75,0x75,0x966,0x966,0x930,0x930,0x83d,0x840,0xc9f,0x78,0x78,0x78,0x78, +0x78,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852, +0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x114c,0x1929,0x1a0d, +0x7b,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855, +0x855,0x855,0x855,0x7b,0x939,0x939,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c, +0x93c,0x93c,0x93c,0x93c,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52, +0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0x13fb,0x13fb,0x13fb,0x7e, +0x7e,0x7e,0x7e,0x7e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e, +0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e, +0x85e,0xda7,0xda7,0x81,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864, +0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864, +0x864,0x864,0x864,0x81,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58, +0xb58,0x84,0x84,0x84,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e, +0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xcab,0xb5e,0xb5e,0xb5e,0xcab,0xb5e,0x87,0x87,0x87,0x87,0x87, +0x87,0x87,0x87,0x87,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1, +0x11f1,0x11f1,0x11f1,0x11f1,0x9ea,0x9ea,0x9ea,0x9ea,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, +0x8a,0x8a,0x8a,0x8a,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, +0x1266,0x1266,0x1266,0x1266,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x8d,0x8d,0x8d,0x8d,0x8d, +0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x5df,0x5df,0x5df,0x5df,0x5df,0x8d,0x8d,0x8d,0x8d, +0x8d,0xb31,0x5e2,0x5e8,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5ee,0x5e5,0x5e8,0x5e8, +0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x8d,0x5e8,0x5e8,0x5e8,0x5e8, +0x5e8,0x8d,0x5e8,0x8d,0x5e8,0x5e8,0x8d,0x5e8,0x5e8,0x8d,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8, +0x5e8,0x5e8,0x5e8,0x5eb,0x603,0x5fd,0x603,0x5fd,0x600,0x606,0x603,0x5fd,0x600,0x606,0x603,0x5fd, +0x600,0x606,0x603,0x5fd,0x137a,0x137a,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, +0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x603,0x5fd,0x600,0x606,0x603,0x5fd,0x603,0x5fd,0x603, +0x5fd,0x603,0x603,0x5fd,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, +0x90,0x90,0x90,0x90,0x600,0x5fd,0x600,0x600,0x600,0x600,0x600,0x600,0x5fd,0x600,0x5fd,0x5fd, +0x600,0x600,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x600,0x5fd,0x5fd,0x600,0x5fd,0x600,0x600,0x600,0x5fd, +0x600,0x600,0x600,0x600,0x90,0x90,0x600,0x600,0x600,0x600,0x5fd,0x5fd,0x600,0x5fd,0x5fd,0x5fd, +0x5fd,0x600,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x600,0x600,0x600,0x5fd,0x5fd,0x90,0x90,0x90,0x90, +0x90,0x90,0x90,0x90,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79, +0xb79,0xb79,0xb79,0xb79,0x603,0x603,0x987,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x5fa,0x5fa, +0xc33,0xdc2,0x90,0x90,0x88e,0x8a0,0x89d,0x8a0,0x89d,0xcc0,0xcc0,0xdb3,0xdb0,0x891,0x891,0x891, +0x891,0x8a3,0x8a3,0x8a3,0x8bb,0x8be,0x8cd,0x93,0x8c1,0x8c4,0x8d0,0x8d0,0x8b8,0x8af,0x8a9,0x8af, +0x8a9,0x8af,0x8a9,0x8ac,0x8ac,0x8c7,0x8c7,0x8ca,0x8c7,0x8c7,0x8c7,0x93,0x8c7,0x8b5,0x8b2,0x8ac, +0x93,0x93,0x93,0x93,0x60f,0x61b,0x60f,0xc36,0x60f,0x96,0x60f,0x61b,0x60f,0x61b,0x60f,0x61b, +0x60f,0x61b,0x60f,0x61b,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x615, +0x61b,0x618,0x612,0x618,0x612,0x618,0x612,0x615,0x61b,0x618,0x612,0x618,0x612,0x618,0x612,0x618, +0x612,0x96,0x96,0x60c,0x774,0x777,0x78c,0x78f,0x76e,0x777,0x777,0x9c,0x74a,0x74d,0x74d,0x74d, +0x74d,0x74a,0x74a,0x9c,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xb34,0xb34,0xb34, +0x9ed,0x744,0x61e,0x61e,0x9c,0x79e,0x77d,0x76e,0x777,0x774,0x76e,0x780,0x771,0x76b,0x76e,0x78c, +0x783,0x77a,0x79b,0x76e,0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x798,0x789,0x786, +0x78c,0x78c,0x78c,0x79e,0x753,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750, +0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750, +0x750,0x750,0x750,0x9c,0x9c,0x9c,0x750,0x750,0x750,0x750,0x750,0x750,0x9c,0x9c,0x750,0x750, +0x750,0x750,0x750,0x750,0x9c,0x9c,0x750,0x750,0x750,0x750,0x750,0x750,0x9c,0x9c,0x750,0x750, +0x750,0x9c,0x9c,0x9c,0xb7c,0xb7c,0xb7c,0xb7c,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f, +0x9f,0x18c6,0x18c6,0x18c6,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82, +0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xa2,0xa2,0xa2,0xa2,0xa2,0x1692,0x1692,0x1692,0x1692, +0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0xb8b,0xb8b,0xb8b,0xb8b, 0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b, -0xb8b,0xb8b,0xb8b,0xb8b,0xb88,0xb88,0xb88,0xb82,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xf12,0xf0f, -0xab,0xab,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85, -0xb85,0xb85,0xb85,0xb85,0xae,0xb91,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, +0xb8b,0xb8b,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xb97,0xb97,0xb97,0xb97, +0xb97,0xb97,0xb97,0xa8,0xa8,0x102f,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, +0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0x174c,0x174c,0x174c,0x174c, +0x174c,0x174c,0x174c,0x174c,0x174c,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, +0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac, +0xbac,0xab,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbaf,0xbaf,0xbac,0xbac, +0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac, +0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbaf,0xab,0xbaf,0xbaf,0xab,0xab,0xbaf,0xab, +0xab,0xbaf,0xbaf,0xab,0xab,0xbaf,0xbaf,0xbaf,0xbaf,0xab,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbac,0xbac,0xbac,0xbac,0xab,0xbac,0xab,0xbac,0xbac,0xbac,0xbac,0xd38,0xbac,0xbac, +0xab,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbac,0xbac,0xbac,0xbac, +0xbaf,0xbaf,0xab,0xbaf,0xbaf,0xbaf,0xbaf,0xab,0xab,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xab,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xab,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac, +0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac, +0xbac,0xbac,0xbac,0xbac,0xbaf,0xbaf,0xab,0xbaf,0xbaf,0xbaf,0xbaf,0xab,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xab,0xbaf,0xab,0xab,0xab,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xab,0xbac,0xbac, +0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xe25,0xe25,0xab,0xab, +0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbac,0xbac,0xbac,0xba6,0xbac,0xbac,0xbac,0xbac, +0xbac,0xbac,0xf3c,0xf39,0xab,0xab,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9, +0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xae,0xbb5,0xae,0xae,0xae,0xae,0xae,0xae, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, #if !U_PLATFORM_IS_DARWIN_BASED -0xae,0xae,0xae,0xae,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5, -0xbe5,0xb1,0xbe5,0xbe5,0xbe5,0xbe5,0xbdf,0xbdf,0xbe2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee, -0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbe8,0xbe8,0xbeb,0xc51,0xc51,0xb4,0xb4,0xb4,0xb4,0xb4, -0xb4,0xb4,0xb4,0xb4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4, -0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf1,0xbf1,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7, -0xb7,0xb7,0xb7,0xb7,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa,0xbfa, -0xbfa,0xba,0xbfa,0xbfa,0xbfa,0xba,0xbf7,0xbf7,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, -0xba,0xba,0xba,0xba,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4, -0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4, -0xce4,0x14e2,0x14e2,0xbd,0xcd5,0xcd5,0xcd5,0xce1,0xce1,0xce1,0xce1,0xcd5,0xcd5,0xce1,0xce1,0xce1, -0xbd,0xbd,0xbd,0xbd,0xce1,0xce1,0xcd5,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xcd8,0xcd8,0xcd8, -0xbd,0xbd,0xbd,0xbd,0xcdb,0xbd,0xbd,0xbd,0xce7,0xce7,0xcde,0xcde,0xcde,0xcde,0xcde,0xcde, -0xcde,0xcde,0xcde,0xcde,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea, -0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xc0,0xc0,0xcea,0xcea,0xcea,0xcea,0xcea,0xc0,0xc0,0xc0, -0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5, -0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0xc3,0xc3,0x14e5,0x14e5, -0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5, -0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0xc3,0xc3,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5, -0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5, -0x14e5,0x14e5,0xc3,0xc3,0xc3,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5, -0x14e5,0xc3,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x14e5,0x1863,0xc3,0xc3,0xc3,0xc3,0xc3, -0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x16e9,0x16e9,0x16e9,0x16e9,0xc3,0xc3,0xc3,0xc3, -0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xd11,0xd11,0xd11,0xd11, -0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xc6,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11, -0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xc6, -0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11, -0xd11,0xd11,0xd11,0xc6,0xd11,0xd11,0xc6,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11, -0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xc6,0xc6,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11, -0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xae,0xae,0xae,0xae,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e, -0xc1e,0xb1,0xc1e,0xc1e,0xc1e,0xc1e,0xc18,0xc18,0xc1b,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27, -0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc21,0xc21,0xc24,0xc8d,0xc8d,0xb4,0xb4,0xb4,0xb4,0xb4, -0xb4,0xb4,0xb4,0xb4,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d, -0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2a,0xc2a,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7, -0xb7,0xb7,0xb7,0xb7,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33, -0xc33,0xba,0xc33,0xc33,0xc33,0xba,0xc30,0xc30,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba, -0xba,0xba,0xba,0xba,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20, -0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20, -0xd20,0x151e,0x151e,0xbd,0xd11,0xd11,0xd11,0xd1d,0xd1d,0xd1d,0xd1d,0xd11,0xd11,0xd1d,0xd1d,0xd1d, -0xbd,0xbd,0xbd,0xbd,0xd1d,0xd1d,0xd11,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd14,0xd14,0xd14, -0xbd,0xbd,0xbd,0xbd,0xd17,0xbd,0xbd,0xbd,0xd23,0xd23,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a, -0xd1a,0xd1a,0xd1a,0xd1a,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26, -0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xc0,0xc0,0xd26,0xd26,0xd26,0xd26,0xd26,0xc0,0xc0,0xc0, -0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521, -0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0xc3,0xc3,0x1521,0x1521, -0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521, -0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0xc3,0xc3,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521, -0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521, -0x1521,0x1521,0xc3,0xc3,0xc3,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521, -0x1521,0xc3,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x189f,0xc3,0xc3,0xc3,0xc3,0xc3, -0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x1725,0x1725,0x1725,0x1725,0xc3,0xc3,0xc3,0xc3, -0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xd4d,0xd4d,0xd4d,0xd4d, -0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xc6,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d, -0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xc6, -0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d, -0xd4d,0xd4d,0xd4d,0xc6,0xd4d,0xd4d,0xc6,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d, -0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xc6,0xc6,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d, -0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f, +0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xb1,0xc0f,0xc0f,0xc0f,0xc0f,0xc09,0xc09,0xc0c,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18, +0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc12,0xc12,0xc15,0xc7e,0xc7e,0xb4, +0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e, +0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1b,0xc1b,0xb7,0xb7,0xb7,0xb7, +0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24, +0xc24,0xc24,0xc24,0xc24,0xc24,0xba,0xc24,0xc24,0xc24,0xba,0xc21,0xc21,0xba,0xba,0xba,0xba, +0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14, +0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14, +0xd14,0xd14,0xd14,0xd14,0xd14,0x1512,0x1512,0xbd,0xd05,0xd05,0xd05,0xd11,0xd11,0xd11,0xd11,0xd05, +0xd05,0xd11,0xd11,0xd11,0xbd,0xbd,0xbd,0xbd,0xd11,0xd11,0xd05,0xd11,0xd11,0xd11,0xd11,0xd11, +0xd11,0xd08,0xd08,0xd08,0xbd,0xbd,0xbd,0xbd,0xd0b,0xbd,0xbd,0xbd,0xd17,0xd17,0xd0e,0xd0e, +0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a, +0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xc0,0xc0,0xd1a,0xd1a,0xd1a,0xd1a, +0xd1a,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0xc3,0xc3,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0xc3,0xc3,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0xc3,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1893,0x192c, +0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x1719,0x1719,0x1719,0x1719, +0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0xc3, +0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xc6,0xd41,0xd41,0xd41, +0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41, +0xd41,0xd41,0xd41,0xc6,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41, +0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xc6,0xd41,0xd41,0xc6,0xd41,0xd41,0xd41,0xd41,0xd41, +0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xc6,0xc6,0xd41,0xd41,0xd41,0xd41, +0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, 0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, +0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xd44,0xd44,0xd44,0xd44, +0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44, +0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xc9,0xc9,0xc9,0xc9,0xc9,0xd86,0xd86,0xd86,0xcc, +0xcc,0xcc,0xcc,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80, +0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xcc,0xcc,0xcc,0xd83, +0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45, +0xc45,0xc45,0xc45,0xc45,0xc45,0xb1,0xc45,0xc45,0xc45,0xc45,0xc3f,0xc3f,0xc42,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e, +0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc48,0xc48,0xc4b,0xcb4,0xcb4,0xb4, +0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54, +0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc51,0xc51,0xb7,0xb7,0xb7,0xb7, +0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a, +0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xba,0xc5a,0xc5a,0xc5a,0xba,0xc57,0xc57,0xba,0xba,0xba,0xba, +0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a, #if !U_PLATFORM_IS_DARWIN_BASED -0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14, -0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14, -0xd14,0xd14,0xd14,0xc9,0xc9,0xc9,0xc9,0xc9,0xd56,0xd56,0xd56,0xcc,0xcc,0xcc,0xcc,0xd50, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50, -#if !U_PLATFORM_IS_DARWIN_BASED -0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xcc,0xcc,0xcc,0xd53,0xd53,0xd53,0xd53,0xd53, -0xd53,0xd53,0xd53,0xd53,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a, -0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a, -0xd1a,0xd1a,0xcf,0xd17,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23, -0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23, -0xd23,0xd23,0xd2,0xd2,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd20,0xd2,0xd2, -0xd2,0xd2,0xd2,0xd2,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821, -0x1821,0x1821,0x1821,0x1821,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd5,0xd5,0xd26,0xd5,0xd26,0xd26, -0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26, -0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd5,0xd26,0xd26,0xd5,0xd5,0xd5,0xd26,0xd5,0xd5,0xd26, -0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29, -0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8, -0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,0x14e8,0x14e8,0x179a,0x179a,0xde, -0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x135,0x135,0x135,0x135, -0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec, -0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xde3,0xde3,0xde9,0xde9,0xde3,0xe1,0xe1,0xde6,0xde6, -0x10f5,0x10f5,0x10f5,0x10f5,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4, -0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e, -0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0x14eb,0x14eb,0x14eb,0x14eb,0x14eb,0x14eb,0x14eb,0x14eb,0x14eb, -0x14eb,0x14eb,0x14eb,0x14eb,0x14eb,0x14ee,0x1866,0x1866,0x1866,0x1866,0xe7,0x179d,0x1314,0x1137,0xee5,0xee5, -0xdfe,0xdfb,0xdfe,0xdfb,0xdfb,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0x1140,0x113d,0x1140,0x113d,0x113a, -0x113a,0x113a,0x13da,0x13d7,0xea,0xea,0xea,0xea,0xea,0xdf8,0xdf5,0xdf5,0xdf5,0xdf2,0xdf8,0xdf5, -0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01, -0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed, -0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xed,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xed, -0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xed,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xe01,0xed, -0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07, -0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xf3,0x13dd,0xf3,0xf3,0xf3,0xf3,0xf3,0x13dd,0xf3,0xf3, -0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64, -0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xf6, -0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d, -0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xf6, -0xe22,0xe16,0xe16,0xe16,0xf9,0xe16,0xe16,0xf9,0xf9,0xf9,0xf9,0xf9,0xe16,0xe16,0xe16,0xe16, -0xe22,0xe22,0xe22,0xe22,0xf9,0xe22,0xe22,0xe22,0xf9,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22, -0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22, -0xf9,0xf9,0xf9,0xf9,0xe13,0xe13,0xe13,0xf9,0xf9,0xf9,0xf9,0xe19,0xe1c,0xe1c,0xe1c,0xe1c, -0xe1c,0xe1c,0xe1c,0xe1c,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xe1f,0xe1f,0xe1f,0xe1f, -0xe1f,0xe1f,0xe25,0xe25,0xe1c,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xe31,0xe31,0xe31,0xe31, -0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0x1146,0x1146,0xfc,0xfc,0xfc,0xfc,0xe31,0xe31,0xe31,0xe31, -0xe31,0xe34,0xe34,0xe34,0xe31,0xe31,0xe34,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31, -0xe31,0xe31,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e, -0xe2e,0xe2e,0x1143,0xfc,0xfc,0xfc,0xe2b,0xe2b,0xe3a,0xe3a,0xe3a,0xe3a,0xff,0xff,0xff,0xff, -0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe37,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x14f7,0x14fd,0x14fa,0x1845,0x17a0,0x1869,0x1869,0x1869, -0x1869,0x1869,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xd50,0xd50,0xd50,0xc9,0xc9,0xc9,0xc9,0xc9,0xd92,0xd92,0xd92,0xcc,0xcc,0xcc,0xcc,0xd8c, -0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c, -0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xcc,0xcc,0xcc,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f, -0xd8f,0xd8f,0xd8f,0xd8f,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56, -0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56, -0xd56,0xd56,0xcf,0xd53,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, -0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f, -0xd5f,0xd5f,0xd2,0xd2,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd2,0xd2, -0xd2,0xd2,0xd2,0xd2,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d, -0x185d,0x185d,0x185d,0x185d,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd5,0xd5,0xd62,0xd5,0xd62,0xd62, -0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62, -0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd5,0xd62,0xd62,0xd5,0xd5,0xd5,0xd62,0xd5,0xd5,0xd62, -0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65, -0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8, -0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0x1524,0x1524,0x17d6,0x17d6,0xde, -0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x135,0x135,0x135,0x135, -0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28, -0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe1f,0xe1f,0xe25,0xe25,0xe1f,0xe1,0xe1,0xe22,0xe22, -0x1131,0x1131,0x1131,0x1131,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4, -0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a, -0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527, -0x1527,0x1527,0x1527,0x1527,0x1527,0x152a,0x18a2,0x18a2,0x18a2,0x18a2,0xe7,0x17d9,0x1350,0x1173,0xf21,0xf21, -0xe3a,0xe37,0xe3a,0xe37,0xe37,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0x117c,0x1179,0x117c,0x1179,0x1176, -0x1176,0x1176,0x1416,0x1413,0xea,0xea,0xea,0xea,0xea,0xe34,0xe31,0xe31,0xe31,0xe2e,0xe34,0xe31, +0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xcf,0xd47,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53, +0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53, +0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd2,0xd2,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50, +0xd50,0xd50,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851, +0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd5,0xd5, +0xd56,0xd5,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56, +0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd56,0xd5,0xd56,0xd56,0xd5,0xd5,0xd5, +0xd56,0xd5,0xd5,0xd56,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59, +0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd8,0xd8,0xd8,0xd8,0xd8, +0xd8,0xd8,0xd8,0xd8,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0x1518, +0x1518,0x17ca,0x17ca,0xde,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5, +0x135,0x135,0x135,0x135,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe13,0xe13,0xe19,0xe19,0xe13, +0xe1,0xe1,0xe16,0xe16,0x1125,0x1125,0x1125,0x1125,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4, +0xe4,0xe4,0xe4,0xe4,0xc7b,0xc7b,0xc7b,0xc7b,0xc7b,0xc7b,0xc7b,0xc7b,0xc7b,0xc7b,0xc7b,0xc7b, +0xc7b,0xc7b,0xc7b,0xc7b,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x151b,0x151b,0x151b,0x151b,0x151b, +0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151e,0x1896,0x1896,0x1896,0x1896,0xe7,0x17cd, +0x1350,0x1167,0xf15,0xf15,0xe2e,0xe2b,0xe2e,0xe2b,0xe2b,0xe22,0xe22,0xe22,0xe22,0xe22,0xe22,0x1170, +0x116d,0x1170,0x116d,0x116a,0x116a,0x116a,0x140d,0x140a,0xea,0xea,0xea,0xea,0xea,0xe28,0xe25,0xe25, +0xe25,0xe22,0xe28,0xe25,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31, +0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xed,0xed,0xed,0xed,0xed, +0xed,0xed,0xed,0xed,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xed,0xe31,0xe31,0xe31,0xe31, +0xe31,0xe31,0xe31,0xed,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xed,0xe31,0xe31,0xe31,0xe31, +0xe31,0xe31,0xe31,0xed,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37, +0xe37,0xe37,0xe37,0xe37,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xf0,0xf0, +0xf0,0xf0,0xf0,0xf0,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xf3,0x1410,0xf3,0xf3,0xf3,0xf3, +0xf3,0x1410,0xf3,0xf3,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94, +0xe94,0xe94,0xe94,0xe94,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40, +0xe40,0xe40,0xe40,0xf6,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d, 0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d, -0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed, -0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xed,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xed, -0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xed,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xed, -0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43, -0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xf3,0x1419,0xf3,0xf3,0xf3,0xf3,0xf3,0x1419,0xf3,0xf3, -0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0, -0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xf6, -0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49, -0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xf6, -0xe5e,0xe52,0xe52,0xe52,0xf9,0xe52,0xe52,0xf9,0xf9,0xf9,0xf9,0xf9,0xe52,0xe52,0xe52,0xe52, -0xe5e,0xe5e,0xe5e,0xe5e,0xf9,0xe5e,0xe5e,0xe5e,0xf9,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e, -0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e, -0xf9,0xf9,0xf9,0xf9,0xe4f,0xe4f,0xe4f,0xf9,0xf9,0xf9,0xf9,0xe55,0xe58,0xe58,0xe58,0xe58, -0xe58,0xe58,0xe58,0xe58,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xe5b,0xe5b,0xe5b,0xe5b, -0xe5b,0xe5b,0xe61,0xe61,0xe58,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xe6d,0xe6d,0xe6d,0xe6d, -0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0x1182,0x1182,0xfc,0xfc,0xfc,0xfc,0xe6d,0xe6d,0xe6d,0xe6d, -0xe6d,0xe70,0xe70,0xe70,0xe6d,0xe6d,0xe70,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d, -0xe6d,0xe6d,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a, -0xe6a,0xe6a,0x117f,0xfc,0xfc,0xfc,0xe67,0xe67,0xe76,0xe76,0xe76,0xe76,0xff,0xff,0xff,0xff, -0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe73,0xe76,0xe76,0xe76,0xe76,0xe76,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1533,0x1539,0x1536,0x1881,0x17dc,0x18a5,0x18a5,0x18a5, -0x18a5,0x18a5,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102, +0xe3d,0xe3d,0xe3d,0xf6,0xe52,0xe46,0xe46,0xe46,0xf9,0xe46,0xe46,0xf9,0xf9,0xf9,0xf9,0xf9, +0xe46,0xe46,0xe46,0xe46,0xe52,0xe52,0xe52,0xe52,0xf9,0xe52,0xe52,0xe52,0xf9,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0x1932,0x1932,0xf9,0xf9,0xe43,0xe43,0xe43,0xf9,0xf9,0xf9,0xf9,0xe49, +0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0x192f,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, +0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe55,0xe55,0xe4c,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, +0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0x1176,0x1176,0xfc,0xfc,0xfc,0xfc, +0xe61,0xe61,0xe61,0xe61,0xe61,0xe64,0xe64,0xe64,0xe61,0xe61,0xe64,0xe61,0xe61,0xe61,0xe61,0xe61, +0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xe5e,0xe5e,0xe5e,0xe5e, +0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0x1173,0xfc,0xfc,0xfc,0xe5b,0xe5b,0xe6a,0xe6a,0xe6a,0xe6a, +0xff,0xff,0xff,0xff,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe67,0xe6a,0xe6a,0xe6a, +0xe6a,0xe6a,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1527,0x152d,0x152a,0x1875, +0x17d0,0x1899,0x1899,0x1899,0x1899,0x1899,0x1938,0x1935,0x193b,0x1935,0x193b,0x102,0x102,0x102,0x102,0x102, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0x1548,0x1548,0xbd,0xd3b,0xd3b,0xd3b,0xd47,0xd47,0xd47,0xd47,0xd3b, +0xd3b,0xd47,0xd47,0xd47,0xbd,0xbd,0xbd,0xbd,0xd47,0xd47,0xd3b,0xd47,0xd47,0xd47,0xd47,0xd47, +0xd47,0xd3e,0xd3e,0xd3e,0xbd,0xbd,0xbd,0xbd,0xd41,0xbd,0xbd,0xbd,0xd4d,0xd4d,0xd44,0xd44, +0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50, +0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xc0,0xc0,0xd50,0xd50,0xd50,0xd50, +0xd50,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x154b,0x154b,0x154b,0x154b, +0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b, +0xc3,0xc3,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b, +0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0xc3,0xc3,0x154b,0x154b,0x154b,0x154b, +0x154b,0x154b,0x154b,0x154b,0x154b,0xc3,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x18c9,0x1962, +0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x174f,0x174f,0x174f,0x174f, +0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0xc3, +0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xc6,0xd77,0xd77,0xd77, +0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77, +0xd77,0xd77,0xd77,0xc6,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77, +0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xc6,0xd77,0xd77,0xc6,0xd77,0xd77,0xd77,0xd77,0xd77, +0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xc6,0xc6,0xd77,0xd77,0xd77,0xd77, +0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, +0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, +0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xd7a,0xd7a,0xd7a,0xd7a, +0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a, +0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xc9,0xc9,0xc9,0xc9,0xc9,0xdbc,0xdbc,0xdbc,0xcc, +0xcc,0xcc,0xcc,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6, +0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xcc,0xcc,0xcc,0xdb9, +0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80, +0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80, +0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xcf,0xd7d,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89, +0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd89, +0xd89,0xd89,0xd89,0xd89,0xd89,0xd89,0xd2,0xd2,0xd86,0xd86,0xd86,0xd86,0xd86,0xd86,0xd86,0xd86, +0xd86,0xd86,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887, +0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd5,0xd5, +0xd8c,0xd5,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c, +0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd5,0xd8c,0xd8c,0xd5,0xd5,0xd5, +0xd8c,0xd5,0xd5,0xd8c,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f, +0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8,0xd8,0xd8,0xd8,0xd8, +0xd8,0xd8,0xd8,0xd8,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0x154e, +0x154e,0x1800,0x1800,0xde,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b, +0x135,0x135,0x135,0x135,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52, +0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,0xe49,0xe49,0xe4f,0xe4f,0xe49, +0xe1,0xe1,0xe4c,0xe4c,0x115b,0x115b,0x115b,0x115b,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4, +0xe4,0xe4,0xe4,0xe4,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1, +0xcb1,0xcb1,0xcb1,0xcb1,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x1551,0x1551,0x1551,0x1551,0x1551, +0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1554,0x18cc,0x18cc,0x18cc,0x18cc,0xe7,0x1803, +0x1386,0x119d,0xf4b,0xf4b,0xe64,0xe61,0xe64,0xe61,0xe61,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0x11a6, +0x11a3,0x11a6,0x11a3,0x11a0,0x11a0,0x11a0,0x1443,0x1440,0xea,0xea,0xea,0xea,0xea,0xe5e,0xe5b,0xe5b, +0xe5b,0xe58,0xe5e,0xe5b,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67, +0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xed,0xed,0xed,0xed,0xed, +0xed,0xed,0xed,0xed,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xed,0xe67,0xe67,0xe67,0xe67, +0xe67,0xe67,0xe67,0xed,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xed,0xe67,0xe67,0xe67,0xe67, +0xe67,0xe67,0xe67,0xed,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d, +0xe6d,0xe6d,0xe6d,0xe6d,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xf0,0xf0, +0xf0,0xf0,0xf0,0xf0,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xf3,0x1446,0xf3,0xf3,0xf3,0xf3, +0xf3,0x1446,0xf3,0xf3,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca, +0xeca,0xeca,0xeca,0xeca,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76, +0xe76,0xe76,0xe76,0xf6,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73, +0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73, +0xe73,0xe73,0xe73,0xf6,0xe88,0xe7c,0xe7c,0xe7c,0xf9,0xe7c,0xe7c,0xf9,0xf9,0xf9,0xf9,0xf9, +0xe7c,0xe7c,0xe7c,0xe7c,0xe88,0xe88,0xe88,0xe88,0xf9,0xe88,0xe88,0xe88,0xf9,0xe88,0xe88,0xe88, +0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88, +0xe88,0xe88,0xe88,0xe88,0x1968,0x1968,0xf9,0xf9,0xe79,0xe79,0xe79,0xf9,0xf9,0xf9,0xf9,0xe7f, +0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0x1965,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, +0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe8b,0xe8b,0xe82,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, +0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0x11ac,0x11ac,0xfc,0xfc,0xfc,0xfc, +0xe97,0xe97,0xe97,0xe97,0xe97,0xe9a,0xe9a,0xe9a,0xe97,0xe97,0xe9a,0xe97,0xe97,0xe97,0xe97,0xe97, +0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xe94,0xe94,0xe94,0xe94, +0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0x11a9,0xfc,0xfc,0xfc,0xe91,0xe91,0xea0,0xea0,0xea0,0xea0, +0xff,0xff,0xff,0xff,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xe9d,0xea0,0xea0,0xea0, +0xea0,0xea0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x155d,0x1563,0x1560,0x18ab, +0x1806,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x196e,0x196b,0x1971,0x196b,0x1971,0x102,0x102,0x102,0x102,0x102, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102, #if !U_PLATFORM_IS_DARWIN_BASED -0x102,0x102,0x102,0x102,0xe61,0xe61,0xe61,0xe5e,0xe5e,0xe55,0xe55,0xe5e,0xe5b,0xe5b,0xe5b,0xe5b, -0x105,0x105,0x105,0x105,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b4,0x12b4,0x12b7,0x12b4,0x159,0x159, -0x159,0x159,0x159,0x159,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0x13e9,0x13e9,0x108,0x108,0x108,0x108, -0x108,0x108,0x108,0xe67,0x131a,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108, -0x108,0x108,0x108,0x1317,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21, -0xc21,0xc21,0xc21,0xc21,0xe94,0xe85,0xe7f,0xe91,0xe8e,0xe88,0xe88,0xe97,0xe82,0xe8b,0x10b,0x10b, -0x10b,0x10b,0x10b,0x10b,0xf18,0xf18,0xf03,0xf18,0xf1b,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, -0x111,0x111,0x111,0x111,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf24,0xf24, -0xf09,0xf0f,0xf24,0xf24,0xf0c,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf06, -0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09, -0xf09,0x111,0x111,0x111,0x1320,0x131d,0x1320,0x131d,0x1320,0x131d,0x1320,0x131d,0x1320,0x131d,0x13ef,0x1509, -0x1509,0x1509,0x17a3,0x114,0x1509,0x1509,0x16f2,0x16f2,0x16f2,0x16ec,0x16f2,0x16ec,0x114,0x114,0x114,0x114, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x102,0x102,0x102,0x102,0xe9d,0xe9d,0xe9d,0xe9a,0xe9a,0xe91,0xe91,0xe9a,0xe97,0xe97,0xe97,0xe97, -0x105,0x105,0x105,0x105,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x12f0,0x12f0,0x12f3,0x12f0,0x159,0x159, -0x159,0x159,0x159,0x159,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0x1425,0x1425,0x108,0x108,0x108,0x108, -0x108,0x108,0x108,0xea3,0x1356,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108, -0x108,0x108,0x108,0x1353,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a, -0xc5a,0xc5a,0xc5a,0xc5d,0xed0,0xec1,0xebb,0xecd,0xeca,0xec4,0xec4,0xed3,0xebe,0xec7,0x10b,0x10b, -0x10b,0x10b,0x10b,0x10b,0xf54,0xf54,0xf3f,0xf54,0xf57,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a, -0x111,0x111,0x111,0x111,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf60,0xf60, -0xf45,0xf4b,0xf60,0xf60,0xf48,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf42, -0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45,0xf45, -0xf45,0x111,0x111,0x111,0x135c,0x1359,0x135c,0x1359,0x135c,0x1359,0x135c,0x1359,0x135c,0x1359,0x142b,0x1545, -0x1545,0x1545,0x17df,0x114,0x1545,0x1545,0x172e,0x172e,0x172e,0x1728,0x172e,0x1728,0x114,0x114,0x114,0x114, +0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0xe91,0xe91,0xe91,0xe8e, +0xe8e,0xe85,0xe85,0xe8e,0xe8b,0xe8b,0xe8b,0xe8b,0x105,0x105,0x105,0x105,0x12ed,0x12ed,0x12ed,0x12f0, +0x12f0,0x12f0,0x12e7,0x12e7,0x12ea,0x12e7,0x159,0x159,0x159,0x159,0x159,0x159,0xe94,0xe94,0xe94,0xe94, +0xe94,0xe94,0x141c,0x141c,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0xe97,0x1356,0x108,0x108,0x108, +0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x1353,0xc4b,0xc4b,0xc4b,0xc4b, +0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4e,0xec4,0xeb5,0xeaf,0xec1, +0xebe,0xeb8,0xeb8,0xec7,0xeb2,0xebb,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0xf48,0xf48,0xf33,0xf48, +0xf4b,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0x111,0x111,0x111,0x111,0xf42,0xf42,0xf42,0xf42, +0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf54,0xf54,0xf39,0xf3f,0xf54,0xf54,0xf3c,0xf39,0xf39,0xf39, +0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36, +0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0x111,0x111,0x111,0x135c,0x1359,0x135c,0x1359, +0x135c,0x1359,0x135c,0x1359,0x135c,0x1359,0x1422,0x1539,0x1539,0x1539,0x17d3,0x1944,0x1539,0x1539,0x1722,0x1722, +0x1722,0x171c,0x1722,0x171c,0x1947,0x1944,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0xec7,0xec7,0xec7,0xec4, +0xec4,0xebb,0xebb,0xec4,0xec1,0xec1,0xec1,0xec1,0x105,0x105,0x105,0x105,0x1323,0x1323,0x1323,0x1326, +0x1326,0x1326,0x131d,0x131d,0x1320,0x131d,0x159,0x159,0x159,0x159,0x159,0x159,0xeca,0xeca,0xeca,0xeca, +0xeca,0xeca,0x1452,0x1452,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0xecd,0x138c,0x108,0x108,0x108, +0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x1389,0xc81,0xc81,0xc81,0xc81, +0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc84,0xefa,0xeeb,0xee5,0xef7, +0xef4,0xeee,0xeee,0xefd,0xee8,0xef1,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0xf7e,0xf7e,0xf69,0xf7e, +0xf81,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0x111,0x111,0x111,0x111,0xf78,0xf78,0xf78,0xf78, +0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf8a,0xf8a,0xf6f,0xf75,0xf8a,0xf8a,0xf72,0xf6f,0xf6f,0xf6f, +0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6c,0xf6c,0xf6c,0xf6c,0xf6c,0xf6c,0xf6c,0xf6c,0xf6c, +0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0x111,0x111,0x111,0x1392,0x138f,0x1392,0x138f, +0x1392,0x138f,0x1392,0x138f,0x1392,0x138f,0x1458,0x156f,0x156f,0x156f,0x1809,0x197a,0x156f,0x156f,0x1758,0x1758, +0x1758,0x1752,0x1758,0x1752,0x197d,0x197a,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114, #if !U_PLATFORM_IS_DARWIN_BASED -0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x1506, -0x13f2,0x13f2,0x131d,0x1020,0x1020,0x1020,0x1020,0x1020,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33, -0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf30,0xf30,0xf36,0xf36, -0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f, -0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf39,0xf39, -0xf39,0xf39,0x114f,0x114f,0x11a,0x11a,0x11a,0xf3c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c, -0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c, -0x150c,0x16f5,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x1542, -0x142e,0x142e,0x1359,0x105c,0x105c,0x105c,0x105c,0x105c,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f, -0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6c,0xf6c,0xf72,0xf72, -0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b, -0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf75,0xf75, -0xf75,0xf75,0x118b,0x118b,0x11a,0x11a,0x11a,0xf78,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548, -0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548, -0x1548,0x1731,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d, +0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x1536,0x1425,0x1425,0x1359,0x1050, +0x1050,0x1050,0x1050,0x1050,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63, +0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf60,0xf60,0xf66,0xf66,0x117,0x117,0x117,0x117, +0x117,0x117,0x117,0x117,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f, +0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf69,0xf69,0xf69,0xf69,0x117f,0x117f, +0x11a,0x11a,0x11a,0xf6c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c, +0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x1725,0x11d,0x11d, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x156c,0x145b,0x145b,0x138f,0x1086, +0x1086,0x1086,0x1086,0x1086,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99, +0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf96,0xf96,0xf9c,0xf9c,0x117,0x117,0x117,0x117, +0x117,0x117,0x117,0x117,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5, +0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xf9f,0xf9f,0xf9f,0xf9f,0x11b5,0x11b5, +0x11a,0x11a,0x11a,0xfa2,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572, +0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x175b,0x11d,0x11d, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d, +0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d, #if !U_PLATFORM_IS_DARWIN_BASED -0x11d,0x11d,0x11d,0x11d,0xf48,0xf48,0xf48,0x1512,0x1512,0x1512,0x1512,0x1512,0x1512,0x1512,0x1512,0x1512, -0x1512,0x1512,0x1512,0x120,0xf45,0xf45,0xf45,0xf45,0x150f,0x120,0x120,0x120,0x120,0x120,0x120,0x120, -0x120,0x120,0x120,0x120,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b, -0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123, -0x123,0x123,0x123,0x123,0x1047,0x1047,0x1047,0x1047,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044, -0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1044,0x1044,0x103b,0x1038,0x126,0x126,0x126,0x104a, -0x104a,0x103e,0x103e,0x103e,0x1041,0x1041,0x1041,0x1041,0x1041,0x1041,0x1041,0x1041,0x1041,0x1041,0x126,0x126, -0x126,0x1047,0x1047,0x1047,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x1050,0x1050, -0x1050,0x1050,0x1050,0x1050,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1065,0x1065, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x11d,0x11d,0x11d,0x11d,0xf84,0xf84,0xf84,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e, -0x154e,0x154e,0x154e,0x120,0xf81,0xf81,0xf81,0xf81,0x154b,0x120,0x120,0x120,0x120,0x120,0x120,0x120, -0x120,0x120,0x120,0x120,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87, -0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123, -0x123,0x123,0x123,0x123,0x1083,0x1083,0x1083,0x1083,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080, -0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1080,0x1080,0x1077,0x1074,0x126,0x126,0x126,0x1086, -0x1086,0x107a,0x107a,0x107a,0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x126,0x126, -0x126,0x1083,0x1083,0x1083,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x108c,0x108c, -0x108c,0x108c,0x108c,0x108c,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x10a1,0x10a1, +0xf78,0xf78,0xf78,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x120, +0xf75,0xf75,0xf75,0xf75,0x153f,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120, +0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b, +0xf7b,0xf7b,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x123,0x123,0x123,0x123,0x123,0x123,0x123, +0x1077,0x1077,0x1077,0x1077,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1065,0x1065,0x1065,0x1065, +0x1065,0x1065,0x1065,0x1065,0x1074,0x1074,0x106b,0x1068,0x126,0x126,0x126,0x107a,0x107a,0x106e,0x106e,0x106e, +0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x126,0x126,0x126,0x1077,0x1077,0x1077, +0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080, +0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1095,0x1095,0x129,0x129,0x129,0x129, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xfae,0xfae,0xfae,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x120, +0xfab,0xfab,0xfab,0xfab,0x1575,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120, +0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1, +0xfb1,0xfb1,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x123,0x123,0x123,0x123,0x123,0x123,0x123, +0x10ad,0x10ad,0x10ad,0x10ad,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x109b,0x109b,0x109b,0x109b, +0x109b,0x109b,0x109b,0x109b,0x10aa,0x10aa,0x10a1,0x109e,0x126,0x126,0x126,0x10b0,0x10b0,0x10a4,0x10a4,0x10a4, +0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x10a7,0x126,0x126,0x126,0x10ad,0x10ad,0x10ad, +0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6, +0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10cb,0x10cb,0x129,0x129,0x129,0x129, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129, #if !U_PLATFORM_IS_DARWIN_BASED -0x129,0x129,0x129,0x129,0x108c,0x108c,0x108c,0x108c,0x1086,0x17a6,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c, -0x12c,0x12c,0x1092,0x1092,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x12c,0x12c, -0x12c,0x12c,0x12c,0x12c,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4, -0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10aa,0x10ad,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f, -0x12f,0x12f,0x12f,0x10a7,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10b3,0x10b3,0x10b3, -0x10b3,0x10b3,0x10b3,0x10bc,0x10bc,0x10b3,0x10b3,0x10bc,0x10bc,0x10b3,0x10b3,0x132,0x132,0x132,0x132,0x132, -0x132,0x132,0x132,0x132,0x10bf,0x10bf,0x10bf,0x10b3,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf, -0x10b3,0x10bc,0x132,0x132,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x132,0x132, -0x10b6,0x10c2,0x10c2,0x10c2,0x151e,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x129,0x129,0x129,0x129,0x10c8,0x10c8,0x10c8,0x10c8,0x10c2,0x17e2,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c, -0x12c,0x12c,0x10ce,0x10ce,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x12c,0x12c, -0x12c,0x12c,0x12c,0x12c,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0, -0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e6,0x10e9,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f, -0x12f,0x12f,0x12f,0x10e3,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10ef,0x10ef,0x10ef, -0x10ef,0x10ef,0x10ef,0x10f8,0x10f8,0x10ef,0x10ef,0x10f8,0x10f8,0x10ef,0x10ef,0x132,0x132,0x132,0x132,0x132, -0x132,0x132,0x132,0x132,0x10fb,0x10fb,0x10fb,0x10ef,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb, -0x10ef,0x10f8,0x132,0x132,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x132,0x132, -0x10f2,0x10fe,0x10fe,0x10fe,0x155a,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135, +0x10bc,0x10bc,0x10bc,0x10bc,0x10b6,0x17d6,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x10c2,0x10c2, +0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c, +0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4, +0x10d4,0x10d4,0x10da,0x10dd,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x10d7, +0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10ec, +0x10ec,0x10e3,0x10e3,0x10ec,0x10ec,0x10e3,0x10e3,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132, +0x10ef,0x10ef,0x10ef,0x10e3,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10e3,0x10ec,0x132,0x132, +0x10e9,0x10e9,0x10e9,0x10e9,0x10e9,0x10e9,0x10e9,0x10e9,0x10e9,0x10e9,0x132,0x132,0x10e6,0x10f2,0x10f2,0x10f2, +0x154e,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x10f2,0x10f2,0x10f2,0x10f2,0x10ec,0x180c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x10f8,0x10f8, +0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c, +0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a, +0x110a,0x110a,0x1110,0x1113,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x110d, +0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1122, +0x1122,0x1119,0x1119,0x1122,0x1122,0x1119,0x1119,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132, +0x1125,0x1125,0x1125,0x1119,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1119,0x1122,0x132,0x132, +0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x132,0x132,0x111c,0x1128,0x1128,0x1128, +0x1584,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135, #if !U_PLATFORM_IS_DARWIN_BASED -0x135,0x135,0x135,0x135,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8, -0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8, -0x10c8,0x10cb,0x138,0x138,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce, -0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce, -0x10ce,0x13b,0x13b,0x13b,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1, -0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e, -0x13e,0x13e,0x13e,0x13e,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7, -0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x141,0x141, -0x141,0x141,0x141,0x10d4,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da, -0x144,0x144,0x144,0x144,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd, -0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147, -0x147,0x147,0x147,0x147,0x1155,0x1155,0x1155,0x1155,0x115e,0x1155,0x1155,0x1155,0x115e,0x1155,0x1155,0x1155, -0x1155,0x1152,0x14a,0x14a,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b, -0x115b,0x115b,0x115b,0x14a,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161, -0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d, -0x14d,0x14d,0x14d,0x14d,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c, -0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x1179,0x1164,0x1179,0x1164,0x1164,0x1164,0x1164, -0x1164,0x1164,0x1164,0x150,0x116d,0x1176,0x1164,0x1176,0x1176,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164, -0x1164,0x1179,0x1179,0x1179,0x1179,0x1179,0x1179,0x1164,0x1164,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a, -0x116a,0x150,0x150,0x1167,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x150,0x150, -0x150,0x150,0x150,0x150,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x150,0x150, -0x150,0x150,0x150,0x150,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x1170,0x117f,0x1182,0x1182,0x1182,0x1182, -0x1170,0x1170,0x150,0x150,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569, -0x1569,0x1569,0x1566,0x1cb,0x12c6,0x12a5,0x12c0,0x12c0,0x12c0,0x12c0,0x12c0,0x12c0,0x12c0,0x12a8,0x12a8,0x12a8, -0x12a8,0x12c0,0x12a8,0x12a8,0x12a8,0x12a8,0x12ae,0x1494,0x149a,0x1497,0x1491,0x18e4,0x16bf,0x16bf,0x153,0x153, -0x153,0x153,0x153,0x153,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197, -0x1197,0x1197,0x1197,0x1197,0x118e,0x118e,0x1191,0x119a,0x1194,0x1194,0x1194,0x119a,0x156,0x156,0x156,0x156, -0x156,0x156,0x156,0x156,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d, -0x119d,0x119d,0x119d,0x119d,0x119d,0x12cc,0x11a3,0x12cf,0x11a3,0x11a3,0x11a3,0x11a3,0x11a0,0x11a0,0x11a0,0x11a3, -0x16fb,0x16fe,0x15c,0x15c,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293, -0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293, -0x1293,0x15f,0x15f,0x15f,0x11b8,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11af,0x11be,0x11be,0x11ac,0x11ac, -0x11ac,0x11ac,0x162,0x12ba,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x162,0x162, -0x162,0x162,0x11ac,0x11ac,0x11dc,0x11d0,0x11dc,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165, -0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x11d9, -0x11d9,0x11df,0x11d3,0x11d6,0x11f4,0x11f4,0x11f4,0x11ee,0x11ee,0x11e5,0x11ee,0x11ee,0x11e5,0x11ee,0x11ee,0x11f7, -0x11f1,0x11e8,0x168,0x168,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x168,0x168, -0x168,0x168,0x168,0x168,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x16b,0x16b,0x16b,0x16b,0x11fa, -0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa, -0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x16b,0x16b,0x16b,0x16b, -0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206, -0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x16e,0x1203,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, -0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215, -0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x171,0x171,0x171,0x120f,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212, -0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b, -0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x174,0x174,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218,0x1218, -0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221,0x1221, -0x1221,0x1221,0x1221,0x177,0x177,0x177,0x177,0x177,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e, -0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227, -0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x17d, -0x1242,0x1242,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180, -0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470, -0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x152a,0x152a,0x186,0x186,0x186, -0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f, -0x126f,0x126f,0x126f,0x1272,0x1272,0x1272,0x1251,0x186,0x1374,0x127b,0x1374,0x1374,0x1374,0x1374,0x1374,0x1374, -0x1374,0x1374,0x1374,0x1374,0x1374,0x127b,0x1374,0x127b,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371, -0x1371,0x1371,0x1401,0x1401,0x186,0x186,0x186,0x186,0x1377,0x1377,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371, -0x1371,0x1278,0x1371,0x1278,0x1278,0x1371,0x1377,0x127e,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824, -0x1824,0x1824,0x1824,0x1824,0x1824,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x135,0x135,0x135,0x135,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104, -0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104, -0x1104,0x1107,0x138,0x138,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a, -0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a, -0x110a,0x13b,0x13b,0x13b,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d, -0x110d,0x110d,0x110d,0x110d,0x110d,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e, -0x13e,0x13e,0x13e,0x13e,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113, -0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x141,0x141, -0x141,0x141,0x141,0x1110,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116, -0x144,0x144,0x144,0x144,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119, -0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147, -0x147,0x147,0x147,0x147,0x1191,0x1191,0x1191,0x1191,0x119a,0x1191,0x1191,0x1191,0x119a,0x1191,0x1191,0x1191, -0x1191,0x118e,0x14a,0x14a,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197, -0x1197,0x1197,0x1197,0x14a,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d, -0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d, -0x14d,0x14d,0x14d,0x14d,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8, -0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b5,0x11a0,0x11b5,0x11a0,0x11a0,0x11a0,0x11a0, -0x11a0,0x11a0,0x11a0,0x150,0x11a9,0x11b2,0x11a0,0x11b2,0x11b2,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0, -0x11a0,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11a0,0x11a0,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6, -0x11a6,0x150,0x150,0x11a3,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x150,0x150, -0x150,0x150,0x150,0x150,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x150,0x150, -0x150,0x150,0x150,0x150,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11bb,0x11be,0x11be,0x11be,0x11be, -0x11ac,0x11ac,0x150,0x150,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, -0x15a5,0x15a5,0x15a2,0x1cb,0x1302,0x12e1,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12e4,0x12e4,0x12e4, -0x12e4,0x12fc,0x12e4,0x12e4,0x12e4,0x12e4,0x12ea,0x14d0,0x14d6,0x14d3,0x14cd,0x1920,0x16fb,0x16fb,0x153,0x153, -0x153,0x153,0x153,0x153,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3, -0x11d3,0x11d3,0x11d3,0x11d3,0x11ca,0x11ca,0x11cd,0x11d6,0x11d0,0x11d0,0x11d0,0x11d6,0x156,0x156,0x156,0x156, -0x156,0x156,0x156,0x156,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9, -0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x1308,0x11df,0x130b,0x11df,0x11df,0x11df,0x11df,0x11dc,0x11dc,0x11dc,0x11df, -0x1737,0x173a,0x15c,0x15c,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf, -0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf, -0x12cf,0x15f,0x15f,0x15f,0x11f4,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11eb,0x11fa,0x11fa,0x11e8,0x11e8, -0x11e8,0x11e8,0x162,0x12f6,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x162,0x162, -0x162,0x162,0x11e8,0x11e8,0x1218,0x120c,0x1218,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165, -0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x1215, -0x1215,0x121b,0x120f,0x1212,0x1230,0x1230,0x1230,0x122a,0x122a,0x1221,0x122a,0x122a,0x1221,0x122a,0x122a,0x1233, -0x122d,0x1224,0x168,0x168,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x168,0x168, -0x168,0x168,0x168,0x168,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x16b,0x16b,0x16b,0x16b,0x1236, -0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236, -0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x1236,0x16b,0x16b,0x16b,0x16b, -0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242, -0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x16e,0x123f,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c, -0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251, -0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x171,0x171,0x171,0x124b,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e, -0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257, -0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x174,0x174,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254, -0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d, -0x125d,0x125d,0x125d,0x177,0x177,0x177,0x177,0x177,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a, +0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8, +0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10fb,0x138,0x138, +0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe, +0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x10fe,0x13b,0x13b,0x13b, +0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101, +0x1101,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e, +0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107, +0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x141,0x141,0x141,0x141,0x141,0x1104, +0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x144,0x144,0x144,0x144, +0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d, +0x110d,0x110d,0x110d,0x110d,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147, +0x1185,0x1185,0x1185,0x1185,0x118e,0x1185,0x1185,0x1185,0x118e,0x1185,0x1185,0x1185,0x1185,0x1182,0x14a,0x14a, +0x118b,0x118b,0x118b,0x118b,0x118b,0x118b,0x118b,0x1191,0x118b,0x1191,0x118b,0x118b,0x118b,0x1191,0x1191,0x14a, +0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194, +0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d, +0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af, +0x11af,0x11af,0x11af,0x11af,0x11af,0x11ac,0x1197,0x11ac,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x150, +0x11a0,0x11a9,0x1197,0x11a9,0x11a9,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x11ac,0x11ac,0x11ac, +0x11ac,0x11ac,0x11ac,0x1197,0x1197,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x150,0x150,0x119a, +0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x150,0x150,0x150,0x150,0x150,0x150, +0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x150,0x150,0x150,0x150,0x150,0x150, +0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11a3,0x11b2,0x11b5,0x11b5,0x11b5,0x11b5,0x11a3,0x11a3,0x150,0x150, +0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1596,0x1c8, +0x1302,0x12e1,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12d8,0x12e4,0x12d8,0x12d8,0x12ff,0x12d8,0x12d8, +0x12d8,0x12d8,0x12de,0x14c4,0x14ca,0x14c7,0x14c7,0x1914,0x16ef,0x16ef,0x153,0x153,0x153,0x153,0x153,0x153, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e, +0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x1131,0x138,0x138, +0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134, +0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x13b,0x13b,0x13b, +0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137, +0x1137,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e, +0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d, +0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x141,0x141,0x141,0x141,0x141,0x113a, +0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x144,0x144,0x144,0x144, +0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143, +0x1143,0x1143,0x1143,0x1143,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147, +0x11bb,0x11bb,0x11bb,0x11bb,0x11c4,0x11bb,0x11bb,0x11bb,0x11c4,0x11bb,0x11bb,0x11bb,0x11bb,0x11b8,0x14a,0x14a, +0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x11c7,0x11c1,0x11c7,0x11c1,0x11c1,0x11c1,0x11c7,0x11c7,0x14a, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca, +#if !U_PLATFORM_IS_DARWIN_BASED +0x11c1,0x11c1,0x11c4,0x11cd,0x11c7,0x11c7,0x11c7,0x11cd,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156, +0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6, +0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x15c,0x15c,0x15c, +0x11eb,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11e2,0x11f1,0x11f1,0x11df,0x11df,0x11df,0x11df,0x15f,0x12f3, +0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x15f,0x15f,0x15f,0x15f,0x11df,0x11df, +0x120f,0x1203,0x120f,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162, +0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x120c,0x120c,0x1212,0x1206,0x1209, +0x1227,0x1227,0x1227,0x1221,0x1221,0x1218,0x1221,0x1221,0x1218,0x1221,0x1221,0x122a,0x1224,0x121b,0x165,0x165, +0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x165,0x165,0x165,0x165,0x165,0x165, +0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x168,0x168,0x168,0x168,0x122d,0x122d,0x122d,0x122d,0x122d, +0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d, +0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x168,0x168,0x168,0x168,0x1239,0x1239,0x1239,0x1239, +0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239, +0x1239,0x1239,0x16b,0x1236,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1248,0x1248,0x1248,0x1248, +0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248, +0x1248,0x1248,0x16e,0x16e,0x16e,0x1242,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x124e,0x124e,0x124e,0x124e, +0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e,0x124e, +0x124e,0x124e,0x171,0x171,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x1254,0x1254,0x1254,0x1254, +0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x174, +0x174,0x174,0x174,0x174,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x125a,0x125a,0x125a,0x125a, +0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a, +0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x17a,0x1275,0x1275,0x17d,0x17d, +0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0x1953,0x17d,0x17d,0x14a3,0x14a3,0x14a3,0x14a3, +0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x12a2,0x12a2,0x12a2,0x12a2, +0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x155a,0x155a,0x183,0x183,0x183,0x12a2,0x12a2,0x12a2,0x12a2, +0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x13ad,0x13ad,0x13ad,0x13ad, +0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x1434,0x1434,0x183,0x183,0x183,0x183,0x13b3,0x13b3,0x13ad,0x13ad, +0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x12ab,0x13ad,0x12ab,0x12ab,0x13ad,0x13b3,0x12b1,0x1854,0x1854,0x1854,0x1854, +0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x183,0x183,0x183,0x183,0x183,0x183,0x183, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d, +0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5, +0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e2,0x11cd,0x11e2,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x150, +0x11d6,0x11df,0x11cd,0x11df,0x11df,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11e2,0x11e2,0x11e2, +0x11e2,0x11e2,0x11e2,0x11cd,0x11cd,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x150,0x150,0x11d0, +0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x150,0x150,0x150,0x150,0x150,0x150, +0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x150,0x150,0x150,0x150,0x150,0x150, +0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11e8,0x11eb,0x11eb,0x11eb,0x11eb,0x11d9,0x11d9,0x150,0x150, +0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cc,0x1c8, +0x1338,0x1317,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x130e,0x131a,0x130e,0x130e,0x1335,0x130e,0x130e, +0x130e,0x130e,0x1314,0x14fa,0x1500,0x14fd,0x14fd,0x194a,0x1725,0x1725,0x153,0x153,0x153,0x153,0x153,0x153, +0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, +0x11f7,0x11f7,0x11fa,0x1203,0x11fd,0x11fd,0x11fd,0x1203,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156, +0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc, +0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x12fc,0x15c,0x15c,0x15c, +0x1221,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1218,0x1227,0x1227,0x1215,0x1215,0x1215,0x1215,0x15f,0x1329, +0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x121b,0x15f,0x15f,0x15f,0x15f,0x1215,0x1215, +0x1245,0x1239,0x1245,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162, +0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x162,0x1242,0x1242,0x1248,0x123c,0x123f, +0x125d,0x125d,0x125d,0x1257,0x1257,0x124e,0x1257,0x1257,0x124e,0x1257,0x1257,0x1260,0x125a,0x1251,0x165,0x165, +0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x165,0x165,0x165,0x165,0x165,0x165, +0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x168,0x168,0x168,0x168,0x1263,0x1263,0x1263,0x1263,0x1263, 0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263, -0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x17d, -0x127e,0x127e,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180, -0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac, -0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x1566,0x1566,0x186,0x186,0x186, -0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab, -0x12ab,0x12ab,0x12ab,0x12ae,0x12ae,0x12ae,0x128d,0x186,0x13b0,0x12b7,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0, -0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x12b7,0x13b0,0x12b7,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad, -0x13ad,0x13ad,0x143d,0x143d,0x186,0x186,0x186,0x186,0x13b3,0x13b3,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad, -0x13ad,0x12b4,0x13ad,0x12b4,0x12b4,0x13ad,0x13b3,0x12ba,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860, -0x1860,0x1860,0x1860,0x1860,0x1860,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186, +0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x168,0x168,0x168,0x168,0x126f,0x126f,0x126f,0x126f, +0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f, +0x126f,0x126f,0x16b,0x126c,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x127e,0x127e,0x127e,0x127e, +0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e, +0x127e,0x127e,0x16e,0x16e,0x16e,0x1278,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x1284,0x1284,0x1284,0x1284, +0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284, +0x1284,0x1284,0x171,0x171,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x128a,0x128a,0x128a,0x128a, +0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x128a,0x174, +0x174,0x174,0x174,0x174,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1287,0x1290,0x1290,0x1290,0x1290, +0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290, +0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x1290,0x17a,0x12ab,0x12ab,0x17d,0x17d, +0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0x1989,0x17d,0x17d,0x14d9,0x14d9,0x14d9,0x14d9, +0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x12d8,0x12d8,0x12d8,0x12d8, +0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x1590,0x1590,0x183,0x183,0x183,0x12d8,0x12d8,0x12d8,0x12d8, +0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x146a,0x146a,0x183,0x183,0x183,0x183,0x13e9,0x13e9,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x12e1,0x13e3,0x12e1,0x12e1,0x13e3,0x13e9,0x12e7,0x188a,0x188a,0x188a,0x188a, +0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x188a,0x183,0x183,0x183,0x183,0x183,0x183,0x183, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183, +#if !U_PLATFORM_IS_DARWIN_BASED +0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x1365,0x1365, +0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365, +0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x12d2,0x13ce,0x13cb,0x186,0x186,0x186,0x186,0x186, +0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc, +0x12cc,0x12cc,0x12cf,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc, +0x12cc,0x12cc,0x12cc,0x12cf,0x12cc,0x12cc,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13cb,0x13ce,0x13ce,0x13ce,0x1857, +0x186,0x186,0x186,0x186,0x12c9,0x12c9,0x12c9,0x12c9,0x12c9,0x12c9,0x12c9,0x12c9,0x12c9,0x186,0x186,0x186, +0x186,0x186,0x186,0x186,0x13f2,0x13f2,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186, +0x186,0x186,0x186,0x186,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x186,0x186,0x186,0x186,0x186,0x186, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x139b,0x139b, +0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b, +0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x1308,0x1404,0x1401,0x186,0x186,0x186,0x186,0x186, +0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x1302,0x1302,0x1302,0x1302,0x1302,0x1302,0x1302,0x1302, +0x1302,0x1302,0x1305,0x1302,0x1302,0x1302,0x1302,0x1302,0x1302,0x1302,0x1302,0x1302,0x1302,0x1302,0x1302,0x1302, +0x1302,0x1302,0x1302,0x1305,0x1302,0x1302,0x1404,0x1404,0x1404,0x1404,0x1404,0x1401,0x1404,0x1404,0x1404,0x188d, +0x186,0x186,0x186,0x186,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,0x186,0x186,0x186, +0x186,0x186,0x186,0x186,0x1428,0x1428,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186, +0x186,0x186,0x186,0x186,0x192f,0x192f,0x192f,0x192f,0x192f,0x192f,0x186,0x186,0x186,0x186,0x186,0x186, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186, #if !U_PLATFORM_IS_DARWIN_BASED -0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329, -0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329, -0x1329,0x1329,0x1329,0x1329,0x129f,0x1392,0x138f,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -0x189,0x189,0x189,0x189,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x129c,0x1299, -0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x129c, -0x1299,0x1299,0x1392,0x1392,0x1392,0x1392,0x1392,0x138f,0x1392,0x1392,0x1392,0x1827,0x189,0x189,0x189,0x189, -0x1296,0x1296,0x1296,0x1296,0x1296,0x1296,0x1296,0x1296,0x1296,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -0x13bf,0x13bf,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365, -0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365, -0x1365,0x1365,0x1365,0x1365,0x12db,0x13ce,0x13cb,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -0x189,0x189,0x189,0x189,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d8,0x12d5, -0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d8, -0x12d5,0x12d5,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13cb,0x13ce,0x13ce,0x13ce,0x1863,0x189,0x189,0x189,0x189, -0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x12d2,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -0x13fb,0x13fb,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -#if !U_PLATFORM_IS_DARWIN_BASED -0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332, -0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332, -0x1332,0x132c,0x132c,0x132c,0x18c,0x18c,0x132f,0x18c,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1335,0x133e, -0x1338,0x1338,0x133e,0x133e,0x133e,0x1338,0x133e,0x1338,0x1338,0x1338,0x1341,0x1341,0x18f,0x18f,0x18f,0x18f, -0x18f,0x18f,0x18f,0x18f,0x133b,0x133b,0x133b,0x133b,0x192,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x192, -0x192,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x192,0x192,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x192, -0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x192, -0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x192,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6, -0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x134a,0x134a,0x134a,0x134a,0x134a,0x134a,0x134d,0x135f, -0x135f,0x1353,0x1353,0x1353,0x1353,0x1353,0x195,0x195,0x195,0x195,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, -0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1356,0x1356,0x1356,0x1356,0x1356,0x1356, -0x1356,0x1356,0x1356,0x1356,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195, -0x195,0x195,0x195,0x152d,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362, -0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x198,0x198,0x198, -0x198,0x198,0x198,0x198,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365, -0x1365,0x1365,0x1365,0x19b,0x19b,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365, -0x1365,0x1365,0x1365,0x1530,0x19b,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365, -0x1365,0x1365,0x1365,0x139b,0x19b,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365, -0x1365,0x1365,0x1365,0x1365,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530, -0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b, -0x19b,0x19b,0x19b,0x19b,0x13b9,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x1545,0x1545,0x1545,0x1545,0x1545,0x1548, -0x16b6,0x1548,0x1548,0x1548,0x1782,0x1830,0x1830,0x186c,0x186c,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e, -0x19e,0x19e,0x19e,0x19e,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1545,0x1545,0x1545,0x1548,0x1545,0x16b3, -0x16b3,0x19e,0x19e,0x19e,0x1548,0x1545,0x1545,0x1548,0x1830,0x1830,0x1830,0x18cf,0x18cf,0x19e,0x19e,0x19e, -0x19e,0x19e,0x19e,0x19e,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368, -0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1, -0x1a1,0x1a1,0x1a1,0x1a1,0x140d,0x154e,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d, -0x140d,0x154e,0x154e,0x154e,0x154e,0x154e,0x154e,0x1707,0x1707,0x1a4,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2, -0x17b2,0x17b2,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, -0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af, -0x17af,0x17af,0x17af,0x17af,0x1413,0x1413,0x1413,0x1413,0x1a7,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, -0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, -0x1413,0x1413,0x1413,0x1413,0x1a7,0x1413,0x1413,0x1a7,0x1413,0x1a7,0x1a7,0x1413,0x1a7,0x1413,0x1413,0x1413, -0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1a7,0x1413,0x1413,0x1413,0x1413,0x1a7,0x1413,0x1a7,0x1413, -0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1413,0x1a7,0x1a7,0x1a7,0x1a7,0x1413,0x1a7,0x1413,0x1a7,0x1413, -0x1a7,0x1413,0x1413,0x1413,0x1a7,0x1413,0x1413,0x1a7,0x1413,0x1a7,0x1a7,0x1413,0x1a7,0x1413,0x1a7,0x1413, -0x1a7,0x1413,0x1a7,0x1413,0x1a7,0x1413,0x1413,0x1a7,0x1413,0x1a7,0x1a7,0x1413,0x1413,0x1413,0x1413,0x1a7, -0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1a7,0x1413,0x1413,0x1413,0x1413,0x1a7,0x1413,0x1413,0x1413, -0x1413,0x1a7,0x1413,0x1a7,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1a7,0x1413, -0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, -0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1413,0x1413,0x1413,0x1a7,0x1413,0x1413,0x1413,0x1413,0x1413,0x1a7,0x1413, -0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e, +0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x136e,0x136e,0x136e,0x136e, 0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e, -0x136e,0x1368,0x1368,0x1368,0x18c,0x18c,0x136b,0x18c,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1371,0x137a, -0x1374,0x1374,0x137a,0x137a,0x137a,0x1374,0x137a,0x1374,0x1374,0x1374,0x137d,0x137d,0x18f,0x18f,0x18f,0x18f, -0x18f,0x18f,0x18f,0x18f,0x1377,0x1377,0x1377,0x1377,0x192,0x1383,0x1383,0x1383,0x1383,0x1383,0x1383,0x192, -0x192,0x1383,0x1383,0x1383,0x1383,0x1383,0x1383,0x192,0x192,0x1383,0x1383,0x1383,0x1383,0x1383,0x1383,0x192, -0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x1383,0x1383,0x1383,0x1383,0x1383,0x1383,0x1383,0x192, -0x1383,0x1383,0x1383,0x1383,0x1383,0x1383,0x1383,0x192,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602, -0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1386,0x1386,0x1386,0x1386,0x1386,0x1386,0x1389,0x139b, -0x139b,0x138f,0x138f,0x138f,0x138f,0x138f,0x195,0x195,0x195,0x195,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392, -0x1392,0x1392,0x1392,0x1392,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195, -0x195,0x195,0x195,0x1569,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e, -0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x198,0x198,0x198, -0x198,0x198,0x198,0x198,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x19b,0x19b,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x156c,0x19b,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13d7,0x19b,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c, -0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b, -0x19b,0x19b,0x19b,0x19b,0x13f5,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x1581,0x1581,0x1581,0x1581,0x1581,0x1584, -0x16f2,0x1584,0x1584,0x1584,0x17be,0x186c,0x186c,0x18a8,0x18a8,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e, -0x19e,0x19e,0x19e,0x19e,0x1584,0x1584,0x1584,0x1584,0x1584,0x1584,0x1581,0x1581,0x1581,0x1584,0x1581,0x16ef, -0x16ef,0x19e,0x19e,0x19e,0x1584,0x1581,0x1581,0x1584,0x186c,0x186c,0x186c,0x190b,0x190b,0x19e,0x19e,0x19e, -0x19e,0x19e,0x19e,0x19e,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4, -0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1, -0x1a1,0x1a1,0x1a1,0x1a1,0x1449,0x158a,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449, -0x1449,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x1743,0x1743,0x1a4,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee, -0x17ee,0x17ee,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, -0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb, -0x17eb,0x17eb,0x17eb,0x17eb,0x144f,0x144f,0x144f,0x144f,0x1a7,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f, -0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f, -0x144f,0x144f,0x144f,0x144f,0x1a7,0x144f,0x144f,0x1a7,0x144f,0x1a7,0x1a7,0x144f,0x1a7,0x144f,0x144f,0x144f, -0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x1a7,0x144f,0x144f,0x144f,0x144f,0x1a7,0x144f,0x1a7,0x144f, -0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x144f,0x1a7,0x1a7,0x1a7,0x1a7,0x144f,0x1a7,0x144f,0x1a7,0x144f, -0x1a7,0x144f,0x144f,0x144f,0x1a7,0x144f,0x144f,0x1a7,0x144f,0x1a7,0x1a7,0x144f,0x1a7,0x144f,0x1a7,0x144f, -0x1a7,0x144f,0x1a7,0x144f,0x1a7,0x144f,0x144f,0x1a7,0x144f,0x1a7,0x1a7,0x144f,0x144f,0x144f,0x144f,0x1a7, -0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x1a7,0x144f,0x144f,0x144f,0x144f,0x1a7,0x144f,0x144f,0x144f, -0x144f,0x1a7,0x144f,0x1a7,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x1a7,0x144f, -0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f, -0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x144f,0x144f,0x144f,0x1a7,0x144f,0x144f,0x144f,0x144f,0x144f,0x1a7,0x144f, -0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7, -0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7, -#if !U_PLATFORM_IS_DARWIN_BASED -0x1410,0x1410,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7, -0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1416,0x1416,0x1416,0x1416,0x1416,0x1425,0x1416,0x1419,0x1419, -0x1416,0x1416,0x1416,0x141c,0x141c,0x1aa,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422, -0x141f,0x142b,0x142b,0x142b,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa, -0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8, -0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1434,0x142e,0x142e,0x1434,0x1434, -0x143d,0x143d,0x1437,0x143a,0x143a,0x1434,0x1431,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad, -0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440, -0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440,0x1b0,0x1b0,0x1b0,0x1b0,0x170a,0x170a,0x1440,0x1440, -0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a, -0x1b0,0x1b0,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a, -0x144c,0x144c,0x144c,0x144c,0x144c,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3, -0x144c,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449, -0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449, -0x1449,0x1449,0x1449,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3, -0x1b3,0x1b3,0x1b3,0x1446,0x1446,0x1446,0x1446,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f, -0x144f,0x144f,0x144f,0x144f,0x1461,0x1464,0x1467,0x1467,0x1464,0x146a,0x146a,0x1455,0x1458,0x1710,0x170d,0x170d, -0x170d,0x1554,0x1b6,0x1b6,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x1551,0x1716, -0x1719,0x1713,0x171c,0x171c,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1b9,0x1b9,0x1b9, -0x1b9,0x1b9,0x1b9,0x1b9,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x1b9,0x1b9, -0x1b9,0x1b9,0x1b9,0x1b9,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1bc,0x1bc,0x1bc,0x1bc, -0x1bc,0x1bc,0x1bc,0x1bc,0x12c3,0x12c0,0x12c3,0x12ab,0x12c0,0x12c0,0x12c0,0x12c6,0x12c0,0x12c6,0x12c9,0x12c0, -0x12c6,0x12c6,0x12c0,0x12c0,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1476, -0x147f,0x1476,0x147f,0x147f,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1482,0x1479,0x1bf,0x1bf,0x1bf,0x1bf, -0x1bf,0x1bf,0x1bf,0x1bf,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a,0x155a, -0x155a,0x155a,0x1c2,0x1c2,0x1557,0x1557,0x1557,0x1557,0x1557,0x155d,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2, -0x1c2,0x1c2,0x1c2,0x1c2,0x16c2,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9, -0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x144c,0x144c,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7, -0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1452,0x1452,0x1452,0x1452,0x1452,0x1461,0x1452,0x1455,0x1455, -0x1452,0x1452,0x1452,0x1458,0x1458,0x1aa,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e, -0x145b,0x1467,0x1467,0x1467,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa, -0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614, -0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1470,0x146a,0x146a,0x1470,0x1470, -0x1479,0x1479,0x1473,0x1476,0x1476,0x1470,0x146d,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad, +0x136e,0x136e,0x136e,0x136e,0x136e,0x1368,0x1368,0x1368,0x189,0x189,0x136b,0x189,0x1380,0x1380,0x1380,0x1380, +0x1380,0x1380,0x1371,0x137a,0x1374,0x1374,0x137a,0x137a,0x137a,0x1374,0x137a,0x1374,0x1374,0x1374,0x137d,0x137d, +0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x1377,0x1377,0x1377,0x1377,0x18f,0x1383,0x1383,0x1383, +0x1383,0x1383,0x1383,0x18f,0x18f,0x1383,0x1383,0x1383,0x1383,0x1383,0x1383,0x18f,0x18f,0x1383,0x1383,0x1383, +0x1383,0x1383,0x1383,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x1383,0x1383,0x1383,0x1383, +0x1383,0x1383,0x1383,0x18f,0x1383,0x1383,0x1383,0x1383,0x1383,0x1383,0x1383,0x18f,0x15f6,0x15f6,0x15f6,0x15f6, +0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x1386,0x1386,0x1386,0x1386, +0x1386,0x1386,0x1389,0x139b,0x139b,0x138f,0x138f,0x138f,0x138f,0x138f,0x192,0x192,0x192,0x192,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1392,0x1392, +0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192, +0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x155d,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e, +0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e, +0x139e,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, +0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x198,0x198,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, +0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x1560,0x198,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, +0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13d7,0x198,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, +0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x1560,0x1560,0x1560,0x1560,0x1560,0x1560,0x1560,0x1560, +0x1560,0x1560,0x1560,0x1560,0x1560,0x1560,0x1560,0x1560,0x1560,0x1560,0x1560,0x1560,0x1560,0x1560,0x198,0x198, +0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x13ec,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x1575,0x1575, +0x1575,0x1575,0x1575,0x1578,0x16e6,0x1578,0x1578,0x1578,0x17b2,0x1860,0x1860,0x189c,0x189c,0x19b,0x19b,0x19b, +0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1575,0x1575, +0x1575,0x1578,0x1575,0x16e3,0x16e3,0x19b,0x19b,0x19b,0x1578,0x1575,0x1575,0x1578,0x1860,0x1860,0x1860,0x18ff, +0x18ff,0x19dd,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4, +0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x19e,0x19e,0x19e,0x19e, +0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x1440,0x157e,0x1440,0x1440,0x1440,0x1440,0x1440,0x1440, +0x1440,0x1440,0x1440,0x1440,0x1440,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x1737,0x1737,0x1a1,0x17e2,0x17e2, +0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1, +0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1959,0x17df,0x17df,0x17df,0x17df, +0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,0x1446,0x1446,0x1446,0x1446,0x1a4,0x1446,0x1446,0x1446, +0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446, +0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1a4,0x1446,0x1446,0x1a4,0x1446,0x1a4,0x1a4,0x1446, +0x1a4,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1a4,0x1446,0x1446,0x1446,0x1446, +0x1a4,0x1446,0x1a4,0x1446,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1446,0x1a4,0x1a4,0x1a4,0x1a4,0x1446, +0x1a4,0x1446,0x1a4,0x1446,0x1a4,0x1446,0x1446,0x1446,0x1a4,0x1446,0x1446,0x1a4,0x1446,0x1a4,0x1a4,0x1446, +0x1a4,0x1446,0x1a4,0x1446,0x1a4,0x1446,0x1a4,0x1446,0x1a4,0x1446,0x1446,0x1a4,0x1446,0x1a4,0x1a4,0x1446, +0x1446,0x1446,0x1446,0x1a4,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1a4,0x1446,0x1446,0x1446,0x1446, +0x1a4,0x1446,0x1446,0x1446,0x1446,0x1a4,0x1446,0x1a4,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446, +0x1446,0x1446,0x1a4,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446, +0x1446,0x1446,0x1446,0x1446,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1446,0x1446,0x1446,0x1a4,0x1446,0x1446,0x1446, +0x1446,0x1446,0x1a4,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446, +0x1446,0x1446,0x1446,0x1446,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, +0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, +0x1a4,0x1a4,0x1a4,0x1a4,0x1443,0x1443,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, +0x1a4,0x1a4,0x1a4,0x1a4,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x1449,0x1449,0x1449,0x1449,0x1449, +0x1458,0x1449,0x144c,0x144c,0x1449,0x1449,0x1449,0x144f,0x144f,0x1a7,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455, +0x1455,0x1455,0x1455,0x1455,0x1452,0x145e,0x145e,0x145e,0x195f,0x195c,0x195c,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7, +0x1a7,0x1a7,0x1a7,0x1a7,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, +0x1608,0x1608,0x1608,0x1608,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x1467, +0x1461,0x1461,0x1467,0x1467,0x1470,0x1470,0x146a,0x146d,0x146d,0x1467,0x1464,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa, +0x1aa,0x1aa,0x1aa,0x1aa,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473, +0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1ad,0x1ad,0x1ad,0x1ad, +0x173a,0x173a,0x1473,0x1473,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, +0x173a,0x173a,0x173a,0x173a,0x1ad,0x1ad,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, +0x173a,0x173a,0x173a,0x173a,0x147f,0x147f,0x147f,0x147f,0x147f,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0, +0x1b0,0x1b0,0x1b0,0x1b0,0x147f,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x13a4,0x13a4,0x13a4,0x13a4, +0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4, +0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x139e,0x139e,0x139e,0x189,0x189,0x13a1,0x189,0x13b6,0x13b6,0x13b6,0x13b6, +0x13b6,0x13b6,0x13a7,0x13b0,0x13aa,0x13aa,0x13b0,0x13b0,0x13b0,0x13aa,0x13b0,0x13aa,0x13aa,0x13aa,0x13b3,0x13b3, +0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x13ad,0x13ad,0x13ad,0x13ad,0x18f,0x13b9,0x13b9,0x13b9, +0x13b9,0x13b9,0x13b9,0x18f,0x18f,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x18f,0x18f,0x13b9,0x13b9,0x13b9, +0x13b9,0x13b9,0x13b9,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x13b9,0x13b9,0x13b9,0x13b9, +0x13b9,0x13b9,0x13b9,0x18f,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x18f,0x162c,0x162c,0x162c,0x162c, +0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x13bc,0x13bc,0x13bc,0x13bc, +0x13bc,0x13bc,0x13bf,0x13d1,0x13d1,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x192,0x192,0x192,0x192,0x13c2,0x13c2, +0x13c2,0x13c2,0x13c2,0x13c2,0x13c2,0x13c2,0x13c2,0x13c2,0x13c2,0x13c2,0x13c2,0x13c2,0x13c2,0x13c2,0x13c8,0x13c8, +0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192, +0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x1593,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4, +0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4, +0x13d4,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7, +0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x198,0x198,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7, +0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x1596,0x198,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7, +0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x140d,0x198,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7, +0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596, +0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x198,0x198, +0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x1422,0x141f,0x141f,0x141f,0x141f,0x141f,0x15ab,0x15ab, +0x15ab,0x15ab,0x15ab,0x15ae,0x171c,0x15ae,0x15ae,0x15ae,0x17e8,0x1896,0x1896,0x18d2,0x18d2,0x19b,0x19b,0x19b, +0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ab,0x15ab, +0x15ab,0x15ae,0x15ab,0x1719,0x1719,0x19b,0x19b,0x19b,0x15ae,0x15ab,0x15ab,0x15ae,0x1896,0x1896,0x1896,0x1935, +0x1935,0x1a13,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da, +0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x19e,0x19e,0x19e,0x19e, +0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x1476,0x15b4,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476, +0x1476,0x1476,0x1476,0x1476,0x1476,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x176d,0x176d,0x1a1,0x1818,0x1818, +0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1, +0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x198f,0x1815,0x1815,0x1815,0x1815, +0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x147c,0x147c,0x147c,0x147c,0x1a4,0x147c,0x147c,0x147c, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c, -0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x1b0,0x1b0,0x1b0,0x1b0,0x1746,0x1746,0x147c,0x147c, -0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746, -0x1b0,0x1b0,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746, -0x1488,0x1488,0x1488,0x1488,0x1488,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3, -0x1488,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485, -0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485, -0x1485,0x1485,0x1485,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3, -0x1b3,0x1b3,0x1b3,0x1482,0x1482,0x1482,0x1482,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, -0x148b,0x148b,0x148b,0x148b,0x149d,0x14a0,0x14a3,0x14a3,0x14a0,0x14a6,0x14a6,0x1491,0x1494,0x174c,0x1749,0x1749, -0x1749,0x1590,0x1b6,0x1b6,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x158d,0x1752, -0x1755,0x174f,0x1758,0x1758,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x1b9,0x1b9,0x1b9, -0x1b9,0x1b9,0x1b9,0x1b9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x1b9,0x1b9, -0x1b9,0x1b9,0x1b9,0x1b9,0x14af,0x14af,0x14af,0x14af,0x14af,0x14af,0x14af,0x14af,0x1bc,0x1bc,0x1bc,0x1bc, -0x1bc,0x1bc,0x1bc,0x1bc,0x12ff,0x12fc,0x12ff,0x12e7,0x12fc,0x12fc,0x12fc,0x1302,0x12fc,0x1302,0x1305,0x12fc, -0x1302,0x1302,0x12fc,0x12fc,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14b2, -0x14bb,0x14b2,0x14bb,0x14bb,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14be,0x14b5,0x1bf,0x1bf,0x1bf,0x1bf, -0x1bf,0x1bf,0x1bf,0x1bf,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596, -0x1596,0x1596,0x1c2,0x1c2,0x1593,0x1593,0x1593,0x1593,0x1593,0x1599,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2, -0x1c2,0x1c2,0x1c2,0x1c2,0x16fe,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, -0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1c8,0x1c8,0x1c8,0x1c8,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb, -0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb, -#if !U_PLATFORM_IS_DARWIN_BASED -0x1cb,0x1cb,0x1cb,0x1cb,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1ce, -0x1ce,0x1ce,0x1ce,0x1ce,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575, -0x1575,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575, -0x1575,0x1575,0x1ce,0x1ce,0x1572,0x156c,0x156f,0x1578,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b, -0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, -0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e, -0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x1d4,0x1d4,0x1d4, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1cb,0x1cb,0x1cb,0x1cb,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x1ce, -0x1ce,0x1ce,0x1ce,0x1ce,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1, -0x15b1,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1, -0x15b1,0x15b1,0x1ce,0x1ce,0x15ae,0x15a8,0x15ab,0x15b4,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7, -0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f, -0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, -0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x1d4,0x1d4,0x1d4, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4, -0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x171f,0x16c5,0x1587,0x16cb,0x1d7,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1d7,0x1d7,0x1590, -0x1590,0x1d7,0x1d7,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590, -0x1590,0x1d7,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1d7,0x1590,0x1590,0x1d7,0x1590,0x1590,0x1590, -0x1590,0x1590,0x1d7,0x1d7,0x16c8,0x1590,0x1581,0x1587,0x1581,0x1587,0x1587,0x1587,0x1587,0x1d7,0x1d7,0x1587, -0x1587,0x1d7,0x1d7,0x158a,0x158a,0x158d,0x1d7,0x1d7,0x1722,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1581, -0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1593,0x1590,0x1590,0x1590,0x1590,0x1587,0x1587,0x1d7,0x1d7,0x1584,0x1584, -0x1584,0x1584,0x1584,0x1584,0x1584,0x1d7,0x1d7,0x1d7,0x1584,0x1584,0x1584,0x1584,0x1584,0x1d7,0x1d7,0x1d7, -0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8, -0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x1da,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8, -0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a2,0x15a2,0x15a2,0x1596,0x1596,0x1596,0x15a2,0x15a2, -0x1596,0x15a5,0x1599,0x1596,0x15ab,0x15ab,0x159f,0x15ab,0x15ab,0x159c,0x17b5,0x1da,0x15ba,0x15ba,0x15ba,0x15ae, -0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15b1,0x15b4,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x15b7,0x15b7,0x15b7,0x15b7, -0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1725,0x1725,0x1725,0x1725, -0x15c6,0x15c3,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x174f,0x174f,0x174f,0x174f, -0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x15cc,0x15cc,0x15cc,0x15cc, -0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc, -0x15cc,0x15cc,0x15cc,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x15cc,0x15cc,0x15cc,0x15cc, -0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc, -0x15cc,0x15cc,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x15cc,0x15cc,0x15cc,0x15cc, -0x15cc,0x15cc,0x15cc,0x15cc,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3, -0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x15d8,0x15d8,0x15d8,0x15d8, -0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15cf, -0x15d2,0x15d5,0x15d8,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x15e7,0x15e7,0x15e7,0x15e7, -0x15e7,0x15db,0x15db,0x1e9,0x1e9,0x1e9,0x1e9,0x15de,0x15de,0x15de,0x15de,0x15de,0x15e4,0x15e4,0x15e4,0x15e4, -0x15e4,0x15e4,0x15e1,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x15f0,0x15f0,0x15f0,0x15f0, -0x15f0,0x1ec,0x1ec,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ea,0x15ea,0x15ea,0x15ea, -0x15ea,0x15ea,0x15ea,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x15f3,0x1605,0x1605,0x15f9, -0x1602,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x15fc,0x15fc,0x15fc,0x15fc, -0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x160b,0x160b,0x160b,0x160b, -0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b, -0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x1f2,0x1617,0x1617,0x1617,0x1617, -0x1617,0x1611,0x161a,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1614,0x1614,0x1614,0x1614, -0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1617,0x1617,0x1617,0x1617,0x1617,0x1f5,0x1620,0x1620,0x1620,0x1620, -0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620, -0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1f8,0x162c,0x162c,0x162c,0x162c, -0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c, -0x162c,0x162c,0x1629,0x1629,0x1629,0x1629,0x1629,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1644,0x1644,0x1647,0x1647, -0x164a,0x163b,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1641,0x1641,0x1641,0x1641, -0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1fe,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x1fe,0x1644, -0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644, -0x1644,0x1644,0x1644,0x1644,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1644,0x1644,0x1644,0x1653,0x1653,0x1653,0x1653, -0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653, -0x1653,0x1653,0x1653,0x1653,0x1653,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x165c,0x165c,0x165c,0x165c, -0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x204,0x204, -0x204,0x204,0x204,0x204,0x204,0x1659,0x1659,0x1659,0x1659,0x204,0x204,0x204,0x1677,0x1677,0x1677,0x1677, -0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x165f,0x1671,0x1671,0x165f,0x165f, -0x165f,0x165f,0x20a,0x20a,0x1671,0x1671,0x1674,0x1674,0x165f,0x165f,0x1671,0x1665,0x1662,0x1668,0x167a,0x167a, -0x166b,0x166b,0x166e,0x166e,0x166e,0x167a,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e, -0x172e,0x172e,0x172e,0x172e,0x172b,0x172b,0x172b,0x172b,0x1728,0x1728,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x175b,0x1701,0x15c3,0x1707,0x1d7,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x1d7,0x1d7,0x15cc, -0x15cc,0x1d7,0x1d7,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc, -0x15cc,0x1d7,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x1d7,0x15cc,0x15cc,0x1d7,0x15cc,0x15cc,0x15cc, -0x15cc,0x15cc,0x1d7,0x1d7,0x1704,0x15cc,0x15bd,0x15c3,0x15bd,0x15c3,0x15c3,0x15c3,0x15c3,0x1d7,0x1d7,0x15c3, -0x15c3,0x1d7,0x1d7,0x15c6,0x15c6,0x15c9,0x1d7,0x1d7,0x175e,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x15bd, -0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x15cf,0x15cc,0x15cc,0x15cc,0x15cc,0x15c3,0x15c3,0x1d7,0x1d7,0x15c0,0x15c0, -0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x1d7,0x1d7,0x1d7,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x1d7,0x1d7,0x1d7, -0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4, -0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x1da,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4, -0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15de,0x15de,0x15de,0x15d2,0x15d2,0x15d2,0x15de,0x15de, -0x15d2,0x15e1,0x15d5,0x15d2,0x15e7,0x15e7,0x15db,0x15e7,0x15e7,0x15d8,0x17f1,0x1da,0x15f6,0x15f6,0x15f6,0x15ea, -0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ed,0x15f0,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x15f3,0x15f3,0x15f3,0x15f3, -0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1761,0x1761,0x1761,0x1761, -0x1602,0x15ff,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x178b,0x178b,0x178b,0x178b, -0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x1608,0x1608,0x1608,0x1608, -0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, -0x1608,0x1608,0x1608,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1608,0x1608,0x1608,0x1608, -0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, -0x1608,0x1608,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1608,0x1608,0x1608,0x1608, -0x1608,0x1608,0x1608,0x1608,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3, -0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1614,0x1614,0x1614,0x1614, -0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x160b, -0x160e,0x1611,0x1614,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1623,0x1623,0x1623,0x1623, -0x1623,0x1617,0x1617,0x1e9,0x1e9,0x1e9,0x1e9,0x161a,0x161a,0x161a,0x161a,0x161a,0x1620,0x1620,0x1620,0x1620, -0x1620,0x1620,0x161d,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x162c,0x162c,0x162c,0x162c, -0x162c,0x1ec,0x1ec,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1626,0x1626,0x1626,0x1626, -0x1626,0x1626,0x1626,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x162f,0x1641,0x1641,0x1635, -0x163e,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1638,0x1638,0x1638,0x1638, -0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1647,0x1647,0x1647,0x1647, -0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647, -0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1f2,0x1653,0x1653,0x1653,0x1653, -0x1653,0x164d,0x1656,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1650,0x1650,0x1650,0x1650, -0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1653,0x1653,0x1653,0x1653,0x1653,0x1f5,0x165c,0x165c,0x165c,0x165c, -0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c, -0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x1f8,0x1668,0x1668,0x1668,0x1668, -0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668, -0x1668,0x1668,0x1665,0x1665,0x1665,0x1665,0x1665,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1680,0x1680,0x1683,0x1683, -0x1686,0x1677,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x167d,0x167d,0x167d,0x167d, -0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x1fe,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1fe,0x1680, -0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680, -0x1680,0x1680,0x1680,0x1680,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1680,0x1680,0x1680,0x168f,0x168f,0x168f,0x168f, -0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f, -0x168f,0x168f,0x168f,0x168f,0x168f,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x1698,0x1698,0x1698,0x1698, -0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x204,0x204, -0x204,0x204,0x204,0x204,0x204,0x1695,0x1695,0x1695,0x1695,0x204,0x204,0x204,0x16b3,0x16b3,0x16b3,0x16b3, -0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x169b,0x16ad,0x16ad,0x169b,0x169b, -0x169b,0x169b,0x20a,0x20a,0x16ad,0x16ad,0x16b0,0x16b0,0x169b,0x169b,0x16ad,0x16a1,0x169e,0x16a4,0x16b6,0x16b6, -0x16a7,0x16a7,0x16aa,0x16aa,0x16aa,0x16b6,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a, -0x176a,0x176a,0x176a,0x176a,0x1767,0x1767,0x1767,0x1767,0x1764,0x1764,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a, -#if !U_PLATFORM_IS_DARWIN_BASED -0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20d,0x167d,0x167d,0x167d, -0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d, -0x167d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x1680,0x1680,0x1680,0x1680, -0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x210,0x210,0x210,0x210,0x1680,0x1680,0x1680,0x1680, -0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x210,0x210,0x210,0x210, -0x210,0x210,0x210,0x210,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x210,0x210, -0x210,0x210,0x210,0x210,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x210,0x210,0x210,0x210, -0x210,0x210,0x210,0x210,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680, -0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20d,0x16b9,0x16b9,0x16b9, -0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9, -0x16b9,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16bc,0x16bc,0x16bc,0x16bc, -0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x210,0x210,0x210,0x210,0x16bc,0x16bc,0x16bc,0x16bc, -0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x210,0x210,0x210,0x210, -0x210,0x210,0x210,0x210,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x210,0x210, -0x210,0x210,0x210,0x210,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x210,0x210,0x210,0x210, -0x210,0x210,0x210,0x210,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc, -0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210, -#if !U_PLATFORM_IS_DARWIN_BASED -0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x1683,0x1692,0x1689,0x1686,0x1698,0x1698,0x168c,0x1698, -0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f, -0x168f,0x168f,0x213,0x213,0x213,0x213,0x213,0x213,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e, -0x169e,0x169e,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x216,0x216,0x216,0x216,0x216, -0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x16a4,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740, -0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740, -0x1740,0x1740,0x219,0x219,0x219,0x1731,0x1731,0x1731,0x173d,0x173d,0x1731,0x1731,0x1731,0x1731,0x173d,0x1731, -0x1731,0x1731,0x1731,0x1734,0x219,0x219,0x219,0x219,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, -0x173a,0x173a,0x1737,0x1737,0x1743,0x1743,0x1743,0x1737,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x21c, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x16bf,0x16ce,0x16c5,0x16c2,0x16d4,0x16d4,0x16c8,0x16d4, -0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb, -0x16cb,0x16cb,0x213,0x213,0x213,0x213,0x213,0x213,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da, -0x16da,0x16da,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x216,0x216,0x216,0x216,0x216, -0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x16e0,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c, -0x177c,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c,0x177c, -0x177c,0x177c,0x219,0x219,0x219,0x176d,0x176d,0x176d,0x1779,0x1779,0x176d,0x176d,0x176d,0x176d,0x1779,0x176d, -0x176d,0x176d,0x176d,0x1770,0x219,0x219,0x219,0x219,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776, -0x1776,0x1776,0x1773,0x1773,0x177f,0x177f,0x177f,0x1773,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x21c, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c, -0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c, -#if !U_PLATFORM_IS_DARWIN_BASED -0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758, -0x1758,0x1758,0x1758,0x222,0x1758,0x1758,0x222,0x222,0x222,0x222,0x222,0x1755,0x1755,0x1755,0x1755,0x1755, -0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x225,0x175b,0x225,0x175b,0x175b,0x175b,0x175b,0x225,0x175b, -0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x225,0x175b, -0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175e,0x225,0x225,0x225,0x225,0x225,0x225, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767, -0x1767,0x1767,0x1767,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, -0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764, -0x1764,0x1764,0x1764,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761, -0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x22b,0x22b,0x22b,0x22b, -0x1788,0x1788,0x1788,0x1788,0x1788,0x1788,0x1788,0x1788,0x178b,0x1839,0x1839,0x1839,0x1839,0x1836,0x1839,0x18d5, -0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1839,0x1836,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2, -0x1839,0x18d5,0x18d5,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1836,0x1833,0x1836,0x1839,0x1839,0x22b, -0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1833,0x1836,0x1836,0x1836,0x1836,0x1836,0x18d2,0x22b,0x22b,0x22b, -0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x18d2, -0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x22b,0x22b,0x22b,0x22b, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794, -0x1794,0x1794,0x1794,0x222,0x1794,0x1794,0x222,0x222,0x222,0x222,0x222,0x1791,0x1791,0x1791,0x1791,0x1791, -0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x225,0x1797,0x225,0x1797,0x1797,0x1797,0x1797,0x225,0x1797, -0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x225,0x1797, -0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x179a,0x225,0x225,0x225,0x225,0x225,0x225, -0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3, -0x17a3,0x17a3,0x17a3,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228, -0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0, -0x17a0,0x17a0,0x17a0,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d, -0x18ab,0x18ab,0x18ab,0x18ab,0x18ab,0x18ab,0x18ab,0x18ab,0x18ab,0x18ab,0x18ab,0x18ab,0x22b,0x22b,0x22b,0x22b, -0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c7,0x1875,0x1875,0x1875,0x1875,0x1872,0x1875,0x1911, -0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1875,0x1872,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e, -0x1875,0x1911,0x1911,0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x1875,0x1872,0x186f,0x1872,0x1875,0x1875,0x22b, -0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x186f,0x1872,0x1872,0x1872,0x1872,0x1872,0x190e,0x22b,0x22b,0x22b, -0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x190e, -0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x22b,0x22b,0x22b,0x22b, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b, -#if !U_PLATFORM_IS_DARWIN_BASED -0x1788,0x1788,0x1788,0x1788,0x1788,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836, -0x1836,0x1836,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872, -0x1872,0x1872,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b, -#if !U_PLATFORM_IS_DARWIN_BASED -0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x1788,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b, -0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x18d2,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5, -0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x22b, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x17c4,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b, -0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x190e,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911, -0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x22b, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b, -#if !U_PLATFORM_IS_DARWIN_BASED -0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x176d,0x176d,0x176d,0x176d,0x176a,0x176d,0x176d,0x1770, -0x1773,0x1770,0x1770,0x176d,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e, -0x22e,0x22e,0x22e,0x176a,0x176a,0x176a,0x176a,0x176a,0x17c7,0x17c7,0x17c7,0x17c7,0x17be,0x17be,0x17be,0x17b8, -0x17bb,0x17bb,0x17bb,0x231,0x231,0x231,0x231,0x231,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4, -0x17c4,0x17c4,0x231,0x231,0x231,0x231,0x17c1,0x17c1,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2, -0x17e2,0x234,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2, -0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2,0x17df,0x17cd,0x17cd,0x17cd,0x17cd, -0x17cd,0x17cd,0x17cd,0x234,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17df,0x17d0,0x17e2,0x17e5,0x17e5,0x17d9, -0x17d6,0x17d6,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x17dc,0x17dc,0x17dc,0x17dc, -0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3, -0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x234,0x234,0x234,0x17f1,0x17f4,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa, -0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x23a, -0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb, -0x17eb,0x23a,0x23a,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x183c,0x18d8,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x17a9,0x17a9,0x17a9,0x17a9,0x17a6,0x17a9,0x17a9,0x17ac, -0x17af,0x17ac,0x17ac,0x17a9,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e, -0x22e,0x22e,0x22e,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x1803,0x1803,0x1803,0x1803,0x17fa,0x17fa,0x17fa,0x17f4, -0x17f7,0x17f7,0x17f7,0x231,0x231,0x231,0x231,0x231,0x1800,0x1800,0x1800,0x1800,0x1800,0x1800,0x1800,0x1800, -0x1800,0x1800,0x231,0x231,0x231,0x231,0x17fd,0x17fd,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e, -0x181e,0x234,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e, -0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181b,0x1809,0x1809,0x1809,0x1809, -0x1809,0x1809,0x1809,0x234,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x181b,0x180c,0x181e,0x1821,0x1821,0x1815, -0x1812,0x1812,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x1818,0x1818,0x1818,0x1818, -0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f, -0x180f,0x180f,0x180f,0x180f,0x180f,0x234,0x234,0x234,0x182d,0x1830,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836, -0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x23a, -0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827, -0x1827,0x23a,0x23a,0x1827,0x1827,0x1827,0x1827,0x1827,0x1878,0x1914,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d, -#if !U_PLATFORM_IS_DARWIN_BASED -0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa, -0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x240,0x240,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee, -0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x240,0x17f7,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee, -0x17ee,0x17f7,0x17ee,0x17ee,0x17f7,0x17ee,0x17ee,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240, -0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x243,0x243,0x243, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836, -0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x240,0x240,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a, -0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x240,0x1833,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a, -0x182a,0x1833,0x182a,0x182a,0x1833,0x182a,0x182a,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240, -0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x243,0x243,0x243, +#if !U_PLATFORM_IS_DARWIN_BASED +0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0, +0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1479,0x1479,0x1479,0x1479,0x1482,0x1482,0x1482,0x1482,0x1482, +0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1494,0x1497,0x149a,0x149a,0x1497,0x149d,0x149d,0x1488, +0x148b,0x173d,0x1740,0x1740,0x1740,0x1584,0x1b3,0x1b3,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e, +0x148e,0x148e,0x1581,0x1746,0x1749,0x1743,0x174c,0x174c,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3, +0x14a3,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0, +0x14a0,0x14a0,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6, +0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x12fc,0x12f9,0x12fc,0x12db,0x12f9,0x12ff,0x12ff,0x1302, +0x12ff,0x1302,0x1305,0x12f9,0x1302,0x1302,0x12f9,0x12f9,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8, +0x14b8,0x14b8,0x14b8,0x14a9,0x14b2,0x14a9,0x14b2,0x14b2,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14b5,0x14ac, +0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x158a, +0x158a,0x158a,0x158a,0x158a,0x158a,0x158a,0x1bf,0x1bf,0x1587,0x1587,0x1587,0x1587,0x1587,0x158d,0x1bf,0x1bf, +0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x16f2,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9, +0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9, +0x16e9,0x16e9,0x16e9,0x16e9,0x1c5,0x1c5,0x1c5,0x1c5,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x1a4,0x147c,0x147c,0x1a4,0x147c,0x1a4,0x1a4,0x147c, +0x1a4,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x1a4,0x147c,0x147c,0x147c,0x147c, +0x1a4,0x147c,0x1a4,0x147c,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x147c,0x1a4,0x1a4,0x1a4,0x1a4,0x147c, +0x1a4,0x147c,0x1a4,0x147c,0x1a4,0x147c,0x147c,0x147c,0x1a4,0x147c,0x147c,0x1a4,0x147c,0x1a4,0x1a4,0x147c, +0x1a4,0x147c,0x1a4,0x147c,0x1a4,0x147c,0x1a4,0x147c,0x1a4,0x147c,0x147c,0x1a4,0x147c,0x1a4,0x1a4,0x147c, +0x147c,0x147c,0x147c,0x1a4,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x1a4,0x147c,0x147c,0x147c,0x147c, +0x1a4,0x147c,0x147c,0x147c,0x147c,0x1a4,0x147c,0x1a4,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c, +0x147c,0x147c,0x1a4,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c, +0x147c,0x147c,0x147c,0x147c,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x147c,0x147c,0x147c,0x1a4,0x147c,0x147c,0x147c, +0x147c,0x147c,0x1a4,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c, +0x147c,0x147c,0x147c,0x147c,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, +0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, +0x1a4,0x1a4,0x1a4,0x1a4,0x1479,0x1479,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, +0x1a4,0x1a4,0x1a4,0x1a4,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x147f,0x147f,0x147f,0x147f,0x147f, +0x148e,0x147f,0x1482,0x1482,0x147f,0x147f,0x147f,0x1485,0x1485,0x1a7,0x148b,0x148b,0x148b,0x148b,0x148b,0x148b, +0x148b,0x148b,0x148b,0x148b,0x1488,0x1494,0x1494,0x1494,0x1995,0x1992,0x1992,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7, +0x1a7,0x1a7,0x1a7,0x1a7,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e, +0x163e,0x163e,0x163e,0x163e,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x149d, +0x1497,0x1497,0x149d,0x149d,0x14a6,0x14a6,0x14a0,0x14a3,0x14a3,0x149d,0x149a,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa, +0x1aa,0x1aa,0x1aa,0x1aa,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9, +0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x1ad,0x1ad,0x1ad,0x1ad, +0x1770,0x1770,0x14a9,0x14a9,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770, +0x1770,0x1770,0x1770,0x1770,0x1ad,0x1ad,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770, +0x1770,0x1770,0x1770,0x1770,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0, +0x1b0,0x1b0,0x1b0,0x1b0,0x14b5,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2, +0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2, +0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x14b2,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0, +0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x14af,0x14af,0x14af,0x14af,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8, +0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14ca,0x14cd,0x14d0,0x14d0,0x14cd,0x14d3,0x14d3,0x14be, +0x14c1,0x1773,0x1776,0x1776,0x1776,0x15ba,0x1b3,0x1b3,0x14c4,0x14c4,0x14c4,0x14c4,0x14c4,0x14c4,0x14c4,0x14c4, +0x14c4,0x14c4,0x15b7,0x177c,0x177f,0x1779,0x1782,0x1782,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9, +0x14d9,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6, +0x14d6,0x14d6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc, +0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1332,0x132f,0x1332,0x1311,0x132f,0x1335,0x1335,0x1338, +0x1335,0x1338,0x133b,0x132f,0x1338,0x1338,0x132f,0x132f,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee, +0x14ee,0x14ee,0x14ee,0x14df,0x14e8,0x14df,0x14e8,0x14e8,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14eb,0x14e2, +0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0, +0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x1bf,0x1bf,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15c3,0x1bf,0x1bf, +0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1728,0x171f,0x171f,0x171f,0x171f,0x171f,0x171f,0x171f, +0x171f,0x171f,0x171f,0x171f,0x171f,0x171f,0x171f,0x171f,0x171f,0x171f,0x171f,0x171f,0x171f,0x171f,0x171f,0x171f, +0x171f,0x171f,0x171f,0x171f,0x1c5,0x1c5,0x1c5,0x1c5,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8, +#if !U_PLATFORM_IS_DARWIN_BASED +0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, +0x15a5,0x15a5,0x15a5,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, +0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x15a5,0x15a5,0x15a5,0x15a5, +0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x1cb,0x1cb,0x15a2,0x159c,0x159f,0x15a8,0x15ab,0x15ab,0x15ab,0x15ab, +0x15ab,0x15ab,0x15ab,0x15ab,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1593,0x1593,0x1593,0x1593, +0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x15ae,0x15ae,0x15ae,0x15ae, +0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae, +0x15ae,0x1962,0x1962,0x1962,0x1962,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db, +0x15db,0x15db,0x15db,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db, +0x15db,0x15db,0x15db,0x15db,0x15db,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x15db,0x15db,0x15db,0x15db, +0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x1cb,0x1cb,0x15d8,0x15d2,0x15d5,0x15de,0x15e1,0x15e1,0x15e1,0x15e1, +0x15e1,0x15e1,0x15e1,0x15e1,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x15c9,0x15c9,0x15c9,0x15c9, +0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15e4,0x15e4,0x15e4,0x15e4, +0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4, +0x15e4,0x1998,0x1998,0x1998,0x1998,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, +#if !U_PLATFORM_IS_DARWIN_BASED +0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x174f,0x16f5,0x15b7,0x16fb,0x1d4,0x15c0,0x15c0,0x15c0, +0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x1d4,0x1d4,0x15c0,0x15c0,0x1d4,0x1d4,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0, +0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x1d4,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0, +0x15c0,0x1d4,0x15c0,0x15c0,0x1d4,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x1d4,0x19ec,0x16f8,0x15c0,0x15b1,0x15b7, +0x15b1,0x15b7,0x15b7,0x15b7,0x15b7,0x1d4,0x1d4,0x15b7,0x15b7,0x1d4,0x1d4,0x15ba,0x15ba,0x15bd,0x1d4,0x1d4, +0x1752,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x15b1,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x15c3,0x15c0,0x15c0, +0x15c0,0x15c0,0x15b7,0x15b7,0x1d4,0x1d4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x1d4,0x1d4,0x1d4, +0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4, +0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8, +0x15d8,0x15d8,0x1d7,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8, +0x15d2,0x15d2,0x15d2,0x15c6,0x15c6,0x15c6,0x15d2,0x15d2,0x15c6,0x15d5,0x15c9,0x15c6,0x15db,0x15db,0x15cf,0x15db, +0x15db,0x15cc,0x17e5,0x1d7,0x15ea,0x15ea,0x15ea,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15e1,0x15e4,0x1da, +0x1da,0x1da,0x1da,0x1da,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x1da,0x1da, +0x1da,0x1da,0x1da,0x1da,0x1755,0x1755,0x1755,0x1755,0x15f6,0x15f3,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd, +0x1dd,0x1dd,0x1dd,0x1dd,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f, +0x177f,0x177f,0x177f,0x177f,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc, +0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0, +0x1e0,0x1e0,0x1e0,0x1e0,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc, +0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0, +0x1e0,0x1e0,0x1e0,0x1e0,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x1e0,0x1e0,0x1e0,0x1e0, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1785,0x172b,0x15ed,0x1731,0x1d4,0x15f6,0x15f6,0x15f6, +0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x1d4,0x1d4,0x15f6,0x15f6,0x1d4,0x1d4,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6, +0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x1d4,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6, +0x15f6,0x1d4,0x15f6,0x15f6,0x1d4,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x1d4,0x1a22,0x172e,0x15f6,0x15e7,0x15ed, +0x15e7,0x15ed,0x15ed,0x15ed,0x15ed,0x1d4,0x1d4,0x15ed,0x15ed,0x1d4,0x1d4,0x15f0,0x15f0,0x15f3,0x1d4,0x1d4, +0x1788,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x15e7,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x15f9,0x15f6,0x15f6, +0x15f6,0x15f6,0x15ed,0x15ed,0x1d4,0x1d4,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x1d4,0x1d4,0x1d4, +0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4, +0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e, +0x160e,0x160e,0x1d7,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e, +0x1608,0x1608,0x1608,0x15fc,0x15fc,0x15fc,0x1608,0x1608,0x15fc,0x160b,0x15ff,0x15fc,0x1611,0x1611,0x1605,0x1611, +0x1611,0x1602,0x181b,0x1d7,0x1620,0x1620,0x1620,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1617,0x161a,0x1da, +0x1da,0x1da,0x1da,0x1da,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x1da,0x1da, +0x1da,0x1da,0x1da,0x1da,0x178b,0x178b,0x178b,0x178b,0x162c,0x1629,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd, +0x1dd,0x1dd,0x1dd,0x1dd,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5, +0x17b5,0x17b5,0x17b5,0x17b5,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0, +0x1e0,0x1e0,0x1e0,0x1e0,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0, +0x1e0,0x1e0,0x1e0,0x1e0,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1e0,0x1e0,0x1e0,0x1e0, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0, +#if !U_PLATFORM_IS_DARWIN_BASED +0x1e0,0x1e0,0x1e0,0x1e0,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, +0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x15ff,0x1602,0x1605,0x1608,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3, +0x1e3,0x1e3,0x1e3,0x1e3,0x1617,0x1617,0x1617,0x1617,0x1617,0x160b,0x160b,0x1e6,0x1e6,0x1e6,0x1e6,0x160e, +0x160e,0x160e,0x160e,0x160e,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1611,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6, +0x1e6,0x1e6,0x1e6,0x1e6,0x1620,0x1620,0x1620,0x1620,0x1620,0x1e9,0x1e9,0x161d,0x161d,0x161d,0x161d,0x161d, +0x161d,0x161d,0x161d,0x161d,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9, +0x1e9,0x1e9,0x1e9,0x1e9,0x1623,0x1635,0x1635,0x1629,0x1632,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec, +0x1ec,0x1ec,0x1ec,0x1ec,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x1ec,0x1ec, +0x1ec,0x1ec,0x1ec,0x1ec,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b, +0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b, +0x163b,0x163b,0x163b,0x1ef,0x1647,0x1647,0x1647,0x1647,0x1647,0x1641,0x164a,0x1647,0x1647,0x1647,0x1647,0x1647, +0x1647,0x1647,0x1647,0x1647,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1647,0x1647, +0x1647,0x1647,0x1647,0x1f2,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650, +0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650, +0x1650,0x1650,0x1650,0x1f5,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c, +0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x1659,0x1659,0x1659,0x1659,0x1659,0x1f8, +0x1f8,0x1f8,0x1f8,0x1f8,0x1674,0x1674,0x1677,0x1677,0x167a,0x166b,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb, +0x1fb,0x1fb,0x1fb,0x1fb,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1fb,0x166b, +0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x1fb,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674, +0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1fb,0x1fb,0x1fb,0x1fb, +0x1fb,0x1674,0x1674,0x1674,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683, +0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1fe,0x1fe,0x1fe, +0x1fe,0x1fe,0x1fe,0x1fe,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c, +0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x1689,0x1689,0x1689, +0x1689,0x201,0x201,0x201,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7, +0x16a7,0x16a7,0x16a7,0x168f,0x16a1,0x16a1,0x168f,0x168f,0x168f,0x168f,0x207,0x207,0x16a1,0x16a1,0x16a4,0x16a4, +0x168f,0x168f,0x16a1,0x1695,0x1692,0x1698,0x16aa,0x16aa,0x169b,0x169b,0x169e,0x169e,0x169e,0x16aa,0x175e,0x175e, +0x175e,0x175e,0x175e,0x175e,0x175e,0x175e,0x175e,0x175e,0x175e,0x175e,0x175e,0x175e,0x175b,0x175b,0x175b,0x175b, +0x1758,0x1758,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1e0,0x1e0,0x1e0,0x1e0,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e, +0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x1635,0x1638,0x163b,0x163e,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3, +0x1e3,0x1e3,0x1e3,0x1e3,0x164d,0x164d,0x164d,0x164d,0x164d,0x1641,0x1641,0x1e6,0x1e6,0x1e6,0x1e6,0x1644, +0x1644,0x1644,0x1644,0x1644,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x1647,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6, +0x1e6,0x1e6,0x1e6,0x1e6,0x1656,0x1656,0x1656,0x1656,0x1656,0x1e9,0x1e9,0x1653,0x1653,0x1653,0x1653,0x1653, +0x1653,0x1653,0x1653,0x1653,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9, +0x1e9,0x1e9,0x1e9,0x1e9,0x1659,0x166b,0x166b,0x165f,0x1668,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec, +0x1ec,0x1ec,0x1ec,0x1ec,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1ec,0x1ec, +0x1ec,0x1ec,0x1ec,0x1ec,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671, +0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671, +0x1671,0x1671,0x1671,0x1ef,0x167d,0x167d,0x167d,0x167d,0x167d,0x1677,0x1680,0x167d,0x167d,0x167d,0x167d,0x167d, +0x167d,0x167d,0x167d,0x167d,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167d,0x167d, +0x167d,0x167d,0x167d,0x1f2,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1f5,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692, +0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x1692,0x168f,0x168f,0x168f,0x168f,0x168f,0x1f8, +0x1f8,0x1f8,0x1f8,0x1f8,0x16aa,0x16aa,0x16ad,0x16ad,0x16b0,0x16a1,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb, +0x1fb,0x1fb,0x1fb,0x1fb,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x1fb,0x16a1, +0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x1fb,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa, +0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x1fb,0x1fb,0x1fb,0x1fb, +0x1fb,0x16aa,0x16aa,0x16aa,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9, +0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x1fe,0x1fe,0x1fe, +0x1fe,0x1fe,0x1fe,0x1fe,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2, +0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x16bf,0x16bf,0x16bf, +0x16bf,0x201,0x201,0x201,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd, +0x16dd,0x16dd,0x16dd,0x16c5,0x16d7,0x16d7,0x16c5,0x16c5,0x16c5,0x16c5,0x207,0x207,0x16d7,0x16d7,0x16da,0x16da, +0x16c5,0x16c5,0x16d7,0x16cb,0x16c8,0x16ce,0x16e0,0x16e0,0x16d1,0x16d1,0x16d4,0x16d4,0x16d4,0x16e0,0x1794,0x1794, +0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1791,0x1791,0x1791,0x1791, +0x178e,0x178e,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207, +#if !U_PLATFORM_IS_DARWIN_BASED +0x207,0x207,0x207,0x207,0x20a,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad, +0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a, +0x20a,0x20a,0x20a,0x20a,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0, +0x20d,0x20d,0x20d,0x20d,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0, +0x16b0,0x16b0,0x16b0,0x16b0,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16b0,0x16b0,0x16b0,0x16b0, +0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16b0,0x16b0,0x16b0,0x16b0, +0x16b0,0x16b0,0x16b0,0x16b0,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16b0,0x16b0,0x16b0,0x16b0, +0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x20d,0x20d, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x207,0x207,0x207,0x207,0x20a,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3, +0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a, +0x20a,0x20a,0x20a,0x20a,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6, +0x20d,0x20d,0x20d,0x20d,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6, +0x16e6,0x16e6,0x16e6,0x16e6,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16e6,0x16e6,0x16e6,0x16e6, +0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16e6,0x16e6,0x16e6,0x16e6, +0x16e6,0x16e6,0x16e6,0x16e6,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16e6,0x16e6,0x16e6,0x16e6, +0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x20d,0x20d, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d, +0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d, +#if !U_PLATFORM_IS_DARWIN_BASED +0x16b3,0x16c2,0x16b9,0x16b6,0x16c8,0x16c8,0x16bc,0x16c8,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210, +0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x210,0x210,0x210,0x210,0x210,0x210, +0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb,0x16cb, +0x16cb,0x16cb,0x16cb,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x16d4, +0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770, +0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1965,0x216,0x216,0x1761,0x1761,0x1761, +0x176d,0x176d,0x1761,0x1761,0x1761,0x1761,0x176d,0x1761,0x1761,0x1761,0x1761,0x1764,0x216,0x216,0x216,0x216, +0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x1767,0x1767,0x1773,0x1773,0x1773,0x1767, +0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x16e9,0x16f8,0x16ef,0x16ec,0x16fe,0x16fe,0x16f2,0x16fe,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210, +0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x210,0x210,0x210,0x210,0x210,0x210, +0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701, +0x1701,0x1701,0x1701,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x170a, +0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6, +0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x199b,0x216,0x216,0x1797,0x1797,0x1797, +0x17a3,0x17a3,0x1797,0x1797,0x1797,0x1797,0x17a3,0x1797,0x1797,0x1797,0x1797,0x179a,0x216,0x216,0x216,0x216, +0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x179d,0x179d,0x17a9,0x17a9,0x17a9,0x179d, +0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219, +#if !U_PLATFORM_IS_DARWIN_BASED +0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x1788,0x1788,0x1788,0x1788,0x1788,0x1788,0x1788,0x1788, +0x1788,0x1788,0x1788,0x1788,0x1788,0x1788,0x1788,0x1788,0x1788,0x1788,0x1788,0x21f,0x1788,0x1788,0x21f,0x21f, +0x21f,0x21f,0x21f,0x1785,0x1785,0x1785,0x1785,0x1785,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x222, +0x178b,0x222,0x178b,0x178b,0x178b,0x178b,0x222,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b, +0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x222,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b, +0x178b,0x178e,0x222,0x222,0x222,0x222,0x222,0x222,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed, +0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797, +0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x225,0x225,0x225,0x225,0x225, +0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794, +0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x225,0x225,0x225,0x225,0x225, +0x225,0x225,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x189f,0x189f,0x189f,0x189f,0x189f,0x189f,0x189f,0x189f, +0x189f,0x189f,0x189f,0x189f,0x228,0x228,0x228,0x228,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8, +0x17bb,0x1869,0x1869,0x1869,0x1869,0x1866,0x1869,0x1905,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1869,0x1866, +0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x1869,0x1905,0x1905,0x1869,0x1869,0x1869,0x1869,0x1869, +0x1869,0x1869,0x1866,0x1863,0x1866,0x1869,0x1869,0x228,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902, +0x1902,0x1902,0x1902,0x1902,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x228,0x228,0x19e0,0x19e0,0x19e0,0x19e0,0x228, +0x228,0x228,0x19e0,0x228,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x19e3,0x19e3,0x19e3,0x19e3,0x19e0,0x19e6,0x19e6,0x19e0, +0x19e6,0x19e6,0x228,0x228,0x228,0x228,0x228,0x228,0x17b8,0x19e0,0x19e0,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x1902,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1905, +0x1905,0x1905,0x1905,0x1905,0x1905,0x1905,0x1902,0x1902,0x179d,0x179d,0x179d,0x179d,0x179a,0x179d,0x179d,0x17a0, +0x17a3,0x17a0,0x17a0,0x179d,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b, +0x22b,0x22b,0x22b,0x179a,0x179a,0x179a,0x179a,0x179a,0x17f7,0x17f7,0x17f7,0x17f7,0x17ee,0x17ee,0x17ee,0x17e8, +0x17eb,0x17eb,0x17eb,0x22e,0x22e,0x22e,0x22e,0x22e,0x17f4,0x17f4,0x17f4,0x17f4,0x17f4,0x17f4,0x17f4,0x17f4, +0x17f4,0x17f4,0x22e,0x22e,0x22e,0x22e,0x17f1,0x17f1,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812, +0x1812,0x231,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812, +0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x180f,0x17fd,0x17fd,0x17fd,0x17fd, +0x17fd,0x17fd,0x17fd,0x231,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x180f,0x1800,0x1812,0x1815,0x1815,0x1809, +0x1806,0x1806,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x180c,0x180c,0x180c,0x180c, +0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803, +0x1803,0x1803,0x1803,0x1803,0x1803,0x231,0x231,0x231,0x1821,0x1824,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a, +0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818, +0x1818,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983, +0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x237, +0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b,0x181b, +0x181b,0x237,0x237,0x181b,0x181b,0x181b,0x181b,0x181b,0x186c,0x1908,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be, +0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x21f,0x17be,0x17be,0x21f,0x21f, +0x21f,0x21f,0x21f,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x222, +0x17c1,0x222,0x17c1,0x17c1,0x17c1,0x17c1,0x222,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1, +0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x222,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1, +0x17c1,0x17c4,0x222,0x222,0x222,0x222,0x222,0x222,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623, +0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd, +0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x225,0x225,0x225,0x225,0x225, +0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca, +0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x225,0x225,0x225,0x225,0x225, +0x225,0x225,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5, +0x18d5,0x18d5,0x18d5,0x18d5,0x228,0x228,0x228,0x228,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee, +0x17f1,0x189f,0x189f,0x189f,0x189f,0x189c,0x189f,0x193b,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189f,0x189c, +0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x189f,0x193b,0x193b,0x189f,0x189f,0x189f,0x189f,0x189f, +0x189f,0x189f,0x189c,0x1899,0x189c,0x189f,0x189f,0x228,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938, +0x1938,0x1938,0x1938,0x1938,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x228,0x228,0x1a16,0x1a16,0x1a16,0x1a16,0x228, +0x228,0x228,0x1a16,0x228,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x1a19,0x1a19,0x1a19,0x1a19,0x1a16,0x1a1c,0x1a1c,0x1a16, +0x1a1c,0x1a1c,0x228,0x228,0x228,0x228,0x228,0x228,0x17ee,0x1a16,0x1a16,0x228,0x228,0x228,0x228,0x228, +0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x1938,0x193b,0x193b,0x193b,0x193b,0x193b,0x193b,0x193b, +0x193b,0x193b,0x193b,0x193b,0x193b,0x193b,0x1938,0x1938,0x17d3,0x17d3,0x17d3,0x17d3,0x17d0,0x17d3,0x17d3,0x17d6, +0x17d9,0x17d6,0x17d6,0x17d3,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b, +0x22b,0x22b,0x22b,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x182d,0x182d,0x182d,0x182d,0x1824,0x1824,0x1824,0x181e, +0x1821,0x1821,0x1821,0x22e,0x22e,0x22e,0x22e,0x22e,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a, +0x182a,0x182a,0x22e,0x22e,0x22e,0x22e,0x1827,0x1827,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848, +0x1848,0x231,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848, +0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1845,0x1833,0x1833,0x1833,0x1833, +0x1833,0x1833,0x1833,0x231,0x1833,0x1833,0x1833,0x1833,0x1833,0x1833,0x1845,0x1836,0x1848,0x184b,0x184b,0x183f, +0x183c,0x183c,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x1842,0x1842,0x1842,0x1842, +0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839,0x1839, +0x1839,0x1839,0x1839,0x1839,0x1839,0x231,0x231,0x231,0x1857,0x185a,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860, +0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e, +0x184e,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9, +0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x237, +0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851, +0x1851,0x237,0x237,0x1851,0x1851,0x1851,0x1851,0x1851,0x18a2,0x193e,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a, +#if !U_PLATFORM_IS_DARWIN_BASED +0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a, +0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x23d,0x23d,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e, +0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x23d,0x1827,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e, +0x181e,0x1827,0x181e,0x181e,0x1827,0x181e,0x181e,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d, +0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x240,0x240,0x240, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860, +0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x23d,0x23d,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854, +0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x23d,0x185d,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854, +0x1854,0x185d,0x1854,0x1854,0x185d,0x1854,0x1854,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d, +0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x1863,0x240,0x240,0x240, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240, +#if !U_PLATFORM_IS_DARWIN_BASED +0x1845,0x1845,0x1836,0x1830,0x1830,0x1845,0x1833,0x1848,0x1848,0x1848,0x1848,0x184b,0x184b,0x183f,0x183c,0x1839, +0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x243,0x183f,0x243,0x1839,0x1968,0x243, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x187b,0x187b,0x186c,0x1866,0x1866,0x187b,0x1869,0x187e,0x187e,0x187e,0x187e,0x1881,0x1881,0x1875,0x1872,0x186f, +0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x243,0x1875,0x243,0x186f,0x199e,0x243, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243, +0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243, #if !U_PLATFORM_IS_DARWIN_BASED -0x1815,0x1815,0x1806,0x1800,0x1800,0x1815,0x1803,0x1818,0x1818,0x1818,0x1818,0x181b,0x181b,0x180f,0x180c,0x1809, -0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x246,0x180f,0x246,0x1809,0x246,0x246, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1851,0x1851,0x1842,0x183c,0x183c,0x1851,0x183f,0x1854,0x1854,0x1854,0x1854,0x1857,0x1857,0x184b,0x1848,0x1845, -0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x246,0x184b,0x246,0x1845,0x246,0x246, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246, -0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246, -#if !U_PLATFORM_IS_DARWIN_BASED -0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821, -0x1821,0x1821,0x1821,0x1821,0x249,0x249,0x249,0x249,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e, -0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e, -0x181e,0x181e,0x181e,0x181e,0x249,0x249,0x249,0x249,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f, -0x183f,0x183f,0x183f,0x183f,0x183f,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c, -0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842, -0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x24f,0x24f,0x24f,0x24f,0x24f, -0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de, -0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de, -0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x18de,0x252,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x255, -0x187e,0x187e,0x255,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e, -0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x255, -0x255,0x255,0x1872,0x255,0x1872,0x1872,0x255,0x1872,0x1872,0x1872,0x1875,0x1872,0x1878,0x1878,0x1881,0x1872, -0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b, -0x187b,0x187b,0x255,0x255,0x255,0x255,0x255,0x255,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1, -0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1, -0x18e1,0x18e1,0x18e1,0x18e1,0x258,0x258,0x258,0x258,0x1899,0x1899,0x1899,0x1899,0x25b,0x25b,0x189c,0x189c, -0x189c,0x189c,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1896, -0x1887,0x188a,0x188d,0x189f,0x189f,0x25b,0x1890,0x1890,0x18ae,0x18b1,0x18c0,0x18c0,0x18b1,0x18b4,0x18ae,0x18ab, -0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x1899,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1896, -0x1896,0x1884,0x1884,0x1884,0x1899,0x1899,0x1899,0x1899,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d, -0x185d,0x185d,0x185d,0x185d,0x249,0x249,0x249,0x249,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a, -0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a, -0x185a,0x185a,0x185a,0x185a,0x249,0x249,0x249,0x249,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b, -0x187b,0x187b,0x187b,0x187b,0x187b,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c, -0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e, -0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x24f,0x24f,0x24f,0x24f,0x24f, -0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a, -0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a, -0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x191a,0x252,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x255, -0x18ba,0x18ba,0x255,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba, -0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x255, -0x255,0x255,0x18ae,0x255,0x18ae,0x18ae,0x255,0x18ae,0x18ae,0x18ae,0x18b1,0x18ae,0x18b4,0x18b4,0x18bd,0x18ae, -0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x18b7,0x18b7,0x18b7,0x18b7,0x18b7,0x18b7,0x18b7,0x18b7, -0x18b7,0x18b7,0x255,0x255,0x255,0x255,0x255,0x255,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d, -0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d, -0x191d,0x191d,0x191d,0x191d,0x258,0x258,0x258,0x258,0x18d5,0x18d5,0x18d5,0x18d5,0x25b,0x25b,0x18d8,0x18d8, -0x18d8,0x18d8,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18d2, -0x18c3,0x18c6,0x18c9,0x18db,0x18db,0x25b,0x18cc,0x18cc,0x18ea,0x18ed,0x18fc,0x18fc,0x18ed,0x18f0,0x18ea,0x18e7, -0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x18d5,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18d2, -0x18d2,0x18c0,0x18c0,0x18c0,0x18d5,0x18d5,0x18d5,0x18d5,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264, -#if !U_PLATFORM_IS_DARWIN_BASED -0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x18db,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x1917,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264, -0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264, -#if !U_PLATFORM_IS_DARWIN_BASED -0x264,0x264,0x264,0x264,0x264,0x264,0x933,0x933,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8, -0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0x267,0x267, -0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6, -0x18c6,0x18c6,0x18c6,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a, -0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b, -0xc4b,0xc4b,0xc4b,0x128d,0x128d,0x128d,0x26d,0x26d,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c, -0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c, -0xe7c,0xe7c,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x264,0x264,0x264,0x264,0x264,0x264,0x969,0x969,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31, -0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0x267,0x267, -0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902, -0x1902,0x1902,0x1902,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a, -0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87, -0xc87,0xc87,0xc87,0x12c9,0x12c9,0x12c9,0x26d,0x26d,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8, -0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8, -0xeb8,0xeb8,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d, -#if !U_PLATFORM_IS_DARWIN_BASED -0x26d,0x26d,0x26d,0x26d,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b, -0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0x270,0x270,0x270,0x270,0x270, -0x270,0x270,0x270,0x270,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e, -0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e, -0xb5e,0xb5e,0x273,0x273,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2, -0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x276,0x276,0x276,0x276,0x276,0x276,0x276, -0x276,0x276,0x276,0x276,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc, -0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc, -0x13bc,0x13bc,0x279,0x279,0x1785,0x1785,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c, -0x27c,0x27c,0x27c,0x27c,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db, -0x18db,0x18db,0x18db,0x18db,0x1101,0x378,0x378,0x384,0xc8d,0x387,0x387,0x387,0x387,0x387,0x387,0x387, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x26d,0x26d,0x26d,0x26d,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94, -0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0x270,0x270,0x270,0x270,0x270, -0x270,0x270,0x270,0x270,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, -0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, -0xb97,0xb97,0x273,0x273,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de, -0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x276,0x276,0x276,0x276,0x276,0x276,0x276, -0x276,0x276,0x276,0x276,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8, -0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8, -0x13f8,0x13f8,0x279,0x279,0x17c1,0x17c1,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c, -0x27c,0x27c,0x27c,0x27c,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917, -0x1917,0x1917,0x1917,0x1917,0x113d,0x378,0x378,0x384,0xcc9,0x387,0x387,0x387,0x387,0x387,0x387,0x387, +0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851,0x1851, +0x1851,0x1851,0x1851,0x1851,0x246,0x246,0x246,0x246,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e, +0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e,0x184e, +0x184e,0x184e,0x184e,0x184e,0x246,0x246,0x246,0x246,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f, +0x186f,0x186f,0x186f,0x186f,0x186f,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x249,0x249,0x249,0x249,0x249,0x249, +0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872, +0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x24c,0x24c,0x24c,0x24c,0x24c, +0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e, +0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e, +0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x24f,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x252, +0x18ae,0x18ae,0x252,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae, +0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18ae,0x18a2,0x18a2,0x18a2,0x18a2,0x18a2,0x18a2,0x252, +0x252,0x252,0x18a2,0x252,0x18a2,0x18a2,0x252,0x18a2,0x18a2,0x18a2,0x18a5,0x18a2,0x18a8,0x18a8,0x18b1,0x18a2, +0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x18ab,0x18ab,0x18ab,0x18ab,0x18ab,0x18ab,0x18ab,0x18ab, +0x18ab,0x18ab,0x252,0x252,0x252,0x252,0x252,0x252,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911, +0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911, +0x1911,0x1911,0x1911,0x1911,0x255,0x255,0x255,0x255,0x18c9,0x18c9,0x18c9,0x18c9,0x258,0x258,0x18cc,0x18cc, +0x18cc,0x18cc,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18c6, +0x18b7,0x18ba,0x18bd,0x18cf,0x18cf,0x196b,0x18c0,0x18c0,0x18de,0x18e1,0x18f0,0x18f0,0x18e1,0x18e4,0x18de,0x18db, +0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x18c9,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18c6, +0x18c6,0x18b4,0x18b4,0x18b4,0x18c9,0x18c9,0x18c9,0x18c9,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887, +0x1887,0x1887,0x1887,0x1887,0x246,0x246,0x246,0x246,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884, +0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884,0x1884, +0x1884,0x1884,0x1884,0x1884,0x246,0x246,0x246,0x246,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5, +0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x249,0x249,0x249,0x249,0x249,0x249, +0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8, +0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x24c,0x24c,0x24c,0x24c,0x24c, +0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944, +0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944, +0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x24f,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x252, +0x18e4,0x18e4,0x252,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4, +0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18d8,0x18d8,0x18d8,0x18d8,0x18d8,0x18d8,0x252, +0x252,0x252,0x18d8,0x252,0x18d8,0x18d8,0x252,0x18d8,0x18d8,0x18d8,0x18db,0x18d8,0x18de,0x18de,0x18e7,0x18d8, +0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1, +0x18e1,0x18e1,0x252,0x252,0x252,0x252,0x252,0x252,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947, +0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947, +0x1947,0x1947,0x1947,0x1947,0x255,0x255,0x255,0x255,0x18ff,0x18ff,0x18ff,0x18ff,0x258,0x258,0x1902,0x1902, +0x1902,0x1902,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18fc, +0x18ed,0x18f0,0x18f3,0x1905,0x1905,0x19a1,0x18f6,0x18f6,0x1914,0x1917,0x1926,0x1926,0x1917,0x191a,0x1914,0x1911, +0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x18ff,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18fc, +0x18fc,0x18ea,0x18ea,0x18ea,0x18ff,0x18ff,0x18ff,0x18ff,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, +#if !U_PLATFORM_IS_DARWIN_BASED +0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980, +0x1980,0x1980,0x1980,0x1980,0x197d,0x197d,0x197d,0x1971,0x1971,0x1971,0x1971,0x1971,0x1971,0x1971,0x1971,0x1971, +0x197d,0x1977,0x1974,0x197a,0x264,0x264,0x264,0x264,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983, +0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983,0x1983, +0x1983,0x1983,0x1983,0x267,0x267,0x1983,0x1983,0x1983,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x26a,0x1992, +0x1992,0x26a,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992, +0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x198f,0x198f,0x198f,0x198f,0x198f,0x26a, +0x1986,0x1986,0x26a,0x198f,0x198f,0x1986,0x198f,0x1989,0x1992,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a, +0x199b,0x199b,0x199e,0x199e,0x1995,0x1995,0x1995,0x1995,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d, +0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d, +0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a4,0x19a1,0x19a1,0x19a1, +0x19a4,0x19a1,0x19a1,0x19a1,0x19a1,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270, +0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad, +0x19ad,0x19ad,0x19ad,0x19a7,0x19a7,0x19aa,0x19aa,0x19b0,0x19b0,0x273,0x273,0x273,0x273,0x273,0x273,0x273, +0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3, +0x19b3,0x19b3,0x19b3,0x19b3,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276, +0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6, +0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b9,0x19c2,0x19b6,0x19b6,0x279,0x279,0x279,0x279,0x279, +0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c8,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c, +0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1, +0x19d1,0x19d1,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19ce,0x19ce,0x19ce, +0x19ce,0x19d4,0x19d4,0x19d4,0x19d4,0x19d4,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x282,0x282,0x282,0x282, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6, +0x19b6,0x19b6,0x19b6,0x19b6,0x19b3,0x19b3,0x19b3,0x19a7,0x19a7,0x19a7,0x19a7,0x19a7,0x19a7,0x19a7,0x19a7,0x19a7, +0x19b3,0x19ad,0x19aa,0x19b0,0x264,0x264,0x264,0x264,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9, +0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9, +0x19b9,0x19b9,0x19b9,0x267,0x267,0x19b9,0x19b9,0x19b9,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x26a,0x19c8, +0x19c8,0x26a,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8, +0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x26a, +0x19bc,0x19bc,0x26a,0x19c5,0x19c5,0x19bc,0x19c5,0x19bf,0x19c8,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a, +0x19d1,0x19d1,0x19d4,0x19d4,0x19cb,0x19cb,0x19cb,0x19cb,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d, +0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x19ce,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d, +0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19da,0x19d7,0x19d7,0x19d7, +0x19da,0x19d7,0x19d7,0x19d7,0x19d7,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270, +0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3, +0x19e3,0x19e3,0x19e3,0x19dd,0x19dd,0x19e0,0x19e0,0x19e6,0x19e6,0x273,0x273,0x273,0x273,0x273,0x273,0x273, +0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9, +0x19e9,0x19e9,0x19e9,0x19e9,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276, +0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec, +0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ec,0x19ef,0x19f8,0x19ec,0x19ec,0x279,0x279,0x279,0x279,0x279, +0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fe,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c, +0x1a07,0x1a07,0x1a07,0x1a07,0x1a07,0x1a07,0x1a07,0x1a07,0x1a07,0x1a07,0x1a07,0x1a07,0x1a07,0x1a07,0x1a07,0x1a07, +0x1a07,0x1a07,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a04,0x1a04,0x1a04, +0x1a04,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x282,0x282,0x282,0x282, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387, -0x387,0x387,0x387,0x387,0x384,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x384,0x384,0x384, -#if !U_PLATFORM_IS_DARWIN_BASED -0x384,0x37e,0x1104,0x12db,0x387,0x900,0x903,0x37b,0x37b,0x1101,0x12d8,0x12d8,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x387,0x387,0x378,0x378,0x87f,0x882,0x91b,0x91b,0x91b,0x91b,0x91b,0x91b, -0x91b,0x91b,0x91b,0x91b,0x381,0xf63,0xf60,0x12de,0x12de,0x12de,0x12de,0x12de,0x14af,0x1107,0x1107,0xeb5, -0xeb5,0xd80,0xeb5,0xeb5,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x38a,0x387,0x387, -0x387,0x387,0x387,0x387,0x387,0x38a,0x387,0x387,0x38a,0x387,0x387,0x387,0x387,0x387,0x12d8,0x12db, -0x37b,0x387,0x384,0x384,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x12e4,0x429,0x429, -0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x12e4,0x1857, -0x1857,0xf81,0x41a,0x423,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465, -0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0xb79,0xb79,0xd8c,0xd8c,0x885, -0xd8f,0x13ce,0x13ce,0x13ce,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x384,0x37e,0x1140,0x1317,0x387,0x936,0x939,0x37b,0x37b,0x113d,0x1314,0x1314,0x38a,0x38a,0x38a,0x38a, -0x38a,0x38a,0x38a,0x38a,0x387,0x387,0x378,0x378,0x8b5,0x8b8,0x951,0x951,0x951,0x951,0x951,0x951, -0x951,0x951,0x951,0x951,0x381,0xf9f,0xf9c,0x131a,0x131a,0x131a,0x131a,0x131a,0x14eb,0x1143,0x1143,0xef1, -0xef1,0xdbc,0xef1,0xef1,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x38a,0x387,0x387, -0x387,0x387,0x387,0x387,0x387,0x38a,0x387,0x387,0x38a,0x387,0x387,0x387,0x387,0x387,0x1314,0x1317, -0x37b,0x387,0x384,0x384,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x1320,0x429,0x429, -0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x1320,0x1893, -0x1893,0xfbd,0x41a,0x423,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465, -0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0xbb2,0xbb2,0xdc8,0xdc8,0x8bb, -0xdcb,0x140a,0x140a,0x140a,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468, -#if !U_PLATFORM_IS_DARWIN_BASED -0x468,0x468,0x468,0x468,0x46e,0x46e,0x46e,0x111c,0x111c,0x111c,0x111c,0x111c,0x46b,0x46b,0x46b,0x46b, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x468,0x468,0x468,0x468,0x46e,0x46e,0x46e,0x1158,0x1158,0x1158,0x1158,0x1158,0x46b,0x46b,0x46b,0x46b, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b, -#if !U_PLATFORM_IS_DARWIN_BASED -0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x1119,0x1119, -0x1119,0x1119,0x1119,0x1119,0x471,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x46b,0x1155,0x1155, -0x1155,0x1155,0x1155,0x1155,0x471,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, -0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474, -0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474, -#if !U_PLATFORM_IS_DARWIN_BASED -0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x474,0x474,0x474,0x474,0x477,0x975, -0xfb1,0xfb1,0xfb4,0xfb1,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474, -0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0xfb4,0xfb1, -0xfb4,0xfb1,0xfb4,0xfb1,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x489,0x489,0x489,0x489, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x474,0x474,0x474,0x474,0x477,0x9ab, -0xfed,0xfed,0xff0,0xfed,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474, -0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0x47a,0x474,0xff0,0xfed, -0xff0,0xfed,0xff0,0xfed,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x489,0x489,0x489,0x489, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x489,0x489,0x489,0x489,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x489,0x489,0x489,0x489, -#if !U_PLATFORM_IS_DARWIN_BASED -0x489,0x489,0x489,0x489,0x666,0x666,0x669,0x4a4,0x675,0x672,0x672,0x66f,0x4ce,0x4ce,0x48c,0x48c, -0x48c,0x48c,0x48c,0xaa7,0x678,0x4b0,0x690,0x693,0x4c5,0x678,0x4b3,0x4b3,0x4a4,0x4bf,0x4bf,0x666, -0x4cb,0x4c8,0x66c,0x49e,0x495,0x495,0x498,0x498,0x498,0x498,0x498,0x49b,0x498,0x498,0x498,0x48f, -0x4d7,0x4d4,0x4d1,0x4d1,0x684,0x4b9,0x4b6,0x681,0x67e,0x67b,0x68d,0x4a7,0x68a,0x68a,0x4bc,0x4bf, -0x687,0x687,0x4bc,0x4bf,0x4a1,0x4a4,0x4a4,0x4a4,0x4c2,0x4ad,0x4aa,0xb8e,0xaad,0xab0,0xaaa,0xaaa, -0xaaa,0xaaa,0xb85,0xb85,0xb85,0xb85,0xb8b,0xcba,0xcb7,0xd9b,0xd9e,0xb88,0xd9e,0xd9e,0xd9e,0xd9e, -0xd9b,0xd9e,0xd9e,0xb82,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4f8,0x4fe,0x714,0x4fb,0x978, -0x999,0xab3,0xab3,0xab3,0xb94,0xb94,0xda4,0xda4,0xda4,0xda4,0x1125,0x1128,0x1128,0x12f9,0x149d,0x14c7, -0x14ca,0x14ca,0x16dd,0x185a,0x50a,0x50a,0x522,0x6a2,0x507,0x69f,0x50a,0x51f,0x507,0x6a2,0x519,0x522, -0x522,0x522,0x519,0x519,0x522,0x522,0x522,0x6ab,0x507,0x522,0x6a5,0x507,0x516,0x522,0x522,0x522, -0x522,0x522,0x507,0x507,0x50d,0x69f,0x6a8,0x507,0x522,0x507,0x6ae,0x507,0x522,0x510,0x528,0x6b1, -0x522,0x522,0x513,0x519,0x522,0x522,0x525,0x522,0x519,0x51c,0x51c,0x51c,0x51c,0xabc,0xab9,0xcbd, -0xdad,0xba9,0xbac,0xbac,0xba6,0xba3,0xba3,0xba3,0xba3,0xbac,0xba9,0xba9,0xba9,0xba9,0xba0,0xba3, -0xdaa,0xec1,0xec4,0xfba,0x112b,0x112b,0x112b,0x6b7,0x6b4,0x52b,0x52e,0x52e,0x52e,0x52e,0x52e,0x6b4, -0x6b7,0x6b7,0x6b4,0x52e,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd, -0x537,0x537,0x537,0x537,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x531,0x531, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x489,0x489,0x489,0x489,0x672,0x672,0x675,0x4a4,0x681,0x67e,0x67e,0x67b,0x4ce,0x4ce,0x48c,0x48c, -0x48c,0x48c,0x48c,0xadd,0x684,0x4b0,0x69c,0x69f,0x4c5,0x684,0x4b3,0x4b3,0x4a4,0x4bf,0x4bf,0x672, -0x4cb,0x4c8,0x678,0x49e,0x495,0x495,0x498,0x498,0x498,0x498,0x498,0x49b,0x498,0x498,0x498,0x48f, -0x4d7,0x4d4,0x4d1,0x4d1,0x690,0x4b9,0x4b6,0x68d,0x68a,0x687,0x699,0x4a7,0x696,0x696,0x4bc,0x4bf, -0x693,0x693,0x4bc,0x4bf,0x4a1,0x4a4,0x4a4,0x4a4,0x4c2,0x4ad,0x4aa,0xbc7,0xae3,0xae6,0xae0,0xae0, -0xae0,0xae0,0xbbe,0xbbe,0xbbe,0xbbe,0xbc4,0xcf6,0xcf3,0xdd7,0xdda,0xbc1,0xdda,0xdda,0xdda,0xdda, -0xdd7,0xdda,0xdda,0xbbb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4fb,0x4f8,0x4fe,0x726,0x4fb,0x9ae, -0x9cf,0xae9,0xae9,0xae9,0xbcd,0xbcd,0xde0,0xde0,0xde0,0xde0,0x1161,0x1164,0x1164,0x1335,0x14d9,0x1503, -0x1506,0x1506,0x1719,0x1896,0x50a,0x50a,0x522,0x6ae,0x507,0x6ab,0x50a,0x51f,0x507,0x6ae,0x519,0x522, -0x522,0x522,0x519,0x519,0x522,0x522,0x522,0x6b7,0x507,0x522,0x6b1,0x507,0x516,0x522,0x522,0x522, -0x522,0x522,0x507,0x507,0x50d,0x6ab,0x6b4,0x507,0x522,0x507,0x6ba,0x507,0x522,0x510,0x528,0x6bd, -0x522,0x522,0x513,0x519,0x522,0x522,0x525,0x522,0x519,0x51c,0x51c,0x51c,0x51c,0xaf5,0xaf2,0xcf9, -0xde9,0xbe2,0xbe5,0xbe5,0xbdf,0xbdc,0xbdc,0xbdc,0xbdc,0xbe5,0xbe2,0xbe2,0xbe2,0xbe2,0xbd9,0xbdc, -0xde6,0xefd,0xf00,0xff6,0x1167,0x1167,0x1167,0x6c3,0x6c0,0x52b,0x52e,0x52e,0x52e,0x52e,0x52e,0x6c0, -0x6c3,0x6c3,0x6c0,0x52e,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9, -0x537,0x537,0x537,0x537,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x531,0x531, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x531,0x531,0x531,0x531,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53a,0x543,0x543,0x53d, -#if !U_PLATFORM_IS_DARWIN_BASED -0x53d,0x53d,0x540,0x53a,0x53d,0x53d,0x53a,0x53a,0x53a,0x53a,0x53d,0x53d,0x6c0,0x6c0,0x53a,0x53a, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x53d,0x53d,0x540,0x53a,0x53d,0x53d,0x53a,0x53a,0x53a,0x53a,0x53d,0x53d,0x6cc,0x6cc,0x53a,0x53a, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x540,0x540,0x540, -#if !U_PLATFORM_IS_DARWIN_BASED -0x53d,0x53d,0x6c3,0x53d,0x6c3,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53a,0x53d,0x53a,0x53a, -0x53a,0x53a,0x53a,0x53a,0x53d,0x53d,0x53a,0x6c0,0x53a,0x53a,0x53a,0xac2,0xac2,0xac2,0xac2,0xac2, -0xac2,0xac2,0xac2,0xac2,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, -0x6c9,0x546,0x6c9,0x6c9,0x549,0x546,0x546,0x6c9,0x6c9,0x549,0x546,0x6c9,0x549,0x546,0x546,0x6c9, -0x546,0x6c9,0x555,0x552,0x546,0x6c9,0x546,0x546,0x546,0x546,0x6c9,0x546,0x546,0x6c9,0x6c9,0x6c9, -0x6c9,0x546,0x546,0x6c9,0x549,0x6c9,0x549,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6cf,0x54c,0x6c9,0x54c, -0x54c,0x546,0x546,0x546,0x6c9,0x6c9,0x6c9,0x6c9,0x546,0x546,0x546,0x546,0x6c9,0x6c9,0x546,0x546, -0x546,0x549,0x546,0x546,0x549,0x546,0x546,0x549,0x6c9,0x549,0x546,0x546,0x6c9,0x546,0x546,0x546, -0x546,0x546,0x6c9,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546, -0x6cc,0x6c9,0x549,0x546,0x6c9,0x6c9,0x6c9,0x6c9,0x546,0x546,0x6c9,0x6c9,0x546,0x549,0x6cc,0x6cc, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x53d,0x53d,0x6cf,0x53d,0x6cf,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53a,0x53d,0x53a,0x53a, -0x53a,0x53a,0x53a,0x53a,0x53d,0x53d,0x53a,0x6cc,0x53a,0x53a,0x53a,0xafb,0xafb,0xafb,0xafb,0xafb, -0xafb,0xafb,0xafb,0xafb,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8, -0x6d5,0x546,0x6d5,0x6d5,0x549,0x546,0x546,0x6d5,0x6d5,0x549,0x546,0x6d5,0x549,0x546,0x546,0x6d5, -0x546,0x6d5,0x555,0x552,0x546,0x6d5,0x546,0x546,0x546,0x546,0x6d5,0x546,0x546,0x6d5,0x6d5,0x6d5, -0x6d5,0x546,0x546,0x6d5,0x549,0x6d5,0x549,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6db,0x54c,0x6d5,0x54c, -0x54c,0x546,0x546,0x546,0x6d5,0x6d5,0x6d5,0x6d5,0x546,0x546,0x546,0x546,0x6d5,0x6d5,0x546,0x546, -0x546,0x549,0x546,0x546,0x549,0x546,0x546,0x549,0x6d5,0x549,0x546,0x546,0x6d5,0x546,0x546,0x546, -0x546,0x546,0x6d5,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546, -0x6d8,0x6d5,0x549,0x546,0x6d5,0x6d5,0x6d5,0x6d5,0x546,0x546,0x6d5,0x6d5,0x546,0x549,0x6d8,0x6d8, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x549,0x549,0x546,0x546,0x549,0x549,0x546,0x546,0x549,0x549,0x546,0x546,0x546,0x546,0x546,0x546, -#if !U_PLATFORM_IS_DARWIN_BASED -0x549,0x549,0x6c9,0x6c9,0x549,0x549,0x6c9,0x6c9,0x549,0x549,0x546,0x546,0x546,0x546,0x546,0x546, -0x546,0x546,0x546,0x546,0x546,0x6c9,0x546,0x546,0x546,0x6c9,0x546,0x546,0x546,0x546,0x546,0x546, -0x546,0x6c9,0x546,0x546,0x546,0x546,0x546,0x546,0x549,0x549,0x549,0x549,0x546,0x546,0x546,0x546, -0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x6c9,0x546,0x546,0x546,0x546, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x549,0x549,0x6d5,0x6d5,0x549,0x549,0x6d5,0x6d5,0x549,0x549,0x546,0x546,0x546,0x546,0x546,0x546, -0x546,0x546,0x546,0x546,0x546,0x6d5,0x546,0x546,0x546,0x6d5,0x546,0x546,0x546,0x546,0x546,0x546, -0x546,0x6d5,0x546,0x546,0x546,0x546,0x546,0x546,0x549,0x549,0x549,0x549,0x546,0x546,0x546,0x546, -0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x6d5,0x546,0x546,0x546,0x546, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546, -0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x546,0x549,0x549,0x549,0x549, -#if !U_PLATFORM_IS_DARWIN_BASED -0x546,0x546,0x546,0x546,0x546,0x546,0x549,0x549,0x549,0x549,0x546,0x54f,0x546,0x546,0xbb2,0xbb2, -0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0x558,0xac5,0x558,0x558, -0x558,0x558,0x558,0x558,0x564,0x561,0x564,0x561,0x558,0x558,0x558,0x558,0x558,0x558,0x6d2,0x558, -0x558,0x558,0x558,0x558,0x558,0x558,0x7d4,0x7d4,0x558,0x558,0x558,0x558,0x55e,0x55e,0x558,0x558, -0x558,0x558,0x558,0x558,0x55b,0x7da,0x7d7,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x546,0x546,0x546,0x546,0x546,0x546,0x549,0x549,0x549,0x549,0x546,0x54f,0x546,0x546,0xbeb,0xbeb, -0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0x558,0xafe,0x558,0x558, -0x558,0x558,0x558,0x558,0x564,0x561,0x564,0x561,0x558,0x558,0x558,0x558,0x558,0x558,0x6de,0x558, -0x558,0x558,0x558,0x558,0x558,0x558,0x7f2,0x7f2,0x558,0x558,0x558,0x558,0x55e,0x55e,0x558,0x558, -0x558,0x558,0x558,0x558,0x55b,0x7f8,0x7f5,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558, -#if !U_PLATFORM_IS_DARWIN_BASED -0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0xac5,0xbb8,0xac5,0xac5,0xac5, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0xafe,0xbf1,0xafe,0xafe,0xafe, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567, -0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567,0x567, -#if !U_PLATFORM_IS_DARWIN_BASED -0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x56d,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e, -0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xc1e,0xd32, -0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4, -0x6e4,0x6e4,0x6e4,0x6e4,0x570,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573, -0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x573,0x573,0x573,0x573, -0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4, -0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7, -0x576,0x576,0x6e7,0x6e7,0x6e7,0x6e7,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb, -0x6ed,0x6ed,0x579,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x57c,0x57c,0x579,0x579,0x57f,0x57f, -0x57f,0x57f,0x6ed,0x6ed,0x57f,0x57f,0x6f0,0x6ed,0x579,0x579,0x579,0x579,0x6ed,0x6ed,0x57f,0x57f, -0x6f0,0x6ed,0x579,0x579,0x579,0x579,0x6ed,0x6ed,0x6ea,0x579,0x57f,0x6ed,0x579,0x579,0x6ea,0x6ed, -0x6ed,0x6ed,0x57f,0x57f,0x579,0x579,0x579,0x579,0x579,0x579,0x579,0x579,0x579,0x579,0x579,0x579, -0x579,0x579,0x6ed,0x6ea,0x6ed,0x6ea,0x579,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x579,0x579,0x6ea, -0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb,0xbbe,0xbbe,0xbbe,0xbc1,0xbc1,0xc36,0xc36,0xbbe, -0x58b,0x58b,0x58b,0x58b,0x588,0x6ff,0x6ff,0x582,0x582,0x6f3,0x582,0x582,0x582,0x582,0x6f9,0x6f3, -0x582,0x588,0x582,0x582,0xd3b,0xd3b,0xbc4,0xbc4,0xdbc,0xace,0x585,0x585,0x6f6,0x58e,0x6f6,0x585, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x56d,0xc57,0xc57,0xc57,0xc57,0xc57, -0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xd6e, -0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0, -0x6f0,0x6f0,0x6f0,0x6f0,0x570,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573, -0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x573,0x573,0x573,0x573, -0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0, -0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3, -0x576,0x576,0x6f3,0x6f3,0x6f3,0x6f3,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4,0xbf4, -0x6f9,0x6f9,0x579,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x57c,0x57c,0x579,0x579,0x57f,0x57f, -0x57f,0x57f,0x6f9,0x6f9,0x57f,0x57f,0x6fc,0x6f9,0x579,0x579,0x579,0x579,0x6f9,0x6f9,0x57f,0x57f, -0x6fc,0x6f9,0x579,0x579,0x579,0x579,0x6f9,0x6f9,0x6f6,0x579,0x57f,0x6f9,0x579,0x579,0x6f6,0x6f9, -0x6f9,0x6f9,0x57f,0x57f,0x579,0x579,0x579,0x579,0x579,0x579,0x579,0x579,0x579,0x579,0x579,0x579, -0x579,0x579,0x6f9,0x6f6,0x6f9,0x6f6,0x579,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,0x579,0x579,0x6f6, -0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xb04,0xbf7,0xbf7,0xbf7,0xbfa,0xbfa,0xc72,0xc72,0xbf7, -0x58b,0x58b,0x58b,0x58b,0x588,0x70b,0x70b,0x582,0x582,0x6ff,0x582,0x582,0x582,0x582,0x705,0x6ff, -0x582,0x588,0x582,0x582,0xd77,0xd77,0xbfd,0xbfd,0xdf8,0xb07,0x585,0x585,0x702,0x58e,0x702,0x585, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x588,0x582,0x588,0x588,0x582,0x582,0x588,0x582,0x582,0x582,0x588,0x582,0x582,0x582,0x588,0x588, -0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x588,0x58b,0x58b,0x585,0x582,0x582,0x582,0x582, -#if !U_PLATFORM_IS_DARWIN_BASED -0x705,0x582,0x705,0x582,0x582,0x582,0x582,0x582,0x7dd,0x7dd,0x7dd,0x7dd,0x7dd,0x7dd,0x7dd,0x7dd, -0x7dd,0x7dd,0x7dd,0x7dd,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582, -0x702,0x6ff,0x591,0x702,0x6f3,0x6f9,0x588,0x6f3,0x6fc,0x6f3,0x6f3,0x582,0x6f3,0x6ff,0x591,0x6ff, -0xace,0xace,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbca,0xbc7,0xbc7,0xdb3,0xe73, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x711,0x582,0x711,0x582,0x582,0x582,0x582,0x582,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb, -0x7fb,0x7fb,0x7fb,0x7fb,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582, -0x70e,0x70b,0x591,0x70e,0x6ff,0x705,0x588,0x6ff,0x708,0x6ff,0x6ff,0x582,0x6ff,0x70b,0x591,0x70b, -0xb07,0xb07,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc03,0xc00,0xc00,0xdef,0xeaf, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594, -#if !U_PLATFORM_IS_DARWIN_BASED -0x594,0x594,0x594,0x594,0x597,0x1383,0x1383,0x1383,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597, -0x14d3,0x59d,0x5a9,0x59d,0x59d,0x1383,0x597,0x597,0x5ac,0x5a9,0x1386,0x1386,0x5af,0x5af,0x597,0x5a3, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x594,0x594,0x594,0x594,0x597,0x13bf,0x13bf,0x13bf,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597, -0x150f,0x59d,0x5a9,0x59d,0x59d,0x13bf,0x597,0x597,0x5ac,0x5a9,0x13c2,0x13c2,0x5af,0x5af,0x597,0x5a3, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x597,0x597,0x5a3,0x597,0x5a3,0x597,0x5a3,0x597,0x597,0x597,0x597,0x597,0x597,0x5a3,0x597,0x597, -#if !U_PLATFORM_IS_DARWIN_BASED -0x597,0x597,0x597,0x597,0x1383,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x5a3, -0x5a3,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x70b,0x597,0x597,0x597,0x597,0x597,0x597, -0x5a3,0x597,0x597,0x5a3,0x597,0x597,0x597,0x597,0x1383,0x597,0x1383,0x597,0x597,0x597,0x597,0x1383, -0x1383,0x1383,0x597,0x1287,0x597,0x597,0x597,0x5a0,0x5a0,0x5a0,0x5a0,0x1305,0x1305,0x597,0x59a,0x5a6, -0x5ac,0x597,0x597,0x597,0xbd0,0xbcd,0xbd0,0xbcd,0xbd0,0xbcd,0xbd0,0xbcd,0xbd0,0xbcd,0xbd0,0xbcd, -0xbd0,0xbcd,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x597,0x5a3,0x597,0x597, -0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x1383,0x597,0x597,0x597, -0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x1383,0x5d0,0x5d0,0x5d0,0x5d0, -0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3, -0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d0,0x5d6,0x5c7,0x5ca,0x5d6,0x5d6,0x5d6,0x5d6, -0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6, -0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd,0x5cd, -0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0, -0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0, -0x5d3,0x5d9,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0, -0x5d3,0x5d9,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0,0x5d6,0x5d0,0x5d6,0x5d0, -0x5d6,0x5d0,0x5d6,0x5d0,0x5d6,0x5d0,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0, -0x5d3,0x5d9,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0,0x5d6,0x5d0, -0x5d3,0x5d9,0x5d6,0x5d0,0x5d3,0x5d9,0x5d6,0x5d0,0x5d6,0x5d0,0x1308,0x1308,0x1308,0x1308,0x1308,0x1308, -0x1308,0x1308,0x1308,0x1308,0x1308,0x1308,0x1308,0x1308,0x5d6,0x5d0,0x5d6,0x5d0,0x5d6,0x5d0,0x5d3,0x5d9, -0x5d3,0x5d9,0x5d6,0x5d0,0x5d6,0x5d0,0x5d6,0x5d0,0x5d6,0x5d0,0x5d6,0x5d0,0x5d6,0x5d0,0x5d6,0x5d0, -0x5d3,0x5d6,0x5d0,0x5d3,0x5d6,0x5d0,0x5d3,0x5d9,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0, -0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d3, -0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6, -0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0, -0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d3,0x5d3,0x5d0,0x5d3,0x5d0,0x5d3,0x5d0,0x5d0, -0x5d3,0x5d0,0x5d0,0x5d3,0x5d0,0x5d3,0x5d0,0x5d0,0x5d3,0x5d0,0x5d3,0x5d3,0x5d0,0x5d0,0x5d0,0x5d3, -0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d3,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0, -0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d3,0x5d3,0x5d0,0x5d0, -0x5d3,0x5d0,0x5d3,0x5d0,0x5d0,0x5d0,0x5d0,0x5d0,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3, -0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3, -0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d9,0x5d6,0x5d6,0x5d6,0x5d6, +0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282, +#if !U_PLATFORM_IS_DARWIN_BASED +0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x190b,0x29d,0x29d,0x29d, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x1941,0x29d,0x29d,0x29d, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x282,0x282,0x282,0x282, +0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282, +#if !U_PLATFORM_IS_DARWIN_BASED +0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x954,0x954,0xb1f,0xb1f,0xb1f,0xb1f, +0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f, +0xb1f,0xb1f,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x18f6,0x18f6,0x18f6,0x18f6, +0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x19da,0x19da,0x19da,0x19da,0x19da,0x288,0x288,0x288,0x288, +0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0xc78,0xc78,0xc78,0xc78, +0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0x12c0,0x12c0,0x12c0,0x28b,0x28b,0xeac,0xeac,0xeac,0xeac, +0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac, +0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x98a,0x98a,0xb55,0xb55,0xb55,0xb55, +0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55, +0xb55,0xb55,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x192c,0x192c,0x192c,0x192c, +0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x1a10,0x1a10,0x1a10,0x1a10,0x1a10,0x288,0x288,0x288,0x288, +0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0xcae,0xcae,0xcae,0xcae, +0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0x12f6,0x12f6,0x12f6,0x28b,0x28b,0xee2,0xee2,0xee2,0xee2, +0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2, +0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b, +#if !U_PLATFORM_IS_DARWIN_BASED +0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82, +0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0x28e, +0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85, +0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85, +0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0x291,0x291,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5, +0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x294,0x294,0x294, +0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef, +0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef, +0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x297,0x297,0x17b5,0x17b5,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a, +0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b, +0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x1131,0x396,0x396,0x3a2,0xcba,0x3a5,0x3a5,0x3a5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8, +0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0x28e, +0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb, +0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb, +0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0x291,0x291,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b, +0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x294,0x294,0x294, +0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425, +0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425, +0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x297,0x297,0x17eb,0x17eb,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a, +0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941, +0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1167,0x396,0x396,0x3a2,0xcf0,0x3a5,0x3a5,0x3a5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5, +0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a2,0x396,0x396,0x396,0x396,0x396,0x396,0x396, +#if !U_PLATFORM_IS_DARWIN_BASED +0x396,0x3a2,0x3a2,0x3a2,0x3a2,0x39c,0x1134,0x1317,0x3a5,0x921,0x924,0x399,0x399,0x1131,0x1314,0x1314, +0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a5,0x3a5,0x396,0x396,0x8ac,0x8af,0x93f,0x93f, +0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x39f,0xf93,0xf90,0x131a,0x131a,0x131a,0x131a,0x131a, +0x14df,0x1137,0x1137,0xee5,0xee5,0xdb3,0xee5,0xee5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x396,0x3a2,0x3a2,0x3a2,0x3a2,0x39c,0x116a,0x134d,0x3a5,0x957,0x95a,0x399,0x399,0x1167,0x134a,0x134a, +0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a5,0x3a5,0x396,0x396,0x8e2,0x8e5,0x975,0x975, +0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x39f,0xfc9,0xfc6,0x1350,0x1350,0x1350,0x1350,0x1350, +0x1515,0x116d,0x116d,0xf1b,0xf1b,0xde9,0xf1b,0xf1b,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x3a5,0x3a8,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a8,0x3a5,0x3a5,0x3a8,0x3a5,0x3a5,0x3a5, +#if !U_PLATFORM_IS_DARWIN_BASED +0x3a5,0x3a5,0x1314,0x1317,0x399,0x3a5,0x3a2,0x3a2,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447, +0x447,0x1320,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447, +0x447,0x447,0x1320,0x1887,0x1887,0xfb1,0x438,0x441,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483, +0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0xba0, +0xba0,0xdbf,0xdbf,0x8b2,0xdc2,0x1401,0x1401,0x1401,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x3a5,0x3a5,0x134a,0x134d,0x399,0x3a5,0x3a2,0x3a2,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447, +0x447,0x1356,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447, +0x447,0x447,0x1356,0x18bd,0x18bd,0xfe7,0x438,0x441,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483, +0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0x483,0xbd6, +0xbd6,0xdf5,0xdf5,0x8e8,0xdf8,0x1437,0x1437,0x1437,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486, +#if !U_PLATFORM_IS_DARWIN_BASED +0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x48c,0x48c,0x48c,0x114c,0x114c,0x114c,0x114c,0x114c, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x486,0x48c,0x48c,0x48c,0x1182,0x1182,0x1182,0x1182,0x1182, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489, +0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489, +#if !U_PLATFORM_IS_DARWIN_BASED +0x489,0x489,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x48f,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x489,0x489,0x117f,0x117f,0x117f,0x117f,0x117f,0x117f,0x48f,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c, +0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x48c,0x498,0x492,0x498,0x492, +0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492, +0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492,0x492,0x492, +#if !U_PLATFORM_IS_DARWIN_BASED +0x492,0x492,0x495,0x996,0xfe1,0xfe1,0xfe4,0xfe1,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x492,0x492,0x495,0x9cc,0x1017,0x1017,0x101a,0x1017,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492,0x498,0x492, +#if !U_PLATFORM_IS_DARWIN_BASED +0x498,0x492,0xfe4,0xfe1,0xfe4,0xfe1,0xfe4,0xfe1,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x498,0x492,0x101a,0x1017,0x101a,0x1017,0x101a,0x1017,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4, +#if !U_PLATFORM_IS_DARWIN_BASED +0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x687,0x687,0x68a,0x4c2,0x696,0x693,0x693,0x690, +0x4ec,0x4ec,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0xac8,0x699,0x4ce,0x6b1,0x6b4,0x4e3,0x699,0x4d1,0x4d1, +0x4c2,0x4dd,0x4dd,0x687,0x4e9,0x4e6,0x68d,0x4bc,0x4b3,0x4b3,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b9, +0x4b6,0x4b6,0x4b6,0x4ad,0x4f5,0x4f2,0x4ef,0x4ef,0x6a5,0x4d7,0x4d4,0x6a2,0x69f,0x69c,0x6ae,0x4c5, +0x6ab,0x6ab,0x4da,0x4dd,0x6a8,0x6a8,0x4da,0x4dd,0x4bf,0x4c2,0x4c2,0x4c2,0x4e0,0x4cb,0x4c8,0xbb5, +0xace,0xad1,0xacb,0xacb,0xacb,0xacb,0xbac,0xbac,0xbac,0xbac,0xbb2,0xce7,0xce4,0xdce,0xdd1,0xbaf, +0xdd1,0xdd1,0xdd1,0xdd1,0xdce,0xdd1,0xdd1,0xba9,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x516, +0x51c,0x735,0x519,0x999,0x9ba,0xad4,0xad4,0xad4,0xbbb,0xbbb,0xdd7,0xdd7,0xdd7,0xdd7,0x1155,0x1158, +0x1158,0x1335,0x14cd,0x14f7,0x14fa,0x14fa,0x170d,0x188a,0x528,0x528,0x540,0x6c3,0x525,0x6c0,0x528,0x53d, +0x525,0x6c3,0x537,0x540,0x540,0x540,0x537,0x537,0x540,0x540,0x540,0x6cc,0x525,0x540,0x6c6,0x525, +0x534,0x540,0x540,0x540,0x540,0x540,0x525,0x525,0x52b,0x6c0,0x6c9,0x525,0x540,0x525,0x6cf,0x525, +0x540,0x52e,0x546,0x6d2,0x540,0x540,0x531,0x537,0x540,0x540,0x543,0x540,0x537,0x53a,0x53a,0x53a, +0x53a,0xae0,0xadd,0xcea,0xde0,0xbd0,0xbd3,0xbd3,0xbcd,0xbca,0xbca,0xbca,0xbca,0xbd3,0xbd0,0xbd0, +0xbd0,0xbd0,0xbc7,0xbca,0xddd,0xef1,0xef4,0xfea,0x115b,0x115b,0x115b,0x6d8,0x6d5,0x549,0x54c,0x54c, +0x54c,0x54c,0x54c,0x6d5,0x6d8,0x6d8,0x6d5,0x54c,0x6de,0x6de,0x6de,0x6de,0x6de,0x6de,0x6de,0x6de, +0x6de,0x6de,0x6de,0x6de,0x555,0x555,0x555,0x555,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db, +0x6db,0x6db,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x693,0x693,0x696,0x4c2,0x6a2,0x69f,0x69f,0x69c, +0x4ec,0x4ec,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0xafe,0x6a5,0x4ce,0x6bd,0x6c0,0x4e3,0x6a5,0x4d1,0x4d1, +0x4c2,0x4dd,0x4dd,0x693,0x4e9,0x4e6,0x699,0x4bc,0x4b3,0x4b3,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b9, +0x4b6,0x4b6,0x4b6,0x4ad,0x4f5,0x4f2,0x4ef,0x4ef,0x6b1,0x4d7,0x4d4,0x6ae,0x6ab,0x6a8,0x6ba,0x4c5, +0x6b7,0x6b7,0x4da,0x4dd,0x6b4,0x6b4,0x4da,0x4dd,0x4bf,0x4c2,0x4c2,0x4c2,0x4e0,0x4cb,0x4c8,0xbeb, +0xb04,0xb07,0xb01,0xb01,0xb01,0xb01,0xbe2,0xbe2,0xbe2,0xbe2,0xbe8,0xd1d,0xd1a,0xe04,0xe07,0xbe5, +0xe07,0xe07,0xe07,0xe07,0xe04,0xe07,0xe07,0xbdf,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x516, +0x51c,0x747,0x519,0x9cf,0x9f0,0xb0a,0xb0a,0xb0a,0xbf1,0xbf1,0xe0d,0xe0d,0xe0d,0xe0d,0x118b,0x118e, +0x118e,0x136b,0x1503,0x152d,0x1530,0x1530,0x1743,0x18c0,0x528,0x528,0x540,0x6cf,0x525,0x6cc,0x528,0x53d, +0x525,0x6cf,0x537,0x540,0x540,0x540,0x537,0x537,0x540,0x540,0x540,0x6d8,0x525,0x540,0x6d2,0x525, +0x534,0x540,0x540,0x540,0x540,0x540,0x525,0x525,0x52b,0x6cc,0x6d5,0x525,0x540,0x525,0x6db,0x525, +0x540,0x52e,0x546,0x6de,0x540,0x540,0x531,0x537,0x540,0x540,0x543,0x540,0x537,0x53a,0x53a,0x53a, +0x53a,0xb16,0xb13,0xd20,0xe16,0xc06,0xc09,0xc09,0xc03,0xc00,0xc00,0xc00,0xc00,0xc09,0xc06,0xc06, +0xc06,0xc06,0xbfd,0xc00,0xe13,0xf27,0xf2a,0x1020,0x1191,0x1191,0x1191,0x6e4,0x6e1,0x549,0x54c,0x54c, +0x54c,0x54c,0x54c,0x6e1,0x6e4,0x6e4,0x6e1,0x54c,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea, +0x6ea,0x6ea,0x6ea,0x6ea,0x555,0x555,0x555,0x555,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7, +0x6e7,0x6e7,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x558,0x561,0x561,0x55b,0x55b,0x55b,0x55e,0x558,0x55b,0x55b,0x558,0x558,0x558,0x558,0x55b,0x55b, +#if !U_PLATFORM_IS_DARWIN_BASED +0x6e1,0x6e1,0x558,0x558,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b, +0x55b,0x55e,0x55e,0x55e,0x55b,0x55b,0x6e4,0x55b,0x6e4,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b, +0x558,0x55b,0x558,0x558,0x558,0x558,0x558,0x558,0x55b,0x55b,0x558,0x6e1,0x558,0x558,0x558,0xae6, +0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xbd6,0xbd6,0xbd6,0xbd6,0xbd6,0xbd6,0xbd6,0xbd6, +0xbd6,0xbd6,0xbd6,0xbd6,0x6ea,0x564,0x6ea,0x6ea,0x567,0x564,0x564,0x6ea,0x6ea,0x567,0x564,0x6ea, +0x567,0x564,0x564,0x6ea,0x564,0x6ea,0x573,0x570,0x564,0x6ea,0x564,0x564,0x564,0x564,0x6ea,0x564, +0x564,0x6ea,0x6ea,0x6ea,0x6ea,0x564,0x564,0x6ea,0x567,0x6ea,0x567,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea, +0x6f0,0x56a,0x6ea,0x56a,0x56a,0x564,0x564,0x564,0x6ea,0x6ea,0x6ea,0x6ea,0x564,0x564,0x564,0x564, +0x6ea,0x6ea,0x564,0x564,0x564,0x567,0x564,0x564,0x567,0x564,0x564,0x567,0x6ea,0x567,0x564,0x564, +0x6ea,0x564,0x564,0x564,0x564,0x564,0x6ea,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564, +0x564,0x564,0x564,0x564,0x6ed,0x6ea,0x567,0x564,0x6ea,0x6ea,0x6ea,0x6ea,0x564,0x564,0x6ea,0x6ea, +0x564,0x567,0x6ed,0x6ed,0x567,0x567,0x564,0x564,0x567,0x567,0x564,0x564,0x567,0x567,0x564,0x564, +0x564,0x564,0x564,0x564,0x567,0x567,0x6ea,0x6ea,0x567,0x567,0x6ea,0x6ea,0x567,0x567,0x564,0x564, +0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x6ea,0x564,0x564,0x564,0x6ea,0x564,0x564, +0x564,0x564,0x564,0x564,0x564,0x6ea,0x564,0x564,0x564,0x564,0x564,0x564,0x567,0x567,0x567,0x567, +0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x6ea, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x6ed,0x6ed,0x558,0x558,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b, +0x55b,0x55e,0x55e,0x55e,0x55b,0x55b,0x6f0,0x55b,0x6f0,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b, +0x558,0x55b,0x558,0x558,0x558,0x558,0x558,0x558,0x55b,0x55b,0x558,0x6ed,0x558,0x558,0x558,0xb1c, +0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c, +0xc0c,0xc0c,0xc0c,0xc0c,0x6f6,0x564,0x6f6,0x6f6,0x567,0x564,0x564,0x6f6,0x6f6,0x567,0x564,0x6f6, +0x567,0x564,0x564,0x6f6,0x564,0x6f6,0x573,0x570,0x564,0x6f6,0x564,0x564,0x564,0x564,0x6f6,0x564, +0x564,0x6f6,0x6f6,0x6f6,0x6f6,0x564,0x564,0x6f6,0x567,0x6f6,0x567,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6, +0x6fc,0x56a,0x6f6,0x56a,0x56a,0x564,0x564,0x564,0x6f6,0x6f6,0x6f6,0x6f6,0x564,0x564,0x564,0x564, +0x6f6,0x6f6,0x564,0x564,0x564,0x567,0x564,0x564,0x567,0x564,0x564,0x567,0x6f6,0x567,0x564,0x564, +0x6f6,0x564,0x564,0x564,0x564,0x564,0x6f6,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564, +0x564,0x564,0x564,0x564,0x6f9,0x6f6,0x567,0x564,0x6f6,0x6f6,0x6f6,0x6f6,0x564,0x564,0x6f6,0x6f6, +0x564,0x567,0x6f9,0x6f9,0x567,0x567,0x564,0x564,0x567,0x567,0x564,0x564,0x567,0x567,0x564,0x564, +0x564,0x564,0x564,0x564,0x567,0x567,0x6f6,0x6f6,0x567,0x567,0x6f6,0x6f6,0x567,0x567,0x564,0x564, +0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x6f6,0x564,0x564,0x564,0x6f6,0x564,0x564, +0x564,0x564,0x564,0x564,0x564,0x6f6,0x564,0x564,0x564,0x564,0x564,0x564,0x567,0x567,0x567,0x567, +0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x6f6, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564, +0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564, +0x567,0x567,0x567,0x567,0x564,0x564,0x564,0x564,0x564,0x564,0x567,0x567,0x567,0x567,0x564,0x56d, +#if !U_PLATFORM_IS_DARWIN_BASED +0x564,0x564,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9, +0x576,0xae9,0x576,0x576,0x576,0x576,0x576,0x576,0x582,0x57f,0x582,0x57f,0x576,0x576,0x576,0x576, +0x576,0x576,0x6f3,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x7f8,0x7f8,0x576,0x576,0x576,0x576, +0x57c,0x57c,0x576,0x576,0x576,0x576,0x576,0x576,0x579,0x7fe,0x7fb,0x576,0x576,0x576,0x576,0x576, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x564,0x564,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f, +0x576,0xb1f,0x576,0x576,0x576,0x576,0x576,0x576,0x582,0x57f,0x582,0x57f,0x576,0x576,0x576,0x576, +0x576,0x576,0x6ff,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x816,0x816,0x576,0x576,0x576,0x576, +0x57c,0x57c,0x576,0x576,0x576,0x576,0x576,0x576,0x579,0x81c,0x819,0x576,0x576,0x576,0x576,0x576, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576, +#if !U_PLATFORM_IS_DARWIN_BASED +0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0xae9, +0xbdf,0xae9,0xae9,0xae9,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0x576,0xb1f, +0xc15,0xb1f,0xb1f,0xb1f,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585, +#if !U_PLATFORM_IS_DARWIN_BASED +0x585,0x585,0x585,0x585,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x58b,0xc48, +0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48,0xc48, +0xc48,0xc48,0xc48,0xd62,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705, +0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x58e,0x591,0x591,0x591,0x591,0x591,0x591,0x591, +0x591,0x591,0x591,0x591,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705, +0x591,0x591,0x591,0x591,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705, +0x705,0x705,0x705,0x705,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708, +0x708,0x708,0x708,0x708,0x594,0x594,0x708,0x708,0x708,0x708,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2, +0xbe2,0xbe2,0xbe2,0xbe2,0x70e,0x70e,0x597,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x59a,0x59a, +0x597,0x597,0x59d,0x59d,0x59d,0x59d,0x70e,0x70e,0x59d,0x59d,0x711,0x70e,0x597,0x597,0x597,0x597, +0x70e,0x70e,0x59d,0x59d,0x711,0x70e,0x597,0x597,0x597,0x597,0x70e,0x70e,0x70b,0x597,0x59d,0x70e, +0x597,0x597,0x70b,0x70e,0x70e,0x70e,0x59d,0x59d,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597, +0x597,0x597,0x597,0x597,0x597,0x597,0x70e,0x70b,0x70e,0x70b,0x597,0x59d,0x59d,0x59d,0x59d,0x59d, +0x59d,0x597,0x597,0x70b,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xbe5,0xbe5,0xbe5,0xbe8, +0xbe8,0xc63,0xc63,0xbe5,0x5ac,0x5ac,0x5ac,0x5ac,0x5a9,0x723,0x720,0x5a3,0x5a3,0x714,0x5a3,0x5a3, +0x5a3,0x5a3,0x71a,0x714,0x5a3,0x5a9,0x5a3,0x5a0,0xd6b,0xd6b,0xbee,0xbee,0xdec,0xaf5,0x5a6,0x5a6, +0x717,0x5af,0x717,0x5a6,0x5a9,0x5a3,0x5a9,0x5a9,0x5a3,0x5a3,0x5a9,0x5a3,0x5a3,0x5a3,0x5a9,0x5a3, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x585,0x585,0x585,0x585,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x58b,0xc7e, +0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e,0xc7e, +0xc7e,0xc7e,0xc7e,0xd98,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711, +0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x58e,0x591,0x591,0x591,0x591,0x591,0x591,0x591, +0x591,0x591,0x591,0x591,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711, +0x591,0x591,0x591,0x591,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711, +0x711,0x711,0x711,0x711,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714, +0x714,0x714,0x714,0x714,0x594,0x594,0x714,0x714,0x714,0x714,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18, +0xc18,0xc18,0xc18,0xc18,0x71a,0x71a,0x597,0x717,0x717,0x717,0x717,0x717,0x717,0x717,0x59a,0x59a, +0x597,0x597,0x59d,0x59d,0x59d,0x59d,0x71a,0x71a,0x59d,0x59d,0x71d,0x71a,0x597,0x597,0x597,0x597, +0x71a,0x71a,0x59d,0x59d,0x71d,0x71a,0x597,0x597,0x597,0x597,0x71a,0x71a,0x717,0x597,0x59d,0x71a, +0x597,0x597,0x717,0x71a,0x71a,0x71a,0x59d,0x59d,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597, +0x597,0x597,0x597,0x597,0x597,0x597,0x71a,0x717,0x71a,0x717,0x597,0x59d,0x59d,0x59d,0x59d,0x59d, +0x59d,0x597,0x597,0x717,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xc1b,0xc1b,0xc1b,0xc1e, +0xc1e,0xc99,0xc99,0xc1b,0x5ac,0x5ac,0x5ac,0x5ac,0x5a9,0x72f,0x72c,0x5a3,0x5a3,0x720,0x5a3,0x5a3, +0x5a3,0x5a3,0x726,0x720,0x5a3,0x5a9,0x5a3,0x5a0,0xda1,0xda1,0xc24,0xc24,0xe22,0xb2b,0x5a6,0x5a6, +0x723,0x5af,0x723,0x5a6,0x5a9,0x5a3,0x5a9,0x5a9,0x5a3,0x5a3,0x5a9,0x5a3,0x5a3,0x5a3,0x5a9,0x5a3, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x5a3,0x5a3,0x5a9,0x5a9,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a9,0x5ac,0x5ac,0x5a6, +#if !U_PLATFORM_IS_DARWIN_BASED +0x5a3,0x5a3,0x5a3,0x5a3,0x726,0x5a3,0x726,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x801,0x801,0x801,0x801, +0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3, +0x5a3,0x5a3,0x5a3,0x5a9,0x726,0x723,0x5b2,0x726,0x714,0x71a,0x5a9,0x714,0x71d,0x714,0x714,0x5a3, +0x714,0x723,0x5b2,0x723,0xaf5,0xaf5,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf4, +0xbf1,0xbf1,0xde9,0xea3,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5, +0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b8,0x13bf,0x13bf,0x13bf,0x5b8,0x5b8,0x5b8,0x5b8, +0x5b8,0x5b8,0x5b8,0x5b8,0x1503,0x5c4,0x5cd,0x5c4,0x5c4,0x13bf,0x5b8,0x5b8,0x5cd,0x5cd,0x13c2,0x13c2, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x5a3,0x5a3,0x5a3,0x5a3,0x732,0x5a3,0x732,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x81f,0x81f,0x81f,0x81f, +0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3, +0x5a3,0x5a3,0x5a3,0x5a9,0x732,0x72f,0x5b2,0x732,0x720,0x726,0x5a9,0x720,0x729,0x720,0x720,0x5a3, +0x720,0x72f,0x5b2,0x72f,0xb2b,0xb2b,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc2a, +0xc27,0xc27,0xe1f,0xed9,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5, +0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b8,0x13f5,0x13f5,0x13f5,0x5b8,0x5b8,0x5b8,0x5b8, +0x5b8,0x5b8,0x5b8,0x5b8,0x1539,0x5c4,0x5cd,0x5c4,0x5c4,0x13f5,0x5b8,0x5b8,0x5cd,0x5cd,0x13f8,0x13f8, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x5d0,0x5d0,0x5c1,0x5c7,0x5c1,0x5c1,0x5c7,0x5b8,0x5c7,0x5b8,0x5c7,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8, +#if !U_PLATFORM_IS_DARWIN_BASED +0x5b8,0x5c7,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x13bf,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8, +0x5b8,0x5b8,0x5b8,0x5c7,0x5c7,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x72c,0x5b8,0x5b8, +0x5b8,0x5b8,0x5b8,0x5b8,0x5c7,0x5b8,0x5b8,0x5c7,0x5b8,0x5b8,0x5b8,0x5b8,0x13bf,0x5b8,0x13bf,0x5b8, +0x5b8,0x5b8,0x5b8,0x13bf,0x13bf,0x13bf,0x5b8,0x12ba,0x5b8,0x5b8,0x5b8,0x5be,0x5be,0x5be,0x5be,0x1341, +0x1341,0x5b8,0x5bb,0x5ca,0x5cd,0x5c1,0x5c1,0x5c1,0xbfa,0xbf7,0xbfa,0xbf7,0xbfa,0xbf7,0xbfa,0xbf7, +0xbfa,0xbf7,0xbfa,0xbf7,0xbfa,0xbf7,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x5b8,0x5c7,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x13f5,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8, +0x5b8,0x5b8,0x5b8,0x5c7,0x5c7,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x738,0x5b8,0x5b8, +0x5b8,0x5b8,0x5b8,0x5b8,0x5c7,0x5b8,0x5b8,0x5c7,0x5b8,0x5b8,0x5b8,0x5b8,0x13f5,0x5b8,0x13f5,0x5b8, +0x5b8,0x5b8,0x5b8,0x13f5,0x13f5,0x13f5,0x5b8,0x12f0,0x5b8,0x5b8,0x5b8,0x5be,0x5be,0x5be,0x5be,0x1377, +0x1377,0x5b8,0x5bb,0x5ca,0x5cd,0x5c1,0x5c1,0x5c1,0xc30,0xc2d,0xc30,0xc2d,0xc30,0xc2d,0xc30,0xc2d, +0xc30,0xc2d,0xc30,0xc2d,0xc30,0xc2d,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x5b8,0x5c7,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8, +#if !U_PLATFORM_IS_DARWIN_BASED +0x13bf,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x13bf, +0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f4,0x5f4,0x5f4, +0x5f4,0x5f4,0x5f4,0x5f4,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5f1,0x5f7,0x5e8,0x5eb, +0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7, +0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5ee,0x5ee, +0x5ee,0x5ee,0x5ee,0x5ee,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1, +0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1, +0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1, +0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1, +0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1, +0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f7,0x5f1,0x5f4,0x5fa, +0x5f7,0x5f1,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f7,0x5f1,0x1344,0x1344, +0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x5f7,0x5f1,0x5f7,0x5f1, +0x5f7,0x5f1,0x5f4,0x5fa,0x5f4,0x5fa,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1, +0x5f7,0x5f1,0x5f7,0x5f1,0x5f4,0x5f7,0x5f1,0x5f4,0x5f7,0x5f1,0x5f4,0x5fa,0x5f1,0x5f1,0x5f1,0x5f1, +0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1, +0x5f1,0x5f1,0x5f1,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f7,0x5f7,0x5f7,0x5f7, +0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f1,0x5f1,0x5f1, +0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f4,0x5f4,0x5f1,0x5f4, +0x5f1,0x5f4,0x5f1,0x5f1,0x5f4,0x5f1,0x5f1,0x5f4,0x5f1,0x5f4,0x5f1,0x5f1,0x5f4,0x5f1,0x5f4,0x5f4, +0x5f1,0x5f1,0x5f1,0x5f4,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f4,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1, +0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1, +0x5f4,0x5f4,0x5f1,0x5f1,0x5f4,0x5f1,0x5f4,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f4,0x5f4,0x5f4,0x5f4, +0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4, +0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5f4,0x5fa, +0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7, +0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7, +0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa, +0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7, +0x5fd,0x5fd,0x5fd,0x5fd,0xff6,0xff6,0xff6,0x1506,0x1506,0x1506,0x1506,0x1506,0x1506,0x1506,0x1713,0x1713, +0x85e,0x864,0x864,0x870,0x870,0x861,0x858,0x861,0x858,0x861,0x858,0x861,0x858,0x861,0x858,0x861, +0x60c,0x60c,0x606,0x60c,0x606,0x60c,0x606,0x60c,0x606,0x60c,0x606,0x609,0x60f,0x60c,0x606,0x60c, +0x606,0x609,0x60f,0x60c,0x606,0x60c,0x606,0x609,0x60f,0x60c,0x606,0x609,0x60f,0x60c,0x606,0x609, +0x60f,0x60c,0x606,0x60c,0x606,0x60c,0x606,0x60c,0x606,0x60c,0x606,0x609,0x60f,0x60c,0x606,0x609, +0x60f,0x60c,0x606,0x609,0x60f,0x60c,0x606,0x609,0x60f,0x60c,0x606,0x609,0x60f,0x60c,0x606,0x609, +0x60f,0x60c,0x606,0x609,0x60f,0x60c,0x606,0x609,0x60f,0x60c,0x606,0x609,0x6f9,0x6f9,0x6f9,0x6f9, +0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9, +0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6, +0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6, +0x6f6,0x6f6,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x702,0x6ff, +0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6ff,0x6fc,0x6fc,0x6fc,0x6fc, +0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x705,0x705,0x705,0x705, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x13f5,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x13f5, +0x873,0x873,0x5dc,0x5d6,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3, +0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5d3,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5d3, +0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741, +0x741,0x741,0x741,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6, 0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6, -0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d9,0x5d9,0x5d9,0x5d9, -0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9, -0x5d9,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5dc,0x5dc,0x5dc,0x5dc, -0xfc6,0xfc6,0xfc6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x16e3,0x16e3,0x831,0x837,0x837,0x843, -0x843,0x834,0x82b,0x834,0x82b,0x834,0x82b,0x834,0x82b,0x834,0x82b,0x834,0x5eb,0x5eb,0x5e5,0x5eb, -0x5e5,0x5eb,0x5e5,0x5eb,0x5e5,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb, -0x5e5,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5eb, -0x5e5,0x5eb,0x5e5,0x5eb,0x5e5,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5e8, -0x5ee,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5e8, -0x5ee,0x5eb,0x5e5,0x5e8,0x5ee,0x5eb,0x5e5,0x5e8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8, -0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d5,0x6d5,0x6d5,0x6d5, -0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, -0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6de,0x6de, -0x6de,0x6de,0x6de,0x6de,0x6de,0x6de,0x6de,0x6de,0x6de,0x6de,0x6e1,0x6de,0x6de,0x6de,0x6de,0x6de, -0x6de,0x6de,0x6de,0x6de,0x6de,0x6de,0x6de,0x6de,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db, -0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x597,0x597,0x597,0x597,0x13bf,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x5a3, -0x5a3,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x717,0x597,0x597,0x597,0x597,0x597,0x597, -0x5a3,0x597,0x597,0x5a3,0x597,0x597,0x597,0x597,0x13bf,0x597,0x13bf,0x597,0x597,0x597,0x597,0x13bf, -0x13bf,0x13bf,0x597,0x12c3,0x597,0x597,0x597,0x5a0,0x5a0,0x5a0,0x5a0,0x1341,0x1341,0x597,0x59a,0x5a6, -0x5ac,0x597,0x597,0x597,0xc09,0xc06,0xc09,0xc06,0xc09,0xc06,0xc09,0xc06,0xc09,0xc06,0xc09,0xc06, -0xc09,0xc06,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x597,0x5a3,0x597,0x597, -0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x13bf,0x597,0x597,0x597, -0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x13bf,0x846,0x846,0x5bb,0x5b5, -0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2, -0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5bb,0x5bb,0x5bb,0x5bb,0x5bb,0x5b2,0x720,0x720,0x720,0x720, -0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x5b5, -0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5, -0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5, -0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a, -0x744,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x858, -0x858,0x858,0x858,0x858,0x858,0x858,0x858,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5, -0x5b8,0x846,0x855,0x855,0x855,0x855,0x855,0x855,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846, -0x846,0x846,0x846,0x846,0x84c,0x84c,0x84c,0x73e,0x858,0x849,0x84f,0x843,0x744,0x852,0x741,0x73b, -0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5df,0x5df,0x5df, -0x5df,0x5df,0x5df,0x5df,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5dc,0x5e2,0x5d3,0x5d6, -0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2, -0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5d9,0x5d9, -0x5d9,0x5d9,0x5d9,0x5d9,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc, -0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc, -0x5df,0x5e5,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc, -0x5df,0x5e5,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc, -0x5e2,0x5dc,0x5e2,0x5dc,0x5e2,0x5dc,0x5e2,0x5dc,0x5e2,0x5dc,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc, -0x5df,0x5e5,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc,0x5e2,0x5dc,0x5df,0x5e5, -0x5e2,0x5dc,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc,0x5df,0x5e5,0x5e2,0x5dc,0x5e2,0x5dc,0x1344,0x1344, -0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x5e2,0x5dc,0x5e2,0x5dc, -0x5e2,0x5dc,0x5df,0x5e5,0x5df,0x5e5,0x5e2,0x5dc,0x5e2,0x5dc,0x5e2,0x5dc,0x5e2,0x5dc,0x5e2,0x5dc, -0x5e2,0x5dc,0x5e2,0x5dc,0x5df,0x5e2,0x5dc,0x5df,0x5e2,0x5dc,0x5df,0x5e5,0x5dc,0x5dc,0x5dc,0x5dc, -0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc, -0x5dc,0x5dc,0x5dc,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5e2,0x5e2,0x5e2,0x5e2, -0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5dc,0x5dc,0x5dc, -0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5df,0x5df,0x5dc,0x5df, -0x5dc,0x5df,0x5dc,0x5dc,0x5df,0x5dc,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5dc,0x5df,0x5dc,0x5df,0x5df, -0x5dc,0x5dc,0x5dc,0x5df,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5df,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc, -0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc, -0x5df,0x5df,0x5dc,0x5dc,0x5df,0x5dc,0x5df,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5df,0x5df,0x5df,0x5df, -0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df, -0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5e5, -0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2, -0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2, -0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e5, -0x5e5,0x5e5,0x5e5,0x5e5,0x5e5,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2,0x5e2, -0x5e8,0x5e8,0x5e8,0x5e8,0x1002,0x1002,0x1002,0x1512,0x1512,0x1512,0x1512,0x1512,0x1512,0x1512,0x171f,0x171f, -0x867,0x86d,0x86d,0x879,0x879,0x86a,0x861,0x86a,0x861,0x86a,0x861,0x86a,0x861,0x86a,0x861,0x86a, -0x5f7,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f7, -0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4, -0x5fa,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4, -0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4, -0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x5fa,0x5f7,0x5f1,0x5f4,0x6e4,0x6e4,0x6e4,0x6e4, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4, -#if !U_PLATFORM_IS_DARWIN_BASED -0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x6e4,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e, -0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e, -0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0xc24,0x897,0x891,0x88e,0x894,0x88b,0x723,0x726, -0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x89d,0x723,0x723,0x723,0x723,0x723,0x723,0x723, -0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723, -0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x89a,0x89a,0x72c,0x768,0x768,0x768, -0x768,0x768,0x768,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x762, -0x762,0x762,0x762,0x762,0x762,0x762,0x762,0x72f,0x74a,0x729,0x750,0x753,0x74d,0x765,0x765,0x765, -0x765,0x765,0x765,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f, -0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x72f,0x74a,0x729,0x74a,0xc27,0x7ce,0x7ce,0x7ce,0x7ce, -0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce, -0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x1281,0x1281, -0x1281,0x1281,0x1281,0x7d1,0x8a0,0x8b8,0x8bb,0x8c1,0x8a3,0x7e3,0x8d6,0x7e0,0x8af,0x8a9,0x8af,0x8a9, -0x8b5,0x8b2,0x8b5,0x8b2,0x8af,0x8a9,0x8ac,0x8c1,0x8af,0x8a9,0x8af,0x8a9,0x8af,0x8a9,0x8af,0x8a9, -0x8c4,0x8cd,0x8ca,0x8ca,0x8ac,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x90c,0x90c, -0x90c,0x90c,0x7e6,0x7e6,0x8c7,0x8d3,0x8d3,0x8d3,0x8d3,0x8d0,0x8a6,0x8be,0xaf2,0xaf2,0xaf2,0xc39, -0xc57,0xc54,0xb0d,0x888,0x7ec,0x7e9,0x7ec,0x7ef,0x7e9,0x7ec,0x7e9,0x7ec,0x7e9,0x7ec,0x7e9,0x7e9, -0x7e9,0x7e9,0x7e9,0x7e9,0x7ec,0x7ec,0x7e9,0x7ec,0x7ec,0x7e9,0x7ec,0x7ec,0x7e9,0x7ec,0x7ec,0x7e9, -0x7ec,0x7ec,0x7e9,0x7e9,0xc5a,0x7fe,0x7f8,0x7fe,0x7f8,0x7fe,0x7f8,0x7fe,0x7f8,0x7fe,0x7f8,0x7f8, -0x7fb,0x7f8,0x7fb,0x7f8,0x7fb,0x7f8,0x7fb,0x7f8,0x7fb,0x7f8,0x7fb,0x7f8,0x7fb,0x7f8,0x7fb,0x7f8, -0x7fb,0x7f8,0x7fb,0x7f8,0x7fb,0x7f8,0x7fb,0x7fe,0x7f8,0x7fb,0x7f8,0x7fb,0x7f8,0x7fb,0x7f8,0x7f8, -0x7f8,0x7f8,0x7f8,0x7f8,0x7fb,0x7fb,0x7f8,0x7fb,0x7fb,0x7f8,0x7fb,0x7fb,0x7f8,0x7fb,0x7fb,0x7f8, -0x7fb,0x7fb,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7fe,0x7f8,0x7fe,0x7f8,0x7fe,0x7f8,0x7f8,0x7f8,0x7f8, -0x7f8,0x7f8,0x7fe,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7fb,0x7fe,0x7fe,0x7fb,0x7fb,0x7fb,0x7fb,0x8dc, -0x8df,0x801,0x804,0xc42,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a, -0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a, -0x80a,0x80a,0x80a,0x80a,0x80d,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a, -0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a, -0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816, -0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0xd44,0xd44,0xe76,0x810, -0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0xd3e,0xd3e,0xd3e,0xd3e, -0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819, -0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1, -0x8f1,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0xd47,0xd47,0xd47,0xd47,0x8f4,0x8f4,0x8f4,0x8f4,0x8f4, -0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c, -0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c, -0x81c,0x81c,0xd47,0xd47,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f, -0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f, -0x81f,0x81f,0x81f,0x81f,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x822,0x822,0x822,0x822, -0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822, -0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0x822,0xe79,0xe79, -0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79, -0xe79,0xe79,0xe79,0xe79,0x10e9,0x10e9,0x10e9,0x10e9,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825, -0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825, -0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x828,0x828,0x825,0x828,0x825,0x828, -0x828,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x825,0x828,0x825,0x828,0x825,0x828, -0x828,0x825,0x825,0x828,0x828,0x828,0x825,0x825,0x825,0x825,0x148b,0x148b,0xc4b,0xc4b,0xc4b,0xc4b, -0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0x8e8,0x8e8,0x8e8,0x8e8, -0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8, -0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x12bd,0x12bd,0x12bd,0x12bd, -0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0xd3e,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45, -0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb, -0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8ee, -0x8eb,0x8ee,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb, -0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45, -0xc45,0xc45,0xc45,0xc45,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1, -0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1, -0x8f1,0x8f1,0x8f1,0xd47,0x96f,0x951,0x951,0x951,0x951,0x94b,0x951,0x951,0x963,0x951,0x951,0x94e, -0x95a,0x960,0x960,0x960,0x960,0x960,0x963,0x94b,0x957,0x94b,0x94b,0x94b,0x942,0x942,0x94b,0x94b, -0x94b,0x94b,0x94b,0x94b,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x94b,0x94b, -0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94b,0x94e,0x942,0x94b,0x942,0x94b,0x942,0x95d,0x954, -0x95d,0x954,0x96c,0x96c,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, -0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, -0x97b,0x97b,0x97b,0x97b,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e, -0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e, -0x97e,0x97e,0x97e,0x97e,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, -0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, -0x981,0x981,0x981,0x981,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a, -0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a, -0x98a,0x98a,0x984,0x984,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d, -0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d, -0x98d,0x98d,0x987,0x987,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a, -0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a, -0x98a,0x98a,0x98a,0x98a,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d, -0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d,0x98d, -0x98d,0x98d,0x98d,0x98d,0x990,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993, -0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993, -0x990,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993, -0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0x993,0xa20,0xa20,0xfab,0xa20, -0xa20,0xa20,0xa23,0xa20,0xfab,0xa20,0xa20,0xfa2,0xa1a,0xa0e,0xa0e,0xa0e,0xa0e,0xa1d,0xa0e,0xf90, -0xf90,0xf90,0xa0e,0xa11,0xa1a,0xa14,0xf96,0xfa5,0xfa5,0xf90,0xf90,0xfab,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xa26,0xa26,0xa17,0xa17,0xa17,0xa17,0xa20,0xa20,0xa20,0xa20, -0xa20,0xa20,0xa1d,0xa1d,0xa0e,0xa0e,0xfab,0xfab,0xfab,0xfab,0xf90,0xf90,0xa20,0xa20,0xa20,0xa20, -0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20, -0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa35,0xa35,0xa35,0xa35, -0xa35,0xa35,0xa35,0xd98,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35, -0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35, -0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xd98,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35, -0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa35,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b, -0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b, -0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41, -0xa41,0xa41,0xa41,0xa41,0xa41,0xa3e,0xa44,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0x1122, -0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x111f,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41, -0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41, -0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa56,0xa56,0xa56,0xa56, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1, -0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1, -0x6e1,0x6e1,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ed,0x6ea, -0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6e7,0x6e7,0x6e7,0x6e7, -0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6e7,0x6f0,0x6f0,0x6f0,0x6f0, -0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0, -0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x71a,0x71a,0x71a,0x71a, -0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71a,0x71d,0x71d,0x71d,0x71d, -0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x720,0x720,0x720,0x720, -0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720, -0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0xc60,0x8cd,0x8c7,0x8c4, -0x8ca,0x8c1,0x735,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x8d3,0x735,0x735,0x735, -0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735, -0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x8d0,0x8d0, -0x74a,0x786,0x786,0x786,0x786,0x786,0x786,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780, -0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x74d,0x768,0x747,0x76e,0x771, -0x76b,0x783,0x783,0x783,0x783,0x783,0x783,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d, -0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x74d,0x768,0x747,0x768,0xc63, -0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec, -0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec, -0x7ec,0x7ec,0x12bd,0x12bd,0x12bd,0x12bd,0x12bd,0x7ef,0x8d6,0x8ee,0x8f1,0x8f7,0x8d9,0x801,0x90c,0x7fe, -0x8e5,0x8df,0x8e5,0x8df,0x8eb,0x8e8,0x8eb,0x8e8,0x8e5,0x8df,0x8e2,0x8f7,0x8e5,0x8df,0x8e5,0x8df, -0x8e5,0x8df,0x8e5,0x8df,0x8fa,0x903,0x900,0x900,0x8e2,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe, -0x7fe,0x7fe,0x942,0x942,0x942,0x942,0x804,0x804,0x8fd,0x909,0x909,0x909,0x909,0x906,0x8dc,0x8f4, -0xb2b,0xb2b,0xb2b,0xc75,0xc93,0xc90,0xb46,0x8be,0x80a,0x807,0x80a,0x80d,0x807,0x80a,0x807,0x80a, -0x807,0x80a,0x807,0x807,0x807,0x807,0x807,0x807,0x80a,0x80a,0x807,0x80a,0x80a,0x807,0x80a,0x80a, -0x807,0x80a,0x80a,0x807,0x80a,0x80a,0x807,0x807,0xc96,0x81c,0x816,0x81c,0x816,0x81c,0x816,0x81c, -0x816,0x81c,0x816,0x816,0x819,0x816,0x819,0x816,0x819,0x816,0x819,0x816,0x819,0x816,0x819,0x816, -0x819,0x816,0x819,0x816,0x819,0x816,0x819,0x816,0x819,0x816,0x819,0x81c,0x816,0x819,0x816,0x819, +0x5d6,0x5d6,0x5d6,0x5d6,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b, +0x73b,0x73b,0x73b,0x73b,0x768,0x885,0x885,0x885,0x885,0x885,0x885,0x885,0x885,0x885,0x885,0x885, +0x885,0x885,0x885,0x885,0x885,0x885,0x885,0x885,0x885,0x885,0x885,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6, +0x5d6,0x5d6,0x5d6,0x5d6,0x5d9,0x873,0x882,0x882,0x882,0x882,0x882,0x882,0x873,0x873,0x873,0x873, +0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x879,0x879,0x879,0x762,0x885,0x876,0x87c,0x870, +0x768,0x87f,0x765,0x75f,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd, +0x5fd,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606, +0x5fd,0x603,0x5f4,0x5f7,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603, +0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603, +0x603,0x603,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd, +0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd, +0x5fd,0x5fd,0x5fd,0x5fd,0x600,0x606,0x603,0x5fd,0x600,0x606,0x603,0x5fd,0x600,0x606,0x603,0x5fd, +0x600,0x606,0x603,0x5fd,0x600,0x606,0x603,0x5fd,0x600,0x606,0x603,0x5fd,0x600,0x606,0x603,0x5fd, +0x600,0x606,0x603,0x5fd,0x603,0x5fd,0x603,0x5fd,0x603,0x5fd,0x603,0x5fd,0x603,0x5fd,0x603,0x5fd, +0x600,0x606,0x603,0x5fd,0x600,0x606,0x603,0x5fd,0x600,0x606,0x603,0x5fd,0x600,0x606,0x603,0x5fd, +0x603,0x5fd,0x600,0x606,0x603,0x5fd,0x603,0x5fd,0x600,0x606,0x603,0x5fd,0x600,0x606,0x603,0x5fd, +0x603,0x5fd,0x137a,0x137a,0x137a,0x137a,0x137a,0x137a,0x137a,0x137a,0x137a,0x137a,0x137a,0x137a,0x137a,0x137a, +0x603,0x5fd,0x603,0x5fd,0x603,0x5fd,0x600,0x606,0x600,0x606,0x603,0x5fd,0x603,0x5fd,0x603,0x5fd, +0x603,0x5fd,0x603,0x5fd,0x603,0x5fd,0x603,0x5fd,0x600,0x603,0x5fd,0x600,0x603,0x5fd,0x600,0x606, +0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd, +0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600, +0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603, +0x603,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd, +0x600,0x600,0x5fd,0x600,0x5fd,0x600,0x5fd,0x5fd,0x600,0x5fd,0x5fd,0x600,0x5fd,0x600,0x5fd,0x5fd, +0x600,0x5fd,0x600,0x600,0x5fd,0x5fd,0x5fd,0x600,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x600,0x5fd,0x5fd, +0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd, +0x5fd,0x5fd,0x5fd,0x5fd,0x600,0x600,0x5fd,0x5fd,0x600,0x5fd,0x600,0x5fd,0x5fd,0x5fd,0x5fd,0x5fd, +0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600, +0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600, +0x600,0x600,0x600,0x606,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603, +0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603, +0x603,0x603,0x603,0x603,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606, +0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x603,0x603,0x603,0x603,0x603,0x603,0x603, +0x603,0x603,0x603,0x603,0x609,0x609,0x609,0x609,0x102c,0x102c,0x102c,0x153c,0x153c,0x153c,0x153c,0x153c, +0x153c,0x153c,0x1749,0x1749,0x894,0x89a,0x89a,0x8a6,0x8a6,0x897,0x88e,0x897,0x88e,0x897,0x88e,0x897, +0x88e,0x897,0x88e,0x897,0x618,0x618,0x612,0x618,0x612,0x618,0x612,0x618,0x612,0x618,0x612,0x615, +0x61b,0x618,0x612,0x618,0x612,0x615,0x61b,0x618,0x612,0x618,0x612,0x615,0x61b,0x618,0x612,0x615, +0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x618,0x612,0x618,0x612,0x618,0x612,0x618,0x612,0x615, +0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x615, +0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x615,0x61b,0x618,0x612,0x615, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705, +#if !U_PLATFORM_IS_DARWIN_BASED +0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x72f,0x72f,0x72f,0x72f, +0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f, +0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0xc51,0x8c4,0x8be,0x8bb, +0x8c1,0x8b8,0x744,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x8ca,0x744,0x744,0x744, +0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744, +0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x8c7,0x8c7, +0x74a,0x8d9,0x8dc,0x8e2,0x804,0x810,0x8f7,0x80d,0x8d0,0x8cd,0x8d0,0x8cd,0x8d6,0x8d3,0x8d6,0x8d3, +0x8d0,0x8cd,0x80a,0x8e2,0x8d0,0x8cd,0x8d0,0x8cd,0x8d0,0x8cd,0x8d0,0x8cd,0x8e5,0x8ee,0x8eb,0x8eb, +0x750,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x786,0x786,0x786,0x786,0x786,0x786,0x786,0x786,0x786, +0x786,0x786,0x786,0x786,0x786,0x786,0x786,0x786,0x786,0x786,0x786,0x753,0x76e,0x74d,0x774,0x777, +0x771,0x789,0x789,0x789,0x789,0x789,0x789,0x783,0x783,0x783,0x783,0x783,0x783,0x783,0x783,0x783, +0x783,0x783,0x783,0x783,0x783,0x783,0x783,0x783,0x783,0x783,0x783,0x753,0x76e,0x74d,0x76e,0xc54, +0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2, +0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2, +0x7f2,0x7f2,0x12b4,0x12b4,0x12b4,0x12b4,0x12b4,0x7f5,0x80a,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d, +0x80d,0x80d,0x92d,0x92d,0x92d,0x92d,0x813,0x813,0x8e8,0x8f4,0x8f4,0x8f4,0x8f4,0x8f1,0x807,0x8df, +0xb19,0xb19,0xb19,0xc66,0xc84,0xc81,0xb34,0x8b5,0x819,0x816,0x819,0x81c,0x816,0x819,0x816,0x819, 0x816,0x819,0x816,0x816,0x816,0x816,0x816,0x816,0x819,0x819,0x816,0x819,0x819,0x816,0x819,0x819, -0x816,0x819,0x819,0x816,0x819,0x819,0x816,0x816,0x816,0x816,0x816,0x81c,0x816,0x81c,0x816,0x81c, -0x816,0x816,0x816,0x816,0x816,0x816,0x81c,0x816,0x816,0x816,0x816,0x816,0x819,0x81c,0x81c,0x819, -0x819,0x819,0x819,0x912,0x915,0x81f,0x822,0xc7e,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828, -0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828, -0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x82b,0x828,0x828,0x828,0x828,0x828,0x828,0x828, -0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828, -0x828,0x828,0x828,0x828,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834, -0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834, -0xd80,0xd80,0xeb2,0x82e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e, -0xd7a,0xd7a,0xd7a,0xd7a,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837, -0x837,0x837,0x837,0x837,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927, -0x927,0x927,0x927,0x927,0x927,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0xd83,0xd83,0xd83,0xd83,0x92a, -0x92a,0x92a,0x92a,0x92a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a, -0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a, -0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0xd83,0xd83,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d, -0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d, -0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927, -0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840, -0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840, -0x840,0x840,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5, -0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0x1125,0x1125,0x1125,0x1125,0x85b,0x85b,0x85b,0x85b, -0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b, -0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85e,0x85e, -0x85b,0x85e,0x85b,0x85e,0x85e,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85e, -0x85b,0x85e,0x85b,0x85e,0x85e,0x85b,0x85b,0x85e,0x85e,0x85e,0x85b,0x85b,0x85b,0x85b,0x14c7,0x14c7, -0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87, -0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e, -0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e,0x91e, -0x12f9,0x12f9,0x12f9,0x12f9,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0xd7a,0xc81,0xc81,0xc81, -0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0x921,0x921,0x921,0x921, -0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921, -0x921,0x921,0x921,0x924,0x921,0x924,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921, -0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0x921,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81, -0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0xc81,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927, -0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927,0x927, -0x927,0x927,0x927,0x927,0x927,0x927,0x927,0xd83,0x9a5,0x987,0x987,0x987,0x987,0x981,0x987,0x987, -0x999,0x987,0x987,0x984,0x990,0x996,0x996,0x996,0x996,0x996,0x999,0x981,0x98d,0x981,0x981,0x981, -0x978,0x978,0x981,0x981,0x981,0x981,0x981,0x981,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c, -0x99c,0x99c,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x984,0x978,0x981,0x978, -0x981,0x978,0x993,0x98a,0x993,0x98a,0x9a2,0x9a2,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1, -0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1, -0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4, +0x816,0x819,0x819,0x816,0x819,0x819,0x816,0x816,0xc87,0x82b,0x825,0x82b,0x825,0x82b,0x825,0x82b, +0x825,0x82b,0x825,0x825,0x828,0x825,0x828,0x825,0x828,0x825,0x828,0x825,0x828,0x825,0x828,0x825, +0x828,0x825,0x828,0x825,0x828,0x825,0x828,0x825,0x828,0x825,0x828,0x82b,0x825,0x828,0x825,0x828, +0x825,0x828,0x825,0x825,0x825,0x825,0x825,0x825,0x828,0x828,0x825,0x828,0x828,0x825,0x828,0x828, +0x825,0x828,0x828,0x825,0x828,0x828,0x825,0x825,0x825,0x825,0x825,0x82b,0x825,0x82b,0x825,0x82b, +0x825,0x825,0x825,0x825,0x825,0x825,0x82b,0x825,0x825,0x825,0x825,0x825,0x828,0x82b,0x82b,0x828, +0x828,0x828,0x828,0x8fd,0x900,0x82e,0x831,0xc6f,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837, +0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837, +0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x83a,0x837,0x837,0x837,0x837,0x837,0x837,0x837, +0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837, +0x837,0x837,0x837,0x837,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843, +0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843, +0xd74,0xd74,0xea6,0x83d,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909, +0xd6e,0xd6e,0xd6e,0xd6e,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846, +0x846,0x846,0x846,0x846,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912, +0x912,0x912,0x912,0x912,0x912,0x849,0x849,0x849,0x849,0x849,0x849,0xd77,0xd77,0xd77,0xd77,0x915, +0x915,0x915,0x915,0x915,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849, +0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849, +0x849,0x849,0x849,0x849,0x849,0x849,0xd77,0xd77,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c, +0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c, +0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912, +0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f, +0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f,0x84f, +0x84f,0x84f,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9, +0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0x1119,0x1119,0x1119,0x1119,0x852,0x852,0x852,0x852, +0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852, +0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x855,0x855, +0x852,0x855,0x852,0x855,0x855,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x852,0x855, +0x852,0x855,0x852,0x855,0x855,0x852,0x852,0x855,0x855,0x855,0x852,0x852,0x852,0x852,0x14be,0x14be, +0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78, +0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909, +0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909,0x909, +0x12f6,0x12f6,0x12f6,0x12f6,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0xd6e,0xc72,0xc72,0xc72, +0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0x90c,0x90c,0x90c,0x90c, +0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c, +0x90c,0x90c,0x90c,0x90f,0x90c,0x90f,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c, +0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72, +0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912, +0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912, +0x912,0x912,0x912,0x912,0x912,0x912,0x912,0xd77,0x990,0x972,0x972,0x972,0x972,0x96c,0x972,0x972, +0x984,0x972,0x972,0x96f,0x97b,0x981,0x981,0x981,0x981,0x981,0x984,0x96c,0x978,0x96c,0x96c,0x96c, +0x963,0x963,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x987,0x987,0x987,0x987,0x987,0x987,0x987,0x987, +0x987,0x987,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96f,0x963,0x96c,0x963, +0x96c,0x963,0x97e,0x975,0x97e,0x975,0x98d,0x98d,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c, +0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c, +0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f, +0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f, +0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2, +0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2, +0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab, +0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab, +0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9a5,0x9a5,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae, +0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae, +0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9a8,0x9a8,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab, +0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab, +0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ab,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae, +0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae, +0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9b1,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4, +0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4, +0x9b4,0x9b4,0x9b4,0x9b4,0x9b1,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4, 0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4, -0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b4,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7, -0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7, -0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0, -0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0, -0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9ba,0x9ba,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3, -0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3, -0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9bd,0x9bd,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0, -0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0, -0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c0,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3, -0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3, -0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c6,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9, -0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9, -0x9c9,0x9c9,0x9c9,0x9c9,0x9c6,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9, -0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9, -0xa56,0xa56,0xfe7,0xa56,0xa56,0xa56,0xa59,0xa56,0xfe7,0xa56,0xa56,0xfde,0xa50,0xa44,0xa44,0xa44, -0xa44,0xa53,0xa44,0xfcc,0xfcc,0xfcc,0xa44,0xa47,0xa50,0xa4a,0xfd2,0xfe1,0xfe1,0xfcc,0xfcc,0xfe7, -0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xa5c,0xa5c,0xa4d,0xa4d,0xa4d,0xa4d, -0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa53,0xa53,0xa44,0xa44,0xfe7,0xfe7,0xfe7,0xfe7,0xfcc,0xfcc, +0xa41,0xa41,0xfdb,0xa41,0xa41,0xa41,0xa44,0xa41,0xfdb,0xa41,0xa41,0xfd2,0xa3b,0xa2f,0xa2f,0xa2f, +0xa2f,0xa3e,0xa2f,0xfc0,0xfc0,0xfc0,0xa2f,0xa32,0xa3b,0xa35,0xfc6,0xfd5,0xfd5,0xfc0,0xfc0,0xfdb, +0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xa47,0xa47,0xa38,0xa38,0xa38,0xa38, +0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa3e,0xa3e,0xa2f,0xa2f,0xfdb,0xfdb,0xfdb,0xfdb,0xfc0,0xfc0, +0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41, +0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41, +0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xdcb,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56, 0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56, +0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xdcb,0xa56,0xa56,0xa56,0xa56, +0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa5c,0xa5c,0xa5c,0xa5c, +0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c, +0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa62,0xa62,0xa62,0xa62, +0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa5f,0xa65,0xa62,0xa62,0xa62,0xa62,0xa62, +0xa62,0xa62,0xa62,0x1152,0x1152,0x1152,0x1152,0x1152,0x1152,0x1152,0x1152,0x1152,0x114f,0xa62,0xa62,0xa62, +0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62, +0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0xa62, +0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x705,0x705,0x705,0x705,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702, +0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702, +0x702,0x702,0x702,0x702,0x702,0x702,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b, +0x70b,0x70b,0x70e,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b, +0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708, +0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711, +0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711, +0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b, +0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e, +0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741, +0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741, +0xc87,0x8fa,0x8f4,0x8f1,0x8f7,0x8ee,0x756,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759,0x759, +0x900,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756, +0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756, +0x756,0x756,0x8fd,0x8fd,0x75c,0x90f,0x912,0x918,0x822,0x82e,0x92d,0x82b,0x906,0x903,0x906,0x903, +0x90c,0x909,0x90c,0x909,0x906,0x903,0x828,0x918,0x906,0x903,0x906,0x903,0x906,0x903,0x906,0x903, +0x91b,0x924,0x921,0x921,0x76e,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, +0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x771, +0x78c,0x76b,0x792,0x795,0x78f,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1, +0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x771, +0x78c,0x76b,0x78c,0xc8a,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810, +0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810, +0x810,0x810,0x810,0x810,0x810,0x810,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x813,0x828,0x82b,0x82b,0x82b, +0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x963,0x963,0x963,0x963,0x831,0x831,0x91e,0x92a,0x92a,0x92a, +0x92a,0x927,0x825,0x915,0xb4f,0xb4f,0xb4f,0xc9c,0xcba,0xcb7,0xb6a,0x8eb,0x837,0x834,0x837,0x83a, +0x834,0x837,0x834,0x837,0x834,0x837,0x834,0x834,0x834,0x834,0x834,0x834,0x837,0x837,0x834,0x837, +0x837,0x834,0x837,0x837,0x834,0x837,0x837,0x834,0x837,0x837,0x834,0x834,0xcbd,0x849,0x843,0x849, +0x843,0x849,0x843,0x849,0x843,0x849,0x843,0x843,0x846,0x843,0x846,0x843,0x846,0x843,0x846,0x843, +0x846,0x843,0x846,0x843,0x846,0x843,0x846,0x843,0x846,0x843,0x846,0x843,0x846,0x843,0x846,0x849, +0x843,0x846,0x843,0x846,0x843,0x846,0x843,0x843,0x843,0x843,0x843,0x843,0x846,0x846,0x843,0x846, +0x846,0x843,0x846,0x846,0x843,0x846,0x846,0x843,0x846,0x846,0x843,0x843,0x843,0x843,0x843,0x849, +0x843,0x849,0x843,0x849,0x843,0x843,0x843,0x843,0x843,0x843,0x849,0x843,0x843,0x843,0x843,0x843, +0x846,0x849,0x849,0x846,0x846,0x846,0x846,0x933,0x936,0x84c,0x84f,0xca5,0x855,0x855,0x855,0x855, +0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855, +0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x858,0x855,0x855,0x855, +0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855, +0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x855,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861, +0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861,0x861, +0x861,0x861,0x861,0x861,0xdaa,0xdaa,0xedc,0x85b,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f, +0x93f,0x93f,0x93f,0x93f,0xda4,0xda4,0xda4,0xda4,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864, +0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x864,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948, +0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x867,0x867,0x867,0x867,0x867,0x867,0xdad, +0xdad,0xdad,0xdad,0x94b,0x94b,0x94b,0x94b,0x94b,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867, +0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867, +0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0xdad,0xdad,0x86a,0x86a,0x86a,0x86a, +0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a, +0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x948,0x948,0x948,0x948, +0x948,0x948,0x948,0x948,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d, +0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d, +0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xedf, +0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0x114f,0x114f,0x114f,0x114f, +0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888, +0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888,0x888, +0x888,0x888,0x88b,0x88b,0x888,0x88b,0x888,0x88b,0x88b,0x888,0x888,0x888,0x888,0x888,0x888,0x888, +0x888,0x888,0x888,0x88b,0x888,0x88b,0x888,0x88b,0x88b,0x888,0x888,0x88b,0x88b,0x88b,0x888,0x888, +0x888,0x888,0x14f4,0x14f4,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae, +0xcae,0xcae,0xcae,0xcae,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f, +0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f, +0x93f,0x93f,0x93f,0x93f,0x132c,0x132c,0x132c,0x132c,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf, +0xda4,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8, +0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942, +0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x945,0x942,0x945,0x942,0x942,0x942,0x942,0x942,0x942, +0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0xca8,0xca8,0xca8, +0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0xca8,0x948,0x948,0x948,0x948, +0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948, +0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0xdad,0x9c6,0x9a8,0x9a8,0x9a8, +0x9a8,0x9a2,0x9a8,0x9a8,0x9ba,0x9a8,0x9a8,0x9a5,0x9b1,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9ba,0x9a2, +0x9ae,0x9a2,0x9a2,0x9a2,0x999,0x999,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9bd,0x9bd,0x9bd,0x9bd, +0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9bd,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2,0x9a2, +0x9a5,0x999,0x9a2,0x999,0x9a2,0x999,0x9b4,0x9ab,0x9b4,0x9ab,0x9c3,0x9c3,0x9d2,0x9d2,0x9d2,0x9d2, +0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2, +0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d5,0x9d5,0x9d5,0x9d5, +0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5, +0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d8,0x9d8,0x9d8,0x9d8, +0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8, +0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9e1,0x9e1,0x9e1,0x9e1, +0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1, +0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9db,0x9db,0x9e4,0x9e4,0x9e4,0x9e4, +0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4, +0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9de,0x9de,0x9e1,0x9e1,0x9e1,0x9e1, +0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1, +0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e1,0x9e4,0x9e4,0x9e4,0x9e4, +0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4, +0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e4,0x9e7,0x9ea,0x9ea,0x9ea, +0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea, +0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9e7,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea, +0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea, +0x9ea,0x9ea,0x9ea,0x9ea,0xa77,0xa77,0x1011,0xa77,0xa77,0xa77,0xa7a,0xa77,0x1011,0xa77,0xa77,0x1008, +0xa71,0xa65,0xa65,0xa65,0xa65,0xa74,0xa65,0xff6,0xff6,0xff6,0xa65,0xa68,0xa71,0xa6b,0xffc,0x100b, +0x100b,0xff6,0xff6,0x1011,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xa7d,0xa7d, +0xa6e,0xa6e,0xa6e,0xa6e,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa74,0xa74,0xa65,0xa65,0x1011,0x1011, +0x1011,0x1011,0xff6,0xff6,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56, +0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77, #if !U_PLATFORM_IS_DARWIN_BASED -0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa7a,0xa7a,0xa7a,0xa7d, -0xa7d,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a, -0xa62,0xa62,0xa77,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa59,0xa77,0xa77,0xa7a,0xa7a,0xa7a,0xa7a, -0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a, -0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa9b,0xa9b,0xa9b,0xa9b, -0xa9b,0xa86,0xa86,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b, +0xa9b,0xa9b,0xa9b,0xa9e,0xa9e,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b, +0xa9b,0xa9b,0xa9b,0xa9b,0xa83,0xa83,0xa98,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa98,0xa98, 0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b, -0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9e,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b, 0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b,0xa9b, -0xa9b,0xa9b,0xa9b,0xa9b,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5, -0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xbb8, -0xbb8,0xbb8,0xbb8,0xbb8,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xdd4,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b, -0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b, -0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xdd4,0xa6b,0xa6b,0xa6b,0xa6b, -0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa71,0xa71,0xa71,0xa71, -0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71, -0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa77,0xa77,0xa77,0xa77, -0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa74,0xa7a,0xa77,0xa77,0xa77,0xa77,0xa77, -0xa77,0xa77,0xa77,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115b,0xa77,0xa77,0xa77, -0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77, -0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77, -0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c, -0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c, -0xab0,0xab0,0xab0,0xab3,0xab3,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0, -0xab0,0xab0,0xab0,0xab0,0xa98,0xa98,0xaad,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xaad,0xaad, -0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0, -0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0, -0xad1,0xad1,0xad1,0xad1,0xad1,0xabc,0xabc,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, -#if !U_PLATFORM_IS_DARWIN_BASED -0xad1,0xad1,0xad1,0xad1,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3, -0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3, -0xae3,0xae3,0xae3,0xae3,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, -0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, -0xae9,0xae9,0xae9,0xae9,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8, +0xabc,0xabc,0xabc,0xabc,0xabc,0xaa7,0xaa7,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc, +0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc, +0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabf,0xabc,0xabc,0xabc,0xabc, +0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc, +0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, +0xaec,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, +0xae9,0xae9,0xae9,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8, 0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8, -0xaf8,0xaf8,0xaf8,0xaf8,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb, -0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafe,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb, -0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb, -0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xafb,0xb01,0xb01,0xc48,0xc48, -0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01, -0xc48,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb22,0xb22,0xb22,0xb22, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad4,0xad1,0xad1,0xad1,0xad1, -0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, -0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a, +0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a, 0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a, -0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, -0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, -0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10, +0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10, +0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f, +0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f, +0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, +0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb25,0xb22,0xb22, 0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, -#if !U_PLATFORM_IS_DARWIN_BASED -0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0x14d9,0xb2b,0xb2b,0xb2b,0xb2b, -0xb2b,0xb2b,0xccf,0xccf,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, -0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xccc,0xccc, -0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d, -0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b, -0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b, -0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e, -0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e, -0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb34,0xb40,0xb46,0xb46,0xb46,0xb3a,0xb3a,0xb3a,0xb43,0xb37,0xb37, -0xb37,0xb37,0xb37,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb46,0xb46,0xb46,0xb46,0xb46, -0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, -0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, -0xb3a,0xb3a,0xb3d,0xb3d,0xb46,0xb46,0xb46,0xb3a,0xb3a,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46, -0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, -0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb46,0xb46,0xb46,0xb46,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, -0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3a,0xb3a,0xb3a, -0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, -0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0x16e6,0x16e6,0xb52,0xb49,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb49,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb52,0xb52, -0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52, -0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb49,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb49,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52, -0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb49,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, -0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, -0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, -0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52, -0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, +0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, +0xb28,0xb28,0xc75,0xc75,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xc75,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49, +0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0x1509, +0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xcff,0xcff,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, 0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, +0xb4f,0xb4f,0xcfc,0xcfc,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d, +0xd4d,0xd4d,0xd4d,0xd4d,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52, 0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52, -0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f,0xb4f, -0xb4f,0xb4f,0xb4f,0xb4f,0xb52,0xb52,0xb52,0xb52,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55, +0xb52,0xb52,0xb52,0xb52,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xa77,0xa77,0xa77,0xa77,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xe01,0xa8c,0xa8c,0xa8c,0xa8c, +0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c, +0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xe01, +0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c,0xa8c, +0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92, +0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92,0xa92, +0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa95,0xa9b,0xa98, +0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188, +0x1185,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98, +0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98, +0xa98,0xa98,0xa98,0xa98,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad, +0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad, +0xaad,0xaad,0xaad,0xaad,0xad1,0xad1,0xad1,0xad4,0xad4,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xab9,0xab9,0xace,0xab0,0xab0,0xab0,0xab0,0xab0, +0xab0,0xab0,0xace,0xace,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xadd,0xadd,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, +0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, +0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf5, +0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, +0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xb1f,0xb1f,0xb1f,0xb1f, +0xb1f,0xb1f,0xb1f,0xb1f,0xb22,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f, +0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xc15,0xc15,0xc15,0xc15,0xc15,0xb2e,0xb2e,0xb2e,0xb2e, +0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e, +0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb46,0xb46,0xb46,0xb46, +0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46, +0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb55,0xb55,0xb55,0xb55, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55, -0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31, -0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31, -0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb31,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34, -0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb37,0xb34,0xb34, -0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34, -0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34, -0xb3a,0xb3a,0xc84,0xc84,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, -0xb3a,0xb3a,0xb3a,0xb3a,0xc84,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b, -#if !U_PLATFORM_IS_DARWIN_BASED -0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e, -0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e, -0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8, -0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb5,0xbb8, -0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xcc0, -0xcc3,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xecd,0xecd,0xecd,0xecd, -0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6,0xcc6, -0xcc6,0xcc6,0xdb6,0xe70,0xdb6,0xdb9,0xdb9,0xdb6,0xdb3,0xdb6,0xdb3,0xdb6,0xdb6,0xfc0,0x1257,0x1257, -0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc8,0xdc5,0xedf,0xedf,0xedf,0xedf,0x13d4,0xfd2,0x13d4,0x1311,0x1311, -0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd, -0xbfd,0xbfd,0xc2d,0xc2a,0xc2d,0xc2a,0xc2d,0xc2a,0x10e3,0x10e0,0xfd8,0xfd5,0xc00,0xc00,0xc00,0xc00, -0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc03,0xc03,0xc03,0xc03, -0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03, -0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc06,0xc06,0xc03,0xc03, -0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc09,0xc09,0xc09,0xc0f,0xc0c,0xc33,0xc30,0xc0f, -0xc0c,0xc0f,0xc0c,0xc0f,0xc0c,0xc0f,0xc0c,0xc0f,0xc0c,0xc0f,0xc0c,0xc0f,0xc0c,0xc0f,0xc0c,0xc0f, -0xc0c,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09, -0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09, -0xc09,0xc09,0xc09,0xc09,0xc0f,0xc0c,0xc0f,0xc0c,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09, -0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09, -0xc09,0xc09,0xc09,0xc09,0xc0f,0xc0c,0xc09,0xc09,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12, -0xc12,0xc12,0xc12,0xc12,0xc18,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12, -0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12, -0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc18,0xc18,0xc18,0xc12,0xc12,0xc12,0xc12,0xc12, -0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12, -0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc15,0xc12,0xc12,0xc12,0xc4b,0xc4b,0xc4b,0xc4b, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0xb5b,0x1515, -0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xd0b,0xd0b,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61, +#if !U_PLATFORM_IS_DARWIN_BASED +0xb55,0xb55,0xb55,0xb55,0xb64,0xb64,0xb64,0xb64,0xb64,0xb5b,0xb67,0xb6d,0xb6d,0xb6d,0xb61,0xb61, +0xb61,0xb6a,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb6d, +0xb6d,0xb6d,0xb6d,0xb6d,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61, 0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61, -0xb61,0xb61,0xd08,0xd08,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59, -0xd59,0xd59,0xd59,0xd59,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64, -0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64, -0xb64,0xb64,0xb64,0xb64,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67, -0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67, -0xb67,0xb67,0xb67,0xb67,0xb76,0xb76,0xb76,0xb76,0xb76,0xb6d,0xb79,0xb7f,0xb7f,0xb7f,0xb73,0xb73, -0xb73,0xb7c,0xb70,0xb70,0xb70,0xb70,0xb70,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb7f, -0xb7f,0xb7f,0xb7f,0xb7f,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73, +0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb64,0xb64,0xb6d,0xb6d,0xb6d,0xb61,0xb61,0xb6d,0xb6d,0xb6d, +0xb6d,0xb6d,0xb6d,0xb6d,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61, +0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb6d,0xb6d,0xb6d,0xb6d,0xb61,0xb61, +0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb64,0xb64,0xb64,0xb64,0xb64, +0xb64,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61, +0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0x1716,0x1716, +0xb79,0xb70,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb70,0xb76,0xb76,0xb76,0xb76, +0xb76,0xb76,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79, +0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb70,0xb76,0xb76,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76, +0xb76,0xb70,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79, +0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb70,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73, 0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73, -0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb76,0xb76,0xb7f,0xb7f,0xb7f,0xb73,0xb73,0xb7f,0xb7f,0xb7f, -0xb7f,0xb7f,0xb7f,0xb7f,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73, -0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb7f,0xb7f,0xb7f,0xb7f,0xb73,0xb73, -0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb76,0xb76,0xb76,0xb76,0xb76, -0xb76,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73, -0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0x1722,0x1722, -0xb8b,0xb82,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb82,0xb88,0xb88,0xb88,0xb88, -0xb88,0xb88,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b, -0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb82,0xb88,0xb88,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88, -0xb88,0xb82,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b, -0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb82,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85, +0xb73,0xb73,0xb73,0xb73,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79, +0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79, +0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76, +0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb79,0xb79,0xb79,0xb79,0xb7c,0xb7c,0xb7c,0xb7c, +0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c, +0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb82,0xb82,0xb82,0xb82, +0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82, +0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb82,0xb85,0xb85,0xb85,0xb85, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb58,0xb58,0xb58,0xb58, +0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58, +0xb58,0xb5b,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58, +0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58,0xb58, +0xb58,0xb58,0xb58,0xb58,0xb5e,0xb5e,0xcab,0xcab,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e, +0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xcab,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e, +0xb5e,0xb5e,0xb5e,0xb5e,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f, +0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f, +0xb7f,0xb7f,0xb7f,0x153f,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xd35,0xd35,0xb85,0xb85,0xb85,0xb85, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85, -0xb85,0xb85,0xb85,0xb85,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b, -0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b, -0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88, -0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb8b,0xb8b,0xb8b,0xb8b,0xb8e,0xb8e,0xb8e,0xb8e, -0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e, -0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb94,0xb94,0xb94,0xb94, -0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94, -0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb97,0xb97,0xb97,0xb97, -0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, -0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xbf1,0xbf1,0xbf1,0xbf1, -0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1, -0xbf1,0xbf1,0xbee,0xbf1,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee, -0xbee,0xbee,0xbee,0xcfc,0xcff,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec, -0xf09,0xf09,0xf09,0xf09,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xd02,0xd02, -0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xdf2,0xeac,0xdf2,0xdf5,0xdf5,0xdf2,0xdef,0xdf2,0xdef,0xdf2, -0xdf2,0xffc,0x1293,0x1293,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xe04,0xe01,0xf1b,0xf1b,0xf1b,0xf1b,0x1410, -0x100e,0x1410,0x134d,0x134d,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36, -0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc69,0xc66,0xc69,0xc66,0xc69,0xc66,0x111f,0x111c,0x1014,0x1011, -0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39, +#if !U_PLATFORM_IS_DARWIN_BASED +0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xbdf,0xbdf,0xbdf,0xbdf, +0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf,0xbdf, +0xbdf,0xbdf,0xbdc,0xbdf,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc, +0xbdc,0xbdc,0xbdc,0xced,0xcf0,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3, +0xefd,0xefd,0xefd,0xefd,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbeb,0xbeb,0xbeb,0xbeb,0xcf3,0xcf3, +0xcf3,0xcf3,0xcf3,0xcf3,0xcf6,0xcf6,0xde9,0xea0,0xde9,0xde9,0xde9,0xde9,0xde6,0xde9,0xde6,0xde9, +0xde9,0xff0,0x128a,0x128a,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf8,0xdf5,0xf0f,0xf0f,0xf0f,0xf0f,0x1407, +0x1002,0x1407,0x134d,0x134d,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27, +0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc5a,0xc57,0xc5a,0xc57,0xc5a,0xc57,0x1113,0x1110,0x1008,0x1005, +0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a,0xc2a, +0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d, +0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d, +0xc30,0xc30,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc33,0xc33,0xc33,0xc39, +0xc36,0xc60,0xc5d,0xc39,0xc36,0xc39,0xc36,0xc39,0xc36,0xc39,0xc36,0xc39,0xc36,0xc39,0xc36,0xc39, +0xc36,0xc39,0xc36,0xc39,0xc36,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33, +0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33, +0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc39,0xc36,0xc39,0xc36,0xc33,0xc33,0xc33,0xc33, +0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33, +0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc39,0xc36,0xc33,0xc33,0xc3c,0xc3c,0xc3c,0xc3c, +0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc42,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c, 0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c, +0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc42,0xc42,0xc42,0xc3c, 0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c, -0xc3f,0xc3f,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc42,0xc42,0xc42,0xc48, -0xc45,0xc6f,0xc6c,0xc48,0xc45,0xc48,0xc45,0xc48,0xc45,0xc48,0xc45,0xc48,0xc45,0xc48,0xc45,0xc48, -0xc45,0xc48,0xc45,0xc48,0xc45,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42, -0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42, -0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc48,0xc45,0xc48,0xc45,0xc42,0xc42,0xc42,0xc42, -0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42, -0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc42,0xc48,0xc45,0xc42,0xc42,0xc4b,0xc4b,0xc4b,0xc4b, -0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc51,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b, -#if !U_PLATFORM_IS_DARWIN_BASED -0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xcc9,0xd38,0xdb3,0xdb3, -0xdb3,0xdb3,0xdb3,0xdb3,0xdb3,0xdb3,0xe70,0xe70,0xdb3,0xdb3,0xdb3,0xdb3,0xdb6,0xdb6,0xed0,0xfc0, -0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0xfc0,0x1284,0x1284,0x125a,0xced,0xced,0xced,0xced, -0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced, -0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xcfc,0xcfc,0xcfc,0xcfc, -0xcfc,0xcfc,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf0,0xd05,0xd05,0xd05,0xcff,0xd05,0xd05,0xd05,0xd05, -0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xcff,0xd05,0xd05,0xd05,0xd05,0xcf9,0xcf9,0xd02,0xd02, -0xd02,0xd02,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcfc,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce, -0xdce,0xdce,0xdce,0xdce,0xdcb,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xd05,0xd05,0xd05,0xd05, -0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xcff,0xd05,0xd05,0xd05,0xd05,0xd05, -0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xd05,0xcf9,0xcf9,0xcf9,0xcfc,0xcfc,0xcfc,0xcfc, -0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc, -0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xd08,0xd08,0xd08,0xd08, -0xd08,0xd0b,0xd0b,0xd0b,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1, -0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0x10ec,0x10ec,0xfdb,0xfdb,0xfdb,0xd0e,0xd0e,0xd0e,0xd0e, -0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e, -0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd14,0xd14,0xd14,0xd14, -0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14, -0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd1d,0xd1d,0xd1d,0xd1d, +0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3f,0xc3c,0xc3c,0xc3c, +0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78, +0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78, +0xcf9,0xd68,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xea0,0xea0,0xde6,0xde6,0xde6,0xde6, +0xde9,0xde9,0xf00,0xff0,0xff0,0xff0,0xff0,0xff0,0xff0,0xff0,0xff0,0xff0,0xff0,0x12b7,0x12b7,0x128d, 0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d, -0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd29,0xd29,0xd29,0xd29, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc51,0xc51,0xc51,0xc4b, -0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b, -0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4e,0xc4b,0xc4b,0xc4b, -0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87, -0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87,0xc87, -0xd05,0xd74,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xeac,0xeac,0xdef,0xdef,0xdef,0xdef, -0xdf2,0xdf2,0xf0c,0xffc,0xffc,0xffc,0xffc,0xffc,0xffc,0xffc,0xffc,0xffc,0xffc,0x12c0,0x12c0,0x1296, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29, -#if !U_PLATFORM_IS_DARWIN_BASED -0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd35,0xd35,0xd35,0xd35, -0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35, -0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xdd7,0xdd7,0xdd7,0xdd7, -0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7, -0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xddd,0xddd,0xddd,0xddd, -0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd, -0xddd,0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,0xddd,0xddd,0xddd,0xddd, -0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd, -0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0xe9d,0xe9d,0xdef,0xdef, -0xee5,0xee5,0xee5,0xee5,0xee5,0xee5,0xee5,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe4,0xfe4,0xfe4,0xfe4, -0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xdfe,0xdfb,0xdfe,0xdfb, -0xdfe,0xdfb,0xdfe,0xdfb,0xdfe,0xdfb,0xdfe,0xdfb,0xdfe,0xdfb,0xdfe,0xdfb,0xdfe,0xdfb,0xdfe,0xdfb, -0xdfe,0xdfb,0xdfe,0xdfb,0xdfe,0xdfb,0xdfe,0xdfb,0xdfe,0xdfb,0xdfe,0xdfb,0xe0a,0xe0a,0xe0a,0xe0a, -0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a, -0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe10,0xe10,0xe10,0xe10, -0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10, -0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe28,0xe28,0xe28,0xe28, -0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28, -0xe28,0xe28,0xe28,0xee8,0xee8,0xee8,0xee8,0xfea,0xfea,0xfea,0xfea,0xfea,0xe31,0xe31,0xe31,0xe31, -0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31, -0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe3a,0xe3a,0xe3a,0xe3a, -0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a, -0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe43,0xe43,0xe43,0xe43, -0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43, -0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe3d,0xe40,0xe40,0xe40,0xe40, -0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40, -0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe43,0xe43,0xe43,0xe43,0xe43,0xe4c,0xe4c,0xe4c,0xe4c, -0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49, -0xe49,0xe49,0xe46,0xe4f,0xff6,0xff0,0xfff,0xfed,0xe4c,0xe4c,0xfed,0xfed,0xe61,0xe61,0xe52,0xe61, -0xe61,0xe61,0xe58,0xe61,0xe61,0xe61,0xe61,0xe52,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61, -0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe64,0xe64,0xe64,0xe64, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29, -0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2c,0xd41,0xd41,0xd41,0xd3b, -0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd3b,0xd41,0xd41,0xd41,0xd41, -0xd35,0xd35,0xd3e,0xd3e,0xd3e,0xd3e,0xd32,0xd32,0xd32,0xd32,0xd32,0xd38,0xe0a,0xe0a,0xe0a,0xe0a, -0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe07,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a, -0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd3b,0xd41, -0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd35,0xd35,0xd35, -0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38, -0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38, -0xd44,0xd44,0xd44,0xd44,0xd44,0xd47,0xd47,0xd47,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xe0d,0xe0d, -0xe0d,0xe0d,0xe0d,0xe0d,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0x1128,0x1128,0x1017,0x1017,0x1017, -0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a, -0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a, -0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50, -0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50,0xd50, +0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d, +0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd23,0xd23,0xd23,0xd23,0xd23,0xd20,0xd35,0xd35,0xd35,0xd2f, +0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd2f,0xd35,0xd35,0xd35,0xd35, +0xd29,0xd29,0xd32,0xd32,0xd32,0xd32,0xd26,0xd26,0xd26,0xd26,0xd26,0xd2c,0xdfe,0xdfe,0xdfe,0xdfe, +0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfb,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe, +0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd2f,0xd35, +0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,0xd29,0xd29,0xd29, +0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c, +0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c, +0xd38,0xd38,0xd38,0xd38,0xd38,0xd3b,0xd3b,0xd3b,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xe01,0xe01, +0xe01,0xe01,0xe01,0xe01,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0x111c,0x111c,0x100b,0x100b,0x100b, +0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e, +0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e, +0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44, +0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44, +0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d, +0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d, 0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59, 0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59, 0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65, 0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65, -0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71, -0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71, -0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, -0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, -0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19, -0xe19,0xe19,0xe19,0xe19,0xe19,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16, -0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19, -0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19, -0xed9,0xed9,0xe2b,0xe2b,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0xf21,0x1023,0x1023,0x1023,0x1023,0x1023, -0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020, -0xe3a,0xe37,0xe3a,0xe37,0xe3a,0xe37,0xe3a,0xe37,0xe3a,0xe37,0xe3a,0xe37,0xe3a,0xe37,0xe3a,0xe37, -0xe3a,0xe37,0xe3a,0xe37,0xe3a,0xe37,0xe3a,0xe37,0xe3a,0xe37,0xe3a,0xe37,0xe3a,0xe37,0xe3a,0xe37, -0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46, -0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46,0xe46, -0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c, -0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64, -#if !U_PLATFORM_IS_DARWIN_BASED -0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe7c,0xe7c,0xe7c,0xe7c, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xf24,0xf24,0xf24,0xf24,0x1026,0x1026,0x1026,0x1026,0x1026, -0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d, -0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d,0xe6d, -0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76, +0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07, +0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07, +0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d, +0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a, +0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d, +0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d, +0xecd,0xecd,0xe1f,0xe1f,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0xf15,0x1017,0x1017,0x1017,0x1017,0x1017, +0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014, +0xe2e,0xe2b,0xe2e,0xe2b,0xe2e,0xe2b,0xe2e,0xe2b,0xe2e,0xe2b,0xe2e,0xe2b,0xe2e,0xe2b,0xe2e,0xe2b, +0xe2e,0xe2b,0xe2e,0xe2b,0xe2e,0xe2b,0xe2e,0xe2b,0xe2e,0xe2b,0xe2e,0xe2b,0xe2e,0xe2b,0xe2e,0xe2b, +0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a, +0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a, +0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40, +0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40, +0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58, +0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xf18,0xf18,0xf18,0xf18,0x101a,0x101a,0x101a,0x101a,0x101a, +0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61, +0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61, +0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a, +0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a, +0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73, +0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe6d, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xb85,0xb85,0xb85,0xb85,0xb85,0xb85,0xd32,0xd32,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83, +0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88, +0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88, +0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b, +0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b, +0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb91,0xb9d,0xba3, +0xba3,0xba3,0xb97,0xb97,0xb97,0xba0,0xb94,0xb94,0xb94,0xb94,0xb94,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e, +0xb8e,0xb8e,0xb8e,0xba3,0xba3,0xba3,0xba3,0xba3,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, +0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, +0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb9a,0xb9a,0xba3,0xba3,0xba3,0xb97, +0xb97,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, +0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xba3,0xba3, +0xba3,0xba3,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb9a, +0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, +0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97,0xb97, +0xb97,0xb97,0x174c,0x174c,0xbaf,0xba6,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac, +0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xba6, +0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xba6, +0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac, +0xbac,0xbac,0xbac,0xbac,0xbac,0xba6,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xba6,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac, +0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9, +0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9, +0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac, +0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf,0xbaf, +0xbaf,0xbaf,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac, +0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbaf,0xbaf,0xbaf,0xbaf, +0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2, +0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2,0xbb2, +0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8, +0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8,0xbb8, +0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb, +0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb, +0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15, +0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc12,0xc15,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12, +0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xd23,0xd26,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19, +0xe19,0xe19,0xe19,0xe19,0xf33,0xf33,0xf33,0xf33,0xc27,0xc27,0xc27,0xc27,0xc27,0xc27,0xc21,0xc21, +0xc21,0xc21,0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xd2c,0xd2c,0xe1f,0xed6,0xe1f,0xe1f,0xe1f,0xe1f, +0xe1c,0xe1f,0xe1c,0xe1f,0xe1f,0x1026,0x12c0,0x12c0,0xe28,0xe28,0xe28,0xe28,0xe28,0xe2e,0xe2b,0xf45, +0xf45,0xf45,0xf45,0x143d,0x1038,0x143d,0x1383,0x1383,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d, +0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc90,0xc8d,0xc90,0xc8d,0xc90,0xc8d, +0x1149,0x1146,0x103e,0x103b,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60,0xc60, +0xc60,0xc60,0xc60,0xc60,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63, +0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63, +0xc63,0xc63,0xc63,0xc63,0xc66,0xc66,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63, +0xc69,0xc69,0xc69,0xc6f,0xc6c,0xc96,0xc93,0xc6f,0xc6c,0xc6f,0xc6c,0xc6f,0xc6c,0xc6f,0xc6c,0xc6f, +0xc6c,0xc6f,0xc6c,0xc6f,0xc6c,0xc6f,0xc6c,0xc6f,0xc6c,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69, +0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69, +0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc6f,0xc6c,0xc6f,0xc6c, +0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69, +0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc69,0xc6f,0xc6c,0xc69,0xc69, +0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc78,0xc72,0xc72,0xc72, +0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72, +0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72, +0xc78,0xc78,0xc78,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72, +0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72, +0xc75,0xc72,0xc72,0xc72,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae, +0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae,0xcae, +0xcae,0xcae,0xcae,0xcae,0xd2f,0xd9e,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xed6,0xed6, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1f,0xe1f,0xf36,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026, +0x1026,0x12ed,0x12ed,0x12c3,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53, +0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53, +0xd53,0xd53,0xd53,0xd53,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd59,0xd59,0xd59,0xd59,0xd59,0xd56, +0xd6b,0xd6b,0xd6b,0xd65,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd65, +0xd6b,0xd6b,0xd6b,0xd6b,0xd5f,0xd5f,0xd68,0xd68,0xd68,0xd68,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd62, +0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe31,0xe34,0xe34,0xe34, +0xe34,0xe34,0xe34,0xe34,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b, +0xd6b,0xd6b,0xd65,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b, +0xd6b,0xd5f,0xd5f,0xd5f,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62, +0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62,0xd62, +0xd62,0xd62,0xd62,0xd62,0xd6e,0xd6e,0xd6e,0xd6e,0xd6e,0xd71,0xd71,0xd71,0xd6e,0xd6e,0xd6e,0xd6e, +0xd6e,0xd6e,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0x1152, +0x1152,0x1041,0x1041,0x1041,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74, +0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74, +0xd74,0xd74,0xd74,0xd74,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a, +0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a, +0xd7a,0xd7a,0xd7a,0xd7a,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83, +0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83, +0xd83,0xd83,0xd83,0xd83,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f, +0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f,0xd8f, +0xd8f,0xd8f,0xd8f,0xd8f,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b, +0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b, +0xd9b,0xd9b,0xd9b,0xd9b,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d, +0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d,0xe3d, +0xe3d,0xe3d,0xe3d,0xe3d,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43, +0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40,0xe40, +0xe40,0xe40,0xe40,0xe40,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43, +0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43, +0xe43,0xe43,0xe43,0xe43,0xf03,0xf03,0xe55,0xe55,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0x104d, +0x104d,0x104d,0x104d,0x104d,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a, +0x104a,0x104a,0x104a,0x104a,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61, +0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61, +0xe64,0xe61,0xe64,0xe61,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70, +#if !U_PLATFORM_IS_DARWIN_BASED +0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xe73,0xe73,0xe73,0xe73,0xe73, +0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe79,0xe79, +0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe76,0xe7f,0x1026,0x1020,0x102f,0x101d,0xe7c,0xe7c,0x101d,0x101d, +0xe91,0xe91,0xe82,0xe91,0xe91,0xe91,0xe88,0xe91,0xe91,0xe91,0xe91,0xe82,0xe91,0xe91,0xe91,0xe91, +0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91, +0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94, +0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94,0xe94, +0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac, +0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac,0xeac, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0xe70,0xe70,0xe70,0xe70,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76, 0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe76, -0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f, -0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe79, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c, -#if !U_PLATFORM_IS_DARWIN_BASED -0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe9a,0xe9a,0xe9a,0xe9a, -0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0x10f5,0x10f5,0x10f5,0x10f5, -0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0xecd,0xecd,0xecd,0xeca, -0xeca,0xeca,0xeca,0xeca,0x112e,0x137a,0x137a,0x137a,0x137a,0x12fc,0x12fc,0x12fc,0x137d,0x12ff,0x12ff,0x137d, -0x14cd,0x14cd,0x14cd,0x14cd,0x14d0,0x14d0,0x14d0,0x1797,0x1797,0x1797,0x1797,0x185d,0xee2,0xee2,0xee2,0xee2, -0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfde,0xfde,0xfde,0xfde, -0xfde,0xfde,0xfde,0xfde,0xfde,0xfde,0xfde,0xfde,0xfde,0xfde,0xfde,0xfde,0xf03,0xf03,0xf03,0xf03, -0xf15,0xf1e,0xf21,0xf1e,0xf21,0xf1e,0xf21,0xf1e,0xf21,0xf1e,0xf21,0xf1e,0xf1e,0xf1e,0xf21,0xf1e, -0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, -0xf1e,0xf1e,0xf1e,0xf1e,0xf06,0xf15,0xf03,0xf03,0xf03,0xf03,0xf03,0xf18,0xf03,0xf18,0xf15,0xf15, -0xf2a,0xf27,0xf2a,0xf2a,0xf2a,0xf27,0xf27,0xf2a,0xf27,0xf2a,0xf27,0xf2a,0xf27,0x1011,0x1011,0x1011, -0x114c,0x1008,0x1011,0x1008,0xf27,0xf2a,0xf27,0xf27,0x1008,0x1008,0x1008,0x1008,0x100b,0x100e,0x114c,0x114c, -0xf2d,0xf2d,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a, -0x101a,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a, -0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33, -0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33, -0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42, -0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42,0xf42, -0xf42,0xf42,0xf42,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c,0x150c, -0x150c,0x150c,0x150c,0x150c,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48, -0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48, -0xf48,0xf48,0xf48,0xf48,0xf90,0xfab,0xfa2,0xf9f,0xf9f,0xfab,0xfab,0xfa2,0xfa2,0xf9f,0xf9f,0xf9f, -0xf9f,0xf9f,0xfab,0xfab,0xfab,0xf90,0xf90,0xf90,0xf90,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab, -0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0xf90,0xfa2,0xfa5,0xf90,0xf90,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8, -0xfa8,0xf93,0xfab,0xfa8,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0xf9c,0x1116,0x1116, -0x1113,0x1110,0xf99,0xf99,0xfc3,0xfc3,0xfc3,0xfc3,0x1284,0x1284,0x125a,0x125a,0x1260,0x1257,0x1257,0x1257, -0x1257,0x125a,0x1380,0x1260,0x125a,0x1260,0x1257,0x1260,0x1284,0x1257,0x1257,0x1257,0x125a,0x125a,0x1257,0x1257, -0x125a,0x1257,0x1257,0x125a,0xfde,0xfde,0xfde,0xfde,0xfde,0xfdb,0xfdb,0xfde,0xfde,0xfde,0xfde,0xfde, -0xfde,0x14e5,0x14e5,0x14e5,0x10ec,0xfdb,0xfdb,0xfdb,0xfdb,0x1290,0x1269,0x1269,0x1269,0x1269,0x14e5,0x14e5, -0x14e5,0x14e5,0x14e5,0x14e5,0xffc,0xffc,0xff9,0xff3,0xff9,0xff3,0xff9,0xff3,0xff9,0xff3,0xff0,0xff0, -0xff0,0xff0,0x1005,0x1002,0xff0,0x1149,0x13e0,0x13e3,0x13e3,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e6,0x13e6, -0x1500,0x14f4,0x14f4,0x14f1,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1017,0x1014,0x1014,0x1023, -0x101a,0x1320,0x131d,0x16ef,0x1320,0x131d,0x13ef,0x13ec,0x1503,0x1503,0x1509,0x1503,0x1509,0x1503,0x1509,0x1503, -0x1509,0x1503,0x1509,0x1503,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a, -0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a,0x1023,0x101a, -0x1023,0x101a,0x1023,0x101a,0x101d,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x1023,0x101a,0x1023, -0x101a,0x1023,0x1023,0x101a,0x1026,0x1026,0x102c,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032, -0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032, -0x1032,0x1032,0x1032,0x1032,0x1032,0x102c,0x1026,0x1026,0x1026,0x1026,0x102c,0x102c,0x1026,0x1026,0x102f,0x13f8, -0x13f5,0x13f5,0x1032,0x1032,0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,0x1029,0x13fb,0x13fb, -0x13fb,0x13fb,0x13fb,0x13fb,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047, -0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047, -0x1047,0x1047,0x1047,0x1047,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050, -0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1053,0x1053,0x1053,0x1056, -0x1053,0x1053,0x1059,0x1059,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c, -0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c, -0x105c,0x105c,0x105c,0x105c,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065, -0x1068,0x105f,0x106e,0x106b,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065, -0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065, -0x1065,0x1065,0x1065,0x1065,0x1326,0x1323,0x1080,0x107a,0x1080,0x107a,0x1080,0x107a,0x1080,0x107a,0x1080,0x107a, -0x1080,0x107a,0x107d,0x10fe,0x1071,0x1071,0x1071,0x1077,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, -0x1074,0x1074,0x1077,0x1083,0x1080,0x107a,0x1080,0x107a,0x1080,0x107a,0x1080,0x107a,0x1080,0x107a,0x1080,0x107a, -0x1080,0x107a,0x1080,0x107a,0x1080,0x107a,0x1080,0x107a,0x1080,0x107a,0x1080,0x107a,0x1080,0x107a,0x1080,0x107a, -0x1080,0x107a,0x1080,0x107a,0x1518,0x1515,0x1518,0x1515,0x151b,0x151b,0x16f8,0x13fe,0x108c,0x108c,0x108f,0x108f, -0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f, -0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108c,0x108c,0x108c,0x108c, -0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x1095,0x1095, -0x1095,0x1095,0x1095,0x1098,0x1098,0x1098,0x10f2,0x10a1,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0, -0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b, -0x109b,0x109b,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e, -0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x109e,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf, -0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf, -0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1, -0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1, -0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10da,0x10da,0x10da,0x10da,0x10ef,0x10da,0x10da,0x10da, -0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da, -0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd, -0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd, -0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10e9,0x10e9,0x10e9,0x10e9,0x128a,0x128a,0x128a,0x128a, -0x128a,0x128a,0x128a,0x128a,0x1488,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x18c6,0x18c6, -0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e, -0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x1155,0x1155, -0x1158,0x1158,0x115e,0x1155,0x1155,0x1155,0x1155,0x1155,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161, -0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161, -0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c, -0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c, -0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188, -0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188, -0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1185,0x118b,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197, -0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197, -0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x11a6,0x11a6,0x11a6,0x11b5,0x11bb,0x11bb,0x11bb,0x11bb, -0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb, -0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11a9,0x11b5,0x11b5,0x11a6,0x11a6, -0x11a6,0x11a6,0x11b5,0x11b5,0x11a6,0x11b5,0x11b5,0x11b5,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7, -0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11ca,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c1, -0x11c1,0x11c1,0x11c7,0x11c4,0x1521,0x1524,0x1527,0x1527,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9, -0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11cd,0x11d9,0x11cd,0x11cd,0x11cd,0x11e2,0x11e2,0x11cd, -0x11cd,0x11e2,0x11d9,0x11e2,0x11e2,0x11d9,0x11cd,0x11d0,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9, -0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9, -0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4, -0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4, -0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c, -0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c, -0x120c,0x120c,0x120c,0x120c,0x120c,0x1209,0x1209,0x1209,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7c,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f, -0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe85,0xe85, -0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe82,0xe8b,0x1032,0x102c,0x103b,0x1029,0xe88,0xe88,0x1029,0x1029, -0xe9d,0xe9d,0xe8e,0xe9d,0xe9d,0xe9d,0xe94,0xe9d,0xe9d,0xe9d,0xe9d,0xe8e,0xe9d,0xe9d,0xe9d,0xe9d, -0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d,0xe9d, +0xe76,0xe76,0xe76,0xe76,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e, +0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xe8e,0xf4e,0xf4e,0xf4e,0xf4e,0x1050, +0x1050,0x1050,0x1050,0x1050,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97, +0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97, +0xe97,0xe97,0xe97,0xe97,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0, 0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0, -0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0, -0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8, -0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8, -0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6, -0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131, -0xf09,0xf09,0xf09,0xf06,0xf06,0xf06,0xf06,0xf06,0x116a,0x13b6,0x13b6,0x13b6,0x13b6,0x1338,0x1338,0x1338, -0x13b9,0x133b,0x133b,0x13b9,0x1509,0x1509,0x1509,0x1509,0x150c,0x150c,0x150c,0x17d3,0x17d3,0x17d3,0x17d3,0x1899, -0xf1e,0xf1e,0xf1e,0xf1e,0x1017,0x1017,0x1017,0x1017,0x1017,0x1017,0x1017,0x1017,0x1017,0x1017,0x1017,0x1017, -0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a,0x101a, -0xf3f,0xf3f,0xf3f,0xf3f,0xf51,0xf5a,0xf5d,0xf5a,0xf5d,0xf5a,0xf5d,0xf5a,0xf5d,0xf5a,0xf5d,0xf5a, -0xf5a,0xf5a,0xf5d,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a, -0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf42,0xf51,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0xf54, -0xf3f,0xf54,0xf51,0xf51,0xf66,0xf63,0xf66,0xf66,0xf66,0xf63,0xf63,0xf66,0xf63,0xf66,0xf63,0xf66, -0xf63,0x104d,0x104d,0x104d,0x1188,0x1044,0x104d,0x1044,0xf63,0xf66,0xf63,0xf63,0x1044,0x1044,0x1044,0x1044, -0x1047,0x104a,0x1188,0x1188,0xf69,0xf69,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056, -0x105f,0x1056,0x105f,0x1056,0x1056,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056, -0x105f,0x1056,0x105f,0x1056,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f, -0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f,0xf6f, -0xf6f,0xf6f,0xf6f,0xf6f,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e, -0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e, -0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548, -0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84, -0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84, -0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xfcc,0xfe7,0xfde,0xfdb,0xfdb,0xfe7,0xfe7,0xfde, -0xfde,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfe7,0xfe7,0xfe7,0xfcc,0xfcc,0xfcc,0xfcc,0xfe7,0xfe7,0xfe7, -0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfcc,0xfde,0xfe1,0xfcc,0xfcc,0xfe4, -0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfcf,0xfe7,0xfe4,0xfd8,0xfd8,0xfd8,0xfd8,0xfd8,0xfd8,0xfd8,0xfd8, -0xfd8,0xfd8,0x1152,0x1152,0x114f,0x114c,0xfd5,0xfd5,0xfff,0xfff,0xfff,0xfff,0x12c0,0x12c0,0x1296,0x1296, -0x129c,0x1293,0x1293,0x1293,0x1293,0x1296,0x13bc,0x129c,0x1296,0x129c,0x1293,0x129c,0x12c0,0x1293,0x1293,0x1293, -0x1296,0x1296,0x1293,0x1293,0x1296,0x1293,0x1293,0x1296,0x101a,0x101a,0x101a,0x101a,0x101a,0x1017,0x1017,0x101a, -0x101a,0x101a,0x101a,0x101a,0x101a,0x1521,0x1521,0x1521,0x1128,0x1017,0x1017,0x1017,0x1017,0x12cc,0x12a5,0x12a5, -0x12a5,0x12a5,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1038,0x1038,0x1035,0x102f,0x1035,0x102f,0x1035,0x102f, -0x1035,0x102f,0x102c,0x102c,0x102c,0x102c,0x1041,0x103e,0x102c,0x1185,0x141c,0x141f,0x141f,0x141c,0x141c,0x141c, -0x141c,0x141c,0x1422,0x1422,0x153c,0x1530,0x1530,0x152d,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056, -0x1053,0x1050,0x1050,0x105f,0x1056,0x135c,0x1359,0x172b,0x135c,0x1359,0x142b,0x1428,0x153f,0x153f,0x1545,0x153f, -0x1545,0x153f,0x1545,0x153f,0x1545,0x153f,0x1545,0x153f,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056, -0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056, -0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x1056,0x1059,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056, -0x1056,0x105f,0x1056,0x105f,0x1056,0x105f,0x105f,0x1056,0x1062,0x1062,0x1068,0x106e,0x106e,0x106e,0x106e,0x106e, -0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e, -0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x106e,0x1068,0x1062,0x1062,0x1062,0x1062,0x1068,0x1068, -0x1062,0x1062,0x106b,0x1434,0x1431,0x1431,0x106e,0x106e,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065, -0x1065,0x1065,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083, -0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083, -0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x1083,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c, -0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c, -0x108f,0x108f,0x108f,0x1092,0x108f,0x108f,0x1095,0x1095,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098, +0xea0,0xea0,0xea0,0xea0,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9, +0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9,0xea9, +0xea9,0xea9,0xea9,0xea3,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6, +0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea6,0xea9, +0xea9,0xea9,0xea9,0xea9,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2, +0xeb2,0xeb2,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeaf,0xeac,0xeb5,0x105c,0x1056,0x1065,0x1053, +0xeb2,0xeb2,0x1053,0x1053,0xec7,0xec7,0xeb8,0xec7,0xec7,0xec7,0xebe,0xec7,0xec7,0xec7,0xec7,0xeb8, +0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7, +0xec7,0xec7,0xec7,0xec7,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca,0xeca, +#if U_PLATFORM_IS_DARWIN_BASED +0xeca,0xeca,0xeca,0xeca,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2, +0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2, +0xee2,0xee2,0xee2,0xee2,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00, +0xf00,0xf00,0xf00,0xf00,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b, +0x115b,0x115b,0x115b,0x115b,0xf33,0xf33,0xf33,0xf30,0xf30,0xf30,0xf30,0xf30,0x1194,0x13ec,0x13ec,0x13ec, +0x13ec,0x136e,0x136e,0x136e,0x13ef,0x1371,0x1371,0x13ef,0x1533,0x1533,0x1533,0x1533,0x1536,0x1536,0x1536,0x17fd, +0x17fd,0x17fd,0x17fd,0x18c3,0xf48,0xf48,0xf48,0xf48,0x1041,0x1041,0x1041,0x1041,0x1041,0x1041,0x1041,0x1041, +0x1041,0x1041,0x1041,0x1041,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044, +0x1044,0x1044,0x1044,0x1044,0xf69,0xf69,0xf69,0xf69,0xf7b,0xf84,0xf87,0xf84,0xf87,0xf84,0xf87,0xf84, +0xf87,0xf84,0xf87,0xf84,0xf84,0xf84,0xf87,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84, +0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0xf6c,0xf7b,0xf69,0xf69, +0xf69,0xf69,0xf69,0xf7e,0xf69,0xf7e,0xf7b,0xf7b,0xf90,0xf8d,0xf90,0xf90,0xf90,0xf8d,0xf8d,0xf90, +0xf8d,0xf90,0xf8d,0xf90,0xf8d,0x1077,0x1077,0x1077,0x11b2,0x106e,0x1077,0x106e,0xf8d,0xf90,0xf8d,0xf8d, +0x106e,0x106e,0x106e,0x106e,0x1071,0x1074,0x11b2,0x11b2,0xf93,0xf93,0x1089,0x1080,0x1089,0x1080,0x1089,0x1080, +0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0x1080,0x1080,0x1089,0x1080,0x1089,0x1080,0x1089,0x1080, +0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99, +0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99, +0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8, +0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8, +0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0xfa8,0x1572,0x1572,0x1572,0x1572,0x1572, +0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0xfae,0xfae,0xfae,0xfae, +0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae, +0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xfae,0xff6,0x1011,0x1008,0x1005, +0x1005,0x1011,0x1011,0x1008,0x1008,0x1005,0x1005,0x1005,0x1005,0x1005,0x1011,0x1011,0x1011,0xff6,0xff6,0xff6, +0xff6,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0xff6,0x1008, +0x100b,0xff6,0xff6,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0xff9,0x1011,0x100e,0x1002,0x1002,0x1002,0x1002, +0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x117c,0x117c,0x1179,0x1176,0xfff,0xfff,0x1029,0x1029,0x1029,0x1029, +0x12ed,0x12ed,0x12c3,0x12c3,0x12c9,0x12c0,0x12c0,0x12c0,0x12c0,0x12c3,0x13f2,0x12c9,0x12c3,0x12c9,0x12c0,0x12c9, +0x12ed,0x12c0,0x12c0,0x12c0,0x12c3,0x12c3,0x12c0,0x12c0,0x12c3,0x12c0,0x12c0,0x12c3,0x1044,0x1044,0x1044,0x1044, +0x1044,0x1041,0x1041,0x1044,0x1044,0x1044,0x1044,0x1044,0x1044,0x154b,0x154b,0x154b,0x1152,0x1041,0x1041,0x1041, +0x1041,0x12f9,0x12d2,0x12d2,0x12d2,0x12d2,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x1062,0x1062,0x105f,0x1059, +0x105f,0x1059,0x105f,0x1059,0x105f,0x1059,0x1056,0x1056,0x1056,0x1056,0x106b,0x1068,0x1056,0x11af,0x1449,0x144c, +0x144c,0x1449,0x1449,0x1449,0x1449,0x1449,0x144f,0x144f,0x1566,0x155a,0x155a,0x1557,0x1089,0x1080,0x1089,0x1080, +0x1089,0x1080,0x1089,0x1080,0x107d,0x107a,0x107a,0x1089,0x1080,0x1392,0x138f,0x1755,0x1392,0x138f,0x1458,0x1455, +0x1569,0x1569,0x156f,0x1569,0x156f,0x1569,0x156f,0x1569,0x156f,0x1569,0x156f,0x1569,0x1089,0x1080,0x1089,0x1080, +0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0x1089,0x1080, +0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0x1089,0x1080,0x1083,0x1080,0x1080,0x1080, +0x1080,0x1080,0x1080,0x1080,0x1080,0x1089,0x1080,0x1089,0x1080,0x1089,0x1089,0x1080,0x108c,0x108c,0x1092,0x1098, 0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098, -0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1, -0x10a1,0x10a1,0x10a1,0x10a1,0x10a4,0x109b,0x10aa,0x10a7,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1, -0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1, -0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x1362,0x135f,0x10bc,0x10b6,0x10bc,0x10b6,0x10bc,0x10b6, -0x10bc,0x10b6,0x10bc,0x10b6,0x10bc,0x10b6,0x10b9,0x113a,0x10ad,0x10ad,0x10ad,0x10b3,0x143a,0x143a,0x143a,0x143a, -0x143a,0x143a,0x143a,0x143a,0x10b0,0x10b0,0x10b3,0x10bf,0x10bc,0x10b6,0x10bc,0x10b6,0x10bc,0x10b6,0x10bc,0x10b6, -0x10bc,0x10b6,0x10bc,0x10b6,0x10bc,0x10b6,0x10bc,0x10b6,0x10bc,0x10b6,0x10bc,0x10b6,0x10bc,0x10b6,0x10bc,0x10b6, -0x10bc,0x10b6,0x10bc,0x10b6,0x10bc,0x10b6,0x10bc,0x10b6,0x1554,0x1551,0x1554,0x1551,0x1557,0x1557,0x1734,0x143a, -0x10c8,0x10c8,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb, +0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1092,0x108c,0x108c, +0x108c,0x108c,0x1092,0x1092,0x108c,0x108c,0x1095,0x1461,0x145e,0x145e,0x1098,0x1098,0x108f,0x108f,0x108f,0x108f, +0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x10ad,0x10ad,0x10ad,0x10ad, +0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad, +0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10ad,0x10b6,0x10b6,0x10b6,0x10b6, +0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6, +0x10b6,0x10b6,0x10b6,0x10b6,0x10b9,0x10b9,0x10b9,0x10bc,0x10b9,0x10b9,0x10bf,0x10bf,0x10c2,0x10c2,0x10c2,0x10c2, +0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2, +0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10cb,0x10cb,0x10cb,0x10cb, +0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10ce,0x10c5,0x10d4,0x10d1,0x10cb,0x10cb,0x10cb,0x10cb, 0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb, -0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10da,0x10da,0x10da,0x10da, -0x10da,0x10da,0x10d1,0x10d1,0x10d1,0x10d1,0x10d1,0x10d4,0x10d4,0x10d4,0x112e,0x10dd,0x10ec,0x10ec,0x10ec,0x10ec, -0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10ec,0x10d7,0x10d7,0x10d7,0x10d7, -0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da, -0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10da,0x10fb,0x10fb,0x10fb,0x10fb, -0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb, -0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x110d,0x110d,0x110d,0x110d, +0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x1398,0x1395,0x10e6,0x10e0, +0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0,0x10e3,0x1164,0x10d7,0x10d7,0x10d7,0x10dd, +0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x10da,0x10da,0x10dd,0x10e9,0x10e6,0x10e0,0x10e6,0x10e0, +0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0, +0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0,0x10e6,0x10e0,0x157e,0x157b,0x157e,0x157b, +0x1581,0x1581,0x175e,0x1467,0x10f2,0x10f2,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5, +0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5,0x10f5, +0x10f5,0x10f5,0x10f5,0x10f5,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2, +0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fe,0x10fe,0x10fe,0x1158,0x1107, +0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116, +0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104, +0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104, +0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125, +#endif /* U_PLATFORM_IS_DARWIN_BASED */ +0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125, +#if !U_PLATFORM_IS_DARWIN_BASED +0xefd,0xefd,0xefd,0xefa,0xefa,0xefa,0xefa,0xefa,0x115e,0x13b6,0x13b6,0x13b6,0x13b6,0x1338,0x1338,0x1338, +0x13b9,0x133b,0x133b,0x13b9,0x14fd,0x14fd,0x14fd,0x14fd,0x1500,0x1500,0x1500,0x17c7,0x17c7,0x17c7,0x17c7,0x188d, +0xf12,0xf12,0xf12,0xf12,0x100b,0x100b,0x100b,0x100b,0x100b,0x100b,0x100b,0x100b,0x100b,0x100b,0x100b,0x100b, +0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e, +0xf33,0xf33,0xf33,0xf33,0xf45,0xf4e,0xf51,0xf4e,0xf51,0xf4e,0xf51,0xf4e,0xf51,0xf4e,0xf51,0xf4e, +0xf4e,0xf4e,0xf51,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e, +0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf36,0xf45,0xf33,0xf33,0xf33,0xf33,0xf33,0xf48, +0xf33,0xf48,0xf45,0xf45,0xf5a,0xf57,0xf5a,0xf5a,0xf5a,0xf57,0xf57,0xf5a,0xf57,0xf5a,0xf57,0xf5a, +0xf57,0x1041,0x1041,0x1041,0x117c,0x1038,0x1041,0x1038,0xf57,0xf5a,0xf57,0xf57,0x1038,0x1038,0x1038,0x1038, +0x103b,0x103e,0x117c,0x117c,0xf5d,0xf5d,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a, +0x1053,0x104a,0x1053,0x104a,0x104a,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a, +0x1053,0x104a,0x1053,0x104a,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63, +0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63,0xf63, +0xf63,0xf63,0xf63,0xf63,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72, +0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72, +0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0xf72,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c, +0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78, +0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78, +0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xf78,0xfc0,0xfdb,0xfd2,0xfcf,0xfcf,0xfdb,0xfdb,0xfd2, +0xfd2,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfdb,0xfdb,0xfdb,0xfc0,0xfc0,0xfc0,0xfc0,0xfdb,0xfdb,0xfdb, +0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfc0,0xfd2,0xfd5,0xfc0,0xfc0,0xfd8, +0xfd8,0xfd8,0xfd8,0xfd8,0xfd8,0xfc3,0xfdb,0xfd8,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc, +0xfcc,0xfcc,0x1146,0x1146,0x1143,0x1140,0xfc9,0xfc9,0xff3,0xff3,0xff3,0xff3,0x12b7,0x12b7,0x128d,0x128d, +0x1293,0x128a,0x128a,0x128a,0x128a,0x128d,0x13bc,0x1293,0x128d,0x1293,0x128a,0x1293,0x12b7,0x128a,0x128a,0x128a, +0x128d,0x128d,0x128a,0x128a,0x128d,0x128a,0x128a,0x128d,0x100e,0x100e,0x100e,0x100e,0x100e,0x100b,0x100b,0x100e, +0x100e,0x100e,0x100e,0x100e,0x100e,0x1515,0x1515,0x1515,0x111c,0x100b,0x100b,0x100b,0x100b,0x12c3,0x129c,0x129c, +0x129c,0x129c,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x102c,0x102c,0x1029,0x1023,0x1029,0x1023,0x1029,0x1023, +0x1029,0x1023,0x1020,0x1020,0x1020,0x1020,0x1035,0x1032,0x1020,0x1179,0x1413,0x1416,0x1416,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1419,0x1419,0x1530,0x1524,0x1524,0x1521,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a, +0x1047,0x1044,0x1044,0x1053,0x104a,0x135c,0x1359,0x171f,0x135c,0x1359,0x1422,0x141f,0x1533,0x1533,0x1539,0x1533, +0x1539,0x1533,0x1539,0x1533,0x1539,0x1533,0x1539,0x1533,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a, +0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a, +0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x104a,0x104d,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a, +0x104a,0x1053,0x104a,0x1053,0x104a,0x1053,0x1053,0x104a,0x1056,0x1056,0x105c,0x1062,0x1062,0x1062,0x1062,0x1062, +0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062, +0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x105c,0x1056,0x1056,0x1056,0x1056,0x105c,0x105c, +0x1056,0x1056,0x105f,0x142b,0x1428,0x1428,0x1062,0x1062,0x1059,0x1059,0x1059,0x1059,0x1059,0x1059,0x1059,0x1059, +0x1059,0x1059,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077, +0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077, +0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080, +0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080, +0x1083,0x1083,0x1083,0x1086,0x1083,0x1083,0x1089,0x1089,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c, +0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c, +0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x108c,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095, +0x1095,0x1095,0x1095,0x1095,0x1098,0x108f,0x109e,0x109b,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095, +0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095, +0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1362,0x135f,0x10b0,0x10aa,0x10b0,0x10aa,0x10b0,0x10aa, +0x10b0,0x10aa,0x10b0,0x10aa,0x10b0,0x10aa,0x10ad,0x112e,0x10a1,0x10a1,0x10a1,0x10a7,0x1431,0x1431,0x1431,0x1431, +0x1431,0x1431,0x1431,0x1431,0x10a4,0x10a4,0x10a7,0x10b3,0x10b0,0x10aa,0x10b0,0x10aa,0x10b0,0x10aa,0x10b0,0x10aa, +0x10b0,0x10aa,0x10b0,0x10aa,0x10b0,0x10aa,0x10b0,0x10aa,0x10b0,0x10aa,0x10b0,0x10aa,0x10b0,0x10aa,0x10b0,0x10aa, +0x10b0,0x10aa,0x10b0,0x10aa,0x10b0,0x10aa,0x10b0,0x10aa,0x1548,0x1545,0x1548,0x1545,0x154b,0x154b,0x1728,0x1431, +0x10bc,0x10bc,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf, +0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf, +0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10ce,0x10ce,0x10ce,0x10ce, +0x10ce,0x10ce,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c8,0x10c8,0x10c8,0x1122,0x10d1,0x10e0,0x10e0,0x10e0,0x10e0, +0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10cb,0x10cb,0x10cb,0x10cb, +0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce, +0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ef,0x10ef,0x10ef,0x10ef, +0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef, +0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x1101,0x1101,0x1101,0x1101, +0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101, +0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x1101,0x110a,0x110a,0x110a,0x110a, +0x111f,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a, +0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110d,0x110d,0x110d,0x110d, 0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d, -0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x1116,0x1116,0x1116,0x1116, -0x112b,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116, -0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1116,0x1119,0x1119,0x1119,0x1119, -0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119, -0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1125,0x1125,0x1125,0x1125, -0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x14c4,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2, -0x17b2,0x17b2,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x119a,0x119a,0x119a,0x119a, -0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a, -0x119a,0x119a,0x1191,0x1191,0x1194,0x1194,0x119a,0x1191,0x1191,0x1191,0x1191,0x1191,0x119d,0x119d,0x119d,0x119d, -0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d, -0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x11b8,0x11b8,0x11b8,0x11b8, -0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8, -0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11c4,0x11c4,0x11c4,0x11c4, +0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x1119,0x1119,0x1119,0x1119, +0x12bd,0x12bd,0x12bd,0x12bd,0x12bd,0x12bd,0x12bd,0x12bd,0x14bb,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6, +0x17a6,0x17a6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x118e,0x118e,0x118e,0x118e, +0x118e,0x118e,0x118e,0x118e,0x118e,0x118e,0x118e,0x118e,0x118e,0x118e,0x118e,0x118e,0x118e,0x118e,0x118e,0x118e, +0x118e,0x118e,0x1185,0x1185,0x1188,0x1188,0x118e,0x1185,0x1185,0x1185,0x1185,0x1185,0x1194,0x1194,0x1194,0x1194, +0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194, +0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x1194,0x11af,0x11af,0x11af,0x11af, +0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af, +0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11bb,0x11bb,0x11bb,0x11bb, +0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb, +0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11b8,0x11be,0x11ca,0x11ca,0x11ca,0x11ca, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137, +0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137,0x1137, +0x1140,0x1140,0x1140,0x1140,0x1155,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140, +0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140,0x1140, +0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143, +0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143,0x1143, +0x114f,0x114f,0x114f,0x114f,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x14f1,0x17dc,0x17dc,0x17dc, +0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c, 0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4, -0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c1,0x11c7,0x11d3,0x11d3,0x11d3,0x11d3, -0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3, -0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11e2,0x11e2,0x11e2,0x11f1, -0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7, -0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11e5, -0x11f1,0x11f1,0x11e2,0x11e2,0x11e2,0x11e2,0x11f1,0x11f1,0x11e2,0x11f1,0x11f1,0x11f1,0x1203,0x1203,0x1203,0x1203, -0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1206,0x1203,0x1203,0x1203, -0x1203,0x1203,0x1203,0x11fd,0x11fd,0x11fd,0x1203,0x1200,0x155d,0x1560,0x1563,0x1563,0x1215,0x1215,0x1215,0x1215, -0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1209,0x1215,0x1209,0x1209, -0x1209,0x121e,0x121e,0x1209,0x1209,0x121e,0x1215,0x121e,0x121e,0x1215,0x1209,0x120c,0x1215,0x1215,0x1215,0x1215, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215, -#if !U_PLATFORM_IS_DARWIN_BASED -0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224, -0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224, -0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x122a,0x122a,0x1239,0x123c,0x123c,0x123c,0x123c,0x123c, -0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c, -0x123c,0x123c,0x123f,0x123c,0x123f,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c,0x123c, -0x123c,0x123c,0x123c,0x123f,0x123c,0x123c,0x123c,0x123c,0x1239,0x1239,0x1239,0x122d,0x122d,0x122d,0x122d,0x1239, -0x1239,0x1233,0x1230,0x1236,0x1236,0x1245,0x1242,0x1242,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248, -0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248, -0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x124e,0x124e,0x124e,0x124b,0x124b,0x124b,0x1248,0x1248, -0x1248,0x1248,0x124b,0x1248,0x1248,0x1248,0x124e,0x124b,0x124e,0x124b,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1230,0x1230,0x1230,0x1230, -0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230, -0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1248,0x1248,0x1248,0x1248, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11bb,0x11bb,0x11be,0x11be,0x11c4,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca, +#if !U_PLATFORM_IS_DARWIN_BASED +0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11d0,0x11d0,0x11d0,0x11d0, +0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x1308,0x11d6,0x130b, +0x11d6,0x11d6,0x11d6,0x11d6,0x11d3,0x11d3,0x11d3,0x11d6,0x172b,0x172e,0x1950,0x194d,0x11d9,0x11d9,0x11d9,0x11e8, +0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee, +0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11dc, +0x11e8,0x11e8,0x11d9,0x11d9,0x11d9,0x11d9,0x11e8,0x11e8,0x11d9,0x11e8,0x11e8,0x11e8,0x11fa,0x11fa,0x11fa,0x11fa, +0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fa,0x11fd,0x11fa,0x11fa,0x11fa, +0x11fa,0x11fa,0x11fa,0x11f4,0x11f4,0x11f4,0x11fa,0x11f7,0x1551,0x1554,0x1557,0x1557,0x120c,0x120c,0x120c,0x120c, +0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x1200,0x120c,0x1200,0x1200, +0x1200,0x1215,0x1215,0x1200,0x1200,0x1215,0x120c,0x1215,0x1215,0x120c,0x1200,0x1203,0x120c,0x120c,0x120c,0x120c, +0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c, +0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x1227,0x1227,0x1227,0x1227, +0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227, +0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x1227,0x123f,0x123f,0x123f,0x123f, +0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f, +0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123f,0x123c,0x123c,0x123c,0x1248,0x1248,0x1248,0x1248, 0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248, -#if !U_PLATFORM_IS_DARWIN_BASED -0x1248,0x1248,0x1248,0x1248,0x1248,0x124e,0x124b,0x124b,0x1248,0x1248,0x1248,0x1248,0x125a,0x125a,0x1302,0x1257, -0x1302,0x1302,0x1302,0x1302,0x1257,0x125d,0x1284,0x1257,0x1257,0x1257,0x1257,0x1257,0x125d,0x1260,0x1284,0x1284, -0x1260,0x1284,0x1257,0x1260,0x1260,0x1263,0x1284,0x1257,0x1257,0x1284,0x125a,0x125a,0x1371,0x1371,0x1371,0x1371, -0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x126c,0x126c,0x126c,0x126c,0x138c,0x136b,0x1275,0x138c,0x138c,0x138c, -0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1824,0x1824,0x1824,0x1824,0x1824,0x1374,0x1374,0x127b,0x1374, -0x1374,0x1374,0x127b,0x1374,0x1374,0x1374,0x1275,0x1275,0x1275,0x1275,0x1275,0x136e,0x1371,0x1371,0x1371,0x1371, -0x1371,0x1371,0x1371,0x1278,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1278,0x12a2,0x12a2,0x12a2,0x12a2, -0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2, -0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x1344,0x1344,0x1344,0x1344, -0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344, -0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x1359,0x134a,0x1359,0x135c, -0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c, -0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x134a,0x134a,0x134a,0x134a, -0x134a,0x134a,0x134a,0x134a,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362, -0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362,0x1362, -0x1362,0x1362,0x1362,0x1362,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368, -0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368,0x1368, -0x1368,0x1368,0x1368,0x1368,0x1398,0x1395,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc, -0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc, -0x18cc,0x18cc,0x18cc,0x18cc,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a1,0x13a1,0x13a1,0x13a4,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x139e,0x139e,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x139e,0x13a1,0x13a1,0x13a1,0x139e,0x13a1,0x139e,0x13a1,0x139e,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a7,0x13a1, -0x13a1,0x13a1,0x13a1,0x139e,0x13a1,0x139e,0x139e,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4, -0x13a4,0x13a1,0x13a1,0x13a1,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x139e,0x139e,0x139e,0x139e,0x139e, -0x139e,0x139e,0x139e,0x139e,0x139e,0x13a1,0x13a1,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x1533,0x1533, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x153c,0x1536,0x1536,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x1779,0x1779,0x1779, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x153c,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x153c,0x1779,0x1779, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a7,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a4,0x1536,0x1536,0x153c,0x153c,0x1536,0x153c,0x153c,0x153c,0x1533,0x1533,0x153c,0x153c, -0x13a1,0x13a1,0x13a7,0x13a7,0x13a7,0x16aa,0x13a1,0x13a7,0x13a1,0x13a1,0x13a7,0x1542,0x1542,0x153c,0x153c,0x1779, -0x1779,0x1779,0x1779,0x1779,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a1,0x13a4,0x13a1,0x13a1, -0x13a1,0x1536,0x1536,0x153c,0x16aa,0x153c,0x1536,0x153c,0x1779,0x1779,0x1779,0x177c,0x177c,0x177c,0x177c,0x177c, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x153c, -0x13a1,0x153c,0x13a7,0x13a7,0x13a1,0x13a1,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, -0x13a7,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13aa,0x13aa,0x13aa,0x13aa,0x13a1,0x13a1,0x13a1,0x13a1,0x13a7,0x13a1,0x13a7,0x13a7,0x13a7,0x13a7, -0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a1,0x13a1,0x13a1,0x13a7,0x13a1,0x13a1,0x13a1,0x13a1,0x13a7,0x13a7,0x13a7, -0x13a1,0x13a7,0x13a7,0x13a7,0x13a1,0x13a1,0x13a1,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x16aa,0x13a1,0x13a1,0x13a1,0x13a1,0x153c,0x1536,0x1779,0x1404,0x1404,0x1404,0x1404,0x1533,0x1533,0x1533,0x1533, -0x1533,0x1539,0x153c,0x1779,0x1779,0x1779,0x1779,0x1701,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x153c, -0x153c,0x1536,0x1536,0x153c,0x1542,0x1542,0x153c,0x153c,0x153c,0x153c,0x182d,0x1536,0x1536,0x1536,0x1536,0x1536, -0x1536,0x153c,0x1536,0x153c,0x1536,0x1536,0x1536,0x1536,0x153f,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x153c, -0x1536,0x1536,0x1536,0x153c,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x153c,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, -0x148e,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad, -0x13ad,0x148e,0x13ad,0x13ad,0x13ad,0x148e,0x13ad,0x148e,0x13ad,0x148e,0x13ad,0x148e,0x13ad,0x13ad,0x13ad,0x148e, -0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x148e,0x148e,0x13ad,0x13ad,0x13ad,0x13ad,0x148e,0x13ad,0x148e,0x148e, -0x13ad,0x13ad,0x13ad,0x13ad,0x148e,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad, -0x13ad,0x16b0,0x16b0,0x177f,0x177f,0x13b0,0x13b0,0x13b0,0x13ad,0x13ad,0x13ad,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0, -0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f, -0x13b6,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3, -0x13b3,0x13b3,0x13b6,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3, -0x13b3,0x13b3,0x13b3,0x13b9,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3, -0x13b3,0x13b3,0x13b3,0x13b3,0x13b9,0x13b9,0x13b9,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3, -0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc, -0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc, -0x17ac,0x17ac,0x17a9,0x1704,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407, -0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x154b, -0x1416,0x1416,0x1416,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428, -0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428,0x1428, -0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443, -0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443, -0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c, -0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c, -0x1452,0x1452,0x145e,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1245,0x1245,0x1245,0x1251,0x1251,0x1251,0x1251, -0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251, -0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1260,0x1260,0x1260,0x1260, -0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260, -0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1266,0x1266,0x1275,0x1278, -0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278, -0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x127b,0x1278,0x127b,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278, -0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x127b,0x1278,0x1278,0x1278,0x1278,0x1275,0x1275,0x1275,0x1269, -0x1269,0x1269,0x1269,0x1275,0x1275,0x126f,0x126c,0x1272,0x1272,0x1281,0x127e,0x127e,0x1284,0x1284,0x1284,0x1284, -0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284, -0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x128a,0x128a,0x128a,0x1287, -0x1287,0x1287,0x1284,0x1284,0x1284,0x1284,0x1287,0x1284,0x1284,0x1284,0x128a,0x1287,0x128a,0x1287,0x1284,0x1284, -0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284, -0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x128a,0x1287,0x1287,0x1284,0x1284,0x1284,0x1284, -0x1296,0x1296,0x133e,0x1293,0x133e,0x133e,0x133e,0x133e,0x1293,0x1299,0x12c0,0x1293,0x1293,0x1293,0x1293,0x1293, -0x1299,0x129c,0x12c0,0x12c0,0x129c,0x12c0,0x1293,0x129c,0x129c,0x129f,0x12c0,0x1293,0x1293,0x12c0,0x1296,0x1296, -0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x12a8,0x12a8,0x12a8,0x12a8,0x13c8,0x13a7, -0x12b1,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x1860,0x1860,0x1860,0x1860,0x1860, -0x13b0,0x13b0,0x12b7,0x13b0,0x13b0,0x13b0,0x12b7,0x13b0,0x13b0,0x13b0,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x13aa, -0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x12b4,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x12b4, -0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de, -0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de,0x12de, +0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1248,0x1257,0x1257,0x1257,0x1257, +0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257, +0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x125d,0x125d,0x126c,0x126f, +0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f, +0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x1272,0x126f,0x1272,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f, +0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x126f,0x1272,0x126f,0x126f,0x126f,0x126f,0x126c,0x126c,0x126c,0x1260, +0x1260,0x1260,0x1260,0x126c,0x126c,0x1266,0x1263,0x1269,0x1269,0x1278,0x1275,0x1275,0x127b,0x127b,0x127b,0x127b, +0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b, +0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x1281,0x1281,0x1281,0x127e, +0x127e,0x127e,0x127b,0x127b,0x127b,0x127b,0x127e,0x127b,0x127b,0x127b,0x1281,0x127e,0x1281,0x127e,0x127b,0x127b, +0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b, +0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x1281,0x127e,0x127e,0x127b,0x127b,0x127b,0x127b, +0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a2,0x12a5,0x12a5,0x12a5,0x1284,0x1956, +0x13b0,0x12ae,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x12ae,0x13b0,0x12ae, +0x128d,0x128d,0x133e,0x128a,0x133e,0x133e,0x133e,0x133e,0x128a,0x1290,0x12b7,0x128a,0x128a,0x128a,0x128a,0x128a, +0x1290,0x1293,0x12b7,0x12b7,0x1293,0x12b7,0x128a,0x1293,0x1293,0x1296,0x12b7,0x128a,0x128a,0x12b7,0x128d,0x128d, +0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x129f,0x129f,0x129f,0x129f,0x13c8,0x13a7, +0x12a8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x1854,0x1854,0x1854,0x1854,0x1854, +0x13b0,0x13b0,0x12ae,0x13b0,0x13b0,0x13b0,0x12ae,0x13b0,0x13b0,0x13b0,0x12a8,0x12a8,0x12a8,0x12a8,0x12a8,0x13aa, +0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x12ab,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x12ab, +0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5, +0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5,0x12d5, 0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380, 0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380,0x1380, 0x1395,0x1386,0x1395,0x1398,0x1398,0x1398,0x1398,0x1398,0x1398,0x1398,0x1398,0x1398,0x1398,0x1398,0x1398,0x1398, @@ -5561,309 +5529,454 @@ static const uint16_t propsVectorsTrie_index[29432]={ 0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e, 0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x139e,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4, 0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4, -0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13d4,0x13d1,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908, -0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908, -0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x13dd,0x13dd,0x13dd,0x13dd,0x13e0,0x13dd,0x13dd,0x13dd, -0x13e0,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13da,0x13da,0x13dd, +0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13d4,0x13d1,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc, +0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc, +0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, +0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13da,0x13da,0x13dd, 0x13dd,0x13dd,0x13dd,0x13dd,0x13da,0x13dd,0x13dd,0x13dd,0x13da,0x13dd,0x13da,0x13dd,0x13da,0x13dd,0x13dd,0x13dd, -0x13dd,0x13dd,0x13e3,0x13dd,0x13dd,0x13dd,0x13dd,0x13da,0x13dd,0x13da,0x13da,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, -0x13dd,0x13dd,0x13dd,0x13e0,0x13e0,0x13dd,0x13dd,0x13dd,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13dd, +0x13dd,0x13dd,0x13e0,0x13dd,0x13dd,0x13dd,0x13dd,0x13da,0x13dd,0x13da,0x13da,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, +0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13dd, 0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13da, -0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13dd,0x13dd,0x13e0,0x13dd,0x13dd,0x13dd,0x13dd, -0x13e0,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da, -0x13da,0x13da,0x156f,0x156f,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13e0,0x13dd,0x13dd,0x13dd, +0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, +0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da, +0x13da,0x13da,0x1563,0x1563,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, 0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, -0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x1578,0x1572,0x1572,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578, -0x1578,0x17b5,0x17b5,0x17b5,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x1578,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, -0x13dd,0x13dd,0x13e0,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, +0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x156f,0x1569,0x1569,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f, +0x156f,0x17a9,0x17a9,0x17a9,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x156f,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, 0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, -0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13e0,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, -0x13dd,0x1578,0x17b5,0x17b5,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13e3,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, -0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13e0,0x1572,0x1572,0x1578,0x1578,0x1572,0x1578,0x1578,0x1578, -0x156f,0x156f,0x1578,0x1578,0x13dd,0x13dd,0x13e3,0x13e3,0x13e3,0x16e6,0x13dd,0x13e3,0x13dd,0x13dd,0x13e3,0x157e, -0x157e,0x1578,0x1578,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578, -0x1578,0x1578,0x1578,0x1578,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13e0, -0x13dd,0x13e0,0x13dd,0x13dd,0x13dd,0x1572,0x1572,0x1578,0x16e6,0x1578,0x1572,0x1578,0x17b5,0x17b5,0x17b5,0x17b8, -0x17b8,0x17b8,0x17b8,0x17b8,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, +0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x156f,0x17a9,0x17a9,0x13dd,0x13dd,0x13dd,0x13dd, +0x13dd,0x13e0,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, +0x1569,0x1569,0x156f,0x156f,0x1569,0x156f,0x156f,0x156f,0x1566,0x1566,0x156f,0x156f,0x13dd,0x13dd,0x13e0,0x13e0, +0x13e0,0x16da,0x13dd,0x13e0,0x13dd,0x13dd,0x13e0,0x1572,0x1572,0x156f,0x156f,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9, +0x156f,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f,0x13dd,0x13dd,0x13dd,0x13dd, +0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x1569,0x1569,0x156f, +0x16da,0x156f,0x1569,0x156f,0x17a9,0x17a9,0x17a9,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x13dd,0x13dd,0x13dd,0x13dd, 0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, -0x13dd,0x13dd,0x13dd,0x1578,0x13dd,0x1578,0x13e3,0x13e3,0x13dd,0x13dd,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3, -0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, -0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13e6,0x13e6,0x13e6,0x13e6,0x13dd,0x13dd,0x13dd,0x13dd,0x13e3,0x13dd, -0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13dd,0x13dd,0x13dd,0x13e3,0x13dd,0x13dd,0x13dd, -0x13dd,0x13e3,0x13e3,0x13e3,0x13dd,0x13e3,0x13e3,0x13e3,0x13dd,0x13dd,0x13dd,0x13e0,0x13dd,0x13dd,0x13dd,0x13dd, +0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x156f,0x13dd,0x156f,0x13e0,0x13e0, +0x13dd,0x13dd,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13dd,0x13dd,0x13dd, +0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13e0,0x13e0, +0x13e0,0x13e0,0x13dd,0x13dd,0x13dd,0x13dd,0x13e0,0x13dd,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0,0x13e0, +0x13e0,0x13dd,0x13dd,0x13dd,0x13e0,0x13dd,0x13dd,0x13dd,0x13dd,0x13e0,0x13e0,0x13e0,0x13dd,0x13e0,0x13e0,0x13e0, 0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, -0x13dd,0x13dd,0x13dd,0x13dd,0x16e6,0x13dd,0x13dd,0x13dd,0x13dd,0x1578,0x1572,0x17b5,0x1440,0x1440,0x1440,0x1440, -0x156f,0x156f,0x156f,0x156f,0x156f,0x1575,0x1578,0x17b5,0x17b5,0x17b5,0x17b5,0x173d,0x13dd,0x13dd,0x13dd,0x13dd, -0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x1572,0x1572,0x1572,0x1572, -0x1572,0x1572,0x1572,0x1578,0x1578,0x1572,0x1572,0x1578,0x157e,0x157e,0x1578,0x1578,0x1578,0x1578,0x1869,0x1572, -0x1572,0x1572,0x1572,0x1572,0x1572,0x1578,0x1572,0x1578,0x1572,0x1572,0x1572,0x1572,0x157b,0x1572,0x1572,0x1572, -0x1572,0x1572,0x1572,0x1578,0x1572,0x1572,0x1572,0x1578,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f,0x1578,0x13dd, -0x13dd,0x13dd,0x13dd,0x13dd,0x14ca,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9, -0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x14ca,0x13e9,0x13e9,0x13e9,0x14ca,0x13e9,0x14ca,0x13e9,0x14ca,0x13e9,0x14ca, -0x13e9,0x13e9,0x13e9,0x14ca,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x14ca,0x14ca,0x13e9,0x13e9,0x13e9,0x13e9, -0x14ca,0x13e9,0x14ca,0x14ca,0x13e9,0x13e9,0x13e9,0x13e9,0x14ca,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9, -0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x16ec,0x16ec,0x17bb,0x17bb,0x13ec,0x13ec,0x13ec,0x13e9,0x13e9,0x13e9,0x13ec, -0x13ec,0x13ec,0x13ec,0x13ec,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b, -0x166b,0x166b,0x166b,0x166b,0x13f2,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef, -0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13f2,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef, -0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13f5,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef, -0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13f5,0x13f5,0x13f5,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef, -0x13ef,0x13ef,0x13ef,0x13ef,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8, -0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8, -0x13f8,0x13f8,0x13f8,0x13f8,0x17e8,0x17e8,0x17e5,0x1740,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1443,0x1443, -0x1443,0x1443,0x1443,0x1443,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446, -0x1446,0x1446,0x1446,0x1587,0x1452,0x1452,0x1452,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464, -#if !U_PLATFORM_IS_DARWIN_BASED -0x1464,0x1464,0x1464,0x145e,0x145e,0x145e,0x1452,0x1452,0x1452,0x1452,0x1452,0x1452,0x1452,0x1452,0x1452,0x145e, -0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485, -0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485, -0x1536,0x1536,0x153c,0x153c,0x153c,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536, -0x1536,0x153c,0x153c,0x153c,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x153c,0x153c,0x153c,0x1536, -0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x153c,0x1536,0x1536,0x153c,0x153c,0x153c,0x153c,0x1536,0x1536, -0x1542,0x1536,0x1536,0x1536,0x1536,0x16ad,0x16ad,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536, -0x182a,0x153c,0x1536,0x1536,0x153c,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x153c,0x153c,0x1536, -0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x153c,0x1536,0x1536,0x1536,0x1563,0x1563,0x1563,0x1563, -0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, -0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1575,0x1575,0x1575,0x1575, -0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575, -0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x1575,0x157b,0x157b,0x157b,0x157b, -0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b, -0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157e,0x157e,0x157e,0x157e, -0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e, -0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15ae,0x15c6,0x15c6,0x15c6,0x15c6, -0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6, -0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c0,0x15c9,0x15c9,0x15c9,0x15c9,0x15cc,0x15cc,0x15cc,0x15cc, -0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc, -0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15e7,0x15e7,0x15e7,0x15e7, -0x15e7,0x15e7,0x15e7,0x15e7,0x15de,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7, -0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15f0,0x15f0,0x15f0,0x15f0, -0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0, -0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x1602,0x1602,0x1602,0x1602, -0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x15ff,0x15ff,0x15ff,0x15f3, -0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15ff,0x15ff,0x15f3,0x15ff,0x15f6,0x1602,0x1602,0x1602,0x1602, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1464,0x1464,0x1464,0x1464,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f, +0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x16da,0x13dd,0x13dd,0x13dd,0x13dd,0x156f,0x1569,0x17a9, +0x1437,0x1437,0x1437,0x1437,0x1563,0x1563,0x1566,0x1566,0x1566,0x156c,0x156f,0x17a9,0x17a9,0x17a9,0x17a9,0x1731, +0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd, +0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x156f,0x156f,0x1569,0x1569,0x156f,0x1572,0x1572,0x156f,0x156f, +0x156f,0x156f,0x185d,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x156f,0x1569,0x156f,0x1569,0x1569,0x1569,0x1569, +0x156f,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x156f,0x1569,0x1569,0x1569,0x156f,0x1566,0x1566,0x1566,0x1566, +0x1566,0x1566,0x156f,0x13dd,0x13dd,0x13dd,0x13dd,0x13dd,0x14c1,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x14c1,0x13e3,0x13e3,0x13e3,0x14c1,0x13e3,0x14c1, +0x13e3,0x14c1,0x13e3,0x14c1,0x13e3,0x13e3,0x13e3,0x14c1,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x14c1,0x14c1, +0x13e3,0x13e3,0x13e3,0x13e3,0x14c1,0x13e3,0x14c1,0x14c1,0x13e3,0x13e3,0x13e3,0x13e3,0x14c1,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x16e0,0x16e0,0x17af,0x17af,0x13e6,0x13e6,0x13e6, +0x13e3,0x13e3,0x13e3,0x13e6,0x13e6,0x13e6,0x13e6,0x13e6,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f, +0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9, +0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9, +0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13ec,0x13e9,0x13e9,0x13e9,0x13e9, +0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13ec,0x13ec,0x13ec,0x13e9, +0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef, +0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef, +0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x17dc,0x17dc,0x17d9,0x1734,0x143d,0x143d,0x143d,0x143d, +0x143d,0x143d,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d, +0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x157b,0x1449,0x1449,0x1449,0x145b,0x145b,0x145b,0x145b,0x145b, +0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b, +0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476, +0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476, +0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f, 0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f, -0x147f,0x147f,0x147f,0x147f,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488, -0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488,0x1488, -0x1488,0x1488,0x1488,0x1488,0x148e,0x148e,0x149a,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0, -0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0, -0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x14a0,0x149a,0x149a,0x149a,0x148e,0x148e,0x148e,0x148e,0x148e,0x148e, -0x148e,0x148e,0x148e,0x149a,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1, -0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1, -0x14c1,0x14c1,0x14c1,0x14c1,0x1572,0x1572,0x1578,0x1578,0x1578,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572, -0x1572,0x1572,0x1572,0x1572,0x1572,0x1578,0x1578,0x1578,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f,0x156f, -0x1578,0x1578,0x1578,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1578,0x1572,0x1572,0x1578,0x1578, -0x1578,0x1578,0x1572,0x1572,0x157e,0x1572,0x1572,0x1572,0x1572,0x16e9,0x16e9,0x1572,0x1572,0x1572,0x1572,0x1572, -0x1572,0x1572,0x1572,0x1572,0x1866,0x1578,0x1572,0x1572,0x1578,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572, -0x1572,0x1578,0x1578,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1578,0x1572,0x1572,0x1572, -0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f, -0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f, -0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1, -0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1, -0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7, -0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7, -0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, -0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, -0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15ea, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602, -#if !U_PLATFORM_IS_DARWIN_BASED -0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1626,0x1626,0x1626,0x1626, -0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626, -0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1623,0x1623,0x1623,0x162f,0x162f,0x162f,0x162f, -0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f, -0x162f,0x162f,0x1635,0x1635,0x1635,0x1632,0x1632,0x1632,0x162f,0x162f,0x162f,0x162f,0x1644,0x1644,0x1644,0x1644, -0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1638,0x1638,0x1638,0x1638, -0x1638,0x1638,0x1638,0x164a,0x164a,0x163e,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x1644,0x1644,0x1644,0x1644, -0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644, -0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1650,0x1650,0x1650,0x1650, -0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650, -0x1650,0x1650,0x1650,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x1653,0x1653,0x1653,0x1653, -0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653, -0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1677,0x1677,0x1677,0x1677, -0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677, -0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1680,0x1680,0x1680,0x1680, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x15fc,0x1605,0x1605,0x1605,0x1605, -0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, -0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, -0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x161a,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623, +0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x1485,0x1485,0x1491,0x1497,0x1497,0x1497,0x1497,0x1497, +0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497, +0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1491,0x1491,0x1491,0x1485,0x1485, +0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1485,0x1491,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8, +0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8, +0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x192c,0x192c,0x192c,0x1515,0x1515,0x1515,0x1569,0x1569,0x156f,0x156f,0x156f,0x1569,0x1569,0x1569, +0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x156f,0x156f,0x156f,0x1566,0x1566,0x1566,0x1566, +0x1566,0x1566,0x1566,0x1566,0x156f,0x156f,0x156f,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x156f, +0x1569,0x1569,0x156f,0x156f,0x156f,0x156f,0x1569,0x1569,0x1572,0x1569,0x1569,0x1569,0x1569,0x16dd,0x16dd,0x1569, +0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x185a,0x156f,0x1569,0x1569,0x156f,0x1569,0x1569,0x1569, +0x1569,0x1569,0x1569,0x1569,0x1569,0x156f,0x156f,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569, +0x156f,0x1569,0x1569,0x1569,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593, +0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593,0x1593, +0x1593,0x1593,0x1593,0x1593,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, +0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, +0x15a5,0x15a5,0x15a5,0x15a5,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab, +0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab, +0x15ab,0x15ab,0x15ab,0x15ab,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae, +0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae, +0x15ae,0x15ae,0x15ae,0x15ae,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed, +0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed, +0x15ed,0x15ed,0x15ed,0x15de,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6, +0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f0, +0x15f9,0x15f9,0x15f9,0x15f9,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc, +0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc, +0x15fc,0x15fc,0x15fc,0x15fc,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x160e,0x1617,0x1617,0x1617, +0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617, +0x1617,0x1617,0x1617,0x1617,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620, +0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620, +0x1620,0x1620,0x1620,0x1620,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x162f,0x162f,0x162f,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x162f, +0x162f,0x1623,0x162f,0x1626,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca, +0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5, +0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5, +0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1, +0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11ee,0x11f4, +0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, +0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, +0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206, +0x1206,0x133e,0x120c,0x1341,0x120c,0x120c,0x120c,0x120c,0x1209,0x1209,0x1209,0x120c,0x1761,0x1764,0x1986,0x1983, +0x120f,0x120f,0x120f,0x121e,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224, +0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224, +0x1224,0x1224,0x1224,0x1212,0x121e,0x121e,0x120f,0x120f,0x120f,0x120f,0x121e,0x121e,0x120f,0x121e,0x121e,0x121e, +0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230, +0x1233,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x122a,0x122a,0x122a,0x1230,0x122d,0x1587,0x158a,0x158d,0x158d, +0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242, +0x1236,0x1242,0x1236,0x1236,0x1236,0x124b,0x124b,0x1236,0x1236,0x124b,0x1242,0x124b,0x124b,0x1242,0x1236,0x1239, +0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242, +0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242, +0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d, +0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d, +0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275, +0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1272,0x1272,0x1272, +0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e, +0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e, +0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d, +0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d, +0x1293,0x1293,0x12a2,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5, +0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a8,0x12a5,0x12a8,0x12a5,0x12a5,0x12a5, +0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a5,0x12a8,0x12a5,0x12a5,0x12a5,0x12a5, +0x12a2,0x12a2,0x12a2,0x1296,0x1296,0x1296,0x1296,0x12a2,0x12a2,0x129c,0x1299,0x129f,0x129f,0x12ae,0x12ab,0x12ab, +0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1, +0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1, +0x12b7,0x12b7,0x12b7,0x12b4,0x12b4,0x12b4,0x12b1,0x12b1,0x12b1,0x12b1,0x12b4,0x12b1,0x12b1,0x12b1,0x12b7,0x12b4, +0x12b7,0x12b4,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1, +0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b1,0x12b7,0x12b4,0x12b4, +0x12b1,0x12b1,0x12b1,0x12b1,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x12db, +0x12db,0x12db,0x12ba,0x198c,0x13e6,0x12e4,0x13e6,0x13e6,0x13e6,0x13e6,0x13e6,0x13e6,0x13e6,0x13e6,0x13e6,0x13e6, +0x13e6,0x12e4,0x13e6,0x12e4,0x12c3,0x12c3,0x1374,0x12c0,0x1374,0x1374,0x1374,0x1374,0x12c0,0x12c6,0x12ed,0x12c0, +0x12c0,0x12c0,0x12c0,0x12c0,0x12c6,0x12c9,0x12ed,0x12ed,0x12c9,0x12ed,0x12c0,0x12c9,0x12c9,0x12cc,0x12ed,0x12c0, +0x12c0,0x12ed,0x12c3,0x12c3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x12d5,0x12d5, +0x12d5,0x12d5,0x13fe,0x13dd,0x12de,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x188a, +0x188a,0x188a,0x188a,0x188a,0x13e6,0x13e6,0x12e4,0x13e6,0x13e6,0x13e6,0x12e4,0x13e6,0x13e6,0x13e6,0x12de,0x12de, +0x12de,0x12de,0x12de,0x13e0,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x13e3,0x12e1,0x13e3,0x13e3,0x13e3,0x13e3, +0x13e3,0x13e3,0x13e3,0x12e1,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b, +0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b, +0x130b,0x130b,0x130b,0x130b,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6, +0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6, +0x13b6,0x13b6,0x13b6,0x13b6,0x13cb,0x13bc,0x13cb,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce, +0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce,0x13ce, +0x13ce,0x13ce,0x13ce,0x13ce,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13d4,0x13d4,0x13d4,0x13d4, +0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4, +0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13da,0x13da,0x13da,0x13da, +0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da, +0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x140a,0x1407,0x1932,0x1932, +0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932, +0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1410,0x1410,0x1413,0x1413,0x1413,0x1413,0x1413,0x1410,0x1413,0x1413,0x1413,0x1410,0x1413,0x1410,0x1413, +0x1410,0x1413,0x1413,0x1413,0x1413,0x1413,0x1416,0x1413,0x1413,0x1413,0x1413,0x1410,0x1413,0x1410,0x1410,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1410,0x1410,0x1410,0x1410, +0x1410,0x1410,0x1410,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410, +0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1599,0x1599,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x15a5,0x159f,0x159f,0x15a5,0x15a5,0x15a5,0x15a5, +0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x17df,0x17df,0x17df,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x15a5,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x15a5,0x17df,0x17df, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1416,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x159f,0x159f,0x15a5,0x15a5,0x159f,0x15a5,0x15a5,0x15a5,0x159c,0x159c,0x15a5,0x15a5, +0x1413,0x1413,0x1416,0x1416,0x1416,0x1710,0x1413,0x1416,0x1413,0x1413,0x1416,0x15a8,0x15a8,0x15a5,0x15a5,0x17df, +0x17df,0x17df,0x17df,0x17df,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x159f,0x159f,0x15a5,0x1710,0x15a5,0x159f,0x15a5,0x17df,0x17df,0x17df,0x17e2,0x17e2,0x17e2,0x17e2,0x17e2, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x15a5, +0x1413,0x15a5,0x1416,0x1416,0x1413,0x1413,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416, +0x1416,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1416,0x1416,0x1416,0x1416,0x1413,0x1413,0x1413,0x1413,0x1416,0x1413,0x1416,0x1416,0x1416,0x1416, +0x1416,0x1416,0x1416,0x1416,0x1416,0x1413,0x1413,0x1413,0x1416,0x1413,0x1413,0x1413,0x1413,0x1416,0x1416,0x1416, +0x1413,0x1416,0x1416,0x1416,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1710,0x1413,0x1413,0x1413, +0x1413,0x15a5,0x159f,0x17df,0x146d,0x146d,0x146d,0x146d,0x1599,0x1599,0x159c,0x159c,0x159c,0x15a2,0x15a5,0x17df, +0x17df,0x17df,0x17df,0x1767,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x15a5,0x15a5,0x159f,0x159f,0x15a5, +0x15a8,0x15a8,0x15a5,0x15a5,0x15a5,0x15a5,0x1893,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x15a5,0x159f,0x15a5, +0x159f,0x159f,0x159f,0x159f,0x15a5,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x15a5,0x159f,0x159f,0x159f,0x15a5, +0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x15a5,0x1413,0x1413,0x1413,0x1413,0x1413,0x14f7,0x1419,0x1419,0x1419, +0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x14f7,0x1419,0x1419, +0x1419,0x14f7,0x1419,0x14f7,0x1419,0x14f7,0x1419,0x14f7,0x1419,0x1419,0x1419,0x14f7,0x1419,0x1419,0x1419,0x1419, +0x1419,0x1419,0x14f7,0x14f7,0x1419,0x1419,0x1419,0x1419,0x14f7,0x1419,0x14f7,0x14f7,0x1419,0x1419,0x1419,0x1419, +0x14f7,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1419,0x1716,0x1716,0x17e5, +0x17e5,0x141c,0x141c,0x141c,0x1419,0x1419,0x1419,0x141c,0x141c,0x141c,0x141c,0x141c,0x1695,0x1695,0x1695,0x1695, +0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x141f,0x141f,0x141f,0x141f, +0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f, +0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x1422, +0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f, +0x1422,0x1422,0x1422,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x1425,0x1425,0x1425,0x1425, +0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425, +0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1812,0x1812,0x180f,0x176a, +0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1473,0x1473,0x1473,0x1473, +0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x1473,0x15b1,0x147f,0x147f,0x147f,0x1491, +0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491, +0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x14ac,0x14ac,0x14ac,0x14ac, +0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac, +0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14b5,0x14b5,0x14b5,0x14b5, +0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5, +0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14bb,0x14bb,0x14c7,0x14cd, +0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd, +0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14cd,0x14c7, +0x14c7,0x14c7,0x14bb,0x14bb,0x14bb,0x14bb,0x14bb,0x14bb,0x14bb,0x14bb,0x14bb,0x14c7,0x14ee,0x14ee,0x14ee,0x14ee, +0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee, +0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x14ee,0x154b,0x154b,0x154b,0x154b, +0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b, +0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x1962,0x1962,0x1962,0x154b,0x154b,0x154b,0x159f,0x159f,0x15a5,0x15a5, +0x15a5,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x15a5,0x15a5,0x15a5, +0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x15a5,0x15a5,0x15a5,0x159f,0x159f,0x159f,0x159f,0x159f, +0x159f,0x159f,0x159f,0x15a5,0x159f,0x159f,0x15a5,0x15a5,0x15a5,0x15a5,0x159f,0x159f,0x15a8,0x159f,0x159f,0x159f, +0x159f,0x1713,0x1713,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x1890,0x15a5,0x159f,0x159f, +0x15a5,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x15a5,0x15a5,0x159f,0x159f,0x159f,0x159f,0x159f, +0x159f,0x159f,0x159f,0x159f,0x15a5,0x159f,0x159f,0x159f,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9, +0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9, +0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db, +0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db, +0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1, +0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1, +0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4, +0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4, +0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623, 0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623, +0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1614,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c, 0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c, -0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c, -0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e, -0x163b,0x163b,0x163b,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x163b,0x163b,0x162f,0x163b,0x1632, -0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e, -0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e, -0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662, -0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x165f,0x165f,0x165f, -0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b, -0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x1671,0x1671,0x1671,0x166e,0x166e,0x166e,0x166b,0x166b,0x166b,0x166b, -0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680, -0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1686,0x1686,0x167a,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677, -0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680, -#if !U_PLATFORM_IS_DARWIN_BASED -0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1698,0x1698,0x1698,0x1698, -0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1683,0x1692,0x1692,0x1683, -0x1683,0x1683,0x1683,0x1683,0x1683,0x1692,0x1683,0x1695,0x1695,0x1683,0x1695,0x1683,0x1698,0x1698,0x1698,0x1698, -0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698, -0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x16a1,0x16a1,0x16a1,0x16a1, -0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1, -0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a7,0x16a7,0x16a7,0x16a7, -0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7, -0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x170a,0x170a,0x170a,0x170a, -0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a, -0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x1746,0x1746,0x1746,0x1746, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c, -0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689, -0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f, -0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f, -0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3, -0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3, -0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc, -0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc,0x16bc, -0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4, -0x16bf,0x16ce,0x16ce,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16bf,0x16ce,0x16bf,0x16d1,0x16d1,0x16bf,0x16d1,0x16bf, -0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4, -0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4, -0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd, -0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd, -0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3, -0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3, +0x162c,0x162c,0x162c,0x1626,0x162f,0x162f,0x162f,0x162f,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746, +0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, #if !U_PLATFORM_IS_DARWIN_BASED -0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x174c,0x1749, -#endif /* ! U_PLATFORM_IS_DARWIN_BASED */ -0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746, -#if !U_PLATFORM_IS_DARWIN_BASED -0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f, -0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f, -0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752, -0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752, -0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764, -0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764, -0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767, -0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767,0x1767, -0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a, -0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a, -0x176a,0x176a,0x176a,0x176d,0x176d,0x176d,0x176d,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a,0x176a, -0x176a,0x176a,0x176a,0x176a,0x176a,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176a,0x176d,0x176d, -0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d, -0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d,0x176d, -0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785, -0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785, -0x17ca,0x17ca,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7, -0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7, -0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca, -0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca, -0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818, -0x1818,0x1818,0x1818,0x1818,0x1818,0x1815,0x1815,0x1815,0x1800,0x1800,0x1800,0x1800,0x1800,0x1800,0x1800,0x1800, -0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818, -0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818,0x1818, -0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f, -0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f,0x183f, -0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842, -0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842, -0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899, -0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899, -0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba, -0x18ba,0x18ba,0x18ba,0x18a5,0x18ab,0x18a8,0x18a8,0x18a8,0x18a8,0x18b7,0x18bd,0x18a8,0x18a8,0x18a8,0x18a8,0x18b4, -0x18ba,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18b7,0x18b7,0x18a8,0x18a8,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba, -0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba, -0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc, -0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc, -0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db, -0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db, -0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1, -0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1,0x18e1, -0,0,0,0 +0x1632,0x1632,0x1632,0x1632,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656, #else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d, +0x1644,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d, +0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656, +#if !U_PLATFORM_IS_DARWIN_BASED +0x1656,0x1653,0x1653,0x1653,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f, +0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x1665,0x1665,0x1665,0x1662,0x1662,0x1662, +0x165f,0x165f,0x165f,0x165f,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674, +0x1674,0x1674,0x1674,0x1674,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x167a,0x167a,0x166e,0x166b,0x166b, +0x166b,0x166b,0x166b,0x166b,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674, +0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674, +0x1674,0x1674,0x1674,0x1674,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680, +0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x167d,0x167d,0x167d,0x167d,0x167d, +0x167d,0x167d,0x167d,0x167d,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683, +0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683, +0x1683,0x1683,0x1683,0x1683,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7, +0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7, +0x16a7,0x16a7,0x16a7,0x16a7,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0, +0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0,0x16b0, +0x16b0,0x16b0,0x16b0,0x16b0,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8, +0x16c8,0x16c8,0x16c8,0x16c8,0x16b3,0x16c2,0x16c2,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16c2,0x16b3,0x16c5, +0x16c5,0x16b3,0x16c5,0x16b3,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8, +0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8,0x16c8, +0x16c8,0x16c8,0x16c8,0x16c8,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1, +0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x16d1, +0x16d1,0x16d1,0x16d1,0x16d1,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7, +0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7, +0x16d7,0x16d7,0x16d7,0x16d7,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, +0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, +0x173a,0x173a,0x173a,0x173a,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776, +0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776, +0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x177c,0x1779,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776, +0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f, +0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f, +0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x177f,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782, 0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782, -0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782, -0x1782,0x1782,0x1788,0x1785,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782, -0x1782,0x1782,0x1782,0x1782,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b, -0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b,0x178b, -0x178b,0x178b,0x178b,0x178b,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e, -0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e,0x178e, -0x178e,0x178e,0x178e,0x178e,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0, -0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0, -0x17a0,0x17a0,0x17a0,0x17a0,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3, -0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3,0x17a3, -0x17a3,0x17a3,0x17a3,0x17a3,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6, -0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6, -0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a9,0x17a9,0x17a9,0x17a9,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6, -0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9, -0x17a9,0x17a6,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9, -0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9, -0x17a9,0x17a9,0x17a9,0x17a9,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1, -0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1, -0x17c1,0x17c1,0x17c1,0x17c1,0x1806,0x1806,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803, -0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803, -0x1803,0x1803,0x1803,0x1803,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806, -0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806, -0x1806,0x1806,0x1806,0x1806,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854, -0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1851,0x1851,0x1851,0x183c,0x183c,0x183c,0x183c, -0x183c,0x183c,0x183c,0x183c,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854, -0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854, -0x1854,0x1854,0x1854,0x1854,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b, -0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b, -0x187b,0x187b,0x187b,0x187b,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e, +0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794, +0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794, +0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1794,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797, +0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797, +0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a, +0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a, +0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179d,0x179d,0x179d,0x179d,0x179a, +0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179d,0x179d,0x179d, +0x179d,0x179d,0x179d,0x179d,0x179d,0x179a,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d, +0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d, +0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5, +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668, +0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1665,0x1665,0x1665,0x1659,0x1659,0x1659,0x1659,0x1659, +0x1659,0x1659,0x1659,0x1665,0x1665,0x1659,0x1665,0x165c,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668, +0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668, +0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c, +0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c, +0x168c,0x168c,0x168c,0x168c,0x168c,0x1689,0x1689,0x1689,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695, +0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x169b,0x169b, +0x169b,0x1698,0x1698,0x1698,0x1695,0x1695,0x1695,0x1695,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa, +0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x169e,0x16b0, +0x16b0,0x16a4,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa, +0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa, +0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6, +0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b6,0x16b3, +0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9, +0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9, +0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16b9,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd, +0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd, +0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16dd,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6, +0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6, +0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe, +0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16e9,0x16f8,0x16f8,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9, +0x16e9,0x16f8,0x16e9,0x16fb,0x16fb,0x16e9,0x16fb,0x16e9,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe, +0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe, +0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707, +0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707, +0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x1707,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d, +0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d, +0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770, +0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770, +0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac, +0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac, +0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17b2,0x17af,0x17ac,0x17ac,0x17ac,0x17ac, +0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17b5,0x17b5,0x17b5,0x17b5, +#endif /* !U_PLATFORM_IS_DARWIN_BASED */ +0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5, +#if !U_PLATFORM_IS_DARWIN_BASED +0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x1866,0x1866,0x1866, +0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902, +0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x17fa,0x17fa,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7, +0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7, +0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17f7,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa, +0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa, +0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x17fa,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848, +0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1845,0x1845,0x1845, +0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848, +0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848, +0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1863,0x1866, +0x1866,0x1866,0x1866,0x1866,0x1902,0x19e0,0x19e0,0x19e0,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866, +0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1902,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f, +0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f, +0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x186f,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872, +0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872, +0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9, +0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9, +0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea, +0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18d5,0x18db,0x18d8,0x18d8,0x18d8, +0x18d8,0x18e7,0x18ed,0x18d8,0x18d8,0x18d8,0x18d8,0x18e4,0x18ea,0x18d8,0x18d8,0x18d8,0x18d8,0x18d8,0x18d8,0x18d8, +0x18d8,0x18d8,0x18d8,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea, +0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18ea,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc, +0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc, +0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x18fc,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x1902,0x19e0, +0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0, +0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b, +0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b, +0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911, +0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911, +0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980, +0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980, +0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b, +0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b, +0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1, +0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1, +0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc, +0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc, +0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf, +0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf, +0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19bf,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8, +0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8, +0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c5,0x19c5,0x19c5,0,0,0,0 +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b8,0x17b8,0x17b8,0x17b8, +0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8, +0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17ca,0x17ca,0x17ca,0x17ca, +0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca, +0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17ca,0x17cd,0x17cd,0x17cd,0x17cd, +0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd, +0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17d0,0x17d0,0x17d0,0x17d0, +0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0, +0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d3, +0x17d3,0x17d3,0x17d3,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0,0x17d0, +0x17d0,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d0,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3, +0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3, +0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17eb,0x17eb,0x17eb,0x17eb, +0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb, +0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17ee,0x17ee,0x17ee,0x17ee, +0x17ee,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x1938,0x1938, +0x1938,0x1938,0x1938,0x1938,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1830,0x1830,0x182d,0x182d, +0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d, +0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x1830,0x1830,0x1830,0x1830, +0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830, +0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x187e,0x187e,0x187e,0x187e, +0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e, +0x187e,0x187b,0x187b,0x187b,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x1866,0x187e,0x187e,0x187e,0x187e, 0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e, -0x187e,0x187e,0x187e,0x187e,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5, -0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5, -0x18d5,0x18d5,0x18d5,0x18d5,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6, -0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18e1,0x18e7,0x18e4,0x18e4,0x18e4,0x18e4,0x18f3,0x18f9,0x18e4, -0x18e4,0x18e4,0x18e4,0x18f0,0x18f6,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18e4,0x18f3,0x18f3,0x18e4,0x18e4,0x18f6, -0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6,0x18f6, -0x18f6,0x18f6,0x18f6,0x18f6,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908, -0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908,0x1908, -0x1908,0x1908,0x1908,0x1908,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917, -0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917,0x1917, -0x1917,0x1917,0x1917,0x1917,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d, -0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d, -0x191d,0x191d,0x191d,0x191d,0,0,0,0 +0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x189c,0x189c,0x189c,0x189c, +0x189c,0x189c,0x1899,0x189c,0x189c,0x189c,0x189c,0x189c,0x1938,0x1a16,0x1a16,0x1a16,0x189c,0x189c,0x189c,0x189c, +0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x189c,0x1938,0x18a5,0x18a5,0x18a5,0x18a5, +0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5, +0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a5,0x18a8,0x18a8,0x18a8,0x18a8, +0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8, +0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18ff,0x18ff,0x18ff,0x18ff, +0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff, +0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x1920,0x1920,0x1920,0x1920, +0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x190b, +0x1911,0x190e,0x190e,0x190e,0x190e,0x191d,0x1923,0x190e,0x190e,0x190e,0x190e,0x191a,0x1920,0x190e,0x190e,0x190e, +0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x190e,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920, +0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1920,0x1932,0x1932,0x1932,0x1932, +0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932, +0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1938,0x1938,0x1938,0x1938, +0x1938,0x1938,0x1938,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16, +0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1a16,0x1941,0x1941,0x1941,0x1941, +0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941, +0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1947,0x1947,0x1947,0x1947, +0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947, +0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x1947,0x19b6,0x19b6,0x19b6,0x19b6, +0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6, +0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19d1,0x19d1,0x19d1,0x19d1, +0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1, +0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d1,0x19d7,0x19d7,0x19d7,0x19d7, +0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7, +0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19f2,0x19f2,0x19f2,0x19f2, +0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2, +0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f5,0x19f5,0x19f5,0x19f5, +0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5, +0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19fe,0x19fe,0x19fe,0x19fe, +0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe, +0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x19fb,0x19fb,0x19fb,0,0,0,0 #endif /* !U_PLATFORM_IS_DARWIN_BASED */ }; static const UTrie2 propsVectorsTrie={ propsVectorsTrie_index, - propsVectorsTrie_index+4880, + propsVectorsTrie_index+4948, NULL, - 4880, + 4948, #if !U_PLATFORM_IS_DARWIN_BASED - 24356, + 25064, #else /* !U_PLATFORM_IS_DARWIN_BASED */ - 24552, + 25260, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ 0xa40, - 0x1390, + 0x13d4, 0x0, 0x0, 0x110000, #if !U_PLATFORM_IS_DARWIN_BASED - 0x7230, + 0x7538, #else /* !U_PLATFORM_IS_DARWIN_BASED */ - 0x72f4, + 0x75fc, #endif /* !U_PLATFORM_IS_DARWIN_BASED */ NULL, 0, FALSE, FALSE, 0, NULL }; #if !U_PLATFORM_IS_DARWIN_BASED -static const uint32_t propsVectors[6375]={ +static const uint32_t propsVectors[6639]={ #else /* !U_PLATFORM_IS_DARWIN_BASED */ -static const uint32_t propsVectors[6435]={ +static const uint32_t propsVectors[6693]={ #endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x67,0,0,0x67,0,0xe00000,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67, +0x67,0,0,0x67,0,0x4e00000,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67, 0,0,0xc67,0,0,0xd67,0,0,0xe67,0,0,0x1067,0,0,0x1167,0, 0,0x1267,0,0,0x1367,0,0,0x1467,0,0,0x1567,0,0,0x1667,0,0, 0x1767,0,0,0x1867,0,0,0x1967,0,0,0x1a67,0,0,0x1b67,0,0,0x1d67, @@ -5883,211 +5996,210 @@ static const uint32_t propsVectors[6435]={ 0,0x9367,0,0,0x9567,0,0,0x9667,0,0,0x9767,0,0,0x9867,0,0, 0x9967,0,0,0x9a67,0,0,0x9c67,0,0,0x9f67,0,0,0xa167,0,0,0xa367, 0,0,0xa467,0,0,0xa567,0,0,0xa667,0,0,0xa767,0,0,0xa867,0, -0,0xa967,0,0,0xaa67,0,0xe00000,0xab67,0,0xe00000,0xac67,0,0,0xad67,0,0, -0xae67,0,0,0xaf67,0,0,0xb167,0,0,0xb267,0,0,0xb367,0,0,0xb467, -0,0,0xb567,0,0,0xb767,0,0,0xb867,0,0,0xb967,0,0,0xba67,0, -0,0xbc67,0,0,0xbd67,0,0,0xbe67,0,0,0xbf67,0,0,0xc067,0,0, -0xc167,0,0,0xc267,0,0,0xc367,0,0xe00000,0xc467,0,0xe00000,0xc667,0,0,0xc767, -0,0,0xc867,0,0,0xc967,0,0,0xca67,0,0,0xcc67,0,0xe00000,0xcf67,0, -0xe00000,0xd067,0,0xe00000,0xd267,0,0,0xd367,0,0,0xd467,0,0,0xd567,0,0, -0xd667,0,0,0xd867,0,0,0xd967,0,0,0xda67,0,0,0xdb67,0,0,0xdc67, -0,0,0xdd67,0,0,0xde67,0,0,0xdf67,0,0,0xe067,0,0,0xe167,0, -0,0xe267,0,0,0xe367,0,0xe00000,0xe467,0,0,0xe567,0,0,0xe667,0,0, -0xe767,0,0,0xe867,0,0,0xe967,0,0,0xea67,0,0,0xeb67,0,0,0xec67, -0,0,0xed67,0,0,0xee67,0,0,0xef67,0,0,0xf167,0,0,0xf367,0, -0,0xf567,0,0,0xf667,0,0,0xf767,0,0,0xf867,0,0,0xf967,0,0, -0xfa67,0,0xe00000,0xfb67,0,0,0xfc67,0,0,0xfd67,0,0,0xfe67,0,0,0x10167, -0,0,0x10267,0,0,0x10367,0,0,0x10467,0,0,0x10567,0,0xe00000,0x10667,0, -0,0x10767,0,0,0x10867,0,0,0x10967,0,0,0x10a67,0,0,0x10b67,0,0, -0x10c67,0,0,0x10d67,0,0,0x10e67,0,0,0x10f67,0,0,0x11067,0,0,0x11167, -0,0,0x11367,0,0,0x11467,0,0,0x11567,0,0,0x11667,0,0,0x11767,0, -0,0x11867,0,0,0xa0067,0,0xe00000,0xa4667,0,0xe00000,0xa4767,0,0xe00000,0xa4f67,0,0xe00000, -0xa5e67,0,0xe00000,0xa5f67,0,0xe00000,0xac567,0,0xe00000,0xad167,0,0xe00000,0xb0067,0,0xe00000,0xb1267, -0,0xe00000,0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,0x11000100,0x40000001,0xa5a040,0x11000100,0x40000001, -0x116a8a0,0x11000200,0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,0x24000000,0x10200000,0x11000200,0x24000008,0x1710000, -0x11000200,0x40000001,0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,0x220401,0x11000319,0x7c00100,0x220402,0x11000319, -0x7c00100,0x250400,0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,0x11000419,0x7c00100,0x220402,0x11000419,0x7c00100, -0x230400,0x11000419,0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,0x7c00100,0x220400,0x11000519,0x7c00100,0x230400, -0x11000600,0x4000400,0x200000,0x11000600,0x4000400,0x200002,0x11000600,0x4000400,0x200400,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,0x230400,0x11000600, -0x7c00500,0x530400,0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,0x11000800,0x6800010, -0x201001,0x11000800,0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,0x4000400,0x200002, -0x1100080e,0x7000500,0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,0x250400,0x1100080e, -0x7c00100,0x250401,0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,0x250402,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100,0x220400,0x11000908,0x7c00100, -0x220401,0x11000908,0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a03,0x4000000,0x200000,0x11000a03,0x4000000,0x270000,0x11000a03,0x7c00100,0x220400, -0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000b13,0x2802500,0x962460,0x11000b13,0x4000000,0x200000,0x11000b13, -0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,0x11000b13,0x4000010,0x200000,0x11000b13,0x7c00100,0x2633800,0x11000c00,0x80000000, -0x218960,0x11000c02,0x2802100,0x962460,0x11000c02,0x2802400,0x962460,0x11000c02,0x4000000,0x200000,0x11000c02,0x4000000,0x1329400,0x11000c02,0x4000000,0x1329800, -0x11000c02,0x4000000,0x1500000,0x11000c02,0x6800000,0x1329800,0x11000c02,0x7c00100,0x230400,0x11000c02,0x7c00100,0x230401,0x11000c02,0x7c00100,0x230402,0x11000c02, -0x7c00500,0x230400,0x11000c02,0x7d00100,0x230400,0x11000c02,0xc000010,0xb48000,0x11000f0a,0x2802100,0x962460,0x11000f0a,0x2802400,0x962460,0x11000f0a,0x2806400, -0x962460,0x11000f0a,0x4000000,0x200000,0x11000f0a,0x6800100,0x962540,0x11000f0a,0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401,0x11001004,0x2802100,0x962460, -0x11001004,0x2802400,0x962460,0x11001004,0x2806400,0x962460,0x11001004,0x4000000,0x200000,0x11001004,0x4000000,0x1500000,0x11001004,0x6800100,0x962540,0x11001004, -0x6800100,0x962541,0x11001004,0x7c00100,0x230400,0x11001004,0x7c00100,0x230401,0x11001110,0x2802100,0x962460,0x11001110,0x2802400,0x962460,0x11001110,0x2806400, -0x962460,0x11001110,0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,0x7c00100,0x230401,0x1100120f,0x2802100,0x962460,0x1100120f,0x2802400,0x962460, -0x1100120f,0x2806400,0x962460,0x1100120f,0x6800100,0x962540,0x1100120f,0x7c00100,0x230400,0x1100131f,0x2802100,0x962460,0x1100131f,0x2802400,0x962460,0x1100131f, -0x2806400,0x962460,0x1100131f,0x4000000,0x200000,0x1100131f,0x6800000,0x1329800,0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100,0x962541,0x1100131f,0x7c00100, -0x230400,0x1100131f,0x7c00100,0x230401,0x11001423,0x2802100,0x962460,0x11001423,0x2806400,0x962460,0x11001423,0x6800100,0x962540,0x11001423,0x6800100,0x962541, -0x11001423,0x7c00100,0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,0x962460,0x11001524,0x2802100,0x962461,0x11001524,0x2806400,0x962460,0x11001524, -0x6800000,0x1329800,0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,0x11001615,0x2802100,0x962460,0x11001615,0x2806400,0x962460,0x11001615,0x6800000, -0x1329800,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,0x7c00100,0x230400,0x1100171a,0x2802100,0x962460,0x1100171a,0x2806400,0x962460, -0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,0x962541,0x1100171a,0x7c00100,0x230400,0x11001900,0x4000000,0x1600000,0x11001926, -0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,0x11001926,0x4000000,0x200000,0x11001926,0x4000010,0x400000,0x11001926,0x6800000, -0x1329800,0x11001926,0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,0x11001926,0x7c00900,0x1830000,0x11001926,0x7e00100,0x1830000,0x11001a18,0x2802100,0x1862460, -0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,0x1830142,0x11001a18,0x7c00100,0x1830000,0x11001a18,0x7c00100,0x1830002,0x11001a18, -0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830000,0x11001d0c,0x7c00100,0x230400,0x11001d0c,0x7c00100,0x250400,0x11001e12,0x7c00100,0x2230500,0x11001e12,0x7c00100, -0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,0x7c00100,0x220401,0x11002619,0x7c00100,0x220402,0x11002619,0x7c00100,0x250401,0x1100270e,0x4000400,0x200001, -0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,0x500001,0x1100270e,0x7c00100,0x220401,0x1100270e,0x7c00100,0x250401,0x11002800,0x80000,0x918820,0x11002800, -0x80000,0x1c18020,0x11002800,0x180000,0x918820,0x11002800,0x4000001,0x440001,0x11002800,0x4000001,0x440002,0x11002800,0x4000001,0xc4000b,0x11002800,0x6800000, -0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,0x24000000,0x200000,0x11002800,0x24000000,0x200002,0x11002800,0x24000000,0x810000,0x11002800,0x24000000,0x1410000, -0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,0x1500002,0x11002800,0x24000002,0x400000,0x11002800,0x24000006,0xc0000b,0x11002800,0x24000008,0x1410000,0x11002800, -0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,0x11002800,0x24000020,0x1500002,0x11002800,0x2c000010,0x1248000,0x11002800,0x2c000010,0x11248002,0x11002800,0x40000001, -#if !U_PLATFORM_IS_DARWIN_BASED -0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x80000,0x2a65620,0x11002801,0x82000,0x962460,0x11002900,0x4000000,0x20000e,0x11002900,0x4000000,0x20000f, -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x80000,0xaa65620,0x11002801,0x82000,0x962460,0x11002900,0x4000000,0x20000e,0x11002900,0x4000000,0x20000f, -#endif /* !U_PLATFORM_IS_DARWIN_BASED */ -0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,0x81000e,0x11002900,0x4000020,0x81000f,0x11002900,0x4000020,0x141000e,0x11002900, -0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,0x11002a00,0x4000000,0x1500000,0x11002a00,0x4000000,0x1600000,0x11002a00,0x4000000, -0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,0x4000000,0x200000,0x11002c00,0x4000000,0x200002,0x11002c00,0x4000000,0x20000f, -0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00020,0x200000,0x11002c00,0x7c00120,0x220405,0x11002c00,0x7c00120,0x230402,0x11002c00, -0x7c00120,0x250402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,0x11002c19,0x7c00100,0x250401,0x11002d00,0x4000000,0x100006,0x11002d00,0x4000000, -0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,0x7c00100,0x250402,0x11002e00,0x24000000,0x200000,0x11002e00,0x24000020,0x200000, -0x11002e00,0x24000020,0x200001,0x11002e00,0x24000020,0x10200000,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,0x200001,0x11002f00,0x24000020,0x200002,0x11002f00, -0x24000020,0xf00000,0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,0x11003000,0x24000000,0x10200000,0x11003000,0x24000020, -0x200000,0x11003000,0x24000020,0x810000,0x11003000,0x24000020,0x1410000,0x11003100,0x24000000,0x200000,0x11003200,0x24000000,0x200000,0x11003300,0x4000000,0x100003, -0x11003400,0x24000000,0x100000,0x11003400,0x24000000,0x200000,0x11003500,0x24000000,0x200000,0x11003600,0x24000000,0x200000,0x11003600,0x24000000,0x10200000,0x11003600, -0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000000,0xe00000,0x11003700,0x24000000,0x10200000,0x11003700,0x24000000,0x10e00000,0x11003700,0x24000000, -0x928045a0,0x11003700,0x24000020,0x200000,0x11003800,0x4000000,0x100000,0x11003800,0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800,0x24000000,0xe00000, -0x11003800,0x24000000,0x1710000,0x11003800,0x24000000,0x10200000,0x11003800,0x24000000,0x10b00000,0x11003800,0x24000000,0x10e00000,0x11003800,0x24000000,0x10e05200,0x11003800, -#if !U_PLATFORM_IS_DARWIN_BASED -0x24000000,0x928045a0,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,0x2633801,0x11005013,0x7c00100, -0x2633802,0x11005013,0x7c00100,0x2633805,0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000,0x11005100,0x24000000,0x1410000,0x11005102,0x7000100,0x230408, -0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460,0x11005500, -0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502,0x7c00100, -0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400,0x100002, -0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200,0x24000000,0x1400000,0x11020200,0x24000000,0x1500000,0x11020200, -0x24000000,0x1600000,0x11020200,0x24000000,0x10200000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219,0x7c00100, -0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100,0x220402, -0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400,0x11020600, -0x4000400,0x100002,0x11020600,0x4000400,0x200400,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701,0x2802400, -0x962461,0x11020701,0x2802400,0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100,0x220401, -0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002,0x11022800, -0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800,0x24000002, -0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020,0x100000, -0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f,0x11022c00, -0x4000000,0x100002,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x4000000,0x1010000f,0x11022c00,0x7c00120,0x120405,0x11022c0e,0x7c00100, -0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100,0x150402, -0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022e00,0x24000020,0x10100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001,0x11022f00, -0x24000020,0x100002,0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300,0x4000100, -0x150403,0x11023300,0x4000100,0x10150403,0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020,0x100000, -0x11023600,0x24000020,0x10100000,0x11023700,0x24000000,0x100000,0x11023700,0x24000000,0xe00000,0x11023700,0x24000000,0x10100000,0x11023700,0x24000000,0x10e00000,0x11023700, -0x24000020,0x100000,0x11023700,0x24000020,0x10100000,0x11023700,0x24000020,0x10105200,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e67,0, -0,0x11025600,0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a,0x11045712,0x7c00100,0xe3040a, -0x11045712,0x7c80100,0xe3040a,0x11045716,0x7c00100,0xe30c0a,0x11045716,0x7c00100,0x2530c0a,0x11065700,0x4000000,0x810011,0x11065700,0x4000000,0xe00011,0x11065700, -0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011,0x11065700,0x4000008, -0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700,0x4000400,0xe00011, -0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe00011,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011,0x11065719, -0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00,0x11080100,0x68000c0, -0x19329800,0x11080100,0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100,0x24000000,0x1600000, -0x11080100,0x24000000,0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000000,0x18200000,0x11080100,0x24000006,0xd70000,0x11080100,0x24000008,0x1713c00,0x11080100, -0x24000008,0x1714000,0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100,0x24000020,0x200000,0x11080100,0x24000020, -0x400000,0x11080100,0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010,0xb48000,0x11080100,0x2c000010,0x100ac00, -0x11080100,0x44000001,0x1a40000,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400,0x11080119,0x7c001c0,0x250400,0x11080200, -0x4000400,0x200002,0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200,0x24000020,0x200000,0x110a1e12,0x7c00100, -0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,0x24000000,0x30e00000,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001,0x110a3700,0x24000000,0x30200000, -0x110a3d11,0x7c00300,0xe30000,0x110a3d11,0x7c00900,0x1230400,0x110a3d12,0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14, -0x7c00100,0x2530000,0x110a3e14,0x7c00900,0x1230000,0x110a3e14,0x7c00900,0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100, -0x2530c00,0x110a3f16,0x7c00900,0x1230c00,0x110a3f16,0x7c00900,0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402, -0x110a4400,0x4000000,0xe00000,0x110a4412,0x4000000,0xe00002,0x110a4412,0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe0000d,0x110a4516, -0x4000000,0xe00c0d,0x110a4711,0x7c40300,0xe30000,0x110a4f11,0x7c00300,0xe30001,0x110a4f11,0x7c40300,0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000, -0xe00002,0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000,0x1410010,0x110a5300,0x4000002,0xe70010,0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010, -0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10,0x110a5400,0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400, -0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400,0x4000002,0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010, -0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020,0xe0000c,0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c, -0x11400a0c,0xc000010,0x1049400,0x11400c0e,0x4000010,0xb00000,0x11400c0e,0x4000010,0x1071400,0x11400c0e,0xc000010,0xb48000,0x11400c13,0x7c00900,0x230400,0x11400f36, -0xc000010,0x448000,0x11400f46,0xc000010,0x448000,0x11401d72,0x4000000,0x200000,0x11403d95,0x4000000,0xe00000,0x1144578a,0x4000004,0x120000a,0x1144578a,0x4000008, -0x81000a,0x1144578a,0x4000008,0x141000a,0x1144578a,0x4000010,0x87000a,0x1144578a,0xc000010,0x84800a,0x11445793,0x3802500,0x126246a,0x11445793,0x7c00d00,0x2530c0a, -0x11463d8a,0x4000001,0x440011,0x114a3d8a,0x4000000,0xe00000,0x114a3d8a,0x4000000,0xe00002,0x114a3d8a,0x24000000,0x810000,0x114a3d8a,0x24000000,0xe00000,0x114a3d8a, -0x24000000,0x1410000,0x114a3d8a,0x24000008,0x810000,0x114a3d8a,0x24000008,0x1410000,0x114a3d8a,0x24000010,0x870000,0x114a3d8a,0x2c000010,0x848000,0x114a3d90,0x4000000, -0xe00000,0x114a3d90,0x24000000,0xe00000,0x114a3d90,0x24000002,0x1200000,0x114a3d90,0x24000002,0x10e00000,0x114a3d90,0x24000008,0x810000,0x114a3d90,0x24000008,0x1410000, -0x114a3d93,0x7c00900,0x930c00,0x114a3d93,0x7c00900,0xe30c00,0x114a3d95,0x7c00300,0xe30000,0x114a3e93,0x7000400,0x1200c02,0x114a3f8a,0x4000004,0x1200000,0x114a3f93, -0x7c00d00,0x2530c00,0x114a4295,0x4000000,0xe00000,0x114a4295,0x4000000,0xe0000f,0x114a4495,0x4000000,0xe00002,0x114a4495,0x4000000,0xe00003,0x114a4495,0x4000000, -0x10e00003,0x114a4595,0x4000000,0xe00002,0x114a4595,0x4000000,0xe0000d,0x1180090a,0x2802400,0x962460,0x11800c19,0x2802100,0x962460,0x11800c19,0x2802500,0x962460, -0x11800f1f,0x2802400,0x962460,0x11800f2b,0x2802400,0x962460,0x11820700,0x2802400,0x962460,0x11820700,0x2802500,0x962460,0x118a3d96,0x2802400,0x962460,0x118a3e93, -0x2802400,0x962460,0x11c00904,0x2802400,0x962460,0x11c00908,0x2802400,0x962460,0x11c00c1d,0x6800000,0x1329800,0x11c00f5a,0x6800000,0x1329800,0x11c0105f,0x6800000, -0x1329800,0x11c01163,0x6800000,0x1329800,0x11c01267,0x6800000,0x1329800,0x11c0146b,0x4000000,0x200000,0x11c0146b,0x6800000,0x1329800,0x11c0146b,0x7c00100,0x230400, -0x11c0511d,0x7c00100,0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27, -0x2802100,0x962461,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27,0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000, -0x400000,0x20001b27,0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000, -0x20001b27,0x4000010,0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27, -0x7c00100,0x230400,0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00,0x4000000,0x1600000,0x20004b67,0,0x1900020,0x20004c67,0, -0x1900020,0x20004d67,0,0x1900020,0x20006d67,0x1000,0,0x20006e67,0x1000,0,0x20026d67,0,0,0x20026e67,0,0, -0x200a4a12,0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419, -0x7c00100,0x220401,0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,0x200400,0x30000600,0x7c00500, -0x230400,0x30000605,0x4000400,0x200000,0x3000080e,0x7c00100,0x220400,0x30000908,0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401, -0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,0x400000,0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22, -0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100, -0x230400,0x30000d22,0xc000010,0x248000,0x30000d22,0x80000000,0x218960,0x30000e25,0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460, -0x30001821,0x2806400,0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540,0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27, -0x2802100,0x962460,0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100, -0x1862460,0x30001c1c,0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000,0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540, -0x30001c1c,0x7c00100,0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b, -0x4000010,0x400000,0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,0x250400,0x30002128,0x4000010, -0x200000,0x30002128,0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x440000, -0x3000221d,0x7c00100,0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400,0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417, -0x2806400,0x1862460,0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,0x30002417,0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010, -0x400000,0x30002417,0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100,0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000, -0x3000251b,0x80000,0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x3c02100,0x962460,0x3000251b,0x4000000,0x200000,0x3000251b,0x4000006,0x500000,0x3000251b, -0x4000010,0x400000,0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b,0x7c00900, -0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,0x4000001,0xc41c0b,0x30002800,0x24000000,0x200000,0x30002800,0x2c000010,0x1248002, -0x30002800,0x2c000010,0x11248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002c00,0x4000000,0x200000,0x30002c00,0x7c00100,0x10220405,0x30002d19, -0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003100,0x24000000,0x200000,0x30003600,0x24000000,0x200000,0x30003700,0x24000000, -0x200000,0x3000392e,0x24000000,0x200000,0x30005013,0x7c00100,0x2633801,0x30005600,0,0x918820,0x30020600,0x4000400,0x500400,0x30020701,0x2802400,0x962460, -0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00, -0x4010000,0xe00000,0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829,0x7c00100,0xe30400,0x300a4829,0x7c00900, -0x1230400,0x300a4929,0x4000000,0xe00000,0x30402578,0x4000010,0x400000,0x30402578,0x4000010,0xb70000,0x30402578,0xc000010,0xb48000,0x304a3d95,0x4000000,0xe00000, -0x30800c19,0x2802100,0x962460,0x30c01c70,0x6800000,0x1329800,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402,0x31005167,0x1000,0,0x3100581e, -0x4000000,0x200000,0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400,0x31005b00,0x4000000, -0x200000,0x31005c00,0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000,0x200000,0x31005c00,0x4000000,0x200001, -0x31005c00,0x6800000,0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020,0x1329805,0x31005d00, -0x7c00120,0x220405,0x31005d00,0x7c00120,0x250405,0x31006000,0x82000,0x962460,0x31006000,0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300, -0xe30001,0x32000419,0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100,0x250400,0x32000908,0x7c00100,0x220400, -0x32000908,0x7c00100,0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400,0x32002800,0x80000,0x1e18820,0x32002800, -0x80020,0x218820,0x32002800,0x4000001,0x440002,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800,0x24000020,0x200000,0x32002800,0x2c000010, -0x1248002,0x32002919,0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000,0x962460,0x32002b01,0x2802020,0x962460, -0x32002c00,0x4000000,0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00, -0x24000020,0x200000,0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500,0x24000000,0x200000,0x32003600,0x24000020, -0x200000,0x32003600,0x24000020,0x10200000,0x32003700,0x24000000,0x100000,0x32003700,0x24000000,0x200000,0x32003700,0x24000000,0x10200000,0x32003800,0x24000000,0x810000, -0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a, -0x2802100,0x962460,0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,0x7c00100, -0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,0x200000, -0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000,0x32006800,0x24000020,0x10200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900, -0x24000020,0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00,0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000, -0x100000,0x32026c01,0x12882000,0x962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,0x1410000, -0x32086900,0x24000020,0x810000,0x32086900,0x24000020,0x1410000,0x320a3600,0x24000020,0x30200000,0x320a3d11,0x7c00100,0x1230400,0x320a3e14,0x7c00100,0xe30010,0x320a3e14, -0x7c00100,0x2530000,0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,0x7c00300,0xe30001,0x320a6b16,0x7c00100, -0x2530c00,0x32406374,0xc000010,0x448000,0x324a3d98,0x4000000,0x10e00000,0x324a3d98,0x7c00100,0x1230400,0x324a3f93,0x4000002,0x1200c00,0x324a5390,0x24000000,0xe00000, -0x32820701,0x2802000,0x962460,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200400,0x4000080e,0x7c00100,0x220400,0x4000080e, -0x7c00100,0x250400,0x4000080e,0x7c00100,0x250402,0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,0x40000c02,0x2802500,0x962460,0x40000c02,0x4000000, -0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000c02,0x80000000,0x218960,0x40000d22,0x7c00100,0x230400,0x40000f0a,0x7c00100,0x230400, -0x40001004,0x7c00100,0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,0x4000120f,0x4000000,0x1600000,0x4000120f, -0x7c00100,0x230400,0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,0x2802400,0x962460,0x40001615,0x7c00100, -0x230400,0x40002417,0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,0x200000,0x40002c00,0x4000000,0x200002, -0x40003000,0x24000000,0x10200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x10200000,0x40005a09,0x7c00100,0x220400,0x40005a09, +0,0xa967,0,0,0xaa67,0,0x4e00000,0xab67,0,0x4e00000,0xac67,0,0,0xad67,0,0, +0xae67,0,0,0xaf67,0,0,0xb167,0,0,0xb267,0,0,0xb467,0,0,0xb567, +0,0,0xb767,0,0,0xb867,0,0,0xb967,0,0,0xba67,0,0,0xbc67,0, +0,0xbd67,0,0,0xbe67,0,0,0xbf67,0,0,0xc067,0,0,0xc167,0,0, +0xc267,0,0,0xc367,0,0x4e00000,0xc467,0,0x4e00000,0xc667,0,0,0xc767,0,0,0xc867, +0,0,0xc967,0,0,0xca67,0,0,0xcc67,0,0x4e00000,0xcf67,0,0x4e00000,0xd067,0, +0x4e00000,0xd267,0,0,0xd367,0,0,0xd467,0,0,0xd567,0,0,0xd667,0,0, +0xd867,0,0,0xd967,0,0,0xda67,0,0,0xdb67,0,0,0xdc67,0,0,0xdd67, +0,0,0xde67,0,0,0xdf67,0,0,0xe067,0,0,0xe167,0,0,0xe267,0, +0,0xe367,0,0x4e00000,0xe467,0,0,0xe567,0,0,0xe667,0,0,0xe767,0,0, +0xe867,0,0,0xe967,0,0,0xea67,0,0,0xeb67,0,0,0xec67,0,0,0xed67, +0,0,0xee67,0,0,0xef67,0,0,0xf167,0,0,0xf367,0,0,0xf567,0, +0,0xf667,0,0,0xf767,0,0,0xf867,0,0,0xf967,0,0,0xfa67,0,0x4e00000, +0xfb67,0,0,0xfc67,0,0,0xfd67,0,0,0xfe67,0,0,0x10167,0,0,0x10267, +0,0,0x10367,0,0,0x10467,0,0,0x10567,0,0x4e00000,0x10667,0,0,0x10767,0, +0,0x10867,0,0,0x10967,0,0,0x10a67,0,0,0x10b67,0,0,0x10c67,0,0, +0x10d67,0,0,0x10e67,0,0,0x10f67,0,0,0x11067,0,0,0x11167,0,0,0x11367, +0,0,0x11467,0,0,0x11567,0,0,0x11667,0,0,0x11767,0,0,0x11867,0, +0,0x11967,0,0x4e00000,0x11a67,0,0,0x11b67,0,0,0x11c67,0,0,0x11d67,0,0, +0x11e67,0,0,0x11f67,0,0,0x12067,0,0,0x12167,0,0,0x12267,0,0,0x12367, +0,0,0xa0067,0,0xe00000,0xa4667,0,0xe00000,0xa4767,0,0xe00000,0xa4f67,0,0xe00000,0xa5e67,0, +0xe00000,0xa5f67,0,0xe00000,0xac567,0,0xe00000,0xad167,0,0xe00000,0xb0067,0,0xe00000,0xb1267,0,0xe00000, +0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,0x11000100,0x40000001,0xa5a040,0x11000100,0x40000001,0x116a8a0,0x11000200, +0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,0x24000000,0x14200000,0x11000200,0x24000008,0x1710000,0x11000200,0x40000001, +0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,0x220401,0x11000319,0x7c00100,0x220402,0x11000319,0x7c00100,0x250400, +0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,0x11000419,0x7c00100,0x220402,0x11000419,0x7c00100,0x230400,0x11000419, +0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,0x7c00100,0x220400,0x11000519,0x7c00100,0x230400,0x11000600,0x4000400, +0x200000,0x11000600,0x4000400,0x200002,0x11000600,0x4000400,0x200400,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,0x230400,0x11000600,0x7c00500,0x530400, +0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,0x11000800,0x6800010,0x201001,0x11000800, +0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,0x4000400,0x200002,0x1100080e,0x7000500, +0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,0x250400,0x1100080e,0x7c00100,0x250401, +0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,0x250402,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100,0x220400,0x11000908,0x7c00100,0x220401,0x11000908, +0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a03,0x4000000,0x200000,0x11000a03,0x4000000,0x200400,0x11000a03,0x4000000,0x270000,0x11000a03,0x7c00100, +0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000b13,0x2802500,0x962460,0x11000b13,0x4000000,0x200000, +0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,0x11000b13,0x4000010,0x200000,0x11000b13,0x7c00100,0x2633800,0x11000c00, +0x80000000,0x218960,0x11000c02,0x2802100,0x962460,0x11000c02,0x2802400,0x962460,0x11000c02,0x4000000,0x200000,0x11000c02,0x4000000,0x1329400,0x11000c02,0x4000000, +0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,0x6800000,0x1329800,0x11000c02,0x7c00100,0x230400,0x11000c02,0x7c00100,0x230401,0x11000c02,0x7c00100,0x230402, +0x11000c02,0x7c00500,0x230400,0x11000c02,0x7d00100,0x230400,0x11000f0a,0x2802100,0x962460,0x11000f0a,0x2802400,0x962460,0x11000f0a,0x2806400,0x962460,0x11000f0a, +0x4000000,0x200000,0x11000f0a,0x6800100,0x962540,0x11000f0a,0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401,0x11001004,0x2802100,0x962460,0x11001004,0x2802400, +0x962460,0x11001004,0x2806400,0x962460,0x11001004,0x4000000,0x200000,0x11001004,0x4000000,0x1500000,0x11001004,0x6800100,0x962540,0x11001004,0x6800100,0x962541, +0x11001004,0x7c00100,0x230400,0x11001004,0x7c00100,0x230401,0x11001110,0x2802100,0x962460,0x11001110,0x2802400,0x962460,0x11001110,0x2806400,0x962460,0x11001110, +0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,0x7c00100,0x230401,0x1100120f,0x2802100,0x962460,0x1100120f,0x2802400,0x962460,0x1100120f,0x2806400, +0x962460,0x1100120f,0x6800100,0x962540,0x1100120f,0x7c00100,0x230400,0x1100131f,0x2802100,0x962460,0x1100131f,0x2802400,0x962460,0x1100131f,0x2806400,0x962460, +0x1100131f,0x4000000,0x200000,0x1100131f,0x6800000,0x1329800,0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100,0x962541,0x1100131f,0x7c00100,0x230400,0x1100131f, +0x7c00100,0x230401,0x11001423,0x2802100,0x962460,0x11001423,0x2806400,0x962460,0x11001423,0x6800100,0x962540,0x11001423,0x6800100,0x962541,0x11001423,0x7c00100, +0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,0x962460,0x11001524,0x2802100,0x962461,0x11001524,0x2806400,0x962460,0x11001524,0x6800000,0x1329800, +0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,0x11001615,0x2802100,0x962460,0x11001615,0x2806400,0x962460,0x11001615,0x6800000,0x1329800,0x11001615, +0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,0x7c00100,0x230400,0x1100171a,0x2802100,0x962460,0x1100171a,0x2806400,0x962460,0x1100171a,0x6800000, +0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,0x962541,0x1100171a,0x7c00100,0x230400,0x11001900,0x4000000,0x1600000,0x11001926,0x2802100,0x1862460, +0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,0x11001926,0x4000000,0x200000,0x11001926,0x4000010,0x400000,0x11001926,0x6800000,0x1329800,0x11001926, +0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,0x11001926,0x7c00900,0x1830000,0x11001926,0x7e00100,0x1830000,0x11001a18,0x2802100,0x1862460,0x11001a18,0x2802400, +0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,0x1830142,0x11001a18,0x7c00100,0x1830000,0x11001a18,0x7c00100,0x1830002,0x11001a18,0x7c00900,0x1830000, +0x11001a18,0x7e00100,0x1830000,0x11001d0c,0x7c00100,0x220400,0x11001d0c,0x7c00100,0x250400,0x11001e12,0x7c00100,0x2230500,0x11001e12,0x7c00100,0x2330520,0x11001e12, +0x7c80100,0x2330520,0x11002619,0x7c00100,0x220401,0x11002619,0x7c00100,0x220402,0x11002619,0x7c00100,0x250401,0x1100270e,0x4000400,0x200001,0x1100270e,0x4000400, +0x200002,0x1100270e,0x4000400,0x500001,0x1100270e,0x7c00100,0x220401,0x1100270e,0x7c00100,0x250401,0x11002800,0x80000,0x918820,0x11002800,0x80000,0x1c18020, +0x11002800,0x180000,0x918820,0x11002800,0x4000001,0x445801,0x11002800,0x4000001,0x445802,0x11002800,0x4000001,0xc4000b,0x11002800,0x6800000,0x201c00,0x11002800, +0x6800020,0x201c00,0x11002800,0x24000000,0x200000,0x11002800,0x24000000,0x200002,0x11002800,0x24000000,0x810000,0x11002800,0x24000000,0x1410000,0x11002800,0x24000000, +0x1500000,0x11002800,0x24000000,0x1500002,0x11002800,0x24000002,0x400000,0x11002800,0x24000006,0xc0000b,0x11002800,0x24000008,0x1410000,0x11002800,0x24000008,0x1710000, +0x11002800,0x24000020,0x1001400,0x11002800,0x24000020,0x1500002,0x11002800,0x2c000010,0x1248000,0x11002800,0x2c000010,0x15248002,0x11002800,0x40000001,0x63b020,0x11002800, +0x40080000,0x918820,0x11002801,0x80000,0xaa65620,0x11002801,0x82000,0x962460,0x11002900,0x4000000,0x20000e,0x11002900,0x4000000,0x20000f,0x11002900,0x4000020, +0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,0x81000e,0x11002900,0x4000020,0x81000f,0x11002900,0x4000020,0x141000e,0x11002900,0x4000020,0x141000f, +0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,0x11002a00,0x4000000,0x1500000,0x11002a00,0x4000000,0x1600000,0x11002a00,0x4000000,0x1600002,0x11002b01, +0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,0x4000000,0x200000,0x11002c00,0x4000000,0x200002,0x11002c00,0x4000000,0x20000f,0x11002c00,0x4000020, +0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00020,0x200000,0x11002c00,0x7c00120,0x220405,0x11002c00,0x7c00120,0x230402,0x11002c00,0x7c00120,0x250402, +0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,0x11002c19,0x7c00100,0x250401,0x11002d00,0x4000000,0x100006,0x11002d00,0x4000000,0x200006,0x11002d19, +0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,0x7c00100,0x250402,0x11002e00,0x24000000,0x200000,0x11002e00,0x24000020,0x200000,0x11002e00,0x24000020, +0x200001,0x11002e00,0x24000020,0x14200000,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,0x200001,0x11002f00,0x24000020,0x200002,0x11002f00,0x24000020,0xf00000, +0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,0x11003000,0x24000000,0x14200000,0x11003000,0x24000020,0x200000,0x11003000, +0x24000020,0x810000,0x11003000,0x24000020,0x1410000,0x11003100,0x24000000,0x200000,0x11003200,0x24000000,0x200000,0x11003300,0x4000000,0x100003,0x11003400,0x24000000, +0x100000,0x11003400,0x24000000,0x200000,0x11003500,0x24000000,0x200000,0x11003600,0x24000000,0x200000,0x11003600,0x24000000,0x14200000,0x11003600,0x24000020,0x200000, +0x11003700,0x24000000,0x200000,0x11003700,0x24000000,0x4200000,0x11003700,0x24000000,0x4e00000,0x11003700,0x24000000,0x14200000,0x11003700,0x24000000,0x14e00000,0x11003700, +0x24000000,0x96800000,0x11003700,0x24000020,0x4200000,0x11003800,0x4000000,0x100000,0x11003800,0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800,0x24000000, +0x1710000,0x11003800,0x24000000,0x4200000,0x11003800,0x24000000,0x4e00000,0x11003800,0x24000000,0x14200000,0x11003800,0x24000000,0x14b00000,0x11003800,0x24000000,0x14e00000, +#if !U_PLATFORM_IS_DARWIN_BASED +0x11003800,0x24000000,0x96800000,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,0x2633801,0x11005013, +0x7c00100,0x2633802,0x11005013,0x7c00100,0x2633805,0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000,0x11005100,0x24000000,0x1410000,0x11005102,0x7000100, +0x230408,0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460, +0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502, +0x7c00100,0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400, +0x100002,0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200,0x24000000,0x1400000,0x11020200,0x24000000,0x1500000, +0x11020200,0x24000000,0x1600000,0x11020200,0x24000000,0x14200000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219, +0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100, +0x220402,0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400, +0x11020600,0x4000400,0x100002,0x11020600,0x4000400,0x200400,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701, +0x2802400,0x962461,0x11020701,0x2802400,0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100, +0x220401,0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002, +0x11022800,0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800, +0x24000002,0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020, +0x100000,0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f, +0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x4000000,0x1410000f,0x11022c00,0x7c00120,0x120405,0x11022c0e, +0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100, +0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022e00,0x24000020,0x14100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001, +0x11022f00,0x24000020,0x100002,0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300, +0x4000100,0x150403,0x11023300,0x4000100,0x14150403,0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020, +0x100000,0x11023600,0x24000020,0x14100000,0x11023700,0x24000000,0x4100000,0x11023700,0x24000000,0x4e00000,0x11023700,0x24000000,0x14100000,0x11023700,0x24000000,0x14e00000, +0x11023700,0x24000020,0x100000,0x11023700,0x24000020,0x4100000,0x11023700,0x24000020,0x14100000,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e67, +0,0,0x11025600,0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a,0x11045712,0x7c00100, +0xe3040a,0x11045712,0x7c80100,0xe3040a,0x11045716,0x7c00100,0xe30c0a,0x11045716,0x7c00100,0x2530c0a,0x11063d00,0x4000001,0x445811,0x11065700,0x4000000,0x810011, +0x11065700,0x4000000,0xe00011,0x11065700,0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700, +0x4000008,0xe00011,0x11065700,0x4000008,0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020, +0xe00011,0x11065700,0x4000400,0xe00011,0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe00011,0x11065700,0xc000010,0x80ac11, +0x11065700,0xc000010,0xb48011,0x11065719,0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100, +0x6800000,0x201c00,0x11080100,0x68000c0,0x19329800,0x11080100,0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000, +0x1500000,0x11080100,0x24000000,0x1600000,0x11080100,0x24000000,0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000000,0x18200000,0x11080100,0x24000006,0xd70000, +0x11080100,0x24000008,0x1713c00,0x11080100,0x24000008,0x1714000,0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100, +0x24000020,0x200000,0x11080100,0x24000020,0x400000,0x11080100,0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010, +0xb48000,0x11080100,0x2c000010,0x100ac00,0x11080100,0x44000001,0x1a45800,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400, +0x11080119,0x7c001c0,0x250400,0x11080200,0x4000400,0x200002,0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200, +0x24000020,0x200000,0x110a1e12,0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,0x24000000,0x34e00000,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000, +0x1410001,0x110a3700,0x24000000,0x34200000,0x110a3d00,0x4000000,0xe00000,0x110a3d00,0x4000000,0xe00002,0x110a3d00,0x24000000,0xe00000,0x110a3d11,0x7c00300,0xe30000, +0x110a3d11,0x7c00900,0x1230400,0x110a3d12,0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x2530000,0x110a3e14, +0x7c00900,0x1230000,0x110a3e14,0x7c00900,0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,0x110a3f16,0x7c00900, +0x1230c00,0x110a3f16,0x7c00900,0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4400,0x4000000,0xe00000, +0x110a4412,0x4000000,0xe00002,0x110a4412,0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,0xe00c0d,0x110a4711, +0x7c40300,0xe30000,0x110a4f11,0x7c00300,0xe30001,0x110a4f11,0x7c40300,0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000,0xe00002,0x110a5300,0x4000000, +0xe00010,0x110a5300,0x4000000,0x1410010,0x110a5300,0x4000002,0xe70010,0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000,0xe01c02, +0x110a5300,0x6800000,0xe01c10,0x110a5400,0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c,0x110a5400, +0x4000000,0x160000c,0x110a5400,0x4000002,0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400,0x4000010, +0x127100c,0x110a5400,0x4000020,0xe0000c,0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400a0c,0xc000010,0x1049400, +0x11400c0e,0x4000010,0xb00000,0x11400c0e,0x4000010,0x1071400,0x11400c0e,0xc000010,0xb48000,0x11400c17,0x7c00900,0x230400,0x11400f42,0xc000010,0x448000,0x11400f54, +0xc000010,0x448000,0x11401d83,0x4000000,0x200000,0x11403dab,0x4000000,0xe00000,0x114457a0,0x4000004,0x120000a,0x114457a0,0x4000008,0x81000a,0x114457a0,0x4000008, +0x141000a,0x114457a0,0x4000010,0x87000a,0x114457a0,0xc000010,0x84800a,0x114457a9,0x3802500,0x126246a,0x114457a9,0x7c00d00,0x2530c0a,0x114a3da0,0x24000000,0x810000, +0x114a3da0,0x24000000,0x1410000,0x114a3da0,0x24000008,0x810000,0x114a3da0,0x24000008,0x1410000,0x114a3da0,0x24000010,0x870000,0x114a3da0,0x2c000010,0x848000,0x114a3da6, +0x4000000,0xe00000,0x114a3da6,0x24000000,0xe00000,0x114a3da6,0x24000002,0x1200000,0x114a3da6,0x24000002,0x14e00000,0x114a3da6,0x24000008,0x810000,0x114a3da6,0x24000008, +0x1410000,0x114a3da9,0x7c00900,0x930c00,0x114a3da9,0x7c00900,0xe30c00,0x114a3dab,0x7c00300,0xe30000,0x114a3ea9,0x7000400,0x1200c02,0x114a3fa0,0x4000004,0x1200000, +0x114a3fa9,0x7c00d00,0x2530c00,0x114a42ab,0x4000000,0xe00000,0x114a42ab,0x4000000,0xe0000f,0x114a44ab,0x4000000,0xe00002,0x114a44ab,0x4000000,0xe00003,0x114a44ab, +0x4000000,0x14e00003,0x114a45ab,0x4000000,0xe00002,0x114a45ab,0x4000000,0xe0000d,0x1180090a,0x2802400,0x962460,0x11800c1f,0x2802100,0x962460,0x11800c1f,0x2802500, +0x962460,0x11800f29,0x2802400,0x962460,0x11800f36,0x2802400,0x962460,0x11820700,0x2802400,0x962460,0x11820700,0x2802500,0x962460,0x118a3dac,0x2802400,0x962460, +0x118a3ea9,0x2802400,0x962460,0x11c00904,0x2802400,0x962460,0x11c00908,0x2802400,0x962460,0x11c00c23,0x6800000,0x1329800,0x11c00c27,0xc000010,0xb48000,0x11c00f6b, +0x6800000,0x1329800,0x11c01070,0x6800000,0x1329800,0x11c01174,0x6800000,0x1329800,0x11c01278,0x6800000,0x1329800,0x11c0147c,0x4000000,0x200000,0x11c0147c,0x6800000, +0x1329800,0x11c05123,0x7c00100,0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460, +0x20001b27,0x2802100,0x962461,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27,0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27, +0x4000000,0x400000,0x20001b27,0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000, +0x1410000,0x20001b27,0x4000010,0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540, +0x20001b27,0x7c00100,0x230400,0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00,0x4000000,0x1600000,0x20004b67,0,0x1900020,0x20004c67, +0,0x1900020,0x20004d67,0,0x1900020,0x20006d67,0x1000,0,0x20006e67,0x1000,0,0x20026d67,0,0,0x20026e67,0, +0,0x200a4a12,0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400, +0x30000419,0x7c00100,0x220401,0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,0x200400,0x30000600, +0x7c00500,0x230400,0x30000605,0x4000400,0x200000,0x3000080e,0x7c00100,0x220400,0x30000908,0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100, +0x220401,0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,0x400000,0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400, +0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22, +0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000d22,0x80000000,0x218960,0x30000e25,0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100, +0x962460,0x30001821,0x2806400,0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540,0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400, +0x30001b27,0x2802100,0x962460,0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c, +0x2802100,0x1862460,0x30001c1c,0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000,0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100, +0x1862540,0x30001c1c,0x7c00100,0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000, +0x30001f0b,0x4000010,0x400000,0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,0x250400,0x30002128, +0x4000010,0x200000,0x30002128,0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001, +0x445800,0x3000221d,0x7c00100,0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400,0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460, +0x30002417,0x2806400,0x1862460,0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,0x30002417,0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417, +0x4000010,0x400000,0x30002417,0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100,0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100, +0x1830000,0x3000251b,0x80000,0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x3c02100,0x962460,0x3000251b,0x4000000,0x200000,0x3000251b,0x4000006,0x500000, +0x3000251b,0x4000010,0x400000,0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b, +0x7c00900,0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,0x4000001,0xc41c0b,0x30002800,0x24000000,0x200000,0x30002800,0x2c000010, +0x1248002,0x30002800,0x2c000010,0x15248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002b01,0x2000,0x8962460,0x30002c00,0x4000000,0x200000, +0x30002c00,0x7c00100,0x14220405,0x30002d19,0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003000,0x24000000,0x4200000,0x30003100, +0x24000000,0x200000,0x30003600,0x24000000,0x200000,0x30003700,0x24000000,0x4200000,0x3000392e,0x24000000,0x200000,0x30005013,0x7c00100,0x2633801,0x30005600,0, +0x918820,0x30020600,0x4000400,0x500400,0x30020701,0x2802400,0x962460,0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002, +0x300a3b11,0x4020000,0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000,0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611, +0x7c40300,0xe30000,0x300a4829,0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000,0xe00000,0x30402589,0x4000010,0x400000,0x30402589,0x4000010, +0xb70000,0x30402589,0xc000010,0xb48000,0x304a3dab,0x4000000,0xe00000,0x30800c1f,0x2802100,0x962460,0x30c01c81,0x6800000,0x1329800,0x3100080e,0x7c00120,0x220402, +0x3100080e,0x7c00120,0x250402,0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000,0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09, +0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00,0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400, +0x962460,0x31005c00,0x4000000,0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000,0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460, +0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405,0x31005d00,0x7c00120,0x250405,0x31006000,0x82000,0x8962460,0x31006000, +0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419,0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100, +0x220400,0x3200080e,0x7c00100,0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100,0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400, +0x32001d0c,0x7c00100,0x220400,0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820,0x32002800,0x4000001,0x445802,0x32002800,0x24000000,0x200000,0x32002800, +0x24000000,0x200002,0x32002800,0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919,0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000, +0x962460,0x32002b01,0x2802000,0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000,0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005, +0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000,0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000, +0x24000020,0x200000,0x32003500,0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003600,0x24000020,0x14200000,0x32003700,0x24000000,0x200000,0x32003700,0x24000000, +0x4100000,0x32003700,0x24000000,0x4200000,0x32003700,0x24000000,0x14200000,0x32003800,0x24000000,0x810000,0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008, +0x32005502,0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a,0x2802100,0x962460,0x3200622a,0x2806000,0x962460,0x3200622a, +0x7c00100,0x230400,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,0x7c00100,0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100, +0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,0x200000,0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000, +0x32006800,0x24000020,0x14200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900,0x24000020,0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00, +0x24000020,0x200001,0x32006a00,0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000,0x100000,0x32026c01,0x12882000,0x962460,0x32026c01,0x12882000, +0x8962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,0x1410000,0x32086900,0x24000020,0x810000, +0x32086900,0x24000020,0x1410000,0x320a3600,0x24000020,0x34200000,0x320a3d11,0x7c00100,0x1230400,0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x2530000,0x320a3f16, +0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,0x7c00300,0xe30001,0x320a6b16,0x7c00100,0x2530c00,0x32406385,0xc000010, +0x448000,0x324a3dae,0x4000000,0x14e00000,0x324a3dae,0x7c00100,0x1230400,0x324a3fa9,0x4000002,0x1200c00,0x324a53a6,0x24000000,0xe00000,0x32820701,0x2802000,0x962460, +0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200400,0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400,0x4000080e, +0x7c00100,0x250402,0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,0x40000c02,0x2802500,0x962460,0x40000c02,0x4000000,0x200000,0x40000c02,0x4000000, +0x1071400,0x40000c02,0x7c00100,0x230400,0x40000c02,0x80000000,0x218960,0x40000d22,0x7c00100,0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100,0x230400, +0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400,0x4000131f, +0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,0x2802400,0x962460,0x40001615,0x7c00100,0x230400,0x40002417,0x2802400, +0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,0x200000,0x40002c00,0x4000000,0x200002,0x40003000,0x24000000,0x14200000, +0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x4200000,0x40003700,0x24000000,0x14200000,0x40005a09,0x7c00100,0x220400,0x40005a09, 0x7c00100,0x250400,0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000, 0x1329800,0x40006f30,0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000, 0x40007208,0x7c00100,0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219, -0x7c00500,0x220400,0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,0x24000000,0x200000,0x40007300,0x24000000,0x10200000,0x40007400,0x4000000, +0x7c00500,0x220400,0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,0x24000000,0x200000,0x40007300,0x24000000,0x14200000,0x40007400,0x4000000, 0x200000,0x40007531,0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007835,0x4000010,0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400, 0x40007a32,0x6800000,0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400,0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701, -0x2802400,0xc62460,0x40023300,0x4000000,0x200000,0x40027d01,0x12882000,0x962460,0x400a3700,0x24000000,0x30200000,0x400a3700,0x24000000,0x30e00000,0x400a4400,0x4000000, +0x2802400,0xc62460,0x40023300,0x4000000,0x200000,0x40027d01,0x12882000,0x962460,0x400a3700,0x24000000,0x34200000,0x400a3700,0x24000000,0x34e00000,0x400a4400,0x4000000, 0xe0000d,0x400a4412,0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300,0x4000000,0x1410010, -0x404077bb,0x4000000,0x200000,0x404077be,0x4000000,0x200000,0x404077be,0x4000000,0x400000,0x40c0511d,0x4000000,0x200000,0x41000419,0x7c00100,0x220400,0x41000419, -0x7c00100,0x250400,0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,0x2802000, -0x962460,0x41000b13,0x2802100,0x962460,0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0xb00000,0x41000c02,0x4000000,0x1500000, -0x41000f0a,0x7c00100,0x230400,0x41001004,0x7c00100,0x230400,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400,0x41001d0c, -0x7c00100,0x23040f,0x41001f0b,0x2802100,0x962460,0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,0x24000000, -0x400000,0x41002919,0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,0x220405, -0x41003000,0x24000000,0x200000,0x41003700,0x24000000,0x200000,0x41003700,0x24000000,0x10200000,0x41003700,0x24000000,0x10205200,0x41003700,0x24000000,0x10e00000,0x41005d00, +0x404077e0,0x4000000,0x200000,0x404077e3,0x4000000,0x200000,0x404077e3,0x4000000,0x400000,0x40c0147c,0x4000000,0x200000,0x40c05123,0x4000000,0x200000,0x41000419, +0x7c00100,0x220400,0x41000419,0x7c00100,0x250400,0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100, +0x250400,0x41000b13,0x2802000,0x962460,0x41000b13,0x2802100,0x962460,0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0x1500000, +0x41000c02,0xc000010,0xb48000,0x41000f0a,0x7c00100,0x230400,0x41001004,0x7c00100,0x230400,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c, +0x7c00100,0x220400,0x41001d0c,0x7c00100,0x23040f,0x41001f0b,0x2802100,0x962460,0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000, +0x200000,0x41002800,0x24000000,0x400000,0x41002919,0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000, +0x41002c00,0x7c00120,0x220405,0x41003000,0x24000000,0x200000,0x41003700,0x24000000,0x4200000,0x41003700,0x24000000,0x14200000,0x41003700,0x24000000,0x14e00000,0x41005d00, 0x7c00120,0x220405,0x41006600,0x24000020,0x200000,0x41006600,0x24000020,0x810000,0x41006600,0x24000020,0x1410000,0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100, 0x220400,0x41007300,0x24000000,0x200000,0x41007e0e,0x2802000,0x962460,0x41007e0e,0x4000000,0x200000,0x41007f0e,0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400, 0x41008002,0x7c00100,0x230400,0x41008137,0x2802100,0x962460,0x41008137,0x4000000,0x200000,0x41008137,0x6800100,0x962540,0x41008137,0x7c00100,0x230400,0x41008301, @@ -6099,20 +6211,20 @@ static const uint32_t propsVectors[6435]={ 0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100,0x22040f,0x41008e00,0x24000000,0x200000,0x41008e00,0x24000000,0x400000,0x41008e00,0x24000000,0x1710000,0x41008e00, 0x24000006,0x400000,0x41008f3a,0x2802000,0x962460,0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a,0x4000000,0x200000,0x41008f3a,0x6800100, 0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c,0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000,0x962460,0x41020701,0x2802000,0xc62460, -0x410a3700,0x24000000,0x30200000,0x410a3700,0x24000000,0x30e00000,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a9100, +0x410a3700,0x24000000,0x34200000,0x410a3700,0x24000000,0x34e00000,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a9100, 0x4000000,0x800010,0x410a9100,0x4000000,0x810010,0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,0x4000000,0xf00010,0x410a9100,0x4000000, -0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100,0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x414a8295,0x4000000,0xe00000,0x41808300,0x2802000,0x962460, -0x41c0146b,0x6800000,0x1329800,0x50000419,0x7c00100,0x220400,0x50000419,0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908, +0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100,0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x414a82ab,0x4000000,0xe00000,0x41808300,0x2802000,0x962460, +0x41c0147c,0x6800000,0x1329800,0x50000419,0x7c00100,0x220400,0x50000419,0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908, 0x7c00100,0x250400,0x50000b13,0x2802500,0x962460,0x50000f0a,0x7c00100,0x230400,0x50001615,0x2802100,0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020, 0x962460,0x50002c00,0x4000000,0x200000,0x50002c19,0x7c00100,0x220400,0x50002d19,0x7c00100,0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000, -0x50003700,0x24000000,0x200000,0x50005d00,0x7c00120,0x220405,0x50005d00,0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600, +0x50003700,0x24000000,0x4200000,0x50005d00,0x7c00120,0x220405,0x50005d00,0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600, 0x24000020,0x200000,0x50007300,0x24000000,0x200000,0x50008301,0x2802400,0x962460,0x50008a00,0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000, 0x200000,0x50009257,0x4000010,0x1071400,0x50009257,0x6800000,0x1329800,0x50009257,0x7c00100,0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400, 0x50009257,0xc000010,0xb48000,0x5000933e,0x2802100,0x962460,0x5000933e,0x2802400,0x962460,0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e, 0x4000010,0x400000,0x5000933e,0x6800000,0x1329800,0x5000933e,0x6800100,0x962540,0x5000933e,0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100, 0x230400,0x5000933e,0x7c00100,0x230401,0x5000933e,0xc000010,0x448000,0x50009419,0x7c00100,0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200400, 0x5000965a,0x4000000,0x500000,0x5000965a,0x7c00100,0x230400,0x5000965a,0xc000010,0xb48000,0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b, -0x7c00100,0x230400,0x50009865,0x7c00100,0x230400,0x50009965,0x4000010,0x400000,0x50009965,0x7c00100,0x230400,0x50409a95,0x4000000,0x200000,0x5100080e,0x7c00100, +0x7c00100,0x230400,0x50009865,0x7c00100,0x230400,0x50009965,0x4000010,0x400000,0x50009965,0x7c00100,0x230400,0x50409aab,0x4000000,0x200000,0x5100080e,0x7c00100, 0x220400,0x5100080e,0x7c00100,0x250400,0x51000c02,0x2802100,0x962460,0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400, 0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500,0x230400,0x51001110,0x2802100,0x962460,0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524, 0x2802100,0x962460,0x51001524,0x4000000,0x200000,0x51001524,0x7c00100,0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000, @@ -6120,7 +6232,7 @@ static const uint32_t propsVectors[6435]={ 0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802400,0x1862460,0x51001c1c,0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c, 0x6800000,0x1862400,0x51001c1c,0x6800100,0x1862400,0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800400,0x1862400,0x51001c1c,0x7c00100,0x1830000,0x5100251b,0x7c00100, 0x230400,0x51002619,0x7c00100,0x220400,0x51002619,0x7c00100,0x250400,0x51002800,0x80020,0x218820,0x51002c00,0x4000000,0x200000,0x51002d19,0x7c00100,0x230400, -0x51003700,0x24000000,0x200000,0x51003700,0x24000000,0xe00000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,0x200000,0x51006108,0x7c00100,0x220400,0x51006108, +0x51003700,0x24000000,0x4200000,0x51003700,0x24000000,0x4e00000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,0x200000,0x51006108,0x7c00100,0x220400,0x51006108, 0x7c00100,0x250400,0x51006600,0x24000020,0x200000,0x51006600,0x24000020,0x810000,0x51006600,0x24000020,0x1410000,0x51007300,0x24000000,0x200000,0x51007300,0x24000020, 0x200000,0x51008002,0x7c00100,0x230400,0x51008301,0x2802000,0x962460,0x51008301,0x2802400,0x962460,0x51008a00,0x7c00500,0x230400,0x51008e00,0x24000000,0x200000, 0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000,0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,0x24000000,0x1410000,0x51008e00,0x24000000,0x1710000,0x51008e00, @@ -6137,78 +6249,78 @@ static const uint32_t propsVectors[6435]={ 0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e,0x2802100,0x962460,0x5100a36e,0x4000000,0x200000,0x5100a36e,0x6800100,0x962540,0x5100a36e,0x6804400,0x962540, 0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100,0x962460,0x5100a442,0x4000000,0x200000,0x5100a442,0x6800000,0x1329800,0x5100a442,0x6800100,0x962540,0x5100a442, 0x7c00100,0x230400,0x5100a442,0xc000010,0x448000,0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000,0x200000,0x5100a601,0x2802000,0x962460,0x5100a76b,0x7c00100, -0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,0xe00000,0x5100ab00,0x4000000,0xe00000, -0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000,0x510a7300,0x24000000,0x30200000,0x510aaa00, -0x4000000,0x30e00000,0x5140a2b6,0x4000400,0x400000,0x514a8295,0x4000000,0xe00000,0x51802b87,0x2802000,0x962460,0x51c00908,0x2802400,0x962460,0x51c0a008,0x2802400, +0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,0x4e00000,0x5100ab00,0x4000000,0x4e00000, +0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000,0x510a7300,0x24000000,0x34200000,0x510aaa00, +0x4000000,0x34e00000,0x5140a2db,0x4000400,0x400000,0x514a82ab,0x4000000,0xe00000,0x51802b9d,0x2802000,0x962460,0x51c00908,0x2802400,0x962460,0x51c0a008,0x2802400, 0x962460,0x52000f0a,0x2802100,0x962460,0x52000f0a,0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400,0x52001004,0x4000000,0x1600000,0x52001b00,0x4000000,0x200000, 0x52001c1c,0x2802100,0x1862460,0x52001c1c,0x6800100,0x1862400,0x52001c1c,0x6800400,0x1862400,0x52001e12,0x7c00100,0x2230500,0x52001e12,0x7c00100,0x2330520,0x52002128, 0x4000002,0x400000,0x52002128,0x7c00100,0x230400,0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000,0x1600000,0x52002d00,0x4000000,0x200006,0x52003000,0x24000000, 0x200000,0x52006108,0x7c00100,0x220400,0x52006108,0x7c00100,0x250400,0x52008301,0x2802400,0x962460,0x52008407,0x2802400,0x962460,0x52008407,0x7c00100,0x220400, 0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000,0x1800000,0x52008b3b,0x7c00100,0x1830000,0x52008e00,0x24000000,0x400000,0x52009419,0x7c00100,0x250400,0x5200975b, 0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460,0x5200ac7e,0x2802100,0x962460,0x5200ac7e,0x2802400,0x962460,0x5200ac7e,0x4000010,0x200000,0x5200ac7e,0x7c00100, -0x230400,0x5200ad28,0x7c00100,0x230400,0x5200ae6a,0x2802100,0x1862460,0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000,0x1862460, -0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000,0x1329800,0x5200ae6a,0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000,0x5200ae6a, -0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000,0x5200b083,0x4000010,0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182,0x2802400, -0x962460,0x5200b182,0x4000000,0x200000,0x5200b182,0x4000010,0x400000,0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400,0x962460, -0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100,0x230400,0x5200b54e,0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000,0x5200b54e, -0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800,0x5200b54e,0x6800100,0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e,0xc000010, -0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c,0x6800400,0x1862400,0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,0x2802100,0x1862460, -0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000,0x1800000,0x5200b77f,0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,0x1830000,0x5200b77f, -0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000,0x5200b873,0x2802100,0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,0x5200b873,0x6800100, -0x962540,0x5200b873,0x6800400,0x962540,0x5200b873,0x7c00100,0x230400,0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,0x7c00100,0x2330520, -0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010,0x400000,0x5200ba74,0x7c00100,0x230400,0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100,0x230400,0x5200bc75, -0x4000000,0x400000,0x5200bc75,0x4000010,0x400000,0x5200bc75,0x7c00100,0x230400,0x5200bd7d,0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400,0x5200be7a,0x4000000, -0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58,0x7c00100,0x230400,0x5200c002,0x4000000,0x200000,0x5200c178,0x2802000,0x962460,0x5200c178,0x2802100,0x962460, -0x5200c178,0x2802400,0x962460,0x5200c178,0x2806400,0x962460,0x5200c178,0x4000000,0x200000,0x5200c178,0x6800100,0x962540,0x5200c178,0x7c00100,0x230400,0x5200c178, -0x7c00100,0x230401,0x5200c178,0xc000010,0x448000,0x5200c178,0x80000000,0x218960,0x5200c247,0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400,0x5200c247,0x7c00100, -0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00,0x4000000,0x100006,0x52023700,0x24000000,0x100000,0x52023700,0x24000000,0xe00000,0x52023700,0x24000000,0x10100000, -0x52023700,0x24000000,0x10e00000,0x52023700,0x24000000,0x928045a0,0x52024400,0x4000000,0x100000,0x52027300,0x24000000,0x100000,0x5202c300,0x4000000,0x100000,0x5202c300, -0x4000000,0x100002,0x5202c300,0x4000000,0x100003,0x5202c300,0x4000000,0x10000d,0x5202c300,0x4000100,0x150400,0x5202c300,0x4000100,0x15040d,0x5202c300,0x4000100, -0x10150400,0x520a1e12,0x7c00100,0x2130480,0x520a3700,0x24000000,0x30e00000,0x520a3800,0x24000000,0x30100000,0x520a4711,0x7c40300,0xe30000,0x520a4f11,0x7c00300,0xe30001, -0x520a7300,0x24000000,0x30100000,0x520ab412,0x7c00100,0x2130480,0x520ac400,0x4000000,0xe00002,0x520ac400,0x4000000,0xe0000d,0x520ac400,0x4000000,0x30e0000d,0x520ac414, -0x4000000,0xe0000d,0x520ac511,0x7c40300,0xe30000,0x5240af7a,0x6800400,0x962540,0x5240af7a,0x7c00100,0x230400,0x5240af7b,0x4000400,0x200000,0x5240af7b,0x6800100, -0x962540,0x5240b29b,0x4000000,0x200000,0x5240b2a5,0x4000000,0x200000,0x5240b2a5,0x4000000,0x1500000,0x5240b5b9,0x7c00900,0x230400,0x524a4495,0x4000000,0xe00003, -0x5280af7a,0x2802400,0x962460,0x5280af7b,0x2802400,0x962460,0x5280af7d,0x2802400,0x962460,0x5280af7f,0x2802400,0x962460,0x52c0b3b0,0x2802400,0x962460,0x52c0b3b4, -0x7c00100,0x230400,0x60000c02,0x2802100,0x962460,0x60000c02,0x7c00100,0x230400,0x60000f0a,0x2802100,0x962460,0x60000f0a,0x6800100,0x962540,0x60000f0a,0x7c00100, -0x230400,0x6000131f,0x4000000,0x200000,0x6000171a,0x7c00100,0x230400,0x6000171a,0x7c00100,0x230560,0x60001b27,0x2802100,0x962460,0x60001b27,0x4000000,0xc00000, -0x60001b27,0x7c00100,0x230400,0x60001f0b,0x2802000,0x962460,0x60002919,0x7c00100,0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,0x24000000,0x10200000,0x60003000, -0x24000000,0x10e00000,0x60003700,0x24000000,0x200000,0x60003800,0x24000000,0x1710000,0x60005102,0x4000000,0x200000,0x60006108,0x7c00100,0x220400,0x60006108,0x7c00100, -0x250400,0x60006600,0x24000020,0x200000,0x60008301,0x2802000,0x962460,0x6000903c,0x2806000,0x962460,0x6000903c,0x4000000,0x400000,0x60009519,0x7c00100,0x220400, -0x60009519,0x7c00100,0x250400,0x6000a008,0x7c00100,0x220400,0x6000a008,0x7c00100,0x250400,0x6000c300,0x4000000,0x3a703580,0x6000c654,0x2802000,0x962460,0x6000c654, -0x4000010,0x200000,0x6000c654,0x7c00100,0x230400,0x6000c73f,0x2802000,0x962460,0x6000c73f,0x2802100,0x962460,0x6000c73f,0x4000000,0x200000,0x6000c73f,0x6800100, -0x962540,0x6000c73f,0x6804000,0x962540,0x6000c73f,0x7c00100,0x230400,0x6000c80b,0x7c00100,0x230400,0x6000c941,0x2802100,0x962460,0x6000c941,0x2806000,0x962460, -0x6000c941,0x4000000,0x200000,0x6000c941,0x4000010,0x200000,0x6000c941,0x6800000,0x1329800,0x6000c941,0x6800100,0x962540,0x6000c941,0x7c00100,0x230400,0x6000c941, -0xc000010,0x448000,0x6000ca82,0x7c00100,0x230400,0x6000cc00,0x4000000,0xe00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,0x100000,0x6002c300,0x4000000, -0x10000d,0x6002c300,0x4000100,0x150400,0x6002c300,0x4000100,0x15040d,0x6002c300,0x4000100,0x10150400,0x600a3000,0x24000000,0x30200000,0x600a3000,0x24000000,0x30e00000, -0x600a3700,0x24000000,0x30200000,0x600a3800,0x24000000,0x30200000,0x600a3800,0x24000000,0xb28045a0,0x600a4305,0x7c00100,0xe30400,0x600ac300,0x4000000,0x30100000,0x600ac400, -0x4000000,0x10e0000d,0x600ac400,0x4000000,0x30e0000d,0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600acc00,0x4000000,0x30e00000,0x600acd00,0x4000000, -0x30200000,0x600acd00,0x4000000,0x30e00000,0x600acd00,0x4000000,0x30e05200,0x600acd00,0x4000000,0xb28045a0,0x600acd00,0x4000000,0xb28049c0,0x600ace00,0x4000000,0x30e00000, -0x600ace00,0x4000000,0xb28045a0,0x600acf00,0x4000000,0x30e00000,0x600acf00,0x4000000,0x30e05200,0x600acf00,0x4000000,0xb28045a0,0x600ad111,0x7c40300,0xe30000,0x604ac495, -0x4000000,0x30e00003,0x61000a03,0x4000000,0x1600000,0x61000c02,0x80000000,0x218960,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100,0x1830000,0x61001d0c,0x7c00100, -0x230400,0x61001d0c,0x7c00100,0x250400,0x61006600,0x24000020,0x200000,0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400,0x6100870c,0x7c00100,0x220400, -0x61008e00,0x24000000,0x200000,0x61008e00,0x24000000,0x400000,0x61008e00,0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519,0x7c00100,0x220400,0x61009519, -0x7c00100,0x250400,0x61009519,0x7c00500,0x22040f,0x61009b71,0x2802100,0x962460,0x61009b71,0x2806400,0x962460,0x61009b71,0x7c00100,0x230400,0x6100a008,0x2802100, -0x962460,0x6100c300,0x4000000,0x20000f,0x6100cd00,0x4000000,0x200000,0x6100d202,0x2802400,0x962460,0x6100d202,0x2802500,0x962460,0x6100d202,0x7c00100,0x230400, -0x6100d302,0x4000020,0x200000,0x6100d302,0x7c00120,0x230405,0x6100d476,0x2802100,0x962460,0x6100d476,0x2802100,0x962461,0x6100d476,0x2806400,0x962460,0x6100d476, -0x4000000,0x400000,0x6100d476,0x6800000,0x1329800,0x6100d476,0x6800100,0x962540,0x6100d476,0x7c00100,0x230400,0x6100d476,0xc000010,0x448000,0x6100d573,0x2802100, -0x962460,0x6100d573,0x2806400,0x962460,0x6100d573,0x6800100,0x962540,0x6100d573,0x7c00100,0x230400,0x6100d573,0x7c00900,0x230400,0x6100d573,0xc000010,0x448000, -0x6100d68d,0x7c00100,0x230400,0x6100d756,0x7c00100,0x230400,0x6100d85c,0x2802400,0x962460,0x6100d85c,0x6800100,0x962540,0x6100d85c,0x7c00100,0x230400,0x6100d85c, -0x7c00500,0x230400,0x6100d997,0x2802100,0x962460,0x6100d997,0x4000000,0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000,0x1329800,0x6100d997,0x6800100, -0x962540,0x6100d997,0x6804400,0x962540,0x6100d997,0x7c00100,0x230400,0x6100d997,0x7c00100,0x230560,0x6100d997,0xc000010,0x448000,0x6100da98,0x6800000,0x1329800, -0x6100da98,0x7c00100,0x230400,0x6100db71,0x4000000,0x200000,0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000,0x1329800,0x6100dc99, -0x6800100,0x962540,0x6100dc99,0x6804400,0x962540,0x6100dc99,0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x610ace00,0x4000000, -0x30e00000,0x6140af7a,0x7c00100,0x230400,0x6140af7b,0x6800100,0x962540,0x6140af84,0x7c00100,0x230400,0x6180af7b,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000, -0x63002800,0x80000,0x918820,0x63c00c11,0x80000,0x918820,0x7000080e,0x7c00100,0x250400,0x70000a03,0x4000000,0x200000,0x70000c00,0x80000000,0x218960,0x70000f0a, +0x230400,0x5200ac7e,0xc000010,0x248000,0x5200ad28,0x7c00100,0x230400,0x5200ae6a,0x2802100,0x1862460,0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460, +0x5200ae6a,0x2806000,0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000,0x1329800,0x5200ae6a,0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a, +0x7c00100,0x1830000,0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000,0x5200b083,0x4000010,0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010, +0x448000,0x5200b182,0x2802400,0x962460,0x5200b182,0x4000000,0x200000,0x5200b182,0x4000010,0x400000,0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000, +0x5200b30a,0x2802400,0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100,0x230400,0x5200b54e,0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e, +0x4000000,0x200000,0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800,0x5200b54e,0x6800100,0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100, +0x230400,0x5200b54e,0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c,0x6800400,0x1862400,0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000, +0x5200b77f,0x2802100,0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000,0x1800000,0x5200b77f,0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f, +0x7c00500,0x1830000,0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000,0x5200b873,0x2802100,0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000, +0x1329800,0x5200b873,0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873,0x7c00100,0x230400,0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500, +0x5200b912,0x7c00100,0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010,0x400000,0x5200ba74,0x7c00100,0x230400,0x5200bb85,0x4000000,0x200000,0x5200bb85, +0x7c00100,0x230400,0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010,0x400000,0x5200bc75,0x7c00100,0x230400,0x5200bd7d,0x4000000,0x200000,0x5200bd7d,0x7c00100, +0x230400,0x5200be7a,0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58,0x7c00100,0x230400,0x5200c002,0x4000000,0x200000,0x5200c178,0x2802000,0x962460, +0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400,0x962460,0x5200c178,0x2806400,0x962460,0x5200c178,0x4000000,0x200000,0x5200c178,0x6800100,0x962540,0x5200c178, +0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401,0x5200c178,0xc000010,0x448000,0x5200c178,0x80000000,0x218960,0x5200c247,0x7c00100,0x230400,0x5200c247,0x7c00100, +0x830400,0x5200c247,0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00,0x4000000,0x100006,0x52023700,0x24000000,0x4100000,0x52023700,0x24000000,0x4e00000, +0x52023700,0x24000000,0x14100000,0x52023700,0x24000000,0x14e00000,0x52023700,0x24000000,0x96800000,0x52024400,0x4000000,0x100000,0x52027300,0x24000000,0x100000,0x5202c300, +0x4000000,0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000,0x100003,0x5202c300,0x4000000,0x10000d,0x5202c300,0x4000100,0x150400,0x5202c300,0x4000100, +0x15040d,0x5202c300,0x4000100,0x14150400,0x520a1e12,0x7c00100,0x2130480,0x520a3700,0x24000000,0x34e00000,0x520a3800,0x24000000,0x34100000,0x520a4711,0x7c40300,0xe30000, +0x520a4f11,0x7c00300,0xe30001,0x520a7300,0x24000000,0x34100000,0x520ab412,0x7c00100,0x2130480,0x520ac400,0x4000000,0xe00002,0x520ac400,0x4000000,0xe0000d,0x520ac400, +0x4000000,0x34e0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,0x7c40300,0xe30000,0x5240af8b,0x7c00100,0x230400,0x5240af90,0x4000400,0x200000,0x5240af90,0x6800100, +0x962540,0x5240af92,0x6800400,0x962540,0x5240af92,0x7c00100,0x230400,0x5240b2b1,0x4000000,0x200000,0x5240b2b1,0x4000000,0x1500000,0x5240b2bc,0x4000000,0x200000, +0x5240b2c9,0x4000000,0x200000,0x5240b5de,0x7c00900,0x230400,0x524a44ab,0x4000000,0xe00003,0x5280af8b,0x2802400,0x962460,0x5280af8c,0x2802400,0x962460,0x5280af92, +0x2802400,0x962460,0x5280af94,0x2802400,0x962460,0x5280af96,0x2802400,0x962460,0x52c0b3d5,0x2802400,0x962460,0x52c0b3d9,0x7c00100,0x230400,0x60000c02,0x2802100, +0x962460,0x60000c02,0x7c00100,0x230400,0x60000f0a,0x2802100,0x962460,0x60000f0a,0x6800100,0x962540,0x60000f0a,0x7c00100,0x230400,0x6000131f,0x4000000,0x200000, +0x6000171a,0x7c00100,0x230400,0x6000171a,0x7c00100,0x230560,0x60001b27,0x2802100,0x962460,0x60001b27,0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b, +0x2802000,0x962460,0x60002919,0x7c00100,0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,0x24000000,0x14200000,0x60003000,0x24000000,0x14e00000,0x60003700,0x24000000, +0x4200000,0x60003800,0x24000000,0x1710000,0x60005102,0x4000000,0x200000,0x60006108,0x7c00100,0x220400,0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000, +0x60008301,0x2802000,0x962460,0x6000903c,0x2806000,0x962460,0x6000903c,0x4000000,0x400000,0x60009519,0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008, +0x7c00100,0x220400,0x6000a008,0x7c00100,0x250400,0x6000c300,0x4000000,0x3a703580,0x6000c654,0x2802000,0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100, +0x230400,0x6000c73f,0x2802000,0x962460,0x6000c73f,0x2802100,0x962460,0x6000c73f,0x4000000,0x200000,0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540, +0x6000c73f,0x7c00100,0x230400,0x6000c80b,0x7c00100,0x230400,0x6000c941,0x2802100,0x962460,0x6000c941,0x2806000,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941, +0x4000010,0x200000,0x6000c941,0x6800000,0x1329800,0x6000c941,0x6800100,0x962540,0x6000c941,0x7c00100,0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100, +0x230400,0x6000cc00,0x4000000,0x4e00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,0x100000,0x6002c300,0x4000000,0x10000d,0x6002c300,0x4000100,0x150400, +0x6002c300,0x4000100,0x15040d,0x6002c300,0x4000100,0x14150400,0x600a3000,0x24000000,0x34200000,0x600a3000,0x24000000,0x34e00000,0x600a3700,0x24000000,0x34200000,0x600a3800, +0x24000000,0x34200000,0x600a3800,0x24000000,0xb6800000,0x600a4305,0x7c00100,0xe30400,0x600ac300,0x4000000,0x34100000,0x600ac400,0x4000000,0x14e0000d,0x600ac400,0x4000000, +0x34e0000d,0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600acc00,0x4000000,0x34e00000,0x600acd00,0x4000000,0x34200000,0x600acd00,0x4000000,0x34e00000, +0x600acd00,0x4000000,0xb6800000,0x600ace00,0x4000000,0x34e00000,0x600ace00,0x4000000,0xb6800000,0x600acf00,0x4000000,0x34e00000,0x600acf00,0x4000000,0xb6800000,0x600ad111, +0x7c40300,0xe30000,0x604ac4ab,0x4000000,0x34e00003,0x61000a03,0x4000000,0x1600000,0x61000c02,0x80000000,0x218960,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100, +0x1830000,0x61001d0c,0x7c00100,0x220400,0x61001d0c,0x7c00100,0x250400,0x61006600,0x24000020,0x200000,0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400, +0x6100870c,0x7c00100,0x220400,0x61008e00,0x24000000,0x200000,0x61008e00,0x24000000,0x400000,0x61008e00,0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519, +0x7c00100,0x220400,0x61009519,0x7c00100,0x250400,0x61009519,0x7c00500,0x22040f,0x61009b71,0x2802100,0x962460,0x61009b71,0x2806400,0x962460,0x61009b71,0x7c00100, +0x230400,0x6100a008,0x2802100,0x962460,0x6100c300,0x4000000,0x20000f,0x6100cd00,0x4000000,0x200000,0x6100d202,0x2802400,0x962460,0x6100d202,0x2802500,0x962460, +0x6100d202,0x7c00100,0x230400,0x6100d302,0x4000020,0x200000,0x6100d302,0x7c00120,0x230405,0x6100d476,0x2802100,0x962460,0x6100d476,0x2802100,0x962461,0x6100d476, +0x2806400,0x962460,0x6100d476,0x4000000,0x400000,0x6100d476,0x6800000,0x1329800,0x6100d476,0x6800100,0x962540,0x6100d476,0x7c00100,0x230400,0x6100d476,0xc000010, +0x448000,0x6100d573,0x2802100,0x962460,0x6100d573,0x2806400,0x962460,0x6100d573,0x6800100,0x962540,0x6100d573,0x7c00100,0x230400,0x6100d573,0x7c00900,0x230400, +0x6100d573,0xc000010,0x448000,0x6100d68d,0x7c00100,0x230400,0x6100d756,0x7c00100,0x230400,0x6100d85c,0x2802400,0x962460,0x6100d85c,0x6800100,0x962540,0x6100d85c, +0x7c00100,0x230400,0x6100d85c,0x7c00500,0x230400,0x6100d997,0x2802100,0x962460,0x6100d997,0x4000000,0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000, +0x1329800,0x6100d997,0x6800100,0x962540,0x6100d997,0x6804400,0x962540,0x6100d997,0x7c00100,0x230400,0x6100d997,0x7c00100,0x230560,0x6100d997,0xc000010,0x448000, +0x6100da98,0x6800000,0x1329800,0x6100da98,0x7c00100,0x230400,0x6100db71,0x4000000,0x200000,0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99, +0x6800000,0x1329800,0x6100dc99,0x6800100,0x962540,0x6100dc99,0x6804400,0x962540,0x6100dc99,0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300, +0xe30001,0x610ace00,0x4000000,0x34e00000,0x6140af90,0x6800100,0x962540,0x6140af92,0x7c00100,0x230400,0x6180af8d,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000, +0x63002800,0x80000,0x918820,0x63c00c15,0x80000,0x918820,0x7000080e,0x7c00100,0x250400,0x70000a03,0x4000000,0x200000,0x70000c00,0x80000000,0x218960,0x70000f0a, 0x7c00100,0x230400,0x70001004,0x7c00100,0x230400,0x70001524,0x2802100,0x962460,0x70001524,0x7c00100,0x230400,0x70001615,0x2802100,0x962460,0x7000171a,0x2802100, 0x962460,0x70001821,0x6800000,0x1329800,0x70002320,0x7c00100,0x230400,0x70002a00,0x4000000,0x1500000,0x70002a00,0x4000000,0x1600000,0x70003000,0x24000000,0x200000, -0x70003000,0x24000000,0x10200000,0x70003800,0x24000000,0xe00000,0x70005201,0x2802400,0x962460,0x7000581e,0x7c00100,0x230400,0x70006108,0x7c00100,0x220400,0x70006108, +0x70003000,0x24000000,0x14200000,0x70003800,0x24000000,0x4e00000,0x70005201,0x2802400,0x962460,0x7000581e,0x7c00100,0x230400,0x70006108,0x7c00100,0x220400,0x70006108, 0x7c00100,0x250400,0x70006f30,0x7c00100,0x230400,0x70007300,0x24000000,0x200000,0x70007f0e,0x4000000,0x200000,0x70008301,0x2802100,0x962460,0x70008301,0x2802400, 0x962460,0x70008e00,0x24000000,0x200000,0x70008e00,0x24000000,0x400000,0x70008e00,0x24000002,0x400000,0x70008e00,0x24000008,0x1410000,0x70008e00,0x24000010,0x400000, 0x70008e00,0x2c000010,0x448000,0x70009519,0x7c00100,0x220400,0x70009519,0x7c00100,0x230400,0x70009519,0x7c00100,0x250400,0x70009865,0x7c00100,0x230400,0x70009965, 0x4000010,0x400000,0x70009965,0x7c00100,0x230400,0x7000a008,0x7c00100,0x220400,0x7000a008,0x7c00100,0x250400,0x7000a008,0x7c00500,0x22040f,0x7000a50e,0x4000000, 0x200000,0x7000b61c,0x2802400,0x1862460,0x7000b61c,0x6800400,0x1862400,0x7000b61c,0x7c00100,0x1830000,0x7000c300,0x4000000,0x100000,0x7000c941,0x2806000,0x962460, -0x7000cc00,0x4000000,0xe00000,0x7000cd00,0x4000000,0x200000,0x7000cd00,0x4000000,0xe00000,0x7000cd00,0x4000000,0x10200000,0x7000cd00,0x4000000,0x10e00000,0x7000cd00, -0x4000000,0x10e05200,0x7000cd00,0x4000000,0x928045a0,0x7000cf00,0x4000000,0xe00000,0x7000cf00,0x4000000,0x10e00000,0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100, +0x7000cc00,0x4000000,0x4e00000,0x7000cd00,0x4000000,0x200000,0x7000cd00,0x4000000,0x4200000,0x7000cd00,0x4000000,0x4e00000,0x7000cd00,0x4000000,0x14200000,0x7000cd00, +0x4000000,0x14e00000,0x7000cd00,0x4000000,0x96800000,0x7000cf00,0x4000000,0x4e00000,0x7000cf00,0x4000000,0x14e00000,0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100, 0x230400,0x7000d997,0x7c00100,0x230400,0x7000d997,0xc000010,0x248000,0x7000dd86,0x2802400,0x962460,0x7000dd86,0x7c00100,0x230400,0x7000dd86,0xc000010,0x448000, 0x7000de9f,0x4000000,0x200000,0x7000de9f,0x7c00100,0x230400,0x7000e001,0x2000,0x962460,0x7000e001,0x2802400,0x962460,0x7000e187,0x2802000,0x962460,0x7000e187, 0x2802100,0x962460,0x7000e187,0x4000000,0x200000,0x7000e187,0x7c00100,0x230400,0x7000e187,0xc000010,0x448000,0x7000e288,0x7c00100,0x230400,0x7000e300,0x4000000, @@ -6230,21 +6342,21 @@ static const uint32_t propsVectors[6435]={ 0x200000,0x7000f8a6,0x6800100,0x962540,0x7000f8a6,0x6800100,0x962541,0x7000f8a6,0x7c00100,0x230400,0x7000f8a6,0xc000010,0x448000,0x7000f921,0x4000000,0x200000, 0x7000fa00,0x4000000,0x200000,0x7000fb9e,0x2802100,0x962460,0x7000fb9e,0x2802400,0x962460,0x7000fb9e,0x2806400,0x962460,0x7000fb9e,0x4000000,0x200000,0x7000fb9e, 0x6800000,0x1329800,0x7000fb9e,0x6800100,0x962540,0x7000fb9e,0x6800100,0x962541,0x7000fb9e,0x7c00100,0x230400,0x7000fc92,0x4000000,0x200000,0x7000fc92,0x6800000, -0x1329800,0x7000fc92,0x7c00100,0x220400,0x7000fc92,0x7c00100,0x230400,0x7000fc92,0x7c00100,0x250400,0x700acd00,0x4000000,0x30e00000,0x700acd00,0x4000000,0xb28045a0, -0x700ace00,0x4000000,0x30e00000,0x700acf00,0x4000000,0x30e00000,0x700acf00,0x4000000,0xb28045a0,0x7040dfc0,0x4000000,0x200000,0x7040f7c4,0x80000,0x918820,0x7080af7b, -0x2802400,0x962460,0x7080dfc0,0x2802400,0x962460,0x70c0e4c2,0x2802100,0x962460,0x70c0e4c2,0x2802400,0x962460,0x70c0e4c2,0x6800100,0x962540,0x8000120f,0x7c00100, +0x1329800,0x7000fc92,0x7c00100,0x220400,0x7000fc92,0x7c00100,0x230400,0x7000fc92,0x7c00100,0x250400,0x700acd00,0x4000000,0x34e00000,0x700acd00,0x4000000,0xb6800000, +0x700ace00,0x4000000,0x34e00000,0x700acf00,0x4000000,0x34e00000,0x700acf00,0x4000000,0xb6800000,0x7040dfe5,0x4000000,0x200000,0x7040f7e9,0x80000,0x918820,0x7080af90, +0x2802400,0x962460,0x7080dfe5,0x2802400,0x962460,0x70c0e4e7,0x2802100,0x962460,0x70c0e4e7,0x2802400,0x962460,0x70c0e4e7,0x6800100,0x962540,0x8000120f,0x7c00100, 0x230400,0x80001524,0x7c00100,0x230400,0x8000171a,0x7c00100,0x230400,0x80002006,0x7c00100,0x220400,0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000, 0x80002d00,0x4000000,0x200000,0x80005208,0x2802400,0x962460,0x80005c00,0x4000000,0x200000,0x80007300,0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519, 0x7c00100,0x230400,0x80009519,0x7c00100,0x250400,0x80009865,0x7c00100,0x230400,0x8000a008,0x2802100,0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100, -0x230400,0x8000cd00,0x4000000,0xe00000,0x8000d202,0x2802500,0x962460,0x8000d202,0x7c00100,0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802400,0x962460, -0x8000d997,0x4000000,0x200000,0x8000d997,0x4000000,0x400000,0x8000d997,0x4000000,0x500000,0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489, +0x230400,0x8000cd00,0x4000000,0x4e00000,0x8000d202,0x2802500,0x962460,0x8000d202,0x7c00100,0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802000,0x962460, +0x8000d997,0x2802400,0x962460,0x8000d997,0x4000000,0x400000,0x8000d997,0x4000000,0x500000,0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489, 0x2802100,0x962460,0x8000e489,0x7c00100,0x230400,0x8000e719,0x7c00100,0x220400,0x8000f8a6,0x2802100,0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010, 0x448000,0x8000fda1,0x2802100,0x1862460,0x8000fda1,0x2806400,0x1862460,0x8000fda1,0x4000000,0x1800000,0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862540, 0x8000fda1,0x7c00100,0x1830000,0x8000fda1,0xc000010,0x448000,0x8000fe9c,0x7c00100,0x230400,0x8000fe9c,0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06, 0x7c00100,0x220400,0x80010165,0x7c00100,0x230400,0x800102a2,0x4000000,0x200000,0x800102a2,0x7c00100,0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010, 0x448000,0x8001044c,0x4000000,0x200000,0x8001044c,0x7c00100,0x220400,0x8001044c,0x7c00100,0x250400,0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000, -0x80010670,0x4000010,0x400000,0x80010670,0xc000010,0x448000,0x800a4711,0x7c40300,0xe30000,0x800acd00,0x4000000,0x30e00000,0x800acd00,0x4000000,0x7a904de0,0x800ace00, -0x4000000,0x30e00000,0x800acf00,0x4000000,0x30e00000,0x800b0011,0x7c40300,0xe30000,0x800b0500,0x4000000,0x30e00000,0x800b0500,0x4000000,0xb28045a0,0x90001615,0x7c00100, +0x80010670,0x4000010,0x400000,0x80010670,0xc000010,0x448000,0x800a4711,0x7c40300,0xe30000,0x800acd00,0x4000000,0x34e00000,0x800acd00,0x4000000,0x7a902460,0x800ace00, +0x4000000,0x34e00000,0x800acf00,0x4000000,0x34e00000,0x800b0011,0x7c40300,0xe30000,0x800b0500,0x4000000,0x34e00000,0x800b0500,0x4000000,0xb6800000,0x90001615,0x7c00100, 0x230400,0x9000171a,0x4000000,0x200000,0x9000171a,0x7c00100,0x230400,0x90003000,0x24000000,0x200000,0x90007f0e,0x4000000,0x200000,0x90008301,0x2802000,0x962460, 0x90008e00,0x24000000,0x400000,0x90009519,0x7c00100,0x250400,0x9000a16f,0x2802100,0x962460,0x9000d200,0x80000000,0x218960,0x9000d202,0x2802000,0x962460,0x9000d202, 0x2802100,0x962460,0x9000d202,0x7c00100,0x230400,0x9000e59d,0x2802100,0x962460,0x900107a7,0x2802100,0x962460,0x900107a7,0x2802400,0x962460,0x900107a7,0x2802c00, @@ -6254,359 +6366,388 @@ static const uint32_t propsVectors[6435]={ 0x962460,0x90010ca9,0x4000000,0x500000,0x90010ca9,0x4000010,0xb00000,0x90010ca9,0x6800100,0x962540,0x90010ca9,0x7c00100,0x230400,0x90010d1b,0x4000000,0x500000, 0x90010eaa,0x2802100,0x962460,0x90010eaa,0x2802400,0x962460,0x90010eaa,0x2806400,0x962460,0x90010eaa,0x4000000,0x200000,0x90010eaa,0x4000000,0x400000,0x90010eaa, 0x4000010,0x400000,0x90010eaa,0x6800000,0x1329800,0x90010eaa,0x6800100,0x962540,0x90010eaa,0x7c00100,0x230400,0x90010eaa,0xc000010,0x448000,0x90010fab,0x7c00100, -0x220400,0x90010fab,0x7c00100,0x250400,0x9002c300,0x4000000,0x100000,0x900ac400,0x4000000,0xe0000d,0x900acd00,0x4000000,0x30e00000,0x900acd00,0x4000000,0xb28045a0, -0x900acf00,0x4000000,0x30e00000,0x900b0500,0x4000000,0xe00000,0x900b0500,0x4000000,0x30e00000,0x900b0500,0x4000000,0xb28045a0,0x900b0b9a,0x7c00900,0x1230400,0x900b109a, +0x220400,0x90010fab,0x7c00100,0x250400,0x9002c300,0x4000000,0x100000,0x900ac400,0x4000000,0xe0000d,0x900acd00,0x4000000,0x34e00000,0x900acd00,0x4000000,0xb6800000, +0x900acf00,0x4000000,0x34e00000,0x900b0500,0x4000000,0xe00000,0x900b0500,0x4000000,0x34e00000,0x900b0500,0x4000000,0xb6800000,0x900b0b9a,0x7c00900,0x1230400,0x900b109a, 0x7c00300,0xe30000,0x900b119a,0x7c00300,0xe30000,0x90408e06,0x24000000,0x400000,0xa0001004,0x4000000,0x200000,0xa0001004,0x7c00100,0x230400,0xa000120f,0x2802100, 0x962460,0xa000120f,0x2802400,0x962460,0xa000171a,0x2802100,0x962460,0xa000171a,0x2806400,0x962460,0xa0002a00,0x4000000,0x1600000,0xa0003000,0x24000000,0x200000, -0xa000581e,0x7c00100,0x230400,0xa0007300,0x24000000,0x200000,0xa0008301,0x2802400,0x962460,0xa0008e00,0x24000000,0x400000,0xa000cf00,0x4000000,0xe00000,0xa0010500, +0xa000581e,0x7c00100,0x230400,0xa0007300,0x24000000,0x200000,0xa0008301,0x2802400,0x962460,0xa0008e00,0x24000000,0x400000,0xa000cf00,0x4000000,0x4e00000,0xa0010500, 0x4000000,0x200000,0xa00114af,0x2802100,0x962460,0xa00114af,0x2802400,0x962460,0xa00114af,0x2806400,0x962460,0xa00114af,0x6800000,0x1329800,0xa00114af,0x7c00100, 0x230400,0xa00114af,0x7c00100,0x230560,0xa00116b0,0x2802100,0x962460,0xa00116b0,0x2802800,0x962460,0xa00116b0,0x2806400,0x962460,0xa00116b0,0x4000000,0x400000, 0xa00116b0,0x4000000,0x500000,0xa00116b0,0x4000010,0x400000,0xa00116b0,0x6800100,0x962540,0xa00116b0,0x7c00100,0x230400,0xa00116b0,0x7c00100,0x230560,0xa00116b0, 0xc000010,0x448000,0xa0011722,0x7c00100,0x230400,0xa00118b1,0x2802000,0x962460,0xa00118b1,0x2802100,0x962460,0xa00118b1,0x2806400,0x962460,0xa00118b1,0x4000000, 0x200000,0xa00118b1,0x4000000,0x400000,0xa00118b1,0x4000000,0x500000,0xa00118b1,0x6800100,0x962540,0xa00118b1,0x7c00100,0x230400,0xa00118b1,0x7c00100,0x230560, -0xa00118b1,0xc000010,0x448000,0xa00a4005,0x7c00100,0xe30400,0xa00a4711,0x7c40300,0xe30000,0xa00ac400,0x4000000,0xe00000,0xa00acb14,0x7c00100,0xe30000,0xa00acf00, -0x4000000,0x30e00000,0xa00b0500,0x4000000,0x30e00000,0xa00b0500,0x4000000,0xb28045a0,0xa00b0b96,0x7c00900,0x1230400,0xa00b1211,0x7c40300,0xe30000,0xa00b1314,0x7c00100, -0xe30000,0xa00b1596,0x7c00300,0xe30000,0xa040af86,0x6800400,0x962540}; -#else /* !U_PLATFORM_IS_DARWIN_BASED */ -0x24000000,0x928045a0,0x11004e00,0x2000,0x900060,0x11004e00,0x4000000,0x200000,0x11004e00,0x4000000,0x1600000,0x11004e00,0x4000100,0x200000,0x11005003,0x7c00100, -0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,0x2633801,0x11005013,0x7c00100,0x2633802,0x11005013,0x7c00100,0x2633805, -0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000,0x11005100,0x24000000,0x1410000,0x11005102,0x7000100,0x230408,0x11005102,0x7c00100,0x230404,0x11005102, -0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460,0x11005500,0x80000,0x1e18820,0x11005502,0x7000100, -0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502,0x7c00100,0x230409,0x11005667,0x1000,0, -0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400,0x100002,0x11020200,0x4000400,0x500002,0x11020200, -0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200,0x24000000,0x1400000,0x11020200,0x24000000,0x1500000,0x11020200,0x24000000,0x1600000,0x11020200,0x24000000, -0x10200000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219,0x7c00100,0x220400,0x11020219,0x7c00100,0x220401, -0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100,0x220402,0x11020319,0x7c00100,0x250400,0x11020319, -0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400,0x11020600,0x4000400,0x100002,0x11020600,0x4000400, -0x200400,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701,0x2802400,0x962461,0x11020701,0x2802400,0xc62460, -0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100,0x220401,0x11020908,0x7c00100,0x250400,0x11020908, -0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002,0x11022800,0x24000000,0x401000,0x11022800,0x24000000, -0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800,0x24000002,0x370000,0x11022800,0x24000002,0x470000, -0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020,0x100000,0x11022800,0x24000020,0x1500000,0x11022800, -0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f,0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000, -0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x4000000,0x1010000f,0x11022c00,0x7c00120,0x120405,0x11022c0e,0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401, -0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100,0x150402,0x11022e00,0x24000000,0x200000,0x11022e00, -0x24000020,0x100000,0x11022e00,0x24000020,0x10100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001,0x11022f00,0x24000020,0x100002,0x11023000,0x24000000, -0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300,0x4000100,0x150403,0x11023300,0x4000100,0x10150403, -0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020,0x100000,0x11023600,0x24000020,0x10100000,0x11023700, -0x24000000,0x100000,0x11023700,0x24000000,0xe00000,0x11023700,0x24000000,0x10100000,0x11023700,0x24000000,0x10e00000,0x11023700,0x24000020,0x100000,0x11023700,0x24000020, -0x10100000,0x11023700,0x24000020,0x10105200,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e00,0,0x200000,0x11024e00,0x2000,0x900060, -0x11024e67,0,0,0x11025600,0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a,0x11045712, -0x7c00100,0xe3040a,0x11045712,0x7c80100,0xe3040a,0x11045716,0x7c00100,0xe30c0a,0x11045716,0x7c00100,0x2530c0a,0x11064e00,0x4000000,0x800000,0x11064e00,0x4000000, -0xe00000,0x11064e00,0x4000000,0x1400000,0x11064e00,0x4000020,0xe00000,0x11065700,0x4000000,0x810011,0x11065700,0x4000000,0xe00011,0x11065700,0x4000000,0x1410011, -0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011,0x11065700,0x4000008,0xe02c11,0x11065700, -0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700,0x4000400,0xe00011,0x11065700,0x4000420, -0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe00011,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011,0x11065719,0x7c00100,0xe20411, -0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00,0x11080100,0x68000c0,0x19329800,0x11080100, -0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100,0x24000000,0x1600000,0x11080100,0x24000000, -0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000000,0x18200000,0x11080100,0x24000006,0xd70000,0x11080100,0x24000008,0x1713c00,0x11080100,0x24000008,0x1714000, -0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100,0x24000020,0x200000,0x11080100,0x24000020,0x400000,0x11080100, -0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010,0xb48000,0x11080100,0x2c000010,0x100ac00,0x11080100,0x44000001, -0x1a40000,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400,0x11080119,0x7c001c0,0x250400,0x11080200,0x4000400,0x200002, -0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200,0x24000020,0x200000,0x110a1e12,0x7c00100,0x2130480,0x110a1e12, -0x7c80100,0x2130480,0x110a3000,0x24000000,0x30e00000,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001,0x110a3700,0x24000000,0x30200000,0x110a3d11,0x7c00300, -0xe30000,0x110a3d11,0x7c00900,0x1230400,0x110a3d12,0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x2530000, -0x110a3e14,0x7c00900,0x1230000,0x110a3e14,0x7c00900,0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,0x110a3f16, -0x7c00900,0x1230c00,0x110a3f16,0x7c00900,0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4400,0x4000000, -0xe00000,0x110a4412,0x4000000,0xe00002,0x110a4412,0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,0xe00c0d, -0x110a4711,0x7c40300,0xe30000,0x110a4e00,0x4000000,0x100000,0x110a4e00,0x4000000,0x200000,0x110a4e00,0x4000000,0x400000,0x110a4e00,0x4000000,0x800000,0x110a4e00, -0x4000000,0x1200000,0x110a4e00,0x4000020,0xf00000,0x110a4e00,0x4000100,0x200000,0x110a4e00,0x4000100,0x1200000,0x110a4f11,0x7c00300,0xe30001,0x110a4f11,0x7c40300, -0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000,0xe00002,0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000,0x1410010,0x110a5300,0x4000002,0xe70010, -0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10,0x110a5400,0x4000000,0x81000c,0x110a5400, -0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400,0x4000002,0xe7000c,0x110a5400,0x4000010, -0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020,0xe0000c,0x110a5400,0x4000026,0xe7000c, -0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400a0c,0xc000010,0x1049400,0x11400c0e,0x4000010,0xb00000,0x11400c0e,0x4000010,0x1071400,0x11400c0e, -0xc000010,0xb48000,0x11400c13,0x7c00900,0x230400,0x11400f36,0xc000010,0x448000,0x11400f46,0xc000010,0x448000,0x11401d72,0x4000000,0x200000,0x11403d95,0x4000000, -0xe00000,0x1144578a,0x4000004,0x120000a,0x1144578a,0x4000008,0x81000a,0x1144578a,0x4000008,0x141000a,0x1144578a,0x4000010,0x87000a,0x1144578a,0xc000010,0x84800a, -0x11445793,0x3802500,0x126246a,0x11445793,0x7c00d00,0x2530c0a,0x11463d8a,0x4000001,0x440011,0x114a3d8a,0x4000000,0xe00000,0x114a3d8a,0x4000000,0xe00002,0x114a3d8a, -0x24000000,0x810000,0x114a3d8a,0x24000000,0xe00000,0x114a3d8a,0x24000000,0x1410000,0x114a3d8a,0x24000008,0x810000,0x114a3d8a,0x24000008,0x1410000,0x114a3d8a,0x24000010, -0x870000,0x114a3d8a,0x2c000010,0x848000,0x114a3d90,0x4000000,0xe00000,0x114a3d90,0x24000000,0xe00000,0x114a3d90,0x24000002,0x1200000,0x114a3d90,0x24000002,0x10e00000, -0x114a3d90,0x24000008,0x810000,0x114a3d90,0x24000008,0x1410000,0x114a3d93,0x7c00900,0x930c00,0x114a3d93,0x7c00900,0xe30c00,0x114a3d95,0x7c00300,0xe30000,0x114a3e93, -0x7000400,0x1200c02,0x114a3f8a,0x4000004,0x1200000,0x114a3f93,0x7c00d00,0x2530c00,0x114a4295,0x4000000,0xe00000,0x114a4295,0x4000000,0xe0000f,0x114a4495,0x4000000, -0xe00002,0x114a4495,0x4000000,0xe00003,0x114a4495,0x4000000,0x10e00003,0x114a4595,0x4000000,0xe00002,0x114a4595,0x4000000,0xe0000d,0x1180090a,0x2802400,0x962460, -0x11800c19,0x2802100,0x962460,0x11800c19,0x2802500,0x962460,0x11800f1f,0x2802400,0x962460,0x11800f2b,0x2802400,0x962460,0x11820700,0x2802400,0x962460,0x11820700, -0x2802500,0x962460,0x118a3d96,0x2802400,0x962460,0x118a3e93,0x2802400,0x962460,0x11c00904,0x2802400,0x962460,0x11c00908,0x2802400,0x962460,0x11c00c1d,0x6800000, -0x1329800,0x11c00f5a,0x6800000,0x1329800,0x11c0105f,0x6800000,0x1329800,0x11c01163,0x6800000,0x1329800,0x11c01267,0x6800000,0x1329800,0x11c0146b,0x4000000,0x200000, -0x11c0146b,0x6800000,0x1329800,0x11c0146b,0x7c00100,0x230400,0x11c0511d,0x7c00100,0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460,0x20000b13, -0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,0x962461,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27,0x2902100, -0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,0x20001b27,0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000,0xb00000, -0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010,0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800,0x20001b27, -0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,0x230400,0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00,0x4000000, -0x1600000,0x20004b67,0,0x1900020,0x20004c67,0,0x1900020,0x20004d67,0,0x1900020,0x20006d67,0x1000,0,0x20006e67,0x1000,0, -0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000,0x21022a00, -0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,0x220401,0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519,0x7c00100, -0x220400,0x30000600,0x4000400,0x200400,0x30000600,0x7c00500,0x230400,0x30000605,0x4000400,0x200000,0x3000080e,0x7c00100,0x220400,0x30000908,0x2000,0x962460, -0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,0x400000,0x30000c02, -0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,0x30000d22,0x4000000, -0x200000,0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000d22,0x80000000,0x218960,0x30000e25,0x2802500,0x962460, -0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,0x2806400,0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540,0x30001821, -0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,0x962460,0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27,0x4000000, -0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c,0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000,0x200000, -0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100,0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000,0x30001f0b, -0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,0x400000,0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b,0xc000010, -0x248000,0x30002006,0x7c00100,0x250400,0x30002128,0x4000010,0x200000,0x30002128,0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000,0x810000, -0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x440000,0x3000221d,0x7c00100,0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400,0x30002417, -0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,0x1862460,0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,0x30002417,0x4000000, -0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,0x30002417,0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100,0x1862540, -0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x3000251b,0x80000,0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x3c02100,0x962460,0x3000251b, -0x4000000,0x200000,0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000,0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,0x3000251b,0x6800000, -0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,0x4000001,0xc41c0b, -0x30002800,0x24000000,0x200000,0x30002800,0x2c000010,0x1248002,0x30002800,0x2c000010,0x11248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002b01, -0x2000,0x8962460,0x30002c00,0x4000000,0x200000,0x30002c00,0x7c00100,0x10220405,0x30002d19,0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000, -0x200000,0x30003100,0x24000000,0x200000,0x30003600,0x24000000,0x200000,0x30003700,0x24000000,0x200000,0x3000392e,0x24000000,0x200000,0x30005013,0x7c00100,0x2633801, -0x30005600,0,0x918820,0x30020600,0x4000400,0x500400,0x30020701,0x2802400,0x962460,0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11, -0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000,0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100, -0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829,0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000,0xe00000,0x30402578,0x4000010,0x400000, -0x30402578,0x4000010,0xb70000,0x30402578,0xc000010,0xb48000,0x304a3d95,0x4000000,0xe00000,0x30800c19,0x2802100,0x962460,0x30c01c70,0x6800000,0x1329800,0x3100080e, -0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402,0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000,0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100, -0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00,0x80000,0x918820,0x31005c00,0x2802000,0x962460, -0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000,0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000,0x962540,0x31005c00,0x6800400,0x962540,0x31005c01, -0x2802400,0x962460,0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405,0x31005d00,0x7c00120,0x250405,0x31006000,0x82000, -0x8962460,0x31006000,0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419,0x7c00100,0x250400,0x3200080e,0x4000020,0x200000, -0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100,0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100,0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25, -0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400,0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820,0x32002800,0x4000001,0x440002,0x32002800,0x24000000, -0x200000,0x32002800,0x24000000,0x200002,0x32002800,0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919,0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000, -0x32002b01,0x2000,0x962460,0x32002b01,0x2802000,0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000,0x200000,0x32002c00,0x4000020,0x200000,0x32002c00, -0x4000020,0x200005,0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000,0x32002f00,0x24000020,0x200000,0x32003000,0x24000000, -0x200000,0x32003000,0x24000020,0x200000,0x32003500,0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003600,0x24000020,0x10200000,0x32003700,0x24000000,0x100000, -0x32003700,0x24000000,0x200000,0x32003700,0x24000000,0x10200000,0x32003800,0x24000000,0x810000,0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008,0x32005502, -0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a,0x2802100,0x962460,0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100, -0x230400,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,0x7c00100,0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100,0x230400, -0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,0x200000,0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000,0x32006800, -0x24000020,0x10200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900,0x24000020,0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020, -0x200001,0x32006a00,0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000,0x100000,0x32026c01,0x12882000,0x962460,0x32026c01,0x12882000,0x8962460, -0x32065700,0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,0x1410000,0x32086900,0x24000020,0x810000,0x32086900, -0x24000020,0x1410000,0x320a3600,0x24000020,0x30200000,0x320a3d11,0x7c00100,0x1230400,0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x2530000,0x320a3f16,0x7c00100, -0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,0x7c00300,0xe30001,0x320a6b16,0x7c00100,0x2530c00,0x32406374,0xc000010,0x448000, -0x324a3d98,0x4000000,0x10e00000,0x324a3d98,0x7c00100,0x1230400,0x324a3f93,0x4000002,0x1200c00,0x324a5390,0x24000000,0xe00000,0x32820701,0x2802000,0x962460,0x40000419, -0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200400,0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400,0x4000080e,0x7c00100, -0x250402,0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,0x40000c02,0x2802500,0x962460,0x40000c02,0x4000000,0x200000,0x40000c02,0x4000000,0x1071400, -0x40000c02,0x7c00100,0x230400,0x40000c02,0x80000000,0x218960,0x40000d22,0x7c00100,0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100,0x230400,0x40001110, -0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400,0x4000131f,0x7c00100, -0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,0x2802400,0x962460,0x40001615,0x7c00100,0x230400,0x40002417,0x2802400,0x1862460, -0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,0x200000,0x40002c00,0x4000000,0x200002,0x40003000,0x24000000,0x10200000,0x40003000, -0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x10200000,0x40005a09,0x7c00100,0x220400,0x40005a09,0x7c00100,0x250400,0x40005d00,0x7c00120, -0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000,0x1329800,0x40006f30,0x6800100,0x962540, -0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000,0x40007208,0x7c00100,0x220400,0x4000720e, -0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219,0x7c00500,0x220400,0x40007219,0x7c00500, -0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,0x24000000,0x200000,0x40007300,0x24000000,0x10200000,0x40007400,0x4000000,0x200000,0x40007531,0x7c00100,0x230400, -0x40007631,0x7c00100,0x230400,0x40007835,0x4000010,0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000,0x1329800,0x40007a32, -0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400,0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460,0x40023300,0x4000000, -0x200000,0x40027d01,0x12882000,0x962460,0x400a3700,0x24000000,0x30200000,0x400a3700,0x24000000,0x30e00000,0x400a4400,0x4000000,0xe0000d,0x400a4412,0x4000000,0xe00002, -0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300,0x4000000,0x1410010,0x404077bb,0x4000000,0x200000,0x404077be, -0x4000000,0x200000,0x404077be,0x4000000,0x400000,0x40c0511d,0x4000000,0x200000,0x41000419,0x7c00100,0x220400,0x41000419,0x7c00100,0x250400,0x4100080e,0x7c00100, -0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,0x2802000,0x962460,0x41000b13,0x2802100,0x962460, -0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0xb00000,0x41000c02,0x4000000,0x1500000,0x41000f0a,0x7c00100,0x230400,0x41001004, -0x7c00100,0x230400,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400,0x41001d0c,0x7c00100,0x23040f,0x41001f0b,0x2802100, -0x962460,0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,0x24000000,0x400000,0x41002919,0x7c00100,0x22040e, -0x41002a00,0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,0x220405,0x41003000,0x24000000,0x200000,0x41003700, -0x24000000,0x200000,0x41003700,0x24000000,0x10200000,0x41003700,0x24000000,0x10205200,0x41003700,0x24000000,0x10e00000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020, -0x200000,0x41006600,0x24000020,0x810000,0x41006600,0x24000020,0x1410000,0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000, -0x41007e0e,0x2802000,0x962460,0x41007e0e,0x4000000,0x200000,0x41007f0e,0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137, -0x2802100,0x962460,0x41008137,0x4000000,0x200000,0x41008137,0x6800100,0x962540,0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000, -0x200000,0x41008407,0x4000000,0x400000,0x41008407,0x4000000,0xb00000,0x41008407,0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400, -0x4100860b,0x4000000,0x200000,0x4100860b,0x7c00100,0x230400,0x4100870c,0x7c00100,0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939, -0x2802000,0x962460,0x41008939,0x2802100,0x962460,0x41008939,0x2806000,0x962460,0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100, -0x230400,0x41008939,0xc000010,0x448000,0x41008a00,0x4000000,0x200000,0x41008b3b,0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x7c00100,0x1830000, -0x41008b3b,0x7e00100,0x1830000,0x41008c3d,0x4000010,0x400000,0x41008c3d,0x7c00100,0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19, -0x7c00100,0x22040f,0x41008e00,0x24000000,0x200000,0x41008e00,0x24000000,0x400000,0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802000, -0x962460,0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a,0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400, -0x4100903c,0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000,0x962460,0x41020701,0x2802000,0xc62460,0x410a3700,0x24000000,0x30200000,0x410a3700, -0x24000000,0x30e00000,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a9100,0x4000000,0x800010,0x410a9100,0x4000000, -0x810010,0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,0x4000000,0xf00010,0x410a9100,0x4000000,0x1001410,0x410a9100,0x4000000,0x1071010, -0x410a9100,0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x414a8295,0x4000000,0xe00000,0x41808300,0x2802000,0x962460,0x41c0146b,0x6800000,0x1329800,0x50000419, -0x7c00100,0x220400,0x50000419,0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,0x250400,0x50000b13,0x2802500, -0x962460,0x50000f0a,0x7c00100,0x230400,0x50001615,0x2802100,0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020,0x962460,0x50002c00,0x4000000,0x200000, -0x50002c19,0x7c00100,0x220400,0x50002d19,0x7c00100,0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,0x24000000,0x200000,0x50005d00, -0x7c00120,0x220405,0x50005d00,0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,0x200000,0x50007300,0x24000000, -0x200000,0x50008301,0x2802400,0x962460,0x50008a00,0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,0x50009257,0x4000010,0x1071400, -0x50009257,0x6800000,0x1329800,0x50009257,0x7c00100,0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,0xc000010,0xb48000,0x5000933e, -0x2802100,0x962460,0x5000933e,0x2802400,0x962460,0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,0x400000,0x5000933e,0x6800000, -0x1329800,0x5000933e,0x6800100,0x962540,0x5000933e,0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,0x5000933e,0x7c00100,0x230401, -0x5000933e,0xc000010,0x448000,0x50009419,0x7c00100,0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200400,0x5000965a,0x4000000,0x500000,0x5000965a, -0x7c00100,0x230400,0x5000965a,0xc000010,0xb48000,0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,0x230400,0x50009865,0x7c00100, -0x230400,0x50009965,0x4000010,0x400000,0x50009965,0x7c00100,0x230400,0x50409a95,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,0x5100080e,0x7c00100,0x250400, -0x51000c02,0x2802100,0x962460,0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a, -0x7c00500,0x230400,0x51001110,0x2802100,0x962460,0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000, -0x200000,0x51001524,0x7c00100,0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400, -0x51001b27,0x4000000,0x200000,0x51001b27,0x4000000,0x400000,0x51001b27,0x4000000,0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c, -0x2802400,0x1862460,0x51001c1c,0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800000,0x1862400,0x51001c1c,0x6800100, -0x1862400,0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800400,0x1862400,0x51001c1c,0x7c00100,0x1830000,0x5100251b,0x7c00100,0x230400,0x51002619,0x7c00100,0x220400, -0x51002619,0x7c00100,0x250400,0x51002800,0x80020,0x218820,0x51002c00,0x4000000,0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000,0x200000,0x51003700, -0x24000000,0xe00000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,0x200000,0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400,0x51006600,0x24000020, -0x200000,0x51006600,0x24000020,0x810000,0x51006600,0x24000020,0x1410000,0x51007300,0x24000000,0x200000,0x51007300,0x24000020,0x200000,0x51008002,0x7c00100,0x230400, -0x51008301,0x2802000,0x962460,0x51008301,0x2802400,0x962460,0x51008a00,0x7c00500,0x230400,0x51008e00,0x24000000,0x200000,0x51008e00,0x24000000,0x400000,0x51008e00, -0x24000000,0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,0x24000000,0x1410000,0x51008e00,0x24000000,0x1710000,0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500, -0x230400,0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100,0x220400,0x51009419,0x7c00100,0x22040e,0x51009419,0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400, -0x51009500,0x4000000,0x200400,0x51009500,0x7c00500,0x230400,0x51009519,0x7c00100,0x220400,0x51009519,0x7c00100,0x22040f,0x51009519,0x7c00100,0x230400,0x51009519, -0x7c00100,0x250400,0x51009b71,0x2802100,0x962460,0x51009b71,0x6800000,0x1329800,0x51009b71,0x6800100,0x962540,0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100, -0x230400,0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400,0x962460,0x51009c52,0x2802c00,0x962460,0x51009c52,0x4000010,0x400000,0x51009c52,0x6800000,0x1329800, -0x51009c52,0x6800100,0x962540,0x51009c52,0x7c00100,0x230400,0x51009c52,0xc000010,0x448000,0x51009d6d,0x6800000,0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d, -0x7c00500,0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d,0xc000010,0x448000,0x51009e08,0x2802100,0x962460,0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000, -0x1329800,0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900,0x230400,0x51009f63,0xc000010,0x448000,0x51009f63,0xc000010,0xb48000,0x5100a008,0x2000,0x962460, -0x5100a008,0x2802400,0x962460,0x5100a008,0x4000000,0x200000,0x5100a008,0x7c00100,0x220400,0x5100a008,0x7c00100,0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008, -0x7c00500,0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f,0x6800000,0x1329800,0x5100a16f,0x6800100,0x962540,0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010, -0x448000,0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400,0x962460,0x5100a24f,0x6800000,0x1329800,0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000, -0x5100a36e,0x2802100,0x962460,0x5100a36e,0x4000000,0x200000,0x5100a36e,0x6800100,0x962540,0x5100a36e,0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442, -0x2802100,0x962460,0x5100a442,0x4000000,0x200000,0x5100a442,0x6800000,0x1329800,0x5100a442,0x6800100,0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010, -0x448000,0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000,0x200000,0x5100a601,0x2802000,0x962460,0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400, -0x5100a96c,0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,0xe00000,0x5100ab00,0x4000000,0xe00000,0x51086600,0x24000020,0x810000,0x51086600, -0x24000020,0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000,0x510a7300,0x24000000,0x30200000,0x510aaa00,0x4000000,0x30e00000,0x5140a2b6,0x4000400, -0x400000,0x514a8295,0x4000000,0xe00000,0x51802b87,0x2802000,0x962460,0x51c00908,0x2802400,0x962460,0x51c0a008,0x2802400,0x962460,0x52000f0a,0x2802100,0x962460, -0x52000f0a,0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400,0x52001004,0x4000000,0x1600000,0x52001b00,0x4000000,0x200000,0x52001c1c,0x2802100,0x1862460,0x52001c1c, -0x6800100,0x1862400,0x52001c1c,0x6800400,0x1862400,0x52001e12,0x7c00100,0x2230500,0x52001e12,0x7c00100,0x2330520,0x52002128,0x4000002,0x400000,0x52002128,0x7c00100, -0x230400,0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000,0x1600000,0x52002d00,0x4000000,0x200006,0x52003000,0x24000000,0x200000,0x52006108,0x7c00100,0x220400, -0x52006108,0x7c00100,0x250400,0x52008301,0x2802400,0x962460,0x52008407,0x2802400,0x962460,0x52008407,0x7c00100,0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b, -0x6800000,0x1800000,0x52008b3b,0x7c00100,0x1830000,0x52008e00,0x24000000,0x400000,0x52009419,0x7c00100,0x250400,0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000, -0x962460,0x5200ac7e,0x2802100,0x962460,0x5200ac7e,0x2802400,0x962460,0x5200ac7e,0x4000010,0x200000,0x5200ac7e,0x7c00100,0x230400,0x5200ad28,0x7c00100,0x230400, -0x5200ae6a,0x2802100,0x1862460,0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000,0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a, -0x6800000,0x1329800,0x5200ae6a,0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000,0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010, -0x1848000,0x5200b083,0x4000010,0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182,0x2802400,0x962460,0x5200b182,0x4000000,0x200000, -0x5200b182,0x4000010,0x400000,0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400,0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a, -0x7c00100,0x230400,0x5200b54e,0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000,0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000, -0x1329800,0x5200b54e,0x6800100,0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e,0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000, -0x5200b61c,0x6800400,0x1862400,0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,0x2802100,0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f, -0x4000000,0x1800000,0x5200b77f,0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,0x1830000,0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100, -0x1830000,0x5200b873,0x2802100,0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,0x5200b873,0x6800100,0x962540,0x5200b873,0x6800400,0x962540, -0x5200b873,0x7c00100,0x230400,0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,0x7c00100,0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74, -0x4000010,0x400000,0x5200ba74,0x7c00100,0x230400,0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100,0x230400,0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010, -0x400000,0x5200bc75,0x7c00100,0x230400,0x5200bd7d,0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400,0x5200be7a,0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400, -0x5200bf58,0x7c00100,0x230400,0x5200c002,0x4000000,0x200000,0x5200c178,0x2802000,0x962460,0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400,0x962460,0x5200c178, -0x2806400,0x962460,0x5200c178,0x4000000,0x200000,0x5200c178,0x6800100,0x962540,0x5200c178,0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401,0x5200c178,0xc000010, -0x448000,0x5200c178,0x80000000,0x218960,0x5200c247,0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400,0x5200c247,0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003, -0x52022d00,0x4000000,0x100006,0x52023700,0x24000000,0x100000,0x52023700,0x24000000,0xe00000,0x52023700,0x24000000,0x10100000,0x52023700,0x24000000,0x10e00000,0x52023700, -0x24000000,0x928045a0,0x52024400,0x4000000,0x100000,0x52027300,0x24000000,0x100000,0x5202c300,0x4000000,0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000, -0x100003,0x5202c300,0x4000000,0x10000d,0x5202c300,0x4000100,0x150400,0x5202c300,0x4000100,0x15040d,0x5202c300,0x4000100,0x10150400,0x520a1e12,0x7c00100,0x2130480, -0x520a3700,0x24000000,0x30e00000,0x520a3800,0x24000000,0x30100000,0x520a4711,0x7c40300,0xe30000,0x520a4f11,0x7c00300,0xe30001,0x520a7300,0x24000000,0x30100000,0x520ab412, -0x7c00100,0x2130480,0x520ac400,0x4000000,0xe00002,0x520ac400,0x4000000,0xe0000d,0x520ac400,0x4000000,0x30e0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,0x7c40300, -0xe30000,0x5240af7a,0x6800400,0x962540,0x5240af7a,0x7c00100,0x230400,0x5240af7b,0x4000400,0x200000,0x5240af7b,0x6800100,0x962540,0x5240b29b,0x4000000,0x200000, -0x5240b2a5,0x4000000,0x200000,0x5240b2a5,0x4000000,0x1500000,0x5240b5b9,0x7c00900,0x230400,0x524a4495,0x4000000,0xe00003,0x5280af7a,0x2802400,0x962460,0x5280af7b, -0x2802400,0x962460,0x5280af7d,0x2802400,0x962460,0x5280af7f,0x2802400,0x962460,0x52c0b3b0,0x2802400,0x962460,0x52c0b3b4,0x7c00100,0x230400,0x60000c02,0x2802100, -0x962460,0x60000c02,0x7c00100,0x230400,0x60000f0a,0x2802100,0x962460,0x60000f0a,0x6800100,0x962540,0x60000f0a,0x7c00100,0x230400,0x6000131f,0x4000000,0x200000, -0x6000171a,0x7c00100,0x230400,0x6000171a,0x7c00100,0x230560,0x60001b27,0x2802100,0x962460,0x60001b27,0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b, -0x2802000,0x962460,0x60002919,0x7c00100,0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,0x24000000,0x10200000,0x60003000,0x24000000,0x10e00000,0x60003700,0x24000000, -0x200000,0x60003800,0x24000000,0x1710000,0x60005102,0x4000000,0x200000,0x60006108,0x7c00100,0x220400,0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000, -0x60008301,0x2802000,0x962460,0x6000903c,0x2806000,0x962460,0x6000903c,0x4000000,0x400000,0x60009519,0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008, -0x7c00100,0x220400,0x6000a008,0x7c00100,0x250400,0x6000c300,0x4000000,0x3a703580,0x6000c654,0x2802000,0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100, -0x230400,0x6000c73f,0x2802000,0x962460,0x6000c73f,0x2802100,0x962460,0x6000c73f,0x4000000,0x200000,0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540, -0x6000c73f,0x7c00100,0x230400,0x6000c80b,0x7c00100,0x230400,0x6000c941,0x2802100,0x962460,0x6000c941,0x2806000,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941, -0x4000010,0x200000,0x6000c941,0x6800000,0x1329800,0x6000c941,0x6800100,0x962540,0x6000c941,0x7c00100,0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100, -0x230400,0x6000cc00,0x4000000,0xe00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,0x100000,0x6002c300,0x4000000,0x10000d,0x6002c300,0x4000100,0x150400, -0x6002c300,0x4000100,0x15040d,0x6002c300,0x4000100,0x10150400,0x600a3000,0x24000000,0x30200000,0x600a3000,0x24000000,0x30e00000,0x600a3700,0x24000000,0x30200000,0x600a3800, -0x24000000,0x30200000,0x600a3800,0x24000000,0xb28045a0,0x600a4305,0x7c00100,0xe30400,0x600ac300,0x4000000,0x30100000,0x600ac400,0x4000000,0x10e0000d,0x600ac400,0x4000000, -0x30e0000d,0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600acc00,0x4000000,0x30e00000,0x600acd00,0x4000000,0x30200000,0x600acd00,0x4000000,0x30e00000, -0x600acd00,0x4000000,0x30e05200,0x600acd00,0x4000000,0xb28045a0,0x600acd00,0x4000000,0xb28049c0,0x600ace00,0x4000000,0x30e00000,0x600ace00,0x4000000,0xb28045a0,0x600acf00, -0x4000000,0x30e00000,0x600acf00,0x4000000,0x30e05200,0x600acf00,0x4000000,0xb28045a0,0x600ad111,0x7c40300,0xe30000,0x604ac495,0x4000000,0x30e00003,0x61000a03,0x4000000, -0x1600000,0x61000c02,0x80000000,0x218960,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100,0x1830000,0x61001d0c,0x7c00100,0x230400,0x61001d0c,0x7c00100,0x250400, -0x61006600,0x24000020,0x200000,0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400,0x6100870c,0x7c00100,0x220400,0x61008e00,0x24000000,0x200000,0x61008e00, -0x24000000,0x400000,0x61008e00,0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519,0x7c00100,0x220400,0x61009519,0x7c00100,0x250400,0x61009519,0x7c00500, -0x22040f,0x61009b71,0x2802100,0x962460,0x61009b71,0x2806400,0x962460,0x61009b71,0x7c00100,0x230400,0x6100a008,0x2802100,0x962460,0x6100c300,0x4000000,0x20000f, -0x6100cd00,0x4000000,0x200000,0x6100d202,0x2802400,0x962460,0x6100d202,0x2802500,0x962460,0x6100d202,0x7c00100,0x230400,0x6100d302,0x4000020,0x200000,0x6100d302, -0x7c00120,0x230405,0x6100d476,0x2802100,0x962460,0x6100d476,0x2802100,0x962461,0x6100d476,0x2806400,0x962460,0x6100d476,0x4000000,0x400000,0x6100d476,0x6800000, -0x1329800,0x6100d476,0x6800100,0x962540,0x6100d476,0x7c00100,0x230400,0x6100d476,0xc000010,0x448000,0x6100d573,0x2802100,0x962460,0x6100d573,0x2806400,0x962460, -0x6100d573,0x6800100,0x962540,0x6100d573,0x7c00100,0x230400,0x6100d573,0x7c00900,0x230400,0x6100d573,0xc000010,0x448000,0x6100d68d,0x7c00100,0x230400,0x6100d756, -0x7c00100,0x230400,0x6100d85c,0x2802400,0x962460,0x6100d85c,0x6800100,0x962540,0x6100d85c,0x7c00100,0x230400,0x6100d85c,0x7c00500,0x230400,0x6100d997,0x2802100, -0x962460,0x6100d997,0x4000000,0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000,0x1329800,0x6100d997,0x6800100,0x962540,0x6100d997,0x6804400,0x962540, -0x6100d997,0x7c00100,0x230400,0x6100d997,0x7c00100,0x230560,0x6100d997,0xc000010,0x448000,0x6100da98,0x6800000,0x1329800,0x6100da98,0x7c00100,0x230400,0x6100db71, -0x4000000,0x200000,0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000,0x1329800,0x6100dc99,0x6800100,0x962540,0x6100dc99,0x6804400, -0x962540,0x6100dc99,0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x610ace00,0x4000000,0x30e00000,0x6140af7a,0x7c00100,0x230400, -0x6140af7b,0x6800100,0x962540,0x6140af84,0x7c00100,0x230400,0x6180af7b,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000,0x63002800,0x80000,0x918820,0x63c00c11, -0x80000,0x918820,0x7000080e,0x7c00100,0x250400,0x70000a03,0x4000000,0x200000,0x70000c00,0x80000000,0x218960,0x70000f0a,0x7c00100,0x230400,0x70001004,0x7c00100, -0x230400,0x70001524,0x2802100,0x962460,0x70001524,0x7c00100,0x230400,0x70001615,0x2802100,0x962460,0x7000171a,0x2802100,0x962460,0x70001821,0x6800000,0x1329800, -0x70002320,0x7c00100,0x230400,0x70002a00,0x4000000,0x1500000,0x70002a00,0x4000000,0x1600000,0x70003000,0x24000000,0x200000,0x70003000,0x24000000,0x10200000,0x70003800, -0x24000000,0xe00000,0x70005201,0x2802400,0x962460,0x7000581e,0x7c00100,0x230400,0x70006108,0x7c00100,0x220400,0x70006108,0x7c00100,0x250400,0x70006f30,0x7c00100, -0x230400,0x70007300,0x24000000,0x200000,0x70007f0e,0x4000000,0x200000,0x70008301,0x2802100,0x962460,0x70008301,0x2802400,0x962460,0x70008e00,0x24000000,0x200000, -0x70008e00,0x24000000,0x400000,0x70008e00,0x24000002,0x400000,0x70008e00,0x24000008,0x1410000,0x70008e00,0x24000010,0x400000,0x70008e00,0x2c000010,0x448000,0x70009519, -0x7c00100,0x220400,0x70009519,0x7c00100,0x230400,0x70009519,0x7c00100,0x250400,0x70009865,0x7c00100,0x230400,0x70009965,0x4000010,0x400000,0x70009965,0x7c00100, -0x230400,0x7000a008,0x7c00100,0x220400,0x7000a008,0x7c00100,0x250400,0x7000a008,0x7c00500,0x22040f,0x7000a50e,0x4000000,0x200000,0x7000b61c,0x2802400,0x1862460, -0x7000b61c,0x6800400,0x1862400,0x7000b61c,0x7c00100,0x1830000,0x7000c300,0x4000000,0x100000,0x7000c941,0x2806000,0x962460,0x7000cc00,0x4000000,0xe00000,0x7000cd00, -0x4000000,0x200000,0x7000cd00,0x4000000,0xe00000,0x7000cd00,0x4000000,0x10200000,0x7000cd00,0x4000000,0x10e00000,0x7000cd00,0x4000000,0x10e05200,0x7000cd00,0x4000000, -0x928045a0,0x7000cf00,0x4000000,0xe00000,0x7000cf00,0x4000000,0x10e00000,0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100,0x230400,0x7000d997,0x7c00100,0x230400, -0x7000d997,0xc000010,0x248000,0x7000dd86,0x2802400,0x962460,0x7000dd86,0x7c00100,0x230400,0x7000dd86,0xc000010,0x448000,0x7000de9f,0x4000000,0x200000,0x7000de9f, -0x7c00100,0x230400,0x7000e001,0x2000,0x962460,0x7000e001,0x2802400,0x962460,0x7000e187,0x2802000,0x962460,0x7000e187,0x2802100,0x962460,0x7000e187,0x4000000, -0x200000,0x7000e187,0x7c00100,0x230400,0x7000e187,0xc000010,0x448000,0x7000e288,0x7c00100,0x230400,0x7000e300,0x4000000,0x200000,0x7000e489,0x2802100,0x962460, -0x7000e489,0x2802400,0x962460,0x7000e489,0x6800100,0x962540,0x7000e489,0x6800100,0x962541,0x7000e489,0x6804400,0x962540,0x7000e489,0x7c00100,0x230400,0x7000e489, -0x7c00900,0x230400,0x7000e59d,0x2802100,0x962460,0x7000e59d,0x2802400,0x962460,0x7000e59d,0x4000000,0x200000,0x7000e59d,0x4000010,0x200000,0x7000e59d,0x6800100, -0x962540,0x7000e59d,0x6804400,0x962540,0x7000e59d,0x7c00100,0x230400,0x7000e59d,0xc000010,0x448000,0x7000e691,0x2802100,0x962460,0x7000e691,0x2802400,0x962460, -0x7000e691,0x2806400,0x962460,0x7000e691,0x6800000,0x1329800,0x7000e691,0x6800100,0x962540,0x7000e691,0x7c00100,0x230400,0x7000e700,0x4000400,0x200400,0x7000e70e, -0x7c00100,0x220400,0x7000e719,0x7c00100,0x220400,0x7000e719,0x7c00500,0x22040f,0x7000e853,0x7c00100,0x230400,0x7000e9a0,0x2802400,0x962460,0x7000e9a0,0x4000000, -0x200000,0x7000e9a0,0x4000000,0x500000,0x7000e9a0,0x7c00100,0x230400,0x7000ea79,0x2802400,0x962460,0x7000ea79,0x4000000,0x200000,0x7000ea79,0x4000000,0xf00000, -0x7000ea79,0x4000010,0x400000,0x7000ea79,0x7c00100,0x230400,0x7000eb8c,0x2802400,0x962460,0x7000eb8c,0x4000000,0x200000,0x7000eb8c,0x7c00100,0x230400,0x7000eca3, -0x2802100,0x962460,0x7000eca3,0x2806400,0x962460,0x7000eca3,0x4000000,0x200000,0x7000eca3,0x6800000,0x1329800,0x7000eca3,0x6800100,0x962540,0x7000eca3,0x7c00100, -0x230400,0x7000eca3,0xc000010,0x448000,0x7000ed95,0x6800000,0x1329800,0x7000ed95,0x7c00100,0x230400,0x7000ed95,0xc000010,0x448000,0x7000ee1c,0x2802400,0x1862460, -0x7000ee1c,0x6800000,0x1329800,0x7000ee1c,0x7c00100,0x1830000,0x7000ee1c,0x7c00900,0x1830000,0x7000ef8f,0x4000000,0x200000,0x7000ef8f,0x7c00100,0x230400,0x7000f08e, -0x4000000,0x200000,0x7000f08e,0x7c00100,0x230400,0x7000f159,0x2802100,0x962460,0x7000f159,0x7c00100,0x230400,0x7000f200,0x4000000,0x200000,0x7000f200,0x4000000, -0x1200000,0x7000f200,0x4000000,0x1710000,0x7000f34b,0x2802100,0x962460,0x7000f34b,0x4000000,0x200000,0x7000f34b,0x4000010,0x400000,0x7000f34b,0x6800000,0x1329800, -0x7000f34b,0x7c00100,0x230400,0x7000f34b,0x7c00900,0x230400,0x7000f34b,0xc000010,0x448000,0x7000f490,0x4000000,0x200000,0x7000f490,0x7c00100,0x230400,0x7000f5a5, -0x7c00100,0x230400,0x7000f67b,0x4000000,0x200000,0x7000f67b,0x4000010,0x200000,0x7000f67b,0x7c00100,0x230400,0x7000f8a6,0x2802100,0x962460,0x7000f8a6,0x2802400, -0x962460,0x7000f8a6,0x2806400,0x962460,0x7000f8a6,0x4000000,0x500000,0x7000f8a6,0x4000010,0xb00000,0x7000f8a6,0x4000800,0x200000,0x7000f8a6,0x6800100,0x962540, -0x7000f8a6,0x6800100,0x962541,0x7000f8a6,0x7c00100,0x230400,0x7000f8a6,0xc000010,0x448000,0x7000f921,0x4000000,0x200000,0x7000fa00,0x4000000,0x200000,0x7000fb9e, -0x2802100,0x962460,0x7000fb9e,0x2802400,0x962460,0x7000fb9e,0x2806400,0x962460,0x7000fb9e,0x4000000,0x200000,0x7000fb9e,0x6800000,0x1329800,0x7000fb9e,0x6800100, -0x962540,0x7000fb9e,0x6800100,0x962541,0x7000fb9e,0x7c00100,0x230400,0x7000fc92,0x4000000,0x200000,0x7000fc92,0x6800000,0x1329800,0x7000fc92,0x7c00100,0x220400, -0x7000fc92,0x7c00100,0x230400,0x7000fc92,0x7c00100,0x250400,0x700acd00,0x4000000,0x30e00000,0x700acd00,0x4000000,0xb28045a0,0x700ace00,0x4000000,0x30e00000,0x700acf00, -0x4000000,0x30e00000,0x700acf00,0x4000000,0xb28045a0,0x7040dfc0,0x4000000,0x200000,0x7040f7c4,0x80000,0x918820,0x7080af7b,0x2802400,0x962460,0x7080dfc0,0x2802400, -0x962460,0x70c0e4c2,0x2802100,0x962460,0x70c0e4c2,0x2802400,0x962460,0x70c0e4c2,0x6800100,0x962540,0x8000120f,0x7c00100,0x230400,0x80001524,0x7c00100,0x230400, -0x8000171a,0x7c00100,0x230400,0x80002006,0x7c00100,0x220400,0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000,0x80002d00,0x4000000,0x200000,0x80005208, -0x2802400,0x962460,0x80005c00,0x4000000,0x200000,0x80007300,0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519,0x7c00100,0x230400,0x80009519,0x7c00100, -0x250400,0x80009865,0x7c00100,0x230400,0x8000a008,0x2802100,0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100,0x230400,0x8000cd00,0x4000000,0xe00000, -0x8000d202,0x2802500,0x962460,0x8000d202,0x7c00100,0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802400,0x962460,0x8000d997,0x4000000,0x200000,0x8000d997, -0x4000000,0x400000,0x8000d997,0x4000000,0x500000,0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489,0x2802100,0x962460,0x8000e489,0x7c00100, -0x230400,0x8000e719,0x7c00100,0x220400,0x8000f8a6,0x2802100,0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010,0x448000,0x8000fda1,0x2802100,0x1862460, -0x8000fda1,0x2806400,0x1862460,0x8000fda1,0x4000000,0x1800000,0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862540,0x8000fda1,0x7c00100,0x1830000,0x8000fda1, -0xc000010,0x448000,0x8000fe9c,0x7c00100,0x230400,0x8000fe9c,0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06,0x7c00100,0x220400,0x80010165,0x7c00100, -0x230400,0x800102a2,0x4000000,0x200000,0x800102a2,0x7c00100,0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010,0x448000,0x8001044c,0x4000000,0x200000, -0x8001044c,0x7c00100,0x220400,0x8001044c,0x7c00100,0x250400,0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000,0x80010670,0x4000010,0x400000,0x80010670, -0xc000010,0x448000,0x800a4711,0x7c40300,0xe30000,0x800acd00,0x4000000,0x30e00000,0x800acd00,0x4000000,0x7a904de0,0x800ace00,0x4000000,0x30e00000,0x800acf00,0x4000000, -0x30e00000,0x800b0011,0x7c40300,0xe30000,0x800b0500,0x4000000,0x30e00000,0x800b0500,0x4000000,0xb28045a0,0x90001615,0x7c00100,0x230400,0x9000171a,0x4000000,0x200000, -0x9000171a,0x7c00100,0x230400,0x90003000,0x24000000,0x200000,0x90007f0e,0x4000000,0x200000,0x90008301,0x2802000,0x962460,0x90008e00,0x24000000,0x400000,0x90009519, -0x7c00100,0x250400,0x9000a16f,0x2802100,0x962460,0x9000d200,0x80000000,0x218960,0x9000d202,0x2802000,0x962460,0x9000d202,0x2802100,0x962460,0x9000d202,0x7c00100, -0x230400,0x9000e59d,0x2802100,0x962460,0x900107a7,0x2802100,0x962460,0x900107a7,0x2802400,0x962460,0x900107a7,0x2802c00,0x962460,0x900107a7,0x4000000,0x1400000, -0x900107a7,0x6800000,0x1329800,0x900107a7,0x7c00100,0x220400,0x900107a7,0x7c00100,0x250400,0x900108a8,0x2802100,0x962460,0x900108a8,0x2806400,0x962460,0x900108a8, -0x4000000,0x200000,0x900108a8,0x4000000,0x400000,0x900108a8,0x4000010,0x400000,0x900108a8,0x6800000,0x1329800,0x900108a8,0x6800100,0x962540,0x900108a8,0x7c00100, -0x230400,0x900108a8,0xc000010,0x448000,0x90010908,0x7c00100,0x220400,0x90010a38,0x2802100,0x962460,0x90010ca9,0x2802100,0x962460,0x90010ca9,0x4000000,0x500000, -0x90010ca9,0x4000010,0xb00000,0x90010ca9,0x6800100,0x962540,0x90010ca9,0x7c00100,0x230400,0x90010d1b,0x4000000,0x500000,0x90010eaa,0x2802100,0x962460,0x90010eaa, -0x2802400,0x962460,0x90010eaa,0x2806400,0x962460,0x90010eaa,0x4000000,0x200000,0x90010eaa,0x4000000,0x400000,0x90010eaa,0x4000010,0x400000,0x90010eaa,0x6800000, -0x1329800,0x90010eaa,0x6800100,0x962540,0x90010eaa,0x7c00100,0x230400,0x90010eaa,0xc000010,0x448000,0x90010fab,0x7c00100,0x220400,0x90010fab,0x7c00100,0x250400, -0x9002c300,0x4000000,0x100000,0x900ac400,0x4000000,0xe0000d,0x900acd00,0x4000000,0x30e00000,0x900acd00,0x4000000,0xb28045a0,0x900acf00,0x4000000,0x30e00000,0x900b0500, -0x4000000,0xe00000,0x900b0500,0x4000000,0x30e00000,0x900b0500,0x4000000,0xb28045a0,0x900b0b9a,0x7c00900,0x1230400,0x900b109a,0x7c00300,0xe30000,0x900b119a,0x7c00300, -0xe30000,0x90408e06,0x24000000,0x400000,0xa0001004,0x4000000,0x200000,0xa0001004,0x7c00100,0x230400,0xa000120f,0x2802100,0x962460,0xa000120f,0x2802400,0x962460, -0xa000171a,0x2802100,0x962460,0xa000171a,0x2806400,0x962460,0xa0002a00,0x4000000,0x1600000,0xa0003000,0x24000000,0x200000,0xa000581e,0x7c00100,0x230400,0xa0007300, -0x24000000,0x200000,0xa0008301,0x2802400,0x962460,0xa0008e00,0x24000000,0x400000,0xa000cf00,0x4000000,0xe00000,0xa0010500,0x4000000,0x200000,0xa00114af,0x2802100, -0x962460,0xa00114af,0x2802400,0x962460,0xa00114af,0x2806400,0x962460,0xa00114af,0x6800000,0x1329800,0xa00114af,0x7c00100,0x230400,0xa00114af,0x7c00100,0x230560, -0xa00116b0,0x2802100,0x962460,0xa00116b0,0x2802800,0x962460,0xa00116b0,0x2806400,0x962460,0xa00116b0,0x4000000,0x400000,0xa00116b0,0x4000000,0x500000,0xa00116b0, -0x4000010,0x400000,0xa00116b0,0x6800100,0x962540,0xa00116b0,0x7c00100,0x230400,0xa00116b0,0x7c00100,0x230560,0xa00116b0,0xc000010,0x448000,0xa0011722,0x7c00100, -0x230400,0xa00118b1,0x2802000,0x962460,0xa00118b1,0x2802100,0x962460,0xa00118b1,0x2806400,0x962460,0xa00118b1,0x4000000,0x200000,0xa00118b1,0x4000000,0x400000, -0xa00118b1,0x4000000,0x500000,0xa00118b1,0x6800100,0x962540,0xa00118b1,0x7c00100,0x230400,0xa00118b1,0x7c00100,0x230560,0xa00118b1,0xc000010,0x448000,0xa00a4005, -0x7c00100,0xe30400,0xa00a4711,0x7c40300,0xe30000,0xa00ac400,0x4000000,0xe00000,0xa00acb14,0x7c00100,0xe30000,0xa00acf00,0x4000000,0x30e00000,0xa00b0500,0x4000000, -0x30e00000,0xa00b0500,0x4000000,0xb28045a0,0xa00b0b96,0x7c00900,0x1230400,0xa00b1211,0x7c40300,0xe30000,0xa00b1314,0x7c00100,0xe30000,0xa00b1596,0x7c00300,0xe30000, -0xa040af86,0x6800400,0x962540}; +0xa00118b1,0xc000010,0x448000,0xa00a4005,0x7c00100,0xe30400,0xa00a4711,0x7c40300,0xe30000,0xa00ac400,0x4000000,0x4e00000,0xa00acb14,0x7c00100,0xe30000,0xa00acf00, +0x4000000,0x34e00000,0xa00b0500,0x4000000,0x34e00000,0xa00b0500,0x4000000,0xb6800000,0xa00b0b96,0x7c00900,0x1230400,0xa00b1211,0x7c40300,0xe30000,0xa00b1314,0x7c00100, +0xe30000,0xa00b1596,0x7c00300,0xe30000,0xa040af9c,0x6800400,0x962540,0xb0000a03,0x7c00100,0x220400,0xb0000b13,0x7c00100,0x2633800,0xb0001004,0x2802000,0x962460, +0xb0001110,0x4000000,0x200000,0xb0001524,0x2802000,0x962460,0xb0001615,0x4000000,0x500000,0xb000251b,0x7c00100,0x230400,0xb0007300,0x24000000,0x200000,0xb0008939, +0x4000000,0x200000,0xb0008939,0x7c00100,0x230400,0xb0008e00,0x24000000,0x200000,0xb0008e00,0x24000000,0x400000,0xb0008e00,0x24000010,0x400000,0xb0009257,0x2802000, +0x962460,0xb0009257,0x4000000,0x1600000,0xb0009519,0x7c00100,0x220400,0xb0009519,0x7c00100,0x250400,0xb0009a00,0x4000000,0x200000,0xb000b30a,0x2802000,0x962460, +0xb000b30a,0x7c00100,0x230400,0xb000c178,0x80000000,0x218960,0xb000c300,0x4000000,0x4200000,0xb000d202,0x2802000,0x962460,0xb000d476,0x6800100,0x962540,0xb000d476, +0x7c00100,0x230400,0xb000e300,0x4000000,0x4e00000,0xb000fda1,0x7c00100,0x1830000,0xb0010eaa,0x2802000,0x962460,0xb00116b0,0x7c00100,0x230400,0xb0011900,0x4000000, +0x4e00000,0xb0011ab2,0x2802100,0x962460,0xb0011ab2,0x2802400,0x962460,0xb0011ab2,0x2806400,0x962460,0xb0011ab2,0x4000000,0x200000,0xb0011ab2,0x6800100,0x962540, +0xb0011ab2,0x7c00100,0x230400,0xb0011b0c,0x7c00100,0x250400,0xb0011cb3,0x2802100,0x962460,0xb0011cb3,0x2806400,0x962460,0xb0011cb3,0x6800000,0x1329800,0xb0011cb3, +0x6800100,0x962540,0xb0011cb3,0x7c00100,0x230400,0xb0011db6,0x2802500,0x962460,0xb0011db6,0x6800000,0x1329800,0xb0011db6,0x7c00100,0x230400,0xb0011db6,0x7c00500, +0x230400,0xb0011e00,0x4000000,0x200000,0xb0011e00,0x4000000,0x1500000,0xb0011fb4,0x2802100,0x962460,0xb0011fb4,0x6800100,0x962540,0xb0011fb4,0x7c00100,0x230400, +0xb0011fb4,0xc000010,0x248000,0xb0012000,0x4000000,0x200000,0xb00121b5,0x4000000,0x200000,0xb00121b5,0x4000010,0x400000,0xb00121b5,0x7c00100,0x220400,0xb00121b5, +0x7c00100,0x250400,0xb00121b5,0xc000010,0x448000,0xb00122b8,0x4000000,0x200000,0xb00122b8,0x7c00100,0x230400,0xb00123b7,0x2802400,0x962460,0xb00123b7,0x4000000, +0x200000,0xb00123b7,0x7c00100,0x230400,0xb00123b7,0xc000010,0x248000,0xb00a4005,0x7c00100,0xe30400,0xb00a4711,0x7c40300,0xe30000,0xb00acf00,0x4000000,0x34e00000, +0xb00b0500,0x4000000,0x34e00000,0xb00b0500,0x4000000,0x3ce00000,0xb00b0500,0x4000000,0xb6800000,0xb00b109a,0x7c00300,0xe30000,0xb080e47a,0x2802000,0x962460}; +#else /* !U_PLATFORM_IS_DARWIN_BASED */ +0x11003800,0x24000000,0x96800000,0x11004e00,0x2000,0x900060,0x11004e00,0x4000000,0x200000,0x11004e00,0x4000000,0x1600000,0x11004e00,0x4000100,0x200000,0x11005003, +0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,0x2633801,0x11005013,0x7c00100,0x2633802,0x11005013,0x7c00100, +0x2633805,0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000,0x11005100,0x24000000,0x1410000,0x11005102,0x7000100,0x230408,0x11005102,0x7c00100,0x230404, +0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460,0x11005500,0x80000,0x1e18820,0x11005502, +0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502,0x7c00100,0x230409,0x11005667,0x1000, +0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400,0x100002,0x11020200,0x4000400,0x500002, +0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200,0x24000000,0x1400000,0x11020200,0x24000000,0x1500000,0x11020200,0x24000000,0x1600000,0x11020200, +0x24000000,0x14200000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219,0x7c00100,0x220400,0x11020219,0x7c00100, +0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100,0x220402,0x11020319,0x7c00100,0x250400, +0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400,0x11020600,0x4000400,0x100002,0x11020600, +0x4000400,0x200400,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701,0x2802400,0x962461,0x11020701,0x2802400, +0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100,0x220401,0x11020908,0x7c00100,0x250400, +0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002,0x11022800,0x24000000,0x401000,0x11022800, +0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800,0x24000002,0x370000,0x11022800,0x24000002, +0x470000,0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020,0x100000,0x11022800,0x24000020,0x1500000, +0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f,0x11022c00,0x4000000,0x100002,0x11022c00, +0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x4000000,0x1410000f,0x11022c00,0x7c00120,0x120405,0x11022c0e,0x7c00100,0x250401,0x11022c19,0x7c00100, +0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100,0x150402,0x11022e00,0x24000000,0x200000, +0x11022e00,0x24000020,0x100000,0x11022e00,0x24000020,0x14100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001,0x11022f00,0x24000020,0x100002,0x11023000, +0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300,0x4000100,0x150403,0x11023300,0x4000100, +0x14150403,0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020,0x100000,0x11023600,0x24000020,0x14100000, +0x11023700,0x24000000,0x4100000,0x11023700,0x24000000,0x4e00000,0x11023700,0x24000000,0x14100000,0x11023700,0x24000000,0x14e00000,0x11023700,0x24000020,0x100000,0x11023700, +0x24000020,0x4100000,0x11023700,0x24000020,0x14100000,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e00,0,0x200000,0x11024e00,0x2000, +0x900060,0x11024e67,0,0,0x11025600,0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a, +0x11045712,0x7c00100,0xe3040a,0x11045712,0x7c80100,0xe3040a,0x11045716,0x7c00100,0xe30c0a,0x11045716,0x7c00100,0x2530c0a,0x11063d00,0x4000001,0x445811,0x11064e00, +0x4000000,0x800000,0x11064e00,0x4000000,0xe00000,0x11064e00,0x4000000,0x1400000,0x11064e00,0x4000020,0xe00000,0x11065700,0x4000000,0x810011,0x11065700,0x4000000, +0xe00011,0x11065700,0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011, +0x11065700,0x4000008,0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700, +0x4000400,0xe00011,0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe00011,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010, +0xb48011,0x11065719,0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00, +0x11080100,0x68000c0,0x19329800,0x11080100,0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100, +0x24000000,0x1600000,0x11080100,0x24000000,0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000000,0x18200000,0x11080100,0x24000006,0xd70000,0x11080100,0x24000008, +0x1713c00,0x11080100,0x24000008,0x1714000,0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100,0x24000020,0x200000, +0x11080100,0x24000020,0x400000,0x11080100,0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010,0xb48000,0x11080100, +0x2c000010,0x100ac00,0x11080100,0x44000001,0x1a45800,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400,0x11080119,0x7c001c0, +0x250400,0x11080200,0x4000400,0x200002,0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200,0x24000020,0x200000, +0x110a1e12,0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,0x24000000,0x34e00000,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001,0x110a3700, +0x24000000,0x34200000,0x110a3d00,0x4000000,0xe00000,0x110a3d00,0x4000000,0xe00002,0x110a3d00,0x24000000,0xe00000,0x110a3d11,0x7c00300,0xe30000,0x110a3d11,0x7c00900, +0x1230400,0x110a3d12,0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x2530000,0x110a3e14,0x7c00900,0x1230000, +0x110a3e14,0x7c00900,0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,0x110a3f16,0x7c00900,0x1230c00,0x110a3f16, +0x7c00900,0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4400,0x4000000,0xe00000,0x110a4412,0x4000000, +0xe00002,0x110a4412,0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,0xe00c0d,0x110a4711,0x7c40300,0xe30000, +0x110a4e00,0x4000000,0x100000,0x110a4e00,0x4000000,0x200000,0x110a4e00,0x4000000,0x400000,0x110a4e00,0x4000000,0x800000,0x110a4e00,0x4000000,0x1200000,0x110a4e00, +0x4000020,0xf00000,0x110a4e00,0x4000100,0x200000,0x110a4e00,0x4000100,0x1200000,0x110a4f11,0x7c00300,0xe30001,0x110a4f11,0x7c40300,0xe30000,0x110a5300,0x4000000, +0x810010,0x110a5300,0x4000000,0xe00002,0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000,0x1410010,0x110a5300,0x4000002,0xe70010,0x110a5300,0x4000008,0x810010, +0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10,0x110a5400,0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,0x110a5400, +0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400,0x4000002,0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,0x4000010, +0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020,0xe0000c,0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,0x80ac0c, +0x110a5400,0xc000010,0xb4800c,0x11400a0c,0xc000010,0x1049400,0x11400c0e,0x4000010,0xb00000,0x11400c0e,0x4000010,0x1071400,0x11400c0e,0xc000010,0xb48000,0x11400c17, +0x7c00900,0x230400,0x11400f42,0xc000010,0x448000,0x11400f54,0xc000010,0x448000,0x11401d83,0x4000000,0x200000,0x11403dab,0x4000000,0xe00000,0x114457a0,0x4000004, +0x120000a,0x114457a0,0x4000008,0x81000a,0x114457a0,0x4000008,0x141000a,0x114457a0,0x4000010,0x87000a,0x114457a0,0xc000010,0x84800a,0x114457a9,0x3802500,0x126246a, +0x114457a9,0x7c00d00,0x2530c0a,0x114a3da0,0x24000000,0x810000,0x114a3da0,0x24000000,0x1410000,0x114a3da0,0x24000008,0x810000,0x114a3da0,0x24000008,0x1410000,0x114a3da0, +0x24000010,0x870000,0x114a3da0,0x2c000010,0x848000,0x114a3da6,0x4000000,0xe00000,0x114a3da6,0x24000000,0xe00000,0x114a3da6,0x24000002,0x1200000,0x114a3da6,0x24000002, +0x14e00000,0x114a3da6,0x24000008,0x810000,0x114a3da6,0x24000008,0x1410000,0x114a3da9,0x7c00900,0x930c00,0x114a3da9,0x7c00900,0xe30c00,0x114a3dab,0x7c00300,0xe30000, +0x114a3ea9,0x7000400,0x1200c02,0x114a3fa0,0x4000004,0x1200000,0x114a3fa9,0x7c00d00,0x2530c00,0x114a42ab,0x4000000,0xe00000,0x114a42ab,0x4000000,0xe0000f,0x114a44ab, +0x4000000,0xe00002,0x114a44ab,0x4000000,0xe00003,0x114a44ab,0x4000000,0x14e00003,0x114a45ab,0x4000000,0xe00002,0x114a45ab,0x4000000,0xe0000d,0x1180090a,0x2802400, +0x962460,0x11800c1f,0x2802100,0x962460,0x11800c1f,0x2802500,0x962460,0x11800f29,0x2802400,0x962460,0x11800f36,0x2802400,0x962460,0x11820700,0x2802400,0x962460, +0x11820700,0x2802500,0x962460,0x118a3dac,0x2802400,0x962460,0x118a3ea9,0x2802400,0x962460,0x11c00904,0x2802400,0x962460,0x11c00908,0x2802400,0x962460,0x11c00c23, +0x6800000,0x1329800,0x11c00c27,0xc000010,0xb48000,0x11c00f6b,0x6800000,0x1329800,0x11c01070,0x6800000,0x1329800,0x11c01174,0x6800000,0x1329800,0x11c01278,0x6800000, +0x1329800,0x11c0147c,0x4000000,0x200000,0x11c0147c,0x6800000,0x1329800,0x11c05123,0x7c00100,0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460, +0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,0x962461,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27, +0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,0x20001b27,0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000, +0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010,0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800, +0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,0x230400,0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00, +0x4000000,0x1600000,0x20004b67,0,0x1900020,0x20004c67,0,0x1900020,0x20004d67,0,0x1900020,0x20006d67,0x1000,0,0x20006e67,0x1000, +0,0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000, +0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,0x220401,0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519, +0x7c00100,0x220400,0x30000600,0x4000400,0x200400,0x30000600,0x7c00500,0x230400,0x30000605,0x4000400,0x200000,0x3000080e,0x7c00100,0x220400,0x30000908,0x2000, +0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,0x400000, +0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,0x30000d22, +0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000d22,0x80000000,0x218960,0x30000e25,0x2802500, +0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,0x2806400,0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540, +0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,0x962460,0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27, +0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c,0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000, +0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100,0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000, +0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,0x400000,0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b, +0xc000010,0x248000,0x30002006,0x7c00100,0x250400,0x30002128,0x4000010,0x200000,0x30002128,0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000, +0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x445800,0x3000221d,0x7c00100,0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400, +0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,0x1862460,0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,0x30002417, +0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,0x30002417,0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100, +0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x3000251b,0x80000,0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x3c02100,0x962460, +0x3000251b,0x4000000,0x200000,0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000,0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,0x3000251b, +0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,0x4000001, +0xc41c0b,0x30002800,0x24000000,0x200000,0x30002800,0x2c000010,0x1248002,0x30002800,0x2c000010,0x15248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460, +0x30002b01,0x2000,0x8962460,0x30002c00,0x4000000,0x200000,0x30002c00,0x7c00100,0x14220405,0x30002d19,0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000, +0x24000000,0x200000,0x30003000,0x24000000,0x4200000,0x30003100,0x24000000,0x200000,0x30003600,0x24000000,0x200000,0x30003700,0x24000000,0x4200000,0x3000392e,0x24000000, +0x200000,0x30005013,0x7c00100,0x2633801,0x30005600,0,0x918820,0x30020600,0x4000400,0x500400,0x30020701,0x2802400,0x962460,0x30020701,0x2802400,0xc62460, +0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000,0x300a3d11, +0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829,0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000, +0xe00000,0x30402589,0x4000010,0x400000,0x30402589,0x4000010,0xb70000,0x30402589,0xc000010,0xb48000,0x304a3dab,0x4000000,0xe00000,0x30800c1f,0x2802100,0x962460, +0x30c01c81,0x6800000,0x1329800,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402,0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000,0x3100581e, +0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00,0x80000, +0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000,0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000,0x962540, +0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405,0x31005d00, +0x7c00120,0x250405,0x31006000,0x82000,0x8962460,0x31006000,0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419,0x7c00100, +0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100,0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100,0x250400, +0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x220400,0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820,0x32002800, +0x4000001,0x445802,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800,0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919,0x7c00100, +0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000,0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000,0x200000, +0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000,0x32002f00, +0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500,0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003600,0x24000020, +0x14200000,0x32003700,0x24000000,0x200000,0x32003700,0x24000000,0x4100000,0x32003700,0x24000000,0x4200000,0x32003700,0x24000000,0x14200000,0x32003800,0x24000000,0x810000, +0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a, +0x2802100,0x962460,0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,0x7c00100, +0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,0x200000, +0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000,0x32006800,0x24000020,0x14200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900, +0x24000020,0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00,0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000, +0x100000,0x32026c01,0x12882000,0x962460,0x32026c01,0x12882000,0x8962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,0x810000, +0x32086600,0x24000020,0x1410000,0x32086900,0x24000020,0x810000,0x32086900,0x24000020,0x1410000,0x320a3600,0x24000020,0x34200000,0x320a3d11,0x7c00100,0x1230400,0x320a3e14, +0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x2530000,0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,0x7c00300, +0xe30001,0x320a6b16,0x7c00100,0x2530c00,0x32406385,0xc000010,0x448000,0x324a3dae,0x4000000,0x14e00000,0x324a3dae,0x7c00100,0x1230400,0x324a3fa9,0x4000002,0x1200c00, +0x324a53a6,0x24000000,0xe00000,0x32820701,0x2802000,0x962460,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200400,0x4000080e, +0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400,0x4000080e,0x7c00100,0x250402,0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,0x40000c02,0x2802500, +0x962460,0x40000c02,0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000c02,0x80000000,0x218960,0x40000d22,0x7c00100,0x230400, +0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100,0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,0x4000120f, +0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400,0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,0x2802400, +0x962460,0x40001615,0x7c00100,0x230400,0x40002417,0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,0x200000, +0x40002c00,0x4000000,0x200002,0x40003000,0x24000000,0x14200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x4200000,0x40003700, +0x24000000,0x14200000,0x40005a09,0x7c00100,0x220400,0x40005a09,0x7c00100,0x250400,0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,0x2802400, +0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000,0x1329800,0x40006f30,0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,0xb48000, +0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000,0x40007208,0x7c00100,0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,0x4000720e, +0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219,0x7c00500,0x220400,0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,0x24000000, +0x200000,0x40007300,0x24000000,0x14200000,0x40007400,0x4000000,0x200000,0x40007531,0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007835,0x4000010,0x400000, +0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000,0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400,0x40007c00, +0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460,0x40023300,0x4000000,0x200000,0x40027d01,0x12882000,0x962460,0x400a3700,0x24000000, +0x34200000,0x400a3700,0x24000000,0x34e00000,0x400a4400,0x4000000,0xe0000d,0x400a4412,0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,0xe0000d, +0x400a5300,0x4000000,0x810010,0x400a5300,0x4000000,0x1410010,0x404077e0,0x4000000,0x200000,0x404077e3,0x4000000,0x200000,0x404077e3,0x4000000,0x400000,0x40c0147c, +0x4000000,0x200000,0x40c05123,0x4000000,0x200000,0x41000419,0x7c00100,0x220400,0x41000419,0x7c00100,0x250400,0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100, +0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,0x2802000,0x962460,0x41000b13,0x2802100,0x962460,0x41000b13,0x4000000,0xb00000, +0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0x1500000,0x41000c02,0xc000010,0xb48000,0x41000f0a,0x7c00100,0x230400,0x41001004,0x7c00100,0x230400,0x41001423, +0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x220400,0x41001d0c,0x7c00100,0x23040f,0x41001f0b,0x2802100,0x962460,0x41001f0b,0x4000000, +0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,0x24000000,0x400000,0x41002919,0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000, +0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,0x220405,0x41003000,0x24000000,0x200000,0x41003700,0x24000000,0x4200000,0x41003700, +0x24000000,0x14200000,0x41003700,0x24000000,0x14e00000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020,0x200000,0x41006600,0x24000020,0x810000,0x41006600,0x24000020, +0x1410000,0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000,0x41007e0e,0x2802000,0x962460,0x41007e0e,0x4000000,0x200000, +0x41007f0e,0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137,0x2802100,0x962460,0x41008137,0x4000000,0x200000,0x41008137, +0x6800100,0x962540,0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000,0x200000,0x41008407,0x4000000,0x400000,0x41008407,0x4000000, +0xb00000,0x41008407,0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b,0x4000000,0x200000,0x4100860b,0x7c00100,0x230400, +0x4100870c,0x7c00100,0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939,0x2802000,0x962460,0x41008939,0x2802100,0x962460,0x41008939, +0x2806000,0x962460,0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100,0x230400,0x41008939,0xc000010,0x448000,0x41008a00,0x4000000, +0x200000,0x41008b3b,0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x7c00100,0x1830000,0x41008b3b,0x7e00100,0x1830000,0x41008c3d,0x4000010,0x400000, +0x41008c3d,0x7c00100,0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100,0x22040f,0x41008e00,0x24000000,0x200000,0x41008e00, +0x24000000,0x400000,0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802000,0x962460,0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000, +0x962460,0x41008f3a,0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c,0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f, +0x41020701,0x2802000,0x962460,0x41020701,0x2802000,0xc62460,0x410a3700,0x24000000,0x34200000,0x410a3700,0x24000000,0x34e00000,0x410a4412,0x4000000,0xe00003,0x410a4711, +0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a9100,0x4000000,0x800010,0x410a9100,0x4000000,0x810010,0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000, +0xb00010,0x410a9100,0x4000000,0xf00010,0x410a9100,0x4000000,0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100,0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010, +0x414a82ab,0x4000000,0xe00000,0x41808300,0x2802000,0x962460,0x41c0147c,0x6800000,0x1329800,0x50000419,0x7c00100,0x220400,0x50000419,0x7c00100,0x250400,0x5000080e, +0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,0x250400,0x50000b13,0x2802500,0x962460,0x50000f0a,0x7c00100,0x230400,0x50001615,0x2802100, +0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020,0x962460,0x50002c00,0x4000000,0x200000,0x50002c19,0x7c00100,0x220400,0x50002d19,0x7c00100,0x220400, +0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,0x24000000,0x4200000,0x50005d00,0x7c00120,0x220405,0x50005d00,0x7c00120,0x250405,0x50006108, +0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,0x200000,0x50007300,0x24000000,0x200000,0x50008301,0x2802400,0x962460,0x50008a00,0x7c00500, +0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,0x50009257,0x4000010,0x1071400,0x50009257,0x6800000,0x1329800,0x50009257,0x7c00100,0x230400, +0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,0xc000010,0xb48000,0x5000933e,0x2802100,0x962460,0x5000933e,0x2802400,0x962460,0x5000933e, +0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,0x400000,0x5000933e,0x6800000,0x1329800,0x5000933e,0x6800100,0x962540,0x5000933e,0x6800100, +0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,0x5000933e,0x7c00100,0x230401,0x5000933e,0xc000010,0x448000,0x50009419,0x7c00100,0x220400, +0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200400,0x5000965a,0x4000000,0x500000,0x5000965a,0x7c00100,0x230400,0x5000965a,0xc000010,0xb48000,0x5000975b, +0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,0x230400,0x50009865,0x7c00100,0x230400,0x50009965,0x4000010,0x400000,0x50009965,0x7c00100, +0x230400,0x50409aab,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,0x5100080e,0x7c00100,0x250400,0x51000c02,0x2802100,0x962460,0x51000c02,0x4000000,0x1500000, +0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500,0x230400,0x51001110,0x2802100,0x962460,0x5100131f, +0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000,0x200000,0x51001524,0x7c00100,0x230400,0x5100171a,0x2802100, +0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400,0x51001b27,0x4000000,0x200000,0x51001b27,0x4000000,0x400000, +0x51001b27,0x4000000,0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802400,0x1862460,0x51001c1c,0x2806400,0x1862460,0x51001c1c, +0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800000,0x1862400,0x51001c1c,0x6800100,0x1862400,0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800400, +0x1862400,0x51001c1c,0x7c00100,0x1830000,0x5100251b,0x7c00100,0x230400,0x51002619,0x7c00100,0x220400,0x51002619,0x7c00100,0x250400,0x51002800,0x80020,0x218820, +0x51002c00,0x4000000,0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000,0x4200000,0x51003700,0x24000000,0x4e00000,0x51005201,0x2802400,0x962460,0x51005c00, +0x4000000,0x200000,0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400,0x51006600,0x24000020,0x200000,0x51006600,0x24000020,0x810000,0x51006600,0x24000020, +0x1410000,0x51007300,0x24000000,0x200000,0x51007300,0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301,0x2802000,0x962460,0x51008301,0x2802400,0x962460, +0x51008a00,0x7c00500,0x230400,0x51008e00,0x24000000,0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000,0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00, +0x24000000,0x1410000,0x51008e00,0x24000000,0x1710000,0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400,0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100, +0x220400,0x51009419,0x7c00100,0x22040e,0x51009419,0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500,0x4000000,0x200400,0x51009500,0x7c00500,0x230400, +0x51009519,0x7c00100,0x220400,0x51009519,0x7c00100,0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100,0x250400,0x51009b71,0x2802100,0x962460,0x51009b71, +0x6800000,0x1329800,0x51009b71,0x6800100,0x962540,0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400,0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400, +0x962460,0x51009c52,0x2802c00,0x962460,0x51009c52,0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52,0x6800100,0x962540,0x51009c52,0x7c00100,0x230400, +0x51009c52,0xc000010,0x448000,0x51009d6d,0x6800000,0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500,0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d, +0xc000010,0x448000,0x51009e08,0x2802100,0x962460,0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800,0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900, +0x230400,0x51009f63,0xc000010,0x448000,0x51009f63,0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008,0x2802400,0x962460,0x5100a008,0x4000000,0x200000, +0x5100a008,0x7c00100,0x220400,0x5100a008,0x7c00100,0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500,0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f, +0x6800000,0x1329800,0x5100a16f,0x6800100,0x962540,0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000,0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400, +0x962460,0x5100a24f,0x6800000,0x1329800,0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e,0x2802100,0x962460,0x5100a36e,0x4000000,0x200000, +0x5100a36e,0x6800100,0x962540,0x5100a36e,0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100,0x962460,0x5100a442,0x4000000,0x200000,0x5100a442, +0x6800000,0x1329800,0x5100a442,0x6800100,0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000,0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000, +0x200000,0x5100a601,0x2802000,0x962460,0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400, +0x5100aa00,0x4000000,0x4e00000,0x5100ab00,0x4000000,0x4e00000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711, +0x7c40300,0xe30000,0x510a7300,0x24000000,0x34200000,0x510aaa00,0x4000000,0x34e00000,0x5140a2db,0x4000400,0x400000,0x514a82ab,0x4000000,0xe00000,0x51802b9d,0x2802000, +0x962460,0x51c00908,0x2802400,0x962460,0x51c0a008,0x2802400,0x962460,0x52000f0a,0x2802100,0x962460,0x52000f0a,0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400, +0x52001004,0x4000000,0x1600000,0x52001b00,0x4000000,0x200000,0x52001c1c,0x2802100,0x1862460,0x52001c1c,0x6800100,0x1862400,0x52001c1c,0x6800400,0x1862400,0x52001e12, +0x7c00100,0x2230500,0x52001e12,0x7c00100,0x2330520,0x52002128,0x4000002,0x400000,0x52002128,0x7c00100,0x230400,0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000, +0x1600000,0x52002d00,0x4000000,0x200006,0x52003000,0x24000000,0x200000,0x52006108,0x7c00100,0x220400,0x52006108,0x7c00100,0x250400,0x52008301,0x2802400,0x962460, +0x52008407,0x2802400,0x962460,0x52008407,0x7c00100,0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000,0x1800000,0x52008b3b,0x7c00100,0x1830000,0x52008e00, +0x24000000,0x400000,0x52009419,0x7c00100,0x250400,0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460,0x5200ac7e,0x2802100,0x962460,0x5200ac7e,0x2802400, +0x962460,0x5200ac7e,0x4000010,0x200000,0x5200ac7e,0x7c00100,0x230400,0x5200ac7e,0xc000010,0x248000,0x5200ad28,0x7c00100,0x230400,0x5200ae6a,0x2802100,0x1862460, +0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000,0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000,0x1329800,0x5200ae6a, +0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000,0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000,0x5200b083,0x4000010, +0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182,0x2802400,0x962460,0x5200b182,0x4000000,0x200000,0x5200b182,0x4000010,0x400000, +0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400,0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100,0x230400,0x5200b54e, +0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000,0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800,0x5200b54e,0x6800100, +0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e,0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c,0x6800400,0x1862400, +0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,0x2802100,0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000,0x1800000,0x5200b77f, +0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,0x1830000,0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000,0x5200b873,0x2802100, +0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,0x5200b873,0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873,0x7c00100,0x230400, +0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,0x7c00100,0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010,0x400000,0x5200ba74, +0x7c00100,0x230400,0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100,0x230400,0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010,0x400000,0x5200bc75,0x7c00100, +0x230400,0x5200bd7d,0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400,0x5200be7a,0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58,0x7c00100,0x230400, +0x5200c002,0x4000000,0x200000,0x5200c178,0x2802000,0x962460,0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400,0x962460,0x5200c178,0x2806400,0x962460,0x5200c178, +0x4000000,0x200000,0x5200c178,0x6800100,0x962540,0x5200c178,0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401,0x5200c178,0xc000010,0x448000,0x5200c178,0x80000000, +0x218960,0x5200c247,0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400,0x5200c247,0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00,0x4000000,0x100006, +0x52023700,0x24000000,0x4100000,0x52023700,0x24000000,0x4e00000,0x52023700,0x24000000,0x14100000,0x52023700,0x24000000,0x14e00000,0x52023700,0x24000000,0x96800000,0x52024400, +0x4000000,0x100000,0x52027300,0x24000000,0x100000,0x5202c300,0x4000000,0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000,0x100003,0x5202c300,0x4000000, +0x10000d,0x5202c300,0x4000100,0x150400,0x5202c300,0x4000100,0x15040d,0x5202c300,0x4000100,0x14150400,0x520a1e12,0x7c00100,0x2130480,0x520a3700,0x24000000,0x34e00000, +0x520a3800,0x24000000,0x34100000,0x520a4711,0x7c40300,0xe30000,0x520a4f11,0x7c00300,0xe30001,0x520a7300,0x24000000,0x34100000,0x520ab412,0x7c00100,0x2130480,0x520ac400, +0x4000000,0xe00002,0x520ac400,0x4000000,0xe0000d,0x520ac400,0x4000000,0x34e0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,0x7c40300,0xe30000,0x5240af8b,0x7c00100, +0x230400,0x5240af90,0x4000400,0x200000,0x5240af90,0x6800100,0x962540,0x5240af92,0x6800400,0x962540,0x5240af92,0x7c00100,0x230400,0x5240b2b1,0x4000000,0x200000, +0x5240b2b1,0x4000000,0x1500000,0x5240b2bc,0x4000000,0x200000,0x5240b2c9,0x4000000,0x200000,0x5240b5de,0x7c00900,0x230400,0x524a44ab,0x4000000,0xe00003,0x5280af8b, +0x2802400,0x962460,0x5280af8c,0x2802400,0x962460,0x5280af92,0x2802400,0x962460,0x5280af94,0x2802400,0x962460,0x5280af96,0x2802400,0x962460,0x52c0b3d5,0x2802400, +0x962460,0x52c0b3d9,0x7c00100,0x230400,0x60000c02,0x2802100,0x962460,0x60000c02,0x7c00100,0x230400,0x60000f0a,0x2802100,0x962460,0x60000f0a,0x6800100,0x962540, +0x60000f0a,0x7c00100,0x230400,0x6000131f,0x4000000,0x200000,0x6000171a,0x7c00100,0x230400,0x6000171a,0x7c00100,0x230560,0x60001b27,0x2802100,0x962460,0x60001b27, +0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b,0x2802000,0x962460,0x60002919,0x7c00100,0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,0x24000000, +0x14200000,0x60003000,0x24000000,0x14e00000,0x60003700,0x24000000,0x4200000,0x60003800,0x24000000,0x1710000,0x60005102,0x4000000,0x200000,0x60006108,0x7c00100,0x220400, +0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000,0x60008301,0x2802000,0x962460,0x6000903c,0x2806000,0x962460,0x6000903c,0x4000000,0x400000,0x60009519, +0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008,0x7c00100,0x220400,0x6000a008,0x7c00100,0x250400,0x6000c300,0x4000000,0x3a703580,0x6000c654,0x2802000, +0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100,0x230400,0x6000c73f,0x2802000,0x962460,0x6000c73f,0x2802100,0x962460,0x6000c73f,0x4000000,0x200000, +0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540,0x6000c73f,0x7c00100,0x230400,0x6000c80b,0x7c00100,0x230400,0x6000c941,0x2802100,0x962460,0x6000c941, +0x2806000,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941,0x4000010,0x200000,0x6000c941,0x6800000,0x1329800,0x6000c941,0x6800100,0x962540,0x6000c941,0x7c00100, +0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100,0x230400,0x6000cc00,0x4000000,0x4e00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,0x100000, +0x6002c300,0x4000000,0x10000d,0x6002c300,0x4000100,0x150400,0x6002c300,0x4000100,0x15040d,0x6002c300,0x4000100,0x14150400,0x600a3000,0x24000000,0x34200000,0x600a3000, +0x24000000,0x34e00000,0x600a3700,0x24000000,0x34200000,0x600a3800,0x24000000,0x34200000,0x600a3800,0x24000000,0xb6800000,0x600a4305,0x7c00100,0xe30400,0x600ac300,0x4000000, +0x34100000,0x600ac400,0x4000000,0x14e0000d,0x600ac400,0x4000000,0x34e0000d,0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600acc00,0x4000000,0x34e00000, +0x600acd00,0x4000000,0x34200000,0x600acd00,0x4000000,0x34e00000,0x600acd00,0x4000000,0xb6800000,0x600ace00,0x4000000,0x34e00000,0x600ace00,0x4000000,0xb6800000,0x600acf00, +0x4000000,0x34e00000,0x600acf00,0x4000000,0xb6800000,0x600ad111,0x7c40300,0xe30000,0x604ac4ab,0x4000000,0x34e00003,0x61000a03,0x4000000,0x1600000,0x61000c02,0x80000000, +0x218960,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100,0x1830000,0x61001d0c,0x7c00100,0x220400,0x61001d0c,0x7c00100,0x250400,0x61006600,0x24000020,0x200000, +0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400,0x6100870c,0x7c00100,0x220400,0x61008e00,0x24000000,0x200000,0x61008e00,0x24000000,0x400000,0x61008e00, +0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519,0x7c00100,0x220400,0x61009519,0x7c00100,0x250400,0x61009519,0x7c00500,0x22040f,0x61009b71,0x2802100, +0x962460,0x61009b71,0x2806400,0x962460,0x61009b71,0x7c00100,0x230400,0x6100a008,0x2802100,0x962460,0x6100c300,0x4000000,0x20000f,0x6100cd00,0x4000000,0x200000, +0x6100d202,0x2802400,0x962460,0x6100d202,0x2802500,0x962460,0x6100d202,0x7c00100,0x230400,0x6100d302,0x4000020,0x200000,0x6100d302,0x7c00120,0x230405,0x6100d476, +0x2802100,0x962460,0x6100d476,0x2802100,0x962461,0x6100d476,0x2806400,0x962460,0x6100d476,0x4000000,0x400000,0x6100d476,0x6800000,0x1329800,0x6100d476,0x6800100, +0x962540,0x6100d476,0x7c00100,0x230400,0x6100d476,0xc000010,0x448000,0x6100d573,0x2802100,0x962460,0x6100d573,0x2806400,0x962460,0x6100d573,0x6800100,0x962540, +0x6100d573,0x7c00100,0x230400,0x6100d573,0x7c00900,0x230400,0x6100d573,0xc000010,0x448000,0x6100d68d,0x7c00100,0x230400,0x6100d756,0x7c00100,0x230400,0x6100d85c, +0x2802400,0x962460,0x6100d85c,0x6800100,0x962540,0x6100d85c,0x7c00100,0x230400,0x6100d85c,0x7c00500,0x230400,0x6100d997,0x2802100,0x962460,0x6100d997,0x4000000, +0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000,0x1329800,0x6100d997,0x6800100,0x962540,0x6100d997,0x6804400,0x962540,0x6100d997,0x7c00100,0x230400, +0x6100d997,0x7c00100,0x230560,0x6100d997,0xc000010,0x448000,0x6100da98,0x6800000,0x1329800,0x6100da98,0x7c00100,0x230400,0x6100db71,0x4000000,0x200000,0x6100dc99, +0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000,0x1329800,0x6100dc99,0x6800100,0x962540,0x6100dc99,0x6804400,0x962540,0x6100dc99,0x7c00100, +0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x610ace00,0x4000000,0x34e00000,0x6140af90,0x6800100,0x962540,0x6140af92,0x7c00100,0x230400, +0x6180af8d,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000,0x63002800,0x80000,0x918820,0x63c00c15,0x80000,0x918820,0x7000080e,0x7c00100,0x250400,0x70000a03, +0x4000000,0x200000,0x70000c00,0x80000000,0x218960,0x70000f0a,0x7c00100,0x230400,0x70001004,0x7c00100,0x230400,0x70001524,0x2802100,0x962460,0x70001524,0x7c00100, +0x230400,0x70001615,0x2802100,0x962460,0x7000171a,0x2802100,0x962460,0x70001821,0x6800000,0x1329800,0x70002320,0x7c00100,0x230400,0x70002a00,0x4000000,0x1500000, +0x70002a00,0x4000000,0x1600000,0x70003000,0x24000000,0x200000,0x70003000,0x24000000,0x14200000,0x70003800,0x24000000,0x4e00000,0x70005201,0x2802400,0x962460,0x7000581e, +0x7c00100,0x230400,0x70006108,0x7c00100,0x220400,0x70006108,0x7c00100,0x250400,0x70006f30,0x7c00100,0x230400,0x70007300,0x24000000,0x200000,0x70007f0e,0x4000000, +0x200000,0x70008301,0x2802100,0x962460,0x70008301,0x2802400,0x962460,0x70008e00,0x24000000,0x200000,0x70008e00,0x24000000,0x400000,0x70008e00,0x24000002,0x400000, +0x70008e00,0x24000008,0x1410000,0x70008e00,0x24000010,0x400000,0x70008e00,0x2c000010,0x448000,0x70009519,0x7c00100,0x220400,0x70009519,0x7c00100,0x230400,0x70009519, +0x7c00100,0x250400,0x70009865,0x7c00100,0x230400,0x70009965,0x4000010,0x400000,0x70009965,0x7c00100,0x230400,0x7000a008,0x7c00100,0x220400,0x7000a008,0x7c00100, +0x250400,0x7000a008,0x7c00500,0x22040f,0x7000a50e,0x4000000,0x200000,0x7000b61c,0x2802400,0x1862460,0x7000b61c,0x6800400,0x1862400,0x7000b61c,0x7c00100,0x1830000, +0x7000c300,0x4000000,0x100000,0x7000c941,0x2806000,0x962460,0x7000cc00,0x4000000,0x4e00000,0x7000cd00,0x4000000,0x200000,0x7000cd00,0x4000000,0x4200000,0x7000cd00, +0x4000000,0x4e00000,0x7000cd00,0x4000000,0x14200000,0x7000cd00,0x4000000,0x14e00000,0x7000cd00,0x4000000,0x96800000,0x7000cf00,0x4000000,0x4e00000,0x7000cf00,0x4000000, +0x14e00000,0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100,0x230400,0x7000d997,0x7c00100,0x230400,0x7000d997,0xc000010,0x248000,0x7000dd86,0x2802400,0x962460, +0x7000dd86,0x7c00100,0x230400,0x7000dd86,0xc000010,0x448000,0x7000de9f,0x4000000,0x200000,0x7000de9f,0x7c00100,0x230400,0x7000e001,0x2000,0x962460,0x7000e001, +0x2802400,0x962460,0x7000e187,0x2802000,0x962460,0x7000e187,0x2802100,0x962460,0x7000e187,0x4000000,0x200000,0x7000e187,0x7c00100,0x230400,0x7000e187,0xc000010, +0x448000,0x7000e288,0x7c00100,0x230400,0x7000e300,0x4000000,0x200000,0x7000e489,0x2802100,0x962460,0x7000e489,0x2802400,0x962460,0x7000e489,0x6800100,0x962540, +0x7000e489,0x6800100,0x962541,0x7000e489,0x6804400,0x962540,0x7000e489,0x7c00100,0x230400,0x7000e489,0x7c00900,0x230400,0x7000e59d,0x2802100,0x962460,0x7000e59d, +0x2802400,0x962460,0x7000e59d,0x4000000,0x200000,0x7000e59d,0x4000010,0x200000,0x7000e59d,0x6800100,0x962540,0x7000e59d,0x6804400,0x962540,0x7000e59d,0x7c00100, +0x230400,0x7000e59d,0xc000010,0x448000,0x7000e691,0x2802100,0x962460,0x7000e691,0x2802400,0x962460,0x7000e691,0x2806400,0x962460,0x7000e691,0x6800000,0x1329800, +0x7000e691,0x6800100,0x962540,0x7000e691,0x7c00100,0x230400,0x7000e700,0x4000400,0x200400,0x7000e70e,0x7c00100,0x220400,0x7000e719,0x7c00100,0x220400,0x7000e719, +0x7c00500,0x22040f,0x7000e853,0x7c00100,0x230400,0x7000e9a0,0x2802400,0x962460,0x7000e9a0,0x4000000,0x200000,0x7000e9a0,0x4000000,0x500000,0x7000e9a0,0x7c00100, +0x230400,0x7000ea79,0x2802400,0x962460,0x7000ea79,0x4000000,0x200000,0x7000ea79,0x4000000,0xf00000,0x7000ea79,0x4000010,0x400000,0x7000ea79,0x7c00100,0x230400, +0x7000eb8c,0x2802400,0x962460,0x7000eb8c,0x4000000,0x200000,0x7000eb8c,0x7c00100,0x230400,0x7000eca3,0x2802100,0x962460,0x7000eca3,0x2806400,0x962460,0x7000eca3, +0x4000000,0x200000,0x7000eca3,0x6800000,0x1329800,0x7000eca3,0x6800100,0x962540,0x7000eca3,0x7c00100,0x230400,0x7000eca3,0xc000010,0x448000,0x7000ed95,0x6800000, +0x1329800,0x7000ed95,0x7c00100,0x230400,0x7000ed95,0xc000010,0x448000,0x7000ee1c,0x2802400,0x1862460,0x7000ee1c,0x6800000,0x1329800,0x7000ee1c,0x7c00100,0x1830000, +0x7000ee1c,0x7c00900,0x1830000,0x7000ef8f,0x4000000,0x200000,0x7000ef8f,0x7c00100,0x230400,0x7000f08e,0x4000000,0x200000,0x7000f08e,0x7c00100,0x230400,0x7000f159, +0x2802100,0x962460,0x7000f159,0x7c00100,0x230400,0x7000f200,0x4000000,0x200000,0x7000f200,0x4000000,0x1200000,0x7000f200,0x4000000,0x1710000,0x7000f34b,0x2802100, +0x962460,0x7000f34b,0x4000000,0x200000,0x7000f34b,0x4000010,0x400000,0x7000f34b,0x6800000,0x1329800,0x7000f34b,0x7c00100,0x230400,0x7000f34b,0x7c00900,0x230400, +0x7000f34b,0xc000010,0x448000,0x7000f490,0x4000000,0x200000,0x7000f490,0x7c00100,0x230400,0x7000f5a5,0x7c00100,0x230400,0x7000f67b,0x4000000,0x200000,0x7000f67b, +0x4000010,0x200000,0x7000f67b,0x7c00100,0x230400,0x7000f8a6,0x2802100,0x962460,0x7000f8a6,0x2802400,0x962460,0x7000f8a6,0x2806400,0x962460,0x7000f8a6,0x4000000, +0x500000,0x7000f8a6,0x4000010,0xb00000,0x7000f8a6,0x4000800,0x200000,0x7000f8a6,0x6800100,0x962540,0x7000f8a6,0x6800100,0x962541,0x7000f8a6,0x7c00100,0x230400, +0x7000f8a6,0xc000010,0x448000,0x7000f921,0x4000000,0x200000,0x7000fa00,0x4000000,0x200000,0x7000fb9e,0x2802100,0x962460,0x7000fb9e,0x2802400,0x962460,0x7000fb9e, +0x2806400,0x962460,0x7000fb9e,0x4000000,0x200000,0x7000fb9e,0x6800000,0x1329800,0x7000fb9e,0x6800100,0x962540,0x7000fb9e,0x6800100,0x962541,0x7000fb9e,0x7c00100, +0x230400,0x7000fc92,0x4000000,0x200000,0x7000fc92,0x6800000,0x1329800,0x7000fc92,0x7c00100,0x220400,0x7000fc92,0x7c00100,0x230400,0x7000fc92,0x7c00100,0x250400, +0x700acd00,0x4000000,0x34e00000,0x700acd00,0x4000000,0xb6800000,0x700ace00,0x4000000,0x34e00000,0x700acf00,0x4000000,0x34e00000,0x700acf00,0x4000000,0xb6800000,0x7040dfe5, +0x4000000,0x200000,0x7040f7e9,0x80000,0x918820,0x7080af90,0x2802400,0x962460,0x7080dfe5,0x2802400,0x962460,0x70c0e4e7,0x2802100,0x962460,0x70c0e4e7,0x2802400, +0x962460,0x70c0e4e7,0x6800100,0x962540,0x8000120f,0x7c00100,0x230400,0x80001524,0x7c00100,0x230400,0x8000171a,0x7c00100,0x230400,0x80002006,0x7c00100,0x220400, +0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000,0x80002d00,0x4000000,0x200000,0x80005208,0x2802400,0x962460,0x80005c00,0x4000000,0x200000,0x80007300, +0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519,0x7c00100,0x230400,0x80009519,0x7c00100,0x250400,0x80009865,0x7c00100,0x230400,0x8000a008,0x2802100, +0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100,0x230400,0x8000cd00,0x4000000,0x4e00000,0x8000d202,0x2802500,0x962460,0x8000d202,0x7c00100,0x230400, +0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802000,0x962460,0x8000d997,0x2802400,0x962460,0x8000d997,0x4000000,0x400000,0x8000d997,0x4000000,0x500000,0x8000d997, +0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489,0x2802100,0x962460,0x8000e489,0x7c00100,0x230400,0x8000e719,0x7c00100,0x220400,0x8000f8a6,0x2802100, +0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010,0x448000,0x8000fda1,0x2802100,0x1862460,0x8000fda1,0x2806400,0x1862460,0x8000fda1,0x4000000,0x1800000, +0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862540,0x8000fda1,0x7c00100,0x1830000,0x8000fda1,0xc000010,0x448000,0x8000fe9c,0x7c00100,0x230400,0x8000fe9c, +0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06,0x7c00100,0x220400,0x80010165,0x7c00100,0x230400,0x800102a2,0x4000000,0x200000,0x800102a2,0x7c00100, +0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010,0x448000,0x8001044c,0x4000000,0x200000,0x8001044c,0x7c00100,0x220400,0x8001044c,0x7c00100,0x250400, +0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000,0x80010670,0x4000010,0x400000,0x80010670,0xc000010,0x448000,0x800a4711,0x7c40300,0xe30000,0x800acd00, +0x4000000,0x34e00000,0x800acd00,0x4000000,0x7a902460,0x800ace00,0x4000000,0x34e00000,0x800acf00,0x4000000,0x34e00000,0x800b0011,0x7c40300,0xe30000,0x800b0500,0x4000000, +0x34e00000,0x800b0500,0x4000000,0xb6800000,0x90001615,0x7c00100,0x230400,0x9000171a,0x4000000,0x200000,0x9000171a,0x7c00100,0x230400,0x90003000,0x24000000,0x200000, +0x90007f0e,0x4000000,0x200000,0x90008301,0x2802000,0x962460,0x90008e00,0x24000000,0x400000,0x90009519,0x7c00100,0x250400,0x9000a16f,0x2802100,0x962460,0x9000d200, +0x80000000,0x218960,0x9000d202,0x2802000,0x962460,0x9000d202,0x2802100,0x962460,0x9000d202,0x7c00100,0x230400,0x9000e59d,0x2802100,0x962460,0x900107a7,0x2802100, +0x962460,0x900107a7,0x2802400,0x962460,0x900107a7,0x2802c00,0x962460,0x900107a7,0x4000000,0x1400000,0x900107a7,0x6800000,0x1329800,0x900107a7,0x7c00100,0x220400, +0x900107a7,0x7c00100,0x250400,0x900108a8,0x2802100,0x962460,0x900108a8,0x2806400,0x962460,0x900108a8,0x4000000,0x200000,0x900108a8,0x4000000,0x400000,0x900108a8, +0x4000010,0x400000,0x900108a8,0x6800000,0x1329800,0x900108a8,0x6800100,0x962540,0x900108a8,0x7c00100,0x230400,0x900108a8,0xc000010,0x448000,0x90010908,0x7c00100, +0x220400,0x90010a38,0x2802100,0x962460,0x90010ca9,0x2802100,0x962460,0x90010ca9,0x4000000,0x500000,0x90010ca9,0x4000010,0xb00000,0x90010ca9,0x6800100,0x962540, +0x90010ca9,0x7c00100,0x230400,0x90010d1b,0x4000000,0x500000,0x90010eaa,0x2802100,0x962460,0x90010eaa,0x2802400,0x962460,0x90010eaa,0x2806400,0x962460,0x90010eaa, +0x4000000,0x200000,0x90010eaa,0x4000000,0x400000,0x90010eaa,0x4000010,0x400000,0x90010eaa,0x6800000,0x1329800,0x90010eaa,0x6800100,0x962540,0x90010eaa,0x7c00100, +0x230400,0x90010eaa,0xc000010,0x448000,0x90010fab,0x7c00100,0x220400,0x90010fab,0x7c00100,0x250400,0x9002c300,0x4000000,0x100000,0x900ac400,0x4000000,0xe0000d, +0x900acd00,0x4000000,0x34e00000,0x900acd00,0x4000000,0xb6800000,0x900acf00,0x4000000,0x34e00000,0x900b0500,0x4000000,0xe00000,0x900b0500,0x4000000,0x34e00000,0x900b0500, +0x4000000,0xb6800000,0x900b0b9a,0x7c00900,0x1230400,0x900b109a,0x7c00300,0xe30000,0x900b119a,0x7c00300,0xe30000,0x90408e06,0x24000000,0x400000,0xa0001004,0x4000000, +0x200000,0xa0001004,0x7c00100,0x230400,0xa000120f,0x2802100,0x962460,0xa000120f,0x2802400,0x962460,0xa000171a,0x2802100,0x962460,0xa000171a,0x2806400,0x962460, +0xa0002a00,0x4000000,0x1600000,0xa0003000,0x24000000,0x200000,0xa000581e,0x7c00100,0x230400,0xa0007300,0x24000000,0x200000,0xa0008301,0x2802400,0x962460,0xa0008e00, +0x24000000,0x400000,0xa000cf00,0x4000000,0x4e00000,0xa0010500,0x4000000,0x200000,0xa00114af,0x2802100,0x962460,0xa00114af,0x2802400,0x962460,0xa00114af,0x2806400, +0x962460,0xa00114af,0x6800000,0x1329800,0xa00114af,0x7c00100,0x230400,0xa00114af,0x7c00100,0x230560,0xa00116b0,0x2802100,0x962460,0xa00116b0,0x2802800,0x962460, +0xa00116b0,0x2806400,0x962460,0xa00116b0,0x4000000,0x400000,0xa00116b0,0x4000000,0x500000,0xa00116b0,0x4000010,0x400000,0xa00116b0,0x6800100,0x962540,0xa00116b0, +0x7c00100,0x230400,0xa00116b0,0x7c00100,0x230560,0xa00116b0,0xc000010,0x448000,0xa0011722,0x7c00100,0x230400,0xa00118b1,0x2802000,0x962460,0xa00118b1,0x2802100, +0x962460,0xa00118b1,0x2806400,0x962460,0xa00118b1,0x4000000,0x200000,0xa00118b1,0x4000000,0x400000,0xa00118b1,0x4000000,0x500000,0xa00118b1,0x6800100,0x962540, +0xa00118b1,0x7c00100,0x230400,0xa00118b1,0x7c00100,0x230560,0xa00118b1,0xc000010,0x448000,0xa00a4005,0x7c00100,0xe30400,0xa00a4711,0x7c40300,0xe30000,0xa00ac400, +0x4000000,0x4e00000,0xa00acb14,0x7c00100,0xe30000,0xa00acf00,0x4000000,0x34e00000,0xa00b0500,0x4000000,0x34e00000,0xa00b0500,0x4000000,0xb6800000,0xa00b0b96,0x7c00900, +0x1230400,0xa00b1211,0x7c40300,0xe30000,0xa00b1314,0x7c00100,0xe30000,0xa00b1596,0x7c00300,0xe30000,0xa040af9c,0x6800400,0x962540,0xb0000a03,0x7c00100,0x220400, +0xb0000b13,0x7c00100,0x2633800,0xb0001004,0x2802000,0x962460,0xb0001110,0x4000000,0x200000,0xb0001524,0x2802000,0x962460,0xb0001615,0x4000000,0x500000,0xb000251b, +0x7c00100,0x230400,0xb0007300,0x24000000,0x200000,0xb0008939,0x4000000,0x200000,0xb0008939,0x7c00100,0x230400,0xb0008e00,0x24000000,0x200000,0xb0008e00,0x24000000, +0x400000,0xb0008e00,0x24000010,0x400000,0xb0009257,0x2802000,0x962460,0xb0009257,0x4000000,0x1600000,0xb0009519,0x7c00100,0x220400,0xb0009519,0x7c00100,0x250400, +0xb0009a00,0x4000000,0x200000,0xb000b30a,0x2802000,0x962460,0xb000b30a,0x7c00100,0x230400,0xb000c178,0x80000000,0x218960,0xb000c300,0x4000000,0x4200000,0xb000d202, +0x2802000,0x962460,0xb000d476,0x6800100,0x962540,0xb000d476,0x7c00100,0x230400,0xb000e300,0x4000000,0x4e00000,0xb000fda1,0x7c00100,0x1830000,0xb0010eaa,0x2802000, +0x962460,0xb00116b0,0x7c00100,0x230400,0xb0011900,0x4000000,0x4e00000,0xb0011ab2,0x2802100,0x962460,0xb0011ab2,0x2802400,0x962460,0xb0011ab2,0x2806400,0x962460, +0xb0011ab2,0x4000000,0x200000,0xb0011ab2,0x6800100,0x962540,0xb0011ab2,0x7c00100,0x230400,0xb0011b0c,0x7c00100,0x250400,0xb0011cb3,0x2802100,0x962460,0xb0011cb3, +0x2806400,0x962460,0xb0011cb3,0x6800000,0x1329800,0xb0011cb3,0x6800100,0x962540,0xb0011cb3,0x7c00100,0x230400,0xb0011db6,0x2802500,0x962460,0xb0011db6,0x6800000, +0x1329800,0xb0011db6,0x7c00100,0x230400,0xb0011db6,0x7c00500,0x230400,0xb0011e00,0x4000000,0x200000,0xb0011e00,0x4000000,0x1500000,0xb0011fb4,0x2802100,0x962460, +0xb0011fb4,0x6800100,0x962540,0xb0011fb4,0x7c00100,0x230400,0xb0011fb4,0xc000010,0x248000,0xb0012000,0x4000000,0x200000,0xb00121b5,0x4000000,0x200000,0xb00121b5, +0x4000010,0x400000,0xb00121b5,0x7c00100,0x220400,0xb00121b5,0x7c00100,0x250400,0xb00121b5,0xc000010,0x448000,0xb00122b8,0x4000000,0x200000,0xb00122b8,0x7c00100, +0x230400,0xb00123b7,0x2802400,0x962460,0xb00123b7,0x4000000,0x200000,0xb00123b7,0x7c00100,0x230400,0xb00123b7,0xc000010,0x248000,0xb00a4005,0x7c00100,0xe30400, +0xb00a4711,0x7c40300,0xe30000,0xb00acf00,0x4000000,0x34e00000,0xb00b0500,0x4000000,0x34e00000,0xb00b0500,0x4000000,0x3ce00000,0xb00b0500,0x4000000,0xb6800000,0xb00b109a, +0x7c00300,0xe30000,0xb080e47a,0x2802000,0x962460}; #endif /* !U_PLATFORM_IS_DARWIN_BASED */ #if !U_PLATFORM_IS_DARWIN_BASED -static const int32_t countPropsVectors=6375; +static const int32_t countPropsVectors=6639; #else /* !U_PLATFORM_IS_DARWIN_BASED */ -static const int32_t countPropsVectors=6435; +static const int32_t countPropsVectors=6693; #endif /* !U_PLATFORM_IS_DARWIN_BASED */ static const int32_t propsVectorsColumns=3; -static const uint16_t scriptExtensions[198]={ +static const uint16_t scriptExtensions[234]={ 0x800e,0x8019,8,0x8059,8,2,8,0x8038,8,6,8,0x8019,3,0x800c,2,0x22, -0x8025,2,0xe,2,0x22,0x54,0x79,0x7b,0x80a7,2,0x8022,2,0x8025,2,0x1b,4, -0xa,0xf,0x10,0x15,0x19,0x1a,0x1f,0x23,0x24,0x89,0x8097,4,0xa,0xf,0x10,0x15, -0x19,0x1a,0x1f,0x23,0x24,0x8089,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24, -0x3a,0x89,0x91,0x99,0x9e,0x80a0,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24, -0x30,0x3a,0x89,0x91,0x99,0x9e,0x80a0,0xa,0x78,0x80a0,0xa,0x57,4,0x3a,0x8076,4, -0x5c,0x10,0x80a4,0x10,0x61,0xf,0x809d,0xf,0x65,0x23,0x8089,0x23,0x69,0x1c,0x34,0x8076, -0x1c,0x6d,0xc,0x8019,0x2a,0x2b,0x2c,0x802d,0x1b,0x805a,0x800a,0xa,0x8089,0xa,0x8097,0xa, -0x15,0x1a,0x23,0x8024,0xa,0x8015,0x8004,0xa,0x19,0x8089,5,0x11,0x12,0x14,0x16,0x8029, -5,0x11,0x12,0x14,0x8016,0x8011,5,0x8011,0x11,0x14,0x8016,0xa,0xf,0x10,0x15,0x78, -0x91,0x99,0x9e,0xa0,0x80a3,0xa,0xf,0x10,0x78,0x91,0x99,0x9e,0xa0,0x80a3,4,0x800a, -0xa,0xae,0xa,0x8023,0xa,0xb2,0x19,0x1c,0x804f,0x37,0x804e,0x2f,0x31,0x8053,0x2f,0x8031, -2,0x8007,0x89,0x69,0x8087,0}; +0x25,0x80b6,2,0x22,0x8025,2,0x12,2,0x22,0x54,0x79,0x7b,0xa7,0xb6,0x80b7,2, +0x8022,2,0x8025,2,0x21,2,0x80b6,2,0x25,4,0xa,0xf,0x10,0x15,0x19,0x1a, +0x1f,0x23,0x24,0x89,0x97,0x809e,4,0xa,0xf,0x10,0x15,0x19,0x1a,0x1f,0x23,0x24, +0x89,0x809e,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x3a,0x89,0x91,0x99, +0x9e,0xa0,0xb2,0x80b3,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x30,0x3a, +0x89,0x91,0x99,0x9e,0xa0,0xb2,0x80b3,0xa,0x78,0xa0,0x80b2,0xa,0x67,4,0x3a,0x8076, +4,0x6d,0x10,0x80a4,0x10,0x72,0xf,0x809d,0xf,0x76,0x23,0x8089,0x23,0x7a,0x1c,0x34, +0x8076,0x1c,0x7e,0xc,0x8019,0x2a,0x2b,0x2c,0x802d,0x1b,0x805a,0x800a,4,0xa,0x15,0x8089, +0xa,0x8089,4,0x800a,0xa,0x8097,0xa,0x15,0x1a,0x1f,0x23,0x8024,0x8004,0xa,0x19,0x8089, +5,0x11,0x12,0x14,0x16,0x8029,5,0x11,0x12,0x14,0x8016,0x8011,5,0x8011,0x11,0x14, +0x8016,0xa,0xf,0x10,0x78,0x91,0x99,0x9d,0x9e,0xa0,0xa3,0x80b2,0xa,0xf,0x10,0x15, +0x1a,0x78,0x91,0x99,0x9d,0x9e,0xa0,0xa3,0x80b2,0xa,0xf,0x10,0x15,0x78,0x91,0x99, +0x9d,0x9e,0xa0,0xa3,0x80b2,0xa,0x92,0xa,0x8023,0xa,0xd7,0x19,0x1c,0x804f,0x37,0x804e, +0x2f,0x31,0x8053,0x2f,0x8031,2,0x8007,0x89,0x7a,0x8087}; #if !U_PLATFORM_IS_DARWIN_BASED -static const int32_t indexes[UPROPS_INDEX_COUNT]={0x2962,0x2962,0x2962,0x2962,0x6280,3,0x7b67,0x7bca,0x7bca,0x7bca,0xb18b1,0x2a75631,0,0,0,0}; +static const int32_t indexes[UPROPS_INDEX_COUNT]={0x29fa,0x29fa,0x29fa,0x29fa,0x649c,3,0x7e8b,0x7f00,0x7f00,0x7f00,0xb23b8,0x2a75a31,0,0,0,0}; #else /* !U_PLATFORM_IS_DARWIN_BASED */ -static const int32_t indexes[UPROPS_INDEX_COUNT]={0x29a4,0x29a4,0x29a4,0x29a4,0x6324,3,0x7c47,0x7caa,0x7caa,0x7caa,0xb18b1,0x2a75631,0,0,0,0}; +static const int32_t indexes[UPROPS_INDEX_COUNT]={0x2a3c,0x2a3c,0x2a3c,0x2a3c,0x6540,3,0x7f65,0x7fda,0x7fda,0x7fda,0xb23b8,0x2a75a31,0,0,0,0}; #endif /* !U_PLATFORM_IS_DARWIN_BASED */ #endif // INCLUDED_FROM_UCHAR_C diff --git a/icuSources/common/ucharstriebuilder.cpp b/icuSources/common/ucharstriebuilder.cpp index 694648d0..049997a2 100644 --- a/icuSources/common/ucharstriebuilder.cpp +++ b/icuSources/common/ucharstriebuilder.cpp @@ -287,7 +287,7 @@ UCharsTrieBuilder::indexOfElementWithNextUnit(int32_t i, int32_t unitIndex, UCha UCharsTrieBuilder::UCTLinearMatchNode::UCTLinearMatchNode(const UChar *units, int32_t len, Node *nextNode) : LinearMatchNode(len, nextNode), s(units) { - hash=hash*37+ustr_hashUCharsN(units, len); + hash=hash*37u+ustr_hashUCharsN(units, len); } UBool diff --git a/icuSources/common/ucln_cmn.h b/icuSources/common/ucln_cmn.h index a6ecfd54..83aa1676 100644 --- a/icuSources/common/ucln_cmn.h +++ b/icuSources/common/ucln_cmn.h @@ -33,9 +33,11 @@ Please keep the order of enums declared in same order as the cleanup functions are suppose to be called. */ typedef enum ECleanupCommonType { UCLN_COMMON_START = -1, + UCLN_COMMON_NUMPARSE_UNISETS, UCLN_COMMON_USPREP, UCLN_COMMON_BREAKITERATOR, - UCLN_COMMON_BREAKITERATOR_DICT, + UCLN_COMMON_RBBI, + UCLN_COMMON_RBBI57, UCLN_COMMON_SERVICE, UCLN_COMMON_LOCALE_KEY_TYPE, UCLN_COMMON_LOCALE, diff --git a/icuSources/common/ucmndata.cpp b/icuSources/common/ucmndata.cpp index 251c7ba1..ba2310bb 100644 --- a/icuSources/common/ucmndata.cpp +++ b/icuSources/common/ucmndata.cpp @@ -77,7 +77,11 @@ typedef struct { typedef struct { uint32_t count; uint32_t reserved; - PointerTOCEntry entry[2]; /* Actual size is from count. */ + /** + * Variable-length array declared with length 1 to disable bounds checkers. + * The actual array length is in the count field. + */ + PointerTOCEntry entry[1]; } PointerTOC; diff --git a/icuSources/common/ucmndata.h b/icuSources/common/ucmndata.h index cc126d53..c3eba9f4 100644 --- a/icuSources/common/ucmndata.h +++ b/icuSources/common/ucmndata.h @@ -52,7 +52,11 @@ typedef struct { typedef struct { uint32_t count; - UDataOffsetTOCEntry entry[2]; /* Actual size of array is from count. */ + /** + * Variable-length array declared with length 1 to disable bounds checkers. + * The actual array length is in the count field. + */ + UDataOffsetTOCEntry entry[1]; } UDataOffsetTOC; /** diff --git a/icuSources/common/ucnv2022.cpp b/icuSources/common/ucnv2022.cpp index f0d0946c..2ef5db97 100644 --- a/icuSources/common/ucnv2022.cpp +++ b/icuSources/common/ucnv2022.cpp @@ -3512,14 +3512,14 @@ _ISO_2022_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorC case 'k': if(myConverterData->version == 0) { if(length == 1) { - if((UBool)args->converter->fromUnicodeStatus) { + if(args->converter->fromUnicodeStatus) { /* in DBCS mode: switch to SBCS */ args->converter->fromUnicodeStatus = 0; *p++ = UCNV_SI; } *p++ = subchar[0]; } else /* length == 2*/ { - if(!(UBool)args->converter->fromUnicodeStatus) { + if(!args->converter->fromUnicodeStatus) { /* in SBCS mode: switch to DBCS */ args->converter->fromUnicodeStatus = 1; *p++ = UCNV_SO; diff --git a/icuSources/common/ucnv_bld.cpp b/icuSources/common/ucnv_bld.cpp index 14de21bd..75966874 100644 --- a/icuSources/common/ucnv_bld.cpp +++ b/icuSources/common/ucnv_bld.cpp @@ -261,6 +261,11 @@ static UBool U_CALLCONV ucnv_cleanup(void) { return (SHARED_DATA_HASHTABLE == NULL); } +U_CAPI void U_EXPORT2 +ucnv_enableCleanup() { + ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup); +} + static UBool U_CALLCONV isCnvAcceptable(void * /*context*/, const char * /*type*/, const char * /*name*/, @@ -439,7 +444,7 @@ ucnv_shareConverterData(UConverterSharedData * data) SHARED_DATA_HASHTABLE = uhash_openSize(uhash_hashChars, uhash_compareChars, NULL, ucnv_io_countKnownConverters(&err)*UCNV_CACHE_LOAD_FACTOR, &err); - ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup); + ucnv_enableCleanup(); if (U_FAILURE(err)) return; @@ -1099,7 +1104,7 @@ static void U_CALLCONV initAvailableConvertersList(UErrorCode &errCode) { U_ASSERT(gAvailableConverterCount == 0); U_ASSERT(gAvailableConverters == NULL); - ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup); + ucnv_enableCleanup(); UEnumeration *allConvEnum = ucnv_openAllNames(&errCode); int32_t allConverterCount = uenum_count(allConvEnum, &errCode); if (U_FAILURE(errCode)) { @@ -1205,7 +1210,7 @@ internalSetName(const char *name, UErrorCode *status) { // -- Andy gDefaultConverterName = gDefaultConverterNameBuffer; - ucln_common_registerCleanup(UCLN_COMMON_UCNV, ucnv_cleanup); + ucnv_enableCleanup(); umtx_unlock(&cnvCacheMutex); } diff --git a/icuSources/common/ucnv_bld.h b/icuSources/common/ucnv_bld.h index a1e2df67..18b3795e 100644 --- a/icuSources/common/ucnv_bld.h +++ b/icuSources/common/ucnv_bld.h @@ -288,6 +288,9 @@ ucnv_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *outData, UErrorCode *pErrorCode); +U_CAPI void U_EXPORT2 +ucnv_enableCleanup(); + #endif #endif /* _UCNV_BLD */ diff --git a/icuSources/common/ucnv_ct.cpp b/icuSources/common/ucnv_ct.cpp index c9a0ce36..51e31aa4 100644 --- a/icuSources/common/ucnv_ct.cpp +++ b/icuSources/common/ucnv_ct.cpp @@ -315,6 +315,7 @@ _CompoundTextClose(UConverter *converter) { } uprv_free(converter->extraInfo); + converter->extraInfo = NULL; } } @@ -519,7 +520,7 @@ UConverter_toUnicode_CompoundText_OFFSETS(UConverterToUnicodeArgs *args, currentState = tmpState; } - sourceOffset = uprv_strlen((char*)escSeqCompoundText[currentState]) - args->converter->toULength; + sourceOffset = static_cast(uprv_strlen((char*)escSeqCompoundText[currentState]) - args->converter->toULength); mySource += sourceOffset; diff --git a/icuSources/common/ucnv_err.cpp b/icuSources/common/ucnv_err.cpp index 31bb2ac0..6b738fac 100644 --- a/icuSources/common/ucnv_err.cpp +++ b/icuSources/common/ucnv_err.cpp @@ -60,11 +60,12 @@ * To avoid dependency on other code, this list is hard coded here. * When an ignorable code point is found and is unmappable, the default callbacks * will ignore them. - * For a list of the default ignorable code points, use this link: http://unicode.org/cldr/utility/list-unicodeset.jsp?a=[%3ADI%3A]&g= + * For a list of the default ignorable code points, use this link: + * https://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5B%3ADI%3A%5D&abb=on&g=&i= * * This list should be sync with the one in CharsetCallback.java */ -#define IS_DEFAULT_IGNORABLE_CODE_POINT(c) (\ +#define IS_DEFAULT_IGNORABLE_CODE_POINT(c) ( \ (c == 0x00AD) || \ (c == 0x034F) || \ (c == 0x061C) || \ @@ -74,26 +75,15 @@ (0x180B <= c && c <= 0x180E) || \ (0x200B <= c && c <= 0x200F) || \ (0x202A <= c && c <= 0x202E) || \ - (c == 0x2060) || \ - (0x2066 <= c && c <= 0x2069) || \ - (0x2061 <= c && c <= 0x2064) || \ - (0x206A <= c && c <= 0x206F) || \ + (0x2060 <= c && c <= 0x206F) || \ (c == 0x3164) || \ - (0x0FE00 <= c && c <= 0x0FE0F) || \ - (c == 0x0FEFF) || \ - (c == 0x0FFA0) || \ - (0x01BCA0 <= c && c <= 0x01BCA3) || \ - (0x01D173 <= c && c <= 0x01D17A) || \ - (c == 0x0E0001) || \ - (0x0E0020 <= c && c <= 0x0E007F) || \ - (0x0E0100 <= c && c <= 0x0E01EF) || \ - (c == 0x2065) || \ - (0x0FFF0 <= c && c <= 0x0FFF8) || \ - (c == 0x0E0000) || \ - (0x0E0002 <= c && c <= 0x0E001F) || \ - (0x0E0080 <= c && c <= 0x0E00FF) || \ - (0x0E01F0 <= c && c <= 0x0E0FFF) \ - ) + (0xFE00 <= c && c <= 0xFE0F) || \ + (c == 0xFEFF) || \ + (c == 0xFFA0) || \ + (0xFFF0 <= c && c <= 0xFFF8) || \ + (0x1BCA0 <= c && c <= 0x1BCA3) || \ + (0x1D173 <= c && c <= 0x1D17A) || \ + (0xE0000 <= c && c <= 0xE0FFF)) /*Function Pointer STOPS at the ILLEGAL_SEQUENCE */ diff --git a/icuSources/common/ucnv_lmb.cpp b/icuSources/common/ucnv_lmb.cpp index ec6dc66b..1ec56f7a 100644 --- a/icuSources/common/ucnv_lmb.cpp +++ b/icuSources/common/ucnv_lmb.cpp @@ -966,26 +966,26 @@ _LMBCSFromUnicode(UConverterFromUnicodeArgs* args, if(extraInfo->localeConverterIndex < ULMBCS_DOUBLEOPTGROUP_START) { - bytes_written = LMBCSConversionWorker (extraInfo, + bytes_written = (int32_t)LMBCSConversionWorker (extraInfo, ULMBCS_GRP_L1, pLMBCS, &uniChar, &lastConverterIndex, groups_tried); if(!bytes_written) { - bytes_written = LMBCSConversionWorker (extraInfo, + bytes_written = (int32_t)LMBCSConversionWorker (extraInfo, ULMBCS_GRP_EXCEPT, pLMBCS, &uniChar, &lastConverterIndex, groups_tried); } if(!bytes_written) { - bytes_written = LMBCSConversionWorker (extraInfo, + bytes_written = (int32_t)LMBCSConversionWorker (extraInfo, extraInfo->localeConverterIndex, pLMBCS, &uniChar, &lastConverterIndex, groups_tried); } } else { - bytes_written = LMBCSConversionWorker (extraInfo, + bytes_written = (int32_t)LMBCSConversionWorker (extraInfo, extraInfo->localeConverterIndex, pLMBCS, &uniChar, &lastConverterIndex, groups_tried); } diff --git a/icuSources/common/ucnv_u16.cpp b/icuSources/common/ucnv_u16.cpp index 91291c00..28f2727e 100644 --- a/icuSources/common/ucnv_u16.cpp +++ b/icuSources/common/ucnv_u16.cpp @@ -1323,9 +1323,17 @@ _UTF16GetName(const UConverter *cnv) { U_CDECL_END extern const UConverterSharedData _UTF16Data; -#define IS_UTF16BE(cnv) ((cnv)->sharedData==&_UTF16BEData) -#define IS_UTF16LE(cnv) ((cnv)->sharedData==&_UTF16LEData) -#define IS_UTF16(cnv) ((cnv)->sharedData==&_UTF16Data || (cnv)->sharedData==&_UTF16v2Data) +static inline bool IS_UTF16BE(const UConverter *cnv) { + return ((cnv)->sharedData == &_UTF16BEData); +} + +static inline bool IS_UTF16LE(const UConverter *cnv) { + return ((cnv)->sharedData == &_UTF16LEData); +} + +static inline bool IS_UTF16(const UConverter *cnv) { + return ((cnv)->sharedData==&_UTF16Data) || ((cnv)->sharedData == &_UTF16v2Data); +} U_CDECL_BEGIN static void U_CALLCONV diff --git a/icuSources/common/ucnv_u32.cpp b/icuSources/common/ucnv_u32.cpp index e1b755ab..5777117a 100644 --- a/icuSources/common/ucnv_u32.cpp +++ b/icuSources/common/ucnv_u32.cpp @@ -55,7 +55,7 @@ T_UConverter_toUnicode_UTF32_BE(UConverterToUnicodeArgs * args, uint32_t ch, i; /* Restore state of current sequence */ - if (args->converter->toUnicodeStatus && myTarget < targetLimit) { + if (args->converter->toULength > 0 && myTarget < targetLimit) { i = args->converter->toULength; /* restore # of bytes consumed */ args->converter->toULength = 0; @@ -136,7 +136,7 @@ T_UConverter_toUnicode_UTF32_BE_OFFSET_LOGIC(UConverterToUnicodeArgs * args, int32_t offsetNum = 0; /* Restore state of current sequence */ - if (args->converter->toUnicodeStatus && myTarget < targetLimit) { + if (args->converter->toULength > 0 && myTarget < targetLimit) { i = args->converter->toULength; /* restore # of bytes consumed */ args->converter->toULength = 0; @@ -517,7 +517,7 @@ T_UConverter_toUnicode_UTF32_LE(UConverterToUnicodeArgs * args, uint32_t ch, i; /* Restore state of current sequence */ - if (args->converter->toUnicodeStatus && myTarget < targetLimit) + if (args->converter->toULength > 0 && myTarget < targetLimit) { i = args->converter->toULength; /* restore # of bytes consumed */ args->converter->toULength = 0; @@ -604,7 +604,7 @@ T_UConverter_toUnicode_UTF32_LE_OFFSET_LOGIC(UConverterToUnicodeArgs * args, int32_t offsetNum = 0; /* Restore state of current sequence */ - if (args->converter->toUnicodeStatus && myTarget < targetLimit) + if (args->converter->toULength > 0 && myTarget < targetLimit) { i = args->converter->toULength; /* restore # of bytes consumed */ args->converter->toULength = 0; diff --git a/icuSources/common/ucnv_u8.cpp b/icuSources/common/ucnv_u8.cpp index 4419381f..7089d940 100644 --- a/icuSources/common/ucnv_u8.cpp +++ b/icuSources/common/ucnv_u8.cpp @@ -28,9 +28,11 @@ #include "unicode/utf.h" #include "unicode/utf8.h" #include "unicode/utf16.h" +#include "uassert.h" #include "ucnv_bld.h" #include "ucnv_cnv.h" #include "cmemory.h" +#include "ustr_imp.h" /* Prototypes --------------------------------------------------------------- */ @@ -44,51 +46,13 @@ U_CFUNC void ucnv_fromUnicode_UTF8_OFFSETS_LOGIC(UConverterFromUnicodeArgs *args /* UTF-8 -------------------------------------------------------------------- */ -/* UTF-8 Conversion DATA - * for more information see Unicode Standard 2.0, Transformation Formats Appendix A-9 - */ -/*static const uint32_t REPLACEMENT_CHARACTER = 0x0000FFFD;*/ #define MAXIMUM_UCS2 0x0000FFFF -#define MAXIMUM_UTF 0x0010FFFF -#define MAXIMUM_UCS4 0x7FFFFFFF -#define HALF_SHIFT 10 -#define HALF_BASE 0x0010000 -#define HALF_MASK 0x3FF -#define SURROGATE_HIGH_START 0xD800 -#define SURROGATE_HIGH_END 0xDBFF -#define SURROGATE_LOW_START 0xDC00 -#define SURROGATE_LOW_END 0xDFFF - -/* -SURROGATE_LOW_START + HALF_BASE */ -#define SURROGATE_LOW_BASE 9216 - -static const uint32_t offsetsFromUTF8[7] = {0, - (uint32_t) 0x00000000, (uint32_t) 0x00003080, (uint32_t) 0x000E2080, - (uint32_t) 0x03C82080, (uint32_t) 0xFA082080, (uint32_t) 0x82082080 -}; -/* END OF UTF-8 Conversion DATA */ - -static const int8_t bytesFromUTF8[256] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 0, 0 +static const uint32_t offsetsFromUTF8[5] = {0, + (uint32_t) 0x00000000, (uint32_t) 0x00003080, (uint32_t) 0x000E2080, + (uint32_t) 0x03C82080 }; -/* - * Starting with Unicode 3.0.1: - * UTF-8 byte sequences of length N _must_ encode code points of or above utf8_minChar32[N]; - * byte sequences with more than 4 bytes are illegal in UTF-8, - * which is tested with impossible values for them - */ -static const uint32_t -utf8_minChar32[7]={ 0, 0, 0x80, 0x800, 0x10000, 0xffffffff, 0xffffffff }; - static UBool hasCESU8Data(const UConverter *cnv) { #if UCONFIG_ONLY_HTML_CONVERSION @@ -112,7 +76,7 @@ static void U_CALLCONV ucnv_toUnicode_UTF8 (UConverterToUnicodeArgs * args, int32_t i, inBytes; /* Restore size of current sequence */ - if (cnv->toUnicodeStatus && myTarget < targetLimit) + if (cnv->toULength > 0 && myTarget < targetLimit) { inBytes = cnv->mode; /* restore # of bytes to consume */ i = cnv->toULength; /* restore # of bytes consumed */ @@ -127,7 +91,7 @@ static void U_CALLCONV ucnv_toUnicode_UTF8 (UConverterToUnicodeArgs * args, while (mySource < sourceLimit && myTarget < targetLimit) { ch = *(mySource++); - if (ch < 0x80) /* Simple case */ + if (U8_IS_SINGLE(ch)) /* Simple case */ { *(myTarget++) = (UChar) ch; } @@ -135,7 +99,7 @@ static void U_CALLCONV ucnv_toUnicode_UTF8 (UConverterToUnicodeArgs * args, { /* store the first char */ toUBytes[0] = (char)ch; - inBytes = bytesFromUTF8[ch]; /* lookup current sequence length */ + inBytes = U8_COUNT_BYTES_NON_ASCII(ch); /* lookup current sequence length */ i = 1; morebytes: @@ -144,7 +108,8 @@ morebytes: if (mySource < sourceLimit) { toUBytes[i] = (char) (ch2 = *mySource); - if (!U8_IS_TRAIL(ch2)) + if (!icu::UTF8::isValidTrail(ch, ch2, i, inBytes) && + !(isCESU8 && i == 1 && ch == 0xed && U8_IS_TRAIL(ch2))) { break; /* i < inBytes */ } @@ -162,24 +127,12 @@ morebytes: } } - /* Remove the accumulated high bits */ - ch -= offsetsFromUTF8[inBytes]; - - /* - * Legal UTF-8 byte sequences in Unicode 3.0.1 and up: - * - use only trail bytes after a lead byte (checked above) - * - use the right number of trail bytes for a given lead byte - * - encode a code point <= U+10ffff - * - use the fewest possible number of bytes for their code points - * - use at most 4 bytes (for i>=5 it is 0x10ffff= utf8_minChar32[i] && - (isCESU8 ? i <= 3 : !U_IS_SURROGATE(ch))) + // In CESU-8, only surrogates, not supplementary code points, are encoded directly. + if (i == inBytes && (!isCESU8 || i <= 3)) { + /* Remove the accumulated high bits */ + ch -= offsetsFromUTF8[inBytes]; + /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ if (ch <= MAXIMUM_UCS2) { @@ -189,9 +142,8 @@ morebytes: else { /* write out the surrogates */ - ch -= HALF_BASE; - *(myTarget++) = (UChar) ((ch >> HALF_SHIFT) + SURROGATE_HIGH_START); - ch = (ch & HALF_MASK) + SURROGATE_LOW_START; + *(myTarget++) = U16_LEAD(ch); + ch = U16_TRAIL(ch); if (myTarget < targetLimit) { *(myTarget++) = (UChar)ch; @@ -242,7 +194,7 @@ static void U_CALLCONV ucnv_toUnicode_UTF8_OFFSETS_LOGIC (UConverterToUnicodeAr int32_t i, inBytes; /* Restore size of current sequence */ - if (cnv->toUnicodeStatus && myTarget < targetLimit) + if (cnv->toULength > 0 && myTarget < targetLimit) { inBytes = cnv->mode; /* restore # of bytes to consume */ i = cnv->toULength; /* restore # of bytes consumed */ @@ -256,7 +208,7 @@ static void U_CALLCONV ucnv_toUnicode_UTF8_OFFSETS_LOGIC (UConverterToUnicodeAr while (mySource < sourceLimit && myTarget < targetLimit) { ch = *(mySource++); - if (ch < 0x80) /* Simple case */ + if (U8_IS_SINGLE(ch)) /* Simple case */ { *(myTarget++) = (UChar) ch; *(myOffsets++) = offsetNum++; @@ -264,7 +216,7 @@ static void U_CALLCONV ucnv_toUnicode_UTF8_OFFSETS_LOGIC (UConverterToUnicodeAr else { toUBytes[0] = (char)ch; - inBytes = bytesFromUTF8[ch]; + inBytes = U8_COUNT_BYTES_NON_ASCII(ch); i = 1; morebytes: @@ -273,7 +225,8 @@ morebytes: if (mySource < sourceLimit) { toUBytes[i] = (char) (ch2 = *mySource); - if (!U8_IS_TRAIL(ch2)) + if (!icu::UTF8::isValidTrail(ch, ch2, i, inBytes) && + !(isCESU8 && i == 1 && ch == 0xed && U8_IS_TRAIL(ch2))) { break; /* i < inBytes */ } @@ -290,24 +243,12 @@ morebytes: } } - /* Remove the accumulated high bits */ - ch -= offsetsFromUTF8[inBytes]; - - /* - * Legal UTF-8 byte sequences in Unicode 3.0.1 and up: - * - use only trail bytes after a lead byte (checked above) - * - use the right number of trail bytes for a given lead byte - * - encode a code point <= U+10ffff - * - use the fewest possible number of bytes for their code points - * - use at most 4 bytes (for i>=5 it is 0x10ffff= utf8_minChar32[i] && - (isCESU8 ? i <= 3 : !U_IS_SURROGATE(ch))) + // In CESU-8, only surrogates, not supplementary code points, are encoded directly. + if (i == inBytes && (!isCESU8 || i <= 3)) { + /* Remove the accumulated high bits */ + ch -= offsetsFromUTF8[inBytes]; + /* Normal valid byte when the loop has not prematurely terminated (i < inBytes) */ if (ch <= MAXIMUM_UCS2) { @@ -318,10 +259,9 @@ morebytes: else { /* write out the surrogates */ - ch -= HALF_BASE; - *(myTarget++) = (UChar) ((ch >> HALF_SHIFT) + SURROGATE_HIGH_START); + *(myTarget++) = U16_LEAD(ch); *(myOffsets++) = offsetNum; - ch = (ch & HALF_MASK) + SURROGATE_LOW_START; + ch = U16_TRAIL(ch); if (myTarget < targetLimit) { *(myTarget++) = (UChar)ch; @@ -616,10 +556,9 @@ static UChar32 U_CALLCONV ucnv_getNextUChar_UTF8(UConverterToUnicodeArgs *args, UConverter *cnv; const uint8_t *sourceInitial; const uint8_t *source; - uint16_t extraBytesToWrite; uint8_t myByte; UChar32 ch; - int8_t i, isLegalSequence; + int8_t i; /* UTF-8 only here, the framework handles CESU-8 to combine surrogate pairs */ @@ -633,14 +572,14 @@ static UChar32 U_CALLCONV ucnv_getNextUChar_UTF8(UConverterToUnicodeArgs *args, } myByte = (uint8_t)*(source++); - if (myByte < 0x80) + if (U8_IS_SINGLE(myByte)) { args->source = (const char *)source; return (UChar32)myByte; } - extraBytesToWrite = (uint16_t)bytesFromUTF8[myByte]; - if (extraBytesToWrite == 0) { + uint16_t countTrailBytes = U8_COUNT_TRAIL_BYTES(myByte); + if (countTrailBytes == 0) { cnv->toUBytes[0] = myByte; cnv->toULength = 1; *err = U_ILLEGAL_CHAR_FOUND; @@ -649,15 +588,17 @@ static UChar32 U_CALLCONV ucnv_getNextUChar_UTF8(UConverterToUnicodeArgs *args, } /*The byte sequence is longer than the buffer area passed*/ - if (((const char *)source + extraBytesToWrite - 1) > args->sourceLimit) + if (((const char *)source + countTrailBytes) > args->sourceLimit) { /* check if all of the remaining bytes are trail bytes */ + uint16_t extraBytesToWrite = countTrailBytes + 1; cnv->toUBytes[0] = myByte; i = 1; *err = U_TRUNCATED_CHAR_FOUND; while(source < (const uint8_t *)args->sourceLimit) { - if(U8_IS_TRAIL(myByte = *source)) { - cnv->toUBytes[i++] = myByte; + uint8_t b = *source; + if(icu::UTF8::isValidTrail(myByte, b, i, extraBytesToWrite)) { + cnv->toUBytes[i++] = b; ++source; } else { /* error even before we run out of input */ @@ -670,81 +611,28 @@ static UChar32 U_CALLCONV ucnv_getNextUChar_UTF8(UConverterToUnicodeArgs *args, return 0xffff; } - isLegalSequence = 1; ch = myByte << 6; - switch(extraBytesToWrite) - { - /* note: code falls through cases! (sic)*/ - case 6: - ch += (myByte = *source); - ch <<= 6; - if (!U8_IS_TRAIL(myByte)) - { - isLegalSequence = 0; - break; + if(countTrailBytes == 2) { + uint8_t t1 = *source, t2; + if(U8_IS_VALID_LEAD3_AND_T1(myByte, t1) && U8_IS_TRAIL(t2 = *++source)) { + args->source = (const char *)(source + 1); + return (((ch + t1) << 6) + t2) - offsetsFromUTF8[3]; } - ++source; - U_FALLTHROUGH; - case 5: - ch += (myByte = *source); - ch <<= 6; - if (!U8_IS_TRAIL(myByte)) - { - isLegalSequence = 0; - break; + } else if(countTrailBytes == 1) { + uint8_t t1 = *source; + if(U8_IS_TRAIL(t1)) { + args->source = (const char *)(source + 1); + return (ch + t1) - offsetsFromUTF8[2]; } - ++source; - U_FALLTHROUGH; - case 4: - ch += (myByte = *source); - ch <<= 6; - if (!U8_IS_TRAIL(myByte)) - { - isLegalSequence = 0; - break; + } else { // countTrailBytes == 3 + uint8_t t1 = *source, t2, t3; + if(U8_IS_VALID_LEAD4_AND_T1(myByte, t1) && U8_IS_TRAIL(t2 = *++source) && + U8_IS_TRAIL(t3 = *++source)) { + args->source = (const char *)(source + 1); + return (((((ch + t1) << 6) + t2) << 6) + t3) - offsetsFromUTF8[4]; } - ++source; - U_FALLTHROUGH; - case 3: - ch += (myByte = *source); - ch <<= 6; - if (!U8_IS_TRAIL(myByte)) - { - isLegalSequence = 0; - break; - } - ++source; - U_FALLTHROUGH; - case 2: - ch += (myByte = *source); - if (!U8_IS_TRAIL(myByte)) - { - isLegalSequence = 0; - break; - } - ++source; - }; - ch -= offsetsFromUTF8[extraBytesToWrite]; - args->source = (const char *)source; - - /* - * Legal UTF-8 byte sequences in Unicode 3.0.1 and up: - * - use only trail bytes after a lead byte (checked above) - * - use the right number of trail bytes for a given lead byte - * - encode a code point <= U+10ffff - * - use the fewest possible number of bytes for their code points - * - use at most 4 bytes (for i>=5 it is 0x10ffff= utf8_minChar32[extraBytesToWrite] && - !U_IS_SURROGATE(ch) - ) { - return ch; /* return the code point */ } + args->source = (const char *)source; for(i = 0; sourceInitial < source; ++i) { cnv->toUBytes[i] = *sourceInitial++; @@ -757,14 +645,6 @@ U_CDECL_END /* UTF-8-from-UTF-8 conversion functions ------------------------------------ */ -/* minimum code point values for n-byte UTF-8 sequences, n=0..4 */ -static const UChar32 -utf8_minLegal[5]={ 0, 0, 0x80, 0x800, 0x10000 }; - -/* offsets for n-byte UTF-8 sequences that were calculated with ((lead<<6)+trail)<<6+trail... */ -static const UChar32 -utf8_offsets[7]={ 0, 0, 0x3080, 0xE2080, 0x3C82080 }; - U_CDECL_BEGIN /* "Convert" UTF-8 to UTF-8: Validate and copy. Modified from ucnv_DBCSFromUTF8(). */ static void U_CALLCONV @@ -790,12 +670,13 @@ ucnv_UTF8FromUTF8(UConverterFromUnicodeArgs *pFromUArgs, targetCapacity=(int32_t)(pFromUArgs->targetLimit-pFromUArgs->target); /* get the converter state from the UTF-8 UConverter */ - c=(UChar32)utf8->toUnicodeStatus; - if(c!=0) { + if(utf8->toULength > 0) { toULength=oldToULength=utf8->toULength; toULimit=(int8_t)utf8->mode; + c=(UChar32)utf8->toUnicodeStatus; } else { toULength=oldToULength=toULimit=0; + c = 0; } count=(int32_t)(sourceLimit-source)+oldToULength; @@ -812,41 +693,23 @@ ucnv_UTF8FromUTF8(UConverterFromUnicodeArgs *pFromUArgs, *pErrorCode=U_USING_DEFAULT_WARNING; return; } else { - /* - * Use a single counter for source and target, counting the minimum of - * the source length and the target capacity. - * As a result, the source length is checked only once per multi-byte - * character instead of twice. - * - * Make sure that the last byte sequence is complete, or else - * stop just before it. - * (The longest legal byte sequence has 3 trail bytes.) - * Count oldToULength (number of source bytes from a previous buffer) - * into the source length but reduce the source index by toULimit - * while going back over trail bytes in order to not go back into - * the bytes that will be read for finishing a partial - * sequence from the previous buffer. - * Let the standard converter handle edge cases. - */ - int32_t i; - + // Use a single counter for source and target, counting the minimum of + // the source length and the target capacity. + // Let the standard converter handle edge cases. if(count>targetCapacity) { count=targetCapacity; } - i=0; - while(i<3 && i<(count-toULimit)) { - b=source[count-oldToULength-i-1]; - if(U8_IS_TRAIL(b)) { - ++i; - } else { - if(i0 only once per character. + // If the buffer ends with a truncated sequence, + // then we reduce the count to stop before that, + // and collect the remaining bytes after the conversion loop. + + // Do not go back into the bytes that will be read for finishing a partial + // sequence from the previous buffer. + int32_t length=count-toULimit; + U8_TRUNCATE_IF_INCOMPLETE(source, 0, length); + count=toULimit+length; } if(c!=0) { @@ -859,17 +722,17 @@ ucnv_UTF8FromUTF8(UConverterFromUnicodeArgs *pFromUArgs, /* conversion loop */ while(count>0) { b=*source++; - if((int8_t)b>=0) { + if(U8_IS_SINGLE(b)) { /* convert ASCII */ *target++=b; --count; continue; } else { - if(b>0xe0) { - if( /* handle U+1000..U+D7FF inline */ - (t1=source[0]) >= 0x80 && ((b<0xed && (t1 <= 0xbf)) || - (b==0xed && (t1 <= 0x9f))) && - (t2=source[1]) >= 0x80 && t2 <= 0xbf + if(b>=0xe0) { + if( /* handle U+0800..U+FFFF inline */ + b<0xf0 && + U8_IS_VALID_LEAD3_AND_T1(b, t1=source[0]) && + U8_IS_TRAIL(t2=source[1]) ) { source+=2; *target++=b; @@ -878,10 +741,10 @@ ucnv_UTF8FromUTF8(UConverterFromUnicodeArgs *pFromUArgs, count-=3; continue; } - } else if(b<0xe0) { + } else { if( /* handle U+0080..U+07FF inline */ b>=0xc2 && - (t1=*source) >= 0x80 && t1 <= 0xbf + U8_IS_TRAIL(t1=*source) ) { ++source; *target++=b; @@ -889,30 +752,18 @@ ucnv_UTF8FromUTF8(UConverterFromUnicodeArgs *pFromUArgs, count-=2; continue; } - } else if(b==0xe0) { - if( /* handle U+0800..U+0FFF inline */ - (t1=source[0]) >= 0xa0 && t1 <= 0xbf && - (t2=source[1]) >= 0x80 && t2 <= 0xbf - ) { - source+=2; - *target++=b; - *target++=t1; - *target++=t2; - count-=3; - continue; - } } /* handle "complicated" and error cases, and continuing partial characters */ oldToULength=0; toULength=1; - toULimit=U8_COUNT_TRAIL_BYTES(b)+1; + toULimit=U8_COUNT_BYTES_NON_ASCII(b); c=b; moreBytes: while(toULength=utf8_minLegal[toULength] && - (c<=0xd7ff || 0xe000<=c) /* not a surrogate */ - ) { - /* legal byte sequence for BMP code point */ - } else if( - toULength==toULimit && toULength==4 && - (0x10000<=(c-=utf8_offsets[4]) && c<=0x10ffff) - ) { - /* legal byte sequence for supplementary code point */ - } else { + if(toULength!=toULimit) { /* error handling: illegal UTF-8 byte sequence */ source-=(toULength-oldToULength); while(oldToULength=0); if(U_SUCCESS(*pErrorCode) && sourcetargetLimit) { *pErrorCode=U_BUFFER_OVERFLOW_ERROR; } else { b=*source; - toULimit=U8_COUNT_TRAIL_BYTES(b)+1; + toULimit=U8_COUNT_BYTES(b); if(toULimit>(sourceLimit-source)) { /* collect a truncated byte sequence */ toULength=0; @@ -992,8 +833,7 @@ moreBytes: utf8->toULength=toULength; utf8->mode=toULimit; break; - } else if(!U8_IS_TRAIL(b=*source)) { - /* lead byte in trail byte position */ + } else if(!icu::UTF8::isValidTrail(c, b=*source, toULength, toULimit)) { utf8->toULength=toULength; *pErrorCode=U_ILLEGAL_CHAR_FOUND; break; diff --git a/icuSources/common/ucnvlat1.cpp b/icuSources/common/ucnvlat1.cpp index 8aa5456b..358bc0ca 100644 --- a/icuSources/common/ucnvlat1.cpp +++ b/icuSources/common/ucnvlat1.cpp @@ -23,6 +23,7 @@ #include "unicode/utf8.h" #include "ucnv_bld.h" #include "ucnv_cnv.h" +#include "ustr_imp.h" /* control optimizations according to the platform */ #define LATIN1_UNROLL_FROM_UNICODE 1 @@ -339,7 +340,11 @@ ucnv_Latin1FromUTF8(UConverterFromUnicodeArgs *pFromUArgs, targetCapacity=(int32_t)(pFromUArgs->targetLimit-pFromUArgs->target); /* get the converter state from the UTF-8 UConverter */ - c=(UChar32)utf8->toUnicodeStatus; + if (utf8->toULength > 0) { + c=(UChar32)utf8->toUnicodeStatus; + } else { + c = 0; + } if(c!=0 && source0) { b=*source++; - if((int8_t)b>=0) { + if(U8_IS_SINGLE(b)) { /* convert ASCII */ *target++=(uint8_t)b; --targetCapacity; @@ -409,7 +414,7 @@ ucnv_Latin1FromUTF8(UConverterFromUnicodeArgs *pFromUArgs, if(U_SUCCESS(*pErrorCode) && source<(sourceLimit=(uint8_t *)pToUArgs->sourceLimit)) { utf8->toUnicodeStatus=utf8->toUBytes[0]=b=*source++; utf8->toULength=1; - utf8->mode=U8_COUNT_TRAIL_BYTES(b)+1; + utf8->mode=U8_COUNT_BYTES(b); } /* write back the updated pointers */ @@ -619,7 +624,7 @@ ucnv_ASCIIFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, uint8_t c; - if(pToUArgs->converter->toUnicodeStatus!=0) { + if(pToUArgs->converter->toULength > 0) { /* no handling of partial UTF-8 characters here, fall back to pivoting */ *pErrorCode=U_USING_DEFAULT_WARNING; return; diff --git a/icuSources/common/ucnvmbcs.cpp b/icuSources/common/ucnvmbcs.cpp index 7f37eeee..2d0c8577 100644 --- a/icuSources/common/ucnvmbcs.cpp +++ b/icuSources/common/ucnvmbcs.cpp @@ -59,6 +59,7 @@ #include "cmemory.h" #include "cstring.h" #include "umutex.h" +#include "ustr_imp.h" /* control optimizations according to the platform */ #define MBCS_UNROLL_SINGLE_TO_BMP 1 @@ -5011,13 +5012,9 @@ ucnv_MBCSSingleFromUChar32(UConverterSharedData *sharedData, /* MBCS-from-UTF-8 conversion functions ------------------------------------- */ -/* minimum code point values for n-byte UTF-8 sequences, n=0..4 */ -static const UChar32 -utf8_minLegal[5]={ 0, 0, 0x80, 0x800, 0x10000 }; - /* offsets for n-byte UTF-8 sequences that were calculated with ((lead<<6)+trail)<<6+trail... */ static const UChar32 -utf8_offsets[7]={ 0, 0, 0x3080, 0xE2080, 0x3C82080 }; +utf8_offsets[5]={ 0, 0, 0x3080, 0xE2080, 0x3C82080 }; static void U_CALLCONV ucnv_SBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, @@ -5037,7 +5034,7 @@ ucnv_SBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, uint8_t b, t1, t2; uint32_t asciiRoundtrips; - uint16_t value, minValue; + uint16_t value, minValue = 0; UBool hasSupplementary; /* set up the local pointers */ @@ -5067,36 +5064,36 @@ ucnv_SBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, hasSupplementary=(UBool)(cnv->sharedData->mbcs.unicodeMask&UCNV_HAS_SUPPLEMENTARY); /* get the converter state from the UTF-8 UConverter */ - c=(UChar32)utf8->toUnicodeStatus; - if(c!=0) { + if(utf8->toULength > 0) { toULength=oldToULength=utf8->toULength; toULimit=(int8_t)utf8->mode; + c=(UChar32)utf8->toUnicodeStatus; } else { toULength=oldToULength=toULimit=0; + c = 0; } - /* - * Make sure that the last byte sequence before sourceLimit is complete - * or runs into a lead byte. - * Do not go back into the bytes that will be read for finishing a partial - * sequence from the previous buffer. - * In the conversion loop compare source with sourceLimit only once - * per multi-byte character. - */ + // The conversion loop checks source0) { + uint8_t b1=*(sourceLimit-1); + if(U8_IS_SINGLE(b1)) { + // common ASCII character + } else if(U8_IS_TRAIL(b1) && length>=2) { + uint8_t b2=*(sourceLimit-2); + if(0xe0<=b2 && b2<0xf0 && U8_IS_VALID_LEAD3_AND_T1(b2, b1)) { + // truncated 3-byte sequence + sourceLimit-=2; } - break; + } else if(0xc2<=b1 && b1<0xf0) { + // truncated 2- or 3-byte sequence + --sourceLimit; } } } @@ -5130,7 +5127,7 @@ ucnv_SBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, while(source0) { b=*source++; - if((int8_t)b>=0) { + if(U8_IS_SINGLE(b)) { /* convert ASCII */ if(IS_ASCII_ROUNDTRIP(b, asciiRoundtrips)) { *target++=(uint8_t)b; @@ -5185,7 +5182,7 @@ ucnv_SBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, /* handle "complicated" and error cases, and continuing partial characters */ oldToULength=0; toULength=1; - toULimit=U8_COUNT_TRAIL_BYTES(b)+1; + toULimit=U8_COUNT_BYTES_NON_ASCII(b); c=b; moreBytes: while(toULengthsourceLimit) { b=*source; - if(U8_IS_TRAIL(b)) { + if(icu::UTF8::isValidTrail(c, b, toULength, toULimit)) { ++source; ++toULength; c=(c<<6)+b; @@ -5220,22 +5217,18 @@ moreBytes: } } - if( toULength==toULimit && /* consumed all trail bytes */ - (toULength==3 || toULength==2) && /* BMP */ - (c-=utf8_offsets[toULength])>=utf8_minLegal[toULength] && - (c<=0xd7ff || 0xe000<=c) /* not a surrogate */ - ) { - value=MBCS_SINGLE_RESULT_FROM_U(table, results, c); - } else if( - toULength==toULimit && toULength==4 && - (0x10000<=(c-=utf8_offsets[4]) && c<=0x10ffff) - ) { - /* supplementary code point */ - if(!hasSupplementary) { - /* BMP-only codepages are stored without stage 1 entries for supplementary code points */ - value=0; - } else { + if(toULength==toULimit) { + c-=utf8_offsets[toULength]; + if(toULength<=3) { /* BMP */ value=MBCS_SINGLE_RESULT_FROM_U(table, results, c); + } else { + /* supplementary code point */ + if(!hasSupplementary) { + /* BMP-only codepages are stored without stage 1 entries for supplementary code points */ + value=0; + } else { + value=MBCS_SINGLE_RESULT_FROM_U(table, results, c); + } } } else { /* error handling: illegal UTF-8 byte sequence */ @@ -5310,7 +5303,7 @@ moreBytes: source<(sourceLimit=(uint8_t *)pToUArgs->sourceLimit)) { c=utf8->toUBytes[0]=b=*source++; toULength=1; - toULimit=U8_COUNT_TRAIL_BYTES(b)+1; + toULimit=U8_COUNT_BYTES(b); while(sourcetoUBytes[toULength++]=b=*source++; c=(c<<6)+b; @@ -5344,7 +5337,7 @@ ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, uint32_t stage2Entry; uint32_t asciiRoundtrips; - uint16_t value; + uint16_t value = 0; UBool hasSupplementary; /* set up the local pointers */ @@ -5367,36 +5360,36 @@ ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, hasSupplementary=(UBool)(cnv->sharedData->mbcs.unicodeMask&UCNV_HAS_SUPPLEMENTARY); /* get the converter state from the UTF-8 UConverter */ - c=(UChar32)utf8->toUnicodeStatus; - if(c!=0) { + if(utf8->toULength > 0) { toULength=oldToULength=utf8->toULength; toULimit=(int8_t)utf8->mode; + c=(UChar32)utf8->toUnicodeStatus; } else { toULength=oldToULength=toULimit=0; + c = 0; } - /* - * Make sure that the last byte sequence before sourceLimit is complete - * or runs into a lead byte. - * Do not go back into the bytes that will be read for finishing a partial - * sequence from the previous buffer. - * In the conversion loop compare source with sourceLimit only once - * per multi-byte character. - */ + // The conversion loop checks source0) { + uint8_t b1=*(sourceLimit-1); + if(U8_IS_SINGLE(b1)) { + // common ASCII character + } else if(U8_IS_TRAIL(b1) && length>=2) { + uint8_t b2=*(sourceLimit-2); + if(0xe0<=b2 && b2<0xf0 && U8_IS_VALID_LEAD3_AND_T1(b2, b1)) { + // truncated 3-byte sequence + sourceLimit-=2; } - break; + } else if(0xc2<=b1 && b1<0xf0) { + // truncated 2- or 3-byte sequence + --sourceLimit; } } } @@ -5412,7 +5405,7 @@ ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, while(source0) { b=*source++; - if((int8_t)b>=0) { + if(U8_IS_SINGLE(b)) { /* convert ASCII */ if(IS_ASCII_ROUNDTRIP(b, asciiRoundtrips)) { *target++=b; @@ -5426,13 +5419,13 @@ ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, } } } else { - if(b>0xe0) { - if( /* handle U+1000..U+D7FF inline */ - (((t1=(uint8_t)(source[0]-0x80), b<0xed) && (t1 <= 0x3f)) || - (b==0xed && (t1 <= 0x1f))) && + if(b>=0xe0) { + if( /* handle U+0800..U+D7FF inline */ + b<=0xed && // do not assume maxFastUChar>0xd7ff + U8_IS_VALID_LEAD3_AND_T1(b, t1=source[0]) && (t2=(uint8_t)(source[1]-0x80)) <= 0x3f ) { - c=((b&0xf)<<6)|t1; + c=((b&0xf)<<6)|(t1&0x3f); source+=2; value=DBCS_RESULT_FROM_UTF8(mbcsIndex, results, c, t2); if(value==0) { @@ -5442,7 +5435,7 @@ ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, } else { c=-1; } - } else if(b<0xe0) { + } else { if( /* handle U+0080..U+07FF inline */ b>=0xc2 && (t1=(uint8_t)(*source-0x80)) <= 0x3f @@ -5457,15 +5450,13 @@ ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, } else { c=-1; } - } else { - c=-1; } if(c<0) { /* handle "complicated" and error cases, and continuing partial characters */ oldToULength=0; toULength=1; - toULimit=U8_COUNT_TRAIL_BYTES(b)+1; + toULimit=U8_COUNT_BYTES_NON_ASCII(b); c=b; moreBytes: while(toULengthsourceLimit) { b=*source; - if(U8_IS_TRAIL(b)) { + if(icu::UTF8::isValidTrail(c, b, toULength, toULimit)) { ++source; ++toULength; c=(c<<6)+b; @@ -5500,22 +5491,18 @@ moreBytes: } } - if( toULength==toULimit && /* consumed all trail bytes */ - (toULength==3 || toULength==2) && /* BMP */ - (c-=utf8_offsets[toULength])>=utf8_minLegal[toULength] && - (c<=0xd7ff || 0xe000<=c) /* not a surrogate */ - ) { - stage2Entry=MBCS_STAGE_2_FROM_U(table, c); - } else if( - toULength==toULimit && toULength==4 && - (0x10000<=(c-=utf8_offsets[4]) && c<=0x10ffff) - ) { - /* supplementary code point */ - if(!hasSupplementary) { - /* BMP-only codepages are stored without stage 1 entries for supplementary code points */ - stage2Entry=0; - } else { + if(toULength==toULimit) { + c-=utf8_offsets[toULength]; + if(toULength<=3) { /* BMP */ stage2Entry=MBCS_STAGE_2_FROM_U(table, c); + } else { + /* supplementary code point */ + if(!hasSupplementary) { + /* BMP-only codepages are stored without stage 1 entries for supplementary code points */ + stage2Entry=0; + } else { + stage2Entry=MBCS_STAGE_2_FROM_U(table, c); + } } } else { /* error handling: illegal UTF-8 byte sequence */ @@ -5620,7 +5607,7 @@ unassigned: source<(sourceLimit=(uint8_t *)pToUArgs->sourceLimit)) { c=utf8->toUBytes[0]=b=*source++; toULength=1; - toULimit=U8_COUNT_TRAIL_BYTES(b)+1; + toULimit=U8_COUNT_BYTES(b); while(sourcetoUBytes[toULength++]=b=*source++; c=(c<<6)+b; diff --git a/icuSources/common/ucurr.cpp b/icuSources/common/ucurr.cpp index 885ca3a9..9b2b47ef 100644 --- a/icuSources/common/ucurr.cpp +++ b/icuSources/common/ucurr.cpp @@ -16,20 +16,29 @@ #include "unicode/ures.h" #include "unicode/ustring.h" #include "unicode/parsepos.h" +#include "unicode/uniset.h" +#include "unicode/usetiter.h" +#include "unicode/utf16.h" #include "ustr_imp.h" +#include "charstr.h" #include "cmemory.h" #include "cstring.h" +#include "static_unicode_sets.h" #include "uassert.h" #include "umutex.h" #include "ucln_cmn.h" #include "uenumimp.h" #include "uhash.h" #include "hash.h" +#include "uinvchar.h" #include "uresimp.h" #include "ulist.h" +#include "uresimp.h" #include "ureslocs.h" #include "ulocimp.h" +using namespace icu; + //#define UCURR_DEBUG_EQUIV 1 #ifdef UCURR_DEBUG_EQUIV #include "stdio.h" @@ -60,14 +69,6 @@ static const int32_t POW10[] = { 1, 10, 100, 1000, 10000, 100000, static const int32_t MAX_POW10 = UPRV_LENGTHOF(POW10) - 1; -// Defines equivalent currency symbols. -static const char *EQUIV_CURRENCY_SYMBOLS[][2] = { - {"\\u00a5", "\\uffe5"}, - {"$", "\\ufe69"}, - {"$", "\\uff04"}, - {"\\u20a8", "\\u20b9"}, - {"\\u00a3", "\\u20a4"}}; - #define ISO_CURRENCY_CODE_LENGTH 3 //------------------------------------------------------------ @@ -103,6 +104,7 @@ static const char VAR_DELIM_STR[] = "_"; // Tag for localized display names (symbols) of currencies static const char CURRENCIES[] = "Currencies"; +static const char CURRENCIES_NARROW[] = "Currencies%narrow"; static const char CURRENCYPLURALS[] = "CurrencyPlurals"; static const UChar EUR_STR[] = {0x0045,0x0055,0x0052,0}; @@ -545,93 +547,97 @@ U_CAPI int32_t U_EXPORT2 ucurr_forLocale(const char* locale, UChar* buff, int32_t buffCapacity, - UErrorCode* ec) -{ - int32_t resLen = 0; - const UChar* s = NULL; - if (ec != NULL && U_SUCCESS(*ec)) { - if ((buff && buffCapacity) || !buffCapacity) { - UErrorCode localStatus = U_ZERO_ERROR; - char id[ULOC_FULLNAME_CAPACITY]; - if ((resLen = uloc_getKeywordValue(locale, "currency", id, ULOC_FULLNAME_CAPACITY, &localStatus))) { - // there is a currency keyword. Try to see if it's valid - if(buffCapacity > resLen) { - /* Normalize the currency keyword value to upper case. */ - T_CString_toUpperCase(id); - u_charsToUChars(id, buff, resLen); - } - } else { - // get country or country_variant in `id' - uint32_t variantType = idForLocale(locale, id, sizeof(id), ec); + UErrorCode* ec) { + if (U_FAILURE(*ec)) { return 0; } + if (buffCapacity < 0 || (buff == nullptr && buffCapacity > 0)) { + *ec = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } - if (U_FAILURE(*ec)) { - return 0; - } + char currency[4]; // ISO currency codes are alpha3 codes. + UErrorCode localStatus = U_ZERO_ERROR; + int32_t resLen = uloc_getKeywordValue(locale, "currency", + currency, UPRV_LENGTHOF(currency), &localStatus); + if (U_SUCCESS(localStatus) && resLen == 3 && uprv_isInvariantString(currency, resLen)) { + if (resLen < buffCapacity) { + T_CString_toUpperCase(currency); + u_charsToUChars(currency, buff, resLen); + } + return u_terminateUChars(buff, buffCapacity, resLen, ec); + } + + // get country or country_variant in `id' + char id[ULOC_FULLNAME_CAPACITY]; + uint32_t variantType = idForLocale(locale, id, UPRV_LENGTHOF(id), ec); + if (U_FAILURE(*ec)) { + return 0; + } #if !UCONFIG_NO_SERVICE - const UChar* result = CReg::get(id); - if (result) { - if(buffCapacity > u_strlen(result)) { - u_strcpy(buff, result); - } - return u_strlen(result); - } + const UChar* result = CReg::get(id); + if (result) { + if(buffCapacity > u_strlen(result)) { + u_strcpy(buff, result); + } + resLen = u_strlen(result); + return u_terminateUChars(buff, buffCapacity, resLen, ec); + } #endif - // Remove variants, which is only needed for registration. - char *idDelim = strchr(id, VAR_DELIM); - if (idDelim) { - idDelim[0] = 0; - } + // Remove variants, which is only needed for registration. + char *idDelim = uprv_strchr(id, VAR_DELIM); + if (idDelim) { + idDelim[0] = 0; + } - // Look up the CurrencyMap element in the root bundle. - UResourceBundle *rb = ures_openDirect(U_ICUDATA_CURR, CURRENCY_DATA, &localStatus); - UResourceBundle *cm = ures_getByKey(rb, CURRENCY_MAP, rb, &localStatus); - UResourceBundle *countryArray = ures_getByKey(rb, id, cm, &localStatus); - UResourceBundle *currencyReq = ures_getByIndex(countryArray, 0, NULL, &localStatus); + const UChar* s = NULL; // Currency code from data file. + if (id[0] == 0) { + // No point looking in the data for an empty string. + // This is what we would get. + localStatus = U_MISSING_RESOURCE_ERROR; + } else { + // Look up the CurrencyMap element in the root bundle. + localStatus = U_ZERO_ERROR; + UResourceBundle *rb = ures_openDirect(U_ICUDATA_CURR, CURRENCY_DATA, &localStatus); + UResourceBundle *cm = ures_getByKey(rb, CURRENCY_MAP, rb, &localStatus); + UResourceBundle *countryArray = ures_getByKey(rb, id, cm, &localStatus); + UResourceBundle *currencyReq = ures_getByIndex(countryArray, 0, NULL, &localStatus); + s = ures_getStringByKey(currencyReq, "id", &resLen, &localStatus); + + // Get the second item when PREEURO is requested, and this is a known Euro country. + // If the requested variant is PREEURO, and this isn't a Euro country, + // assume that the country changed over to the Euro in the future. + // This is probably an old version of ICU that hasn't been updated yet. + // The latest currency is probably correct. + if (U_SUCCESS(localStatus)) { + if ((variantType & VARIANT_IS_PREEURO) && u_strcmp(s, EUR_STR) == 0) { + currencyReq = ures_getByIndex(countryArray, 1, currencyReq, &localStatus); s = ures_getStringByKey(currencyReq, "id", &resLen, &localStatus); - - /* - Get the second item when PREEURO is requested, and this is a known Euro country. - If the requested variant is PREEURO, and this isn't a Euro country, assume - that the country changed over to the Euro in the future. This is probably - an old version of ICU that hasn't been updated yet. The latest currency is - probably correct. - */ - if (U_SUCCESS(localStatus)) { - if ((variantType & VARIANT_IS_PREEURO) && u_strcmp(s, EUR_STR) == 0) { - currencyReq = ures_getByIndex(countryArray, 1, currencyReq, &localStatus); - s = ures_getStringByKey(currencyReq, "id", &resLen, &localStatus); - } - else if ((variantType & VARIANT_IS_EURO)) { - s = EUR_STR; - } - } - ures_close(countryArray); - ures_close(currencyReq); - - if ((U_FAILURE(localStatus)) && strchr(id, '_') != 0) - { - // We don't know about it. Check to see if we support the variant. - uloc_getParent(locale, id, sizeof(id), ec); - *ec = U_USING_FALLBACK_WARNING; - return ucurr_forLocale(id, buff, buffCapacity, ec); - } - else if (*ec == U_ZERO_ERROR || localStatus != U_ZERO_ERROR) { - // There is nothing to fallback to. Report the failure/warning if possible. - *ec = localStatus; - } - if (U_SUCCESS(*ec)) { - if(buffCapacity > resLen) { - u_strcpy(buff, s); - } - } + } else if ((variantType & VARIANT_IS_EURO)) { + s = EUR_STR; } - return u_terminateUChars(buff, buffCapacity, resLen, ec); - } else { - *ec = U_ILLEGAL_ARGUMENT_ERROR; } + ures_close(currencyReq); + ures_close(countryArray); } - return resLen; + + if ((U_FAILURE(localStatus)) && strchr(id, '_') != 0) { + // We don't know about it. Check to see if we support the variant. + uloc_getParent(locale, id, UPRV_LENGTHOF(id), ec); + *ec = U_USING_FALLBACK_WARNING; + // TODO: Loop over the shortened id rather than recursing and + // looking again for a currency keyword. + return ucurr_forLocale(id, buff, buffCapacity, ec); + } + if (*ec == U_ZERO_ERROR || localStatus != U_ZERO_ERROR) { + // There is nothing to fallback to. Report the failure/warning if possible. + *ec = localStatus; + } + if (U_SUCCESS(*ec)) { + if(buffCapacity > resLen) { + u_strcpy(buff, s); + } + } + return u_terminateUChars(buff, buffCapacity, resLen, ec); } // end registration @@ -648,7 +654,16 @@ static UBool fallback(char *loc) { return FALSE; } UErrorCode status = U_ZERO_ERROR; - uloc_getParent(loc, loc, (int32_t)uprv_strlen(loc), &status); + if (uprv_strcmp(loc, "en_GB") == 0) { + // HACK: See #13368. We need "en_GB" to fall back to "en_001" instead of "en" + // in order to consume the correct data strings. This hack will be removed + // when proper data sink loading is implemented here. + // NOTE: "001" adds 1 char over "GB". However, both call sites allocate + // arrays with length ULOC_FULLNAME_CAPACITY (plenty of room for en_001). + uprv_strcpy(loc + 3, "001"); + } else { + uloc_getParent(loc, loc, (int32_t)uprv_strlen(loc), &status); + } /* char *i = uprv_strrchr(loc, '_'); if (i == NULL) { @@ -684,7 +699,7 @@ ucurr_getName(const UChar* currency, } int32_t choice = (int32_t) nameStyle; - if (choice < 0 || choice > 1) { + if (choice < 0 || choice > 2) { *ec = U_ILLEGAL_ARGUMENT_ERROR; return 0; } @@ -717,15 +732,19 @@ ucurr_getName(const UChar* currency, const UChar* s = NULL; ec2 = U_ZERO_ERROR; - UResourceBundle* rb = ures_open(U_ICUDATA_CURR, loc, &ec2); - - rb = ures_getByKey(rb, CURRENCIES, rb, &ec2); - - // Fetch resource with multi-level resource inheritance fallback - rb = ures_getByKeyWithFallback(rb, buf, rb, &ec2); - - s = ures_getStringByIndex(rb, choice, len, &ec2); - ures_close(rb); + LocalUResourceBundlePointer rb(ures_open(U_ICUDATA_CURR, loc, &ec2)); + + if (nameStyle == UCURR_NARROW_SYMBOL_NAME) { + CharString key; + key.append(CURRENCIES_NARROW, ec2); + key.append("/", ec2); + key.append(buf, ec2); + s = ures_getStringByKeyWithFallback(rb.getAlias(), key.data(), len, &ec2); + } else { + ures_getByKey(rb.getAlias(), CURRENCIES, rb.getAlias(), &ec2); + ures_getByKeyWithFallback(rb.getAlias(), buf, rb.getAlias(), &ec2); + s = ures_getStringByIndex(rb.getAlias(), choice, len, &ec2); + } // If we've succeeded we're done. Otherwise, try to fallback. // If that fails (because we are already at root) then exit. @@ -1264,17 +1283,28 @@ static void linearSearch(const CurrencyNameStruct* currencyNames, int32_t begin, int32_t end, const UChar* text, int32_t textLen, + int32_t *partialMatchLen, int32_t *maxMatchLen, int32_t* maxMatchIndex) { + int32_t initialPartialMatchLen = *partialMatchLen; for (int32_t index = begin; index <= end; ++index) { int32_t len = currencyNames[index].currencyNameLen; if (len > *maxMatchLen && len <= textLen && uprv_memcmp(currencyNames[index].currencyName, text, len * sizeof(UChar)) == 0) { + *partialMatchLen = MAX(*partialMatchLen, len); *maxMatchIndex = index; *maxMatchLen = len; #ifdef UCURR_DEBUG printf("maxMatchIndex = %d, maxMatchLen = %d\n", *maxMatchIndex, *maxMatchLen); #endif + } else { + // Check for partial matches. + for (int32_t i=initialPartialMatchLen; icurrencyNames; - total_currency_name_count = cacheEntry->totalCurrencyNameCount; - currencySymbols = cacheEntry->currencySymbols; - total_currency_symbol_count = cacheEntry->totalCurrencySymbolCount; ++(cacheEntry->refCount); } umtx_unlock(&gCurrencyCacheMutex); if (found == -1) { collectCurrencyNames(locale, ¤cyNames, &total_currency_name_count, ¤cySymbols, &total_currency_symbol_count, ec); if (U_FAILURE(ec)) { - return; + return NULL; } umtx_lock(&gCurrencyCacheMutex); // check again. @@ -1477,20 +1500,50 @@ uprv_parseCurrency(const char* locale, cacheEntry->totalCurrencySymbolCount = total_currency_symbol_count; cacheEntry->refCount = 2; // one for cache, one for reference currentCacheEntryIndex = (currentCacheEntryIndex + 1) % CURRENCY_NAME_CACHE_NUM; - ucln_common_registerCleanup(UCLN_COMMON_CURRENCY, currency_cache_cleanup); + ucln_common_registerCleanup(UCLN_COMMON_CURRENCY, currency_cleanup); } else { deleteCurrencyNames(currencyNames, total_currency_name_count); deleteCurrencyNames(currencySymbols, total_currency_symbol_count); cacheEntry = currCache[found]; - currencyNames = cacheEntry->currencyNames; - total_currency_name_count = cacheEntry->totalCurrencyNameCount; - currencySymbols = cacheEntry->currencySymbols; - total_currency_symbol_count = cacheEntry->totalCurrencySymbolCount; ++(cacheEntry->refCount); } umtx_unlock(&gCurrencyCacheMutex); } + return cacheEntry; +} + +static void releaseCacheEntry(CurrencyNameCacheEntry* cacheEntry) { + umtx_lock(&gCurrencyCacheMutex); + --(cacheEntry->refCount); + if (cacheEntry->refCount == 0) { // remove + deleteCacheEntry(cacheEntry); + } + umtx_unlock(&gCurrencyCacheMutex); +} + +U_CAPI void +uprv_parseCurrency(const char* locale, + const icu::UnicodeString& text, + icu::ParsePosition& pos, + int8_t type, + int32_t* partialMatchLen, + UChar* result, + UErrorCode& ec) { + U_NAMESPACE_USE + if (U_FAILURE(ec)) { + return; + } + CurrencyNameCacheEntry* cacheEntry = getCacheEntry(locale, ec); + if (U_FAILURE(ec)) { + return; + } + + int32_t total_currency_name_count = cacheEntry->totalCurrencyNameCount; + CurrencyNameStruct* currencyNames = cacheEntry->currencyNames; + int32_t total_currency_symbol_count = cacheEntry->totalCurrencySymbolCount; + CurrencyNameStruct* currencySymbols = cacheEntry->currencySymbols; + int32_t start = pos.getIndex(); UChar inputText[MAX_CURRENCY_NAME_LEN]; @@ -1500,11 +1553,14 @@ uprv_parseCurrency(const char* locale, UErrorCode ec1 = U_ZERO_ERROR; textLen = u_strToUpper(upperText, MAX_CURRENCY_NAME_LEN, inputText, textLen, locale, &ec1); + // Make sure partialMatchLen is initialized + *partialMatchLen = 0; + int32_t max = 0; int32_t matchIndex = -1; // case in-sensitive comparision against currency names searchCurrencyName(currencyNames, total_currency_name_count, - upperText, textLen, &max, &matchIndex); + upperText, textLen, partialMatchLen, &max, &matchIndex); #ifdef UCURR_DEBUG printf("search in names, max = %d, matchIndex = %d\n", max, matchIndex); @@ -1515,7 +1571,8 @@ uprv_parseCurrency(const char* locale, if (type != UCURR_LONG_NAME) { // not name only // case sensitive comparison against currency symbols and ISO code. searchCurrencyName(currencySymbols, total_currency_symbol_count, - inputText, textLen, + inputText, textLen, + partialMatchLen, &maxInSymbol, &matchIndexInSymbol); } @@ -1532,15 +1589,38 @@ uprv_parseCurrency(const char* locale, } else if (maxInSymbol >= max && matchIndexInSymbol != -1) { u_charsToUChars(currencySymbols[matchIndexInSymbol].IsoCode, result, 4); pos.setIndex(start + maxInSymbol); - } + } // decrease reference count - umtx_lock(&gCurrencyCacheMutex); - --(cacheEntry->refCount); - if (cacheEntry->refCount == 0) { // remove - deleteCacheEntry(cacheEntry); + releaseCacheEntry(cacheEntry); +} + +void uprv_currencyLeads(const char* locale, icu::UnicodeSet& result, UErrorCode& ec) { + U_NAMESPACE_USE + if (U_FAILURE(ec)) { + return; } - umtx_unlock(&gCurrencyCacheMutex); + CurrencyNameCacheEntry* cacheEntry = getCacheEntry(locale, ec); + if (U_FAILURE(ec)) { + return; + } + + for (int32_t i=0; itotalCurrencySymbolCount; i++) { + const CurrencyNameStruct& info = cacheEntry->currencySymbols[i]; + UChar32 cp; + U16_GET(info.currencyName, 0, 0, info.currencyNameLen, cp); + result.add(cp); + } + + for (int32_t i=0; itotalCurrencyNameCount; i++) { + const CurrencyNameStruct& info = cacheEntry->currencyNames[i]; + UChar32 cp; + U16_GET(info.currencyName, 0, 0, info.currencyNameLen, cp); + result.add(cp); + } + + // decrease reference count + releaseCacheEntry(cacheEntry); } @@ -1646,7 +1726,7 @@ typedef struct UCurrencyContext { Please keep this list in alphabetical order. You can look at the CLDR supplemental data or ISO-4217 for the meaning of some of these items. -ISO-4217: http://www.iso.org/iso/en/prods-services/popstds/currencycodeslist.html +ISO-4217: https://www.iso.org/iso-4217-currency-codes.html */ static const struct CurrencyList { const char *currency; @@ -1706,7 +1786,8 @@ static const struct CurrencyList { {"BUK", UCURR_COMMON|UCURR_DEPRECATED}, {"BWP", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"BYB", UCURR_COMMON|UCURR_DEPRECATED}, - {"BYR", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BYN", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"BYR", UCURR_COMMON|UCURR_DEPRECATED}, {"BZD", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"CAD", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"CDF", UCURR_COMMON|UCURR_NON_DEPRECATED}, @@ -1716,6 +1797,7 @@ static const struct CurrencyList { {"CLE", UCURR_COMMON|UCURR_DEPRECATED}, {"CLF", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, {"CLP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"CNH", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, {"CNX", UCURR_UNCOMMON|UCURR_DEPRECATED}, {"CNY", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"COP", UCURR_COMMON|UCURR_NON_DEPRECATED}, @@ -1738,7 +1820,7 @@ static const struct CurrencyList { {"ECV", UCURR_UNCOMMON|UCURR_DEPRECATED}, {"EEK", UCURR_COMMON|UCURR_DEPRECATED}, {"EGP", UCURR_COMMON|UCURR_NON_DEPRECATED}, - {"EQE", UCURR_COMMON|UCURR_DEPRECATED}, + {"EQE", UCURR_COMMON|UCURR_DEPRECATED}, // questionable, remove? {"ERN", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"ESA", UCURR_UNCOMMON|UCURR_DEPRECATED}, {"ESB", UCURR_UNCOMMON|UCURR_DEPRECATED}, @@ -1762,7 +1844,7 @@ static const struct CurrencyList { {"GRD", UCURR_COMMON|UCURR_DEPRECATED}, {"GTQ", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"GWE", UCURR_COMMON|UCURR_DEPRECATED}, - {"GWP", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"GWP", UCURR_COMMON|UCURR_DEPRECATED}, {"GYD", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"HKD", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"HNL", UCURR_COMMON|UCURR_NON_DEPRECATED}, @@ -1800,13 +1882,13 @@ static const struct CurrencyList { {"LKR", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"LRD", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"LSL", UCURR_COMMON|UCURR_NON_DEPRECATED}, - {"LSM", UCURR_COMMON|UCURR_DEPRECATED}, - {"LTL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"LSM", UCURR_COMMON|UCURR_DEPRECATED}, // questionable, remove? + {"LTL", UCURR_COMMON|UCURR_DEPRECATED}, {"LTT", UCURR_COMMON|UCURR_DEPRECATED}, {"LUC", UCURR_UNCOMMON|UCURR_DEPRECATED}, {"LUF", UCURR_COMMON|UCURR_DEPRECATED}, {"LUL", UCURR_UNCOMMON|UCURR_DEPRECATED}, - {"LVL", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"LVL", UCURR_COMMON|UCURR_DEPRECATED}, {"LVR", UCURR_COMMON|UCURR_DEPRECATED}, {"LYD", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"MAD", UCURR_COMMON|UCURR_NON_DEPRECATED}, @@ -1822,18 +1904,19 @@ static const struct CurrencyList { {"MMK", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"MNT", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"MOP", UCURR_COMMON|UCURR_NON_DEPRECATED}, - {"MRO", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MRO", UCURR_COMMON|UCURR_DEPRECATED}, + {"MRU", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"MTL", UCURR_COMMON|UCURR_DEPRECATED}, {"MTP", UCURR_COMMON|UCURR_DEPRECATED}, {"MUR", UCURR_COMMON|UCURR_NON_DEPRECATED}, - {"MVP", UCURR_COMMON|UCURR_DEPRECATED}, + {"MVP", UCURR_COMMON|UCURR_DEPRECATED}, // questionable, remove? {"MVR", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"MWK", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"MXN", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"MXP", UCURR_COMMON|UCURR_DEPRECATED}, {"MXV", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, {"MYR", UCURR_COMMON|UCURR_NON_DEPRECATED}, - {"MZE", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"MZE", UCURR_COMMON|UCURR_DEPRECATED}, {"MZM", UCURR_COMMON|UCURR_DEPRECATED}, {"MZN", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"NAD", UCURR_COMMON|UCURR_NON_DEPRECATED}, @@ -1874,15 +1957,16 @@ static const struct CurrencyList { {"SGD", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"SHP", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"SIT", UCURR_COMMON|UCURR_DEPRECATED}, - {"SKK", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SKK", UCURR_COMMON|UCURR_DEPRECATED}, {"SLL", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"SOS", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"SRD", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"SRG", UCURR_COMMON|UCURR_DEPRECATED}, {"SSP", UCURR_COMMON|UCURR_NON_DEPRECATED}, - {"STD", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"STD", UCURR_COMMON|UCURR_DEPRECATED}, + {"STN", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"SUR", UCURR_COMMON|UCURR_DEPRECATED}, - {"SVC", UCURR_COMMON|UCURR_NON_DEPRECATED}, + {"SVC", UCURR_COMMON|UCURR_DEPRECATED}, {"SYP", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"SZL", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"THB", UCURR_COMMON|UCURR_NON_DEPRECATED}, @@ -1931,7 +2015,7 @@ static const struct CurrencyList { {"XPD", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, {"XPF", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"XPT", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, - {"XRE", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"XRE", UCURR_UNCOMMON|UCURR_DEPRECATED}, {"XSU", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, {"XTS", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, {"XUA", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, @@ -1942,15 +2026,15 @@ static const struct CurrencyList { {"YUM", UCURR_COMMON|UCURR_DEPRECATED}, {"YUN", UCURR_COMMON|UCURR_DEPRECATED}, {"YUR", UCURR_COMMON|UCURR_DEPRECATED}, - {"ZAL", UCURR_UNCOMMON|UCURR_NON_DEPRECATED}, + {"ZAL", UCURR_UNCOMMON|UCURR_DEPRECATED}, {"ZAR", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"ZMK", UCURR_COMMON|UCURR_DEPRECATED}, {"ZMW", UCURR_COMMON|UCURR_NON_DEPRECATED}, {"ZRN", UCURR_COMMON|UCURR_DEPRECATED}, {"ZRZ", UCURR_COMMON|UCURR_DEPRECATED}, + {"ZWD", UCURR_COMMON|UCURR_DEPRECATED}, {"ZWL", UCURR_COMMON|UCURR_DEPRECATED}, {"ZWR", UCURR_COMMON|UCURR_DEPRECATED}, - {"ZWD", UCURR_COMMON|UCURR_DEPRECATED}, { NULL, 0 } // Leave here to denote the end of the list. }; @@ -2121,16 +2205,20 @@ static void U_CALLCONV initIsoCodes(UErrorCode &status) { } static void populateCurrSymbolsEquiv(icu::Hashtable *hash, UErrorCode &status) { - if (U_FAILURE(status)) { - return; - } - int32_t length = UPRV_LENGTHOF(EQUIV_CURRENCY_SYMBOLS); - for (int32_t i = 0; i < length; ++i) { - icu::UnicodeString lhs(EQUIV_CURRENCY_SYMBOLS[i][0], -1, US_INV); - icu::UnicodeString rhs(EQUIV_CURRENCY_SYMBOLS[i][1], -1, US_INV); - makeEquivalent(lhs.unescape(), rhs.unescape(), hash, status); - if (U_FAILURE(status)) { - return; + if (U_FAILURE(status)) { return; } + for (auto& entry : unisets::kCurrencyEntries) { + UnicodeString exemplar(entry.exemplar); + const UnicodeSet* set = unisets::get(entry.key); + if (set == nullptr) { return; } + UnicodeSetIterator it(*set); + while (it.next()) { + UnicodeString value = it.getString(); + if (value == exemplar) { + // No need to mark the exemplar character as an equivalent + continue; + } + makeEquivalent(exemplar, value, hash, status); + if (U_FAILURE(status)) { return; } } } } @@ -2216,6 +2304,7 @@ ucurr_countCurrencies(const char* locale, UErrorCode localStatus = U_ZERO_ERROR; char id[ULOC_FULLNAME_CAPACITY]; uloc_getKeywordValue(locale, "currency", id, ULOC_FULLNAME_CAPACITY, &localStatus); + // get country or country_variant in `id' /*uint32_t variantType =*/ idForLocale(locale, id, sizeof(id), ec); diff --git a/icuSources/common/ucurrimp.h b/icuSources/common/ucurrimp.h index 6e468fd4..6d958829 100644 --- a/icuSources/common/ucurrimp.h +++ b/icuSources/common/ucurrimp.h @@ -13,6 +13,7 @@ #include "unicode/utypes.h" #include "unicode/unistr.h" #include "unicode/parsepos.h" +#include "unicode/uniset.h" /** * Internal method. Given a currency ISO code and a locale, return @@ -36,6 +37,8 @@ uprv_getStaticCurrencyName(const UChar* iso, const char* loc, * match, then the display name is preferred, unless it's length * is less than 3. * + * The parameters must not be NULL. + * * @param locale the locale of the display names to match * @param text the text to parse * @param pos input-output position; on input, the position within @@ -43,6 +46,8 @@ uprv_getStaticCurrencyName(const UChar* iso, const char* loc, * on output, the position after the last matched character. If * the parse fails, the position in unchanged upon output. * @param type currency type to parse against, LONG_NAME only or not + * @param partialMatchLen The length of the longest matching prefix; + * this may be nonzero even if no full currency was matched. * @return the ISO 4217 code, as a string, of the best match, or * null if there is no match * @@ -53,9 +58,21 @@ uprv_parseCurrency(const char* locale, const icu::UnicodeString& text, icu::ParsePosition& pos, int8_t type, + int32_t* partialMatchLen, UChar* result, UErrorCode& ec); +/** + * Puts all possible first-characters of a currency into the + * specified UnicodeSet. + * + * @param locale the locale of the display names of interest + * @param result the UnicodeSet to which to add the starting characters + */ +void uprv_currencyLeads(const char* locale, icu::UnicodeSet& result, UErrorCode& ec); + + + #endif /* #ifndef _UCURR_IMP_H_ */ //eof diff --git a/icuSources/common/udata.cpp b/icuSources/common/udata.cpp index 80c10c04..8647865b 100644 --- a/icuSources/common/udata.cpp +++ b/icuSources/common/udata.cpp @@ -208,6 +208,8 @@ setCommonICUData(UDataMemory *pData, /* The new common data. Belongs to ca return didUpdate; } +#if U_PLATFORM_HAS_WINUWP_API == 0 + static UBool setCommonICUDataPointer(const void *pData, UBool /*warn*/, UErrorCode *pErrorCode) { UDataMemory tData; @@ -217,6 +219,8 @@ setCommonICUDataPointer(const void *pData, UBool /*warn*/, UErrorCode *pErrorCod return setCommonICUData(&tData, FALSE, pErrorCode); } +#endif + static const char * findBasename(const char *path) { const char *basename=uprv_strrchr(path, U_FILE_SEP_CHAR); @@ -984,7 +988,7 @@ static UDataMemory *doLoadFromIndividualFiles(const char *pkgName, /* init path iterator for individual files */ UDataPathIterator iter(dataPath, pkgName, path, tocEntryPathSuffix, FALSE, pErrorCode); - while((pathBuffer = iter.next(pErrorCode))) + while((pathBuffer = iter.next(pErrorCode)) != NULL) { #ifdef UDATA_DEBUG fprintf(stderr, "UDATA: trying individual file %s\n", pathBuffer); @@ -1167,7 +1171,7 @@ doOpenChoice(const char *path, const char *type, const char *name, if(uprv_strchr(path,U_FILE_ALT_SEP_CHAR) != NULL) { altSepPath.append(path, *pErrorCode); char *p; - while((p=uprv_strchr(altSepPath.data(), U_FILE_ALT_SEP_CHAR))) { + while ((p = uprv_strchr(altSepPath.data(), U_FILE_ALT_SEP_CHAR)) != NULL) { *p = U_FILE_SEP_CHAR; } #if defined (UDATA_DEBUG) diff --git a/icuSources/common/uhash.cpp b/icuSources/common/uhash.cpp index fe78511c..a80e7b8f 100644 --- a/icuSources/common/uhash.cpp +++ b/icuSources/common/uhash.cpp @@ -231,7 +231,7 @@ _uhash_allocate(UHashtable *hash, emptytok.pointer = NULL; /* Only one of these two is needed */ emptytok.integer = 0; /* but we don't know which one. */ - + limit = p + hash->length; while (p < limit) { p->key = emptytok; @@ -247,7 +247,7 @@ _uhash_allocate(UHashtable *hash, static UHashtable* _uhash_init(UHashtable *result, - UHashFunction *keyHash, + UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, int32_t primeIndex, @@ -275,7 +275,7 @@ _uhash_init(UHashtable *result, } static UHashtable* -_uhash_create(UHashFunction *keyHash, +_uhash_create(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, int32_t primeIndex, @@ -415,7 +415,7 @@ _uhash_rehash(UHashtable *hash, UErrorCode *status) { if (U_FAILURE(*status)) { hash->elements = old; - hash->length = oldLength; + hash->length = oldLength; return; } @@ -536,7 +536,7 @@ _uhash_put(UHashtable *hash, ********************************************************************/ U_CAPI UHashtable* U_EXPORT2 -uhash_open(UHashFunction *keyHash, +uhash_open(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode *status) { @@ -545,7 +545,7 @@ uhash_open(UHashFunction *keyHash, } U_CAPI UHashtable* U_EXPORT2 -uhash_openSize(UHashFunction *keyHash, +uhash_openSize(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, int32_t size, @@ -562,7 +562,7 @@ uhash_openSize(UHashFunction *keyHash, U_CAPI UHashtable* U_EXPORT2 uhash_init(UHashtable *fillinResult, - UHashFunction *keyHash, + UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode *status) { @@ -572,18 +572,17 @@ uhash_init(UHashtable *fillinResult, U_CAPI UHashtable* U_EXPORT2 uhash_initSize(UHashtable *fillinResult, - UHashFunction *keyHash, + UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, int32_t size, UErrorCode *status) { - /* Find the smallest index i for which PRIMES[i] >= size. */ + // Find the smallest index i for which PRIMES[i] >= size. int32_t i = 0; while (i<(PRIMES_LENGTH-1) && PRIMES[i]keyComparator = fn; return result; } -U_CAPI UValueComparator *U_EXPORT2 +U_CAPI UValueComparator *U_EXPORT2 uhash_setValueComparator(UHashtable *hash, UValueComparator *fn){ UValueComparator *result = hash->valueComparator; hash->valueComparator = fn; @@ -647,7 +646,7 @@ uhash_setResizePolicy(UHashtable *hash, enum UHashResizePolicy policy) { UErrorCode status = U_ZERO_ERROR; _uhash_internalSetResizePolicy(hash, policy); hash->lowWaterMark = (int32_t)(hash->length * hash->lowWaterRatio); - hash->highWaterMark = (int32_t)(hash->length * hash->highWaterRatio); + hash->highWaterMark = (int32_t)(hash->length * hash->highWaterRatio); _uhash_rehash(hash, &status); } @@ -861,7 +860,7 @@ uhash_hashUChars(const UHashTok key) { U_CAPI int32_t U_EXPORT2 uhash_hashChars(const UHashTok key) { const char *s = (const char *)key.pointer; - return s == NULL ? 0 : ustr_hashCharsN(s, uprv_strlen(s)); + return s == NULL ? 0 : static_cast(ustr_hashCharsN(s, uprv_strlen(s))); } U_CAPI int32_t U_EXPORT2 @@ -870,7 +869,7 @@ uhash_hashIChars(const UHashTok key) { return s == NULL ? 0 : ustr_hashICharsN(s, uprv_strlen(s)); } -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_equals(const UHashtable* hash1, const UHashtable* hash2){ int32_t count1, count2, pos, i; @@ -903,14 +902,14 @@ uhash_equals(const UHashtable* hash1, const UHashtable* hash2){ if(count1!=count2){ return FALSE; } - + pos=UHASH_FIRST; for(i=0; ikey; const UHashTok val1 = elem1->value; /* here the keys are not compared, instead the key form hash1 is used to fetch - * value from hash2. If the hashes are equal then then both hashes should + * value from hash2. If the hashes are equal then then both hashes should * contain equal values for the same key! */ const UHashElement* elem2 = _uhash_find(hash2, key1, hash2->keyHasher(key1)); diff --git a/icuSources/common/uhash.h b/icuSources/common/uhash.h index 0d3ffea3..e423454c 100644 --- a/icuSources/common/uhash.h +++ b/icuSources/common/uhash.h @@ -2,7 +2,7 @@ // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** -* Copyright (C) 1997-2016, International Business Machines +* Copyright (C) 1997-2015, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * Date Name Description @@ -154,7 +154,7 @@ struct UHashtable { * If NULL won't do anything */ /* Size parameters */ - + int32_t count; /* The number of key-value pairs in this table. * 0 <= count <= length. In practice we * never let count == length (see code). */ @@ -162,12 +162,12 @@ struct UHashtable { * and values. Must be prime. */ /* Rehashing thresholds */ - + int32_t highWaterMark; /* If count > highWaterMark, rehash */ int32_t lowWaterMark; /* If count < lowWaterMark, rehash */ float highWaterRatio; /* 0..1; high water as a fraction of length */ float lowWaterRatio; /* 0..1; low water as a fraction of length */ - + int8_t primeIndex; /* Index into our prime table for length. * length == PRIMES[primeIndex] */ UBool allocated; /* Was this UHashtable allocated? */ @@ -190,7 +190,7 @@ U_CDECL_END * @return A pointer to a UHashtable, or 0 if an error occurred. * @see uhash_openSize */ -U_CAPI UHashtable* U_EXPORT2 +U_CAPI UHashtable* U_EXPORT2 uhash_open(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, @@ -207,7 +207,7 @@ uhash_open(UHashFunction *keyHash, * @return A pointer to a UHashtable, or 0 if an error occurred. * @see uhash_open */ -U_CAPI UHashtable* U_EXPORT2 +U_CAPI UHashtable* U_EXPORT2 uhash_openSize(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, @@ -224,7 +224,7 @@ uhash_openSize(UHashFunction *keyHash, * @return A pointer to a UHashtable, or 0 if an error occurred. * @see uhash_openSize */ -U_CAPI UHashtable* U_EXPORT2 +U_CAPI UHashtable* U_EXPORT2 uhash_init(UHashtable *hash, UHashFunction *keyHash, UKeyComparator *keyComp, @@ -242,7 +242,7 @@ uhash_init(UHashtable *hash, * @return A pointer to a UHashtable, or 0 if an error occurred. * @see uhash_openSize */ -U_CAPI UHashtable* U_EXPORT2 +U_CAPI UHashtable* U_EXPORT2 uhash_initSize(UHashtable *hash, UHashFunction *keyHash, UKeyComparator *keyComp, @@ -254,7 +254,7 @@ uhash_initSize(UHashtable *hash, * Close a UHashtable, releasing the memory used. * @param hash The UHashtable to close. If hash is NULL no operation is performed. */ -U_CAPI void U_EXPORT2 +U_CAPI void U_EXPORT2 uhash_close(UHashtable *hash); @@ -265,7 +265,7 @@ uhash_close(UHashtable *hash); * @param fn the function to be used hash keys; must not be NULL * @return the previous key hasher; non-NULL */ -U_CAPI UHashFunction *U_EXPORT2 +U_CAPI UHashFunction *U_EXPORT2 uhash_setKeyHasher(UHashtable *hash, UHashFunction *fn); /** @@ -275,7 +275,7 @@ uhash_setKeyHasher(UHashtable *hash, UHashFunction *fn); * @param fn the function to be used compare keys; must not be NULL * @return the previous key comparator; non-NULL */ -U_CAPI UKeyComparator *U_EXPORT2 +U_CAPI UKeyComparator *U_EXPORT2 uhash_setKeyComparator(UHashtable *hash, UKeyComparator *fn); /** @@ -285,7 +285,7 @@ uhash_setKeyComparator(UHashtable *hash, UKeyComparator *fn); * @param fn the function to be used compare keys; must not be NULL * @return the previous key comparator; non-NULL */ -U_CAPI UValueComparator *U_EXPORT2 +U_CAPI UValueComparator *U_EXPORT2 uhash_setValueComparator(UHashtable *hash, UValueComparator *fn); /** @@ -298,7 +298,7 @@ uhash_setValueComparator(UHashtable *hash, UValueComparator *fn); * @param fn the function to be used delete keys, or NULL * @return the previous key deleter; may be NULL */ -U_CAPI UObjectDeleter *U_EXPORT2 +U_CAPI UObjectDeleter *U_EXPORT2 uhash_setKeyDeleter(UHashtable *hash, UObjectDeleter *fn); /** @@ -311,7 +311,7 @@ uhash_setKeyDeleter(UHashtable *hash, UObjectDeleter *fn); * @param fn the function to be used delete values, or NULL * @return the previous value deleter; may be NULL */ -U_CAPI UObjectDeleter *U_EXPORT2 +U_CAPI UObjectDeleter *U_EXPORT2 uhash_setValueDeleter(UHashtable *hash, UObjectDeleter *fn); /** @@ -321,7 +321,7 @@ uhash_setValueDeleter(UHashtable *hash, UObjectDeleter *fn); * @param hash The UHashtable to set * @param policy The way the hashtable resizes itself, {U_GROW, U_GROW_AND_SHRINK, U_FIXED} */ -U_CAPI void U_EXPORT2 +U_CAPI void U_EXPORT2 uhash_setResizePolicy(UHashtable *hash, enum UHashResizePolicy policy); /** @@ -329,7 +329,7 @@ uhash_setResizePolicy(UHashtable *hash, enum UHashResizePolicy policy); * @param hash The UHashtable to query. * @return The number of key-value pairs stored in hash. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_count(const UHashtable *hash); /** @@ -345,7 +345,7 @@ uhash_count(const UHashtable *hash); * @return The previous value, or NULL if none. * @see uhash_get */ -U_CAPI void* U_EXPORT2 +U_CAPI void* U_EXPORT2 uhash_put(UHashtable *hash, void *key, void *value, @@ -363,7 +363,7 @@ uhash_put(UHashtable *hash, * @return The previous value, or NULL if none. * @see uhash_get */ -U_CAPI void* U_EXPORT2 +U_CAPI void* U_EXPORT2 uhash_iput(UHashtable *hash, int32_t key, void* value, @@ -381,7 +381,7 @@ uhash_iput(UHashtable *hash, * @return The previous value, or 0 if none. * @see uhash_get */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_puti(UHashtable *hash, void* key, int32_t value, @@ -399,7 +399,7 @@ uhash_puti(UHashtable *hash, * @return The previous value, or 0 if none. * @see uhash_get */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_iputi(UHashtable *hash, int32_t key, int32_t value, @@ -412,8 +412,8 @@ uhash_iputi(UHashtable *hash, * @param key A pointer key stored in a hashtable * @return The requested item, or NULL if not found. */ -U_CAPI void* U_EXPORT2 -uhash_get(const UHashtable *hash, +U_CAPI void* U_EXPORT2 +uhash_get(const UHashtable *hash, const void *key); /** @@ -423,7 +423,7 @@ uhash_get(const UHashtable *hash, * @param key An integer key stored in a hashtable * @return The requested item, or NULL if not found. */ -U_CAPI void* U_EXPORT2 +U_CAPI void* U_EXPORT2 uhash_iget(const UHashtable *hash, int32_t key); @@ -434,7 +434,7 @@ uhash_iget(const UHashtable *hash, * @param key A pointer key stored in a hashtable * @return The requested item, or 0 if not found. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_geti(const UHashtable *hash, const void* key); /** @@ -444,7 +444,7 @@ uhash_geti(const UHashtable *hash, * @param key An integer key stored in a hashtable * @return The requested item, or 0 if not found. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_igeti(const UHashtable *hash, int32_t key); @@ -454,7 +454,7 @@ uhash_igeti(const UHashtable *hash, * @param key A key stored in a hashtable * @return The item removed, or NULL if not found. */ -U_CAPI void* U_EXPORT2 +U_CAPI void* U_EXPORT2 uhash_remove(UHashtable *hash, const void *key); @@ -464,7 +464,7 @@ uhash_remove(UHashtable *hash, * @param key An integer key stored in a hashtable * @return The item removed, or NULL if not found. */ -U_CAPI void* U_EXPORT2 +U_CAPI void* U_EXPORT2 uhash_iremove(UHashtable *hash, int32_t key); @@ -474,7 +474,7 @@ uhash_iremove(UHashtable *hash, * @param key An key stored in a hashtable * @return The item removed, or 0 if not found. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_removei(UHashtable *hash, const void* key); @@ -484,7 +484,7 @@ uhash_removei(UHashtable *hash, * @param key An integer key stored in a hashtable * @return The item removed, or 0 if not found. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_iremovei(UHashtable *hash, int32_t key); @@ -492,7 +492,7 @@ uhash_iremovei(UHashtable *hash, * Remove all items from a UHashtable. * @param hash The target UHashtable. */ -U_CAPI void U_EXPORT2 +U_CAPI void U_EXPORT2 uhash_removeAll(UHashtable *hash); /** @@ -506,7 +506,7 @@ uhash_removeAll(UHashtable *hash); * @param key A key stored in a hashtable * @return a hash element, or NULL if the key is not found. */ -U_CAPI const UHashElement* U_EXPORT2 +U_CAPI const UHashElement* U_EXPORT2 uhash_find(const UHashtable *hash, const void* key); /** @@ -529,7 +529,7 @@ uhash_find(const UHashtable *hash, const void* key); * @return a hash element, or NULL if no further key-value pairs * exist in the table. */ -U_CAPI const UHashElement* U_EXPORT2 +U_CAPI const UHashElement* U_EXPORT2 uhash_nextElement(const UHashtable *hash, int32_t *pos); @@ -544,7 +544,7 @@ uhash_nextElement(const UHashtable *hash, * modified. * @return the value that was removed. */ -U_CAPI void* U_EXPORT2 +U_CAPI void* U_EXPORT2 uhash_removeElement(UHashtable *hash, const UHashElement* e); /******************************************************************** @@ -556,7 +556,7 @@ uhash_removeElement(UHashtable *hash, const UHashElement* e); * @param i The given integer * @return a UHashTok for an integer. */ -/*U_CAPI UHashTok U_EXPORT2 +/*U_CAPI UHashTok U_EXPORT2 uhash_toki(int32_t i);*/ /** @@ -564,7 +564,7 @@ uhash_toki(int32_t i);*/ * @param p The given pointer * @return a UHashTok for a pointer. */ -/*U_CAPI UHashTok U_EXPORT2 +/*U_CAPI UHashTok U_EXPORT2 uhash_tokp(void* p);*/ /******************************************************************** @@ -578,7 +578,7 @@ uhash_tokp(void* p);*/ * @param key The string (const UChar*) to hash. * @return A hash code for the key. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_hashUChars(const UHashTok key); /** @@ -588,7 +588,7 @@ uhash_hashUChars(const UHashTok key); * @param key The string (const char*) to hash. * @return A hash code for the key. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_hashChars(const UHashTok key); /** @@ -608,7 +608,7 @@ uhash_hashIChars(const UHashTok key); * @param key2 The string for comparison * @return true if key1 and key2 are equal, return false otherwise. */ -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_compareUChars(const UHashTok key1, const UHashTok key2); /** @@ -618,7 +618,7 @@ uhash_compareUChars(const UHashTok key1, const UHashTok key2); * @param key2 The string for comparison * @return true if key1 and key2 are equal, return false otherwise. */ -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_compareChars(const UHashTok key1, const UHashTok key2); /** @@ -628,7 +628,7 @@ uhash_compareChars(const UHashTok key1, const UHashTok key2); * @param key2 The string for comparison * @return true if key1 and key2 are equal, return false otherwise. */ -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_compareIChars(const UHashTok key1, const UHashTok key2); /******************************************************************** @@ -640,7 +640,7 @@ uhash_compareIChars(const UHashTok key1, const UHashTok key2); * @param key The string (const char*) to hash. * @return A hash code for the key. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_hashUnicodeString(const UElement key); /** @@ -649,7 +649,7 @@ uhash_hashUnicodeString(const UElement key); * @param key The string (const char*) to hash. * @return A hash code for the key. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_hashCaselessUnicodeString(const UElement key); /******************************************************************** @@ -661,7 +661,7 @@ uhash_hashCaselessUnicodeString(const UElement key); * @param key The string (const char*) to hash. * @return A hash code for the key. */ -U_CAPI int32_t U_EXPORT2 +U_CAPI int32_t U_EXPORT2 uhash_hashLong(const UHashTok key); /** @@ -670,7 +670,7 @@ uhash_hashLong(const UHashTok key); * @param Key2 The integer for comparison * @return true if key1 and key2 are equal, return false otherwise */ -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_compareLong(const UHashTok key1, const UHashTok key2); /******************************************************************** @@ -681,7 +681,7 @@ uhash_compareLong(const UHashTok key1, const UHashTok key2); * Deleter for Hashtable objects. * @param obj The object to be deleted */ -U_CAPI void U_EXPORT2 +U_CAPI void U_EXPORT2 uhash_deleteHashtable(void *obj); /* Use uprv_free() itself as a deleter for any key or value allocated using uprv_malloc. */ @@ -692,7 +692,7 @@ uhash_deleteHashtable(void *obj); * @param hash2 * @return true if the hashtables are equal and false if not. */ -U_CAPI UBool U_EXPORT2 +U_CAPI UBool U_EXPORT2 uhash_equals(const UHashtable* hash1, const UHashtable* hash2); diff --git a/icuSources/common/uinvchar.cpp b/icuSources/common/uinvchar.cpp index c478e363..a0fd9dfb 100644 --- a/icuSources/common/uinvchar.cpp +++ b/icuSources/common/uinvchar.cpp @@ -573,7 +573,7 @@ uprv_aestrncpy(uint8_t *dst, const uint8_t *src, int32_t n) uint8_t *orig_dst = dst; if(n==-1) { - n = uprv_strlen((const char*)src)+1; /* copy NUL */ + n = static_cast(uprv_strlen((const char*)src)+1); /* copy NUL */ } /* copy non-null */ while(*src && n>0) { @@ -594,7 +594,7 @@ uprv_eastrncpy(uint8_t *dst, const uint8_t *src, int32_t n) uint8_t *orig_dst = dst; if(n==-1) { - n = uprv_strlen((const char*)src)+1; /* copy NUL */ + n = static_cast(uprv_strlen((const char*)src)+1); /* copy NUL */ } /* copy non-null */ while(*src && n>0) { diff --git a/icuSources/common/ulist.cpp b/icuSources/common/ulist.cpp index b3f3fd8b..c5180431 100644 --- a/icuSources/common/ulist.cpp +++ b/icuSources/common/ulist.cpp @@ -252,7 +252,7 @@ U_CAPI const char * U_EXPORT2 ulist_next_keyword_value(UEnumeration *en, int32_t s = (const char *)ulist_getNext((UList *)(en->context)); if (s != NULL && resultLength != NULL) { - *resultLength = uprv_strlen(s); + *resultLength = static_cast(uprv_strlen(s)); } return s; } diff --git a/icuSources/common/uloc.cpp b/icuSources/common/uloc.cpp index 29018bcb..85791dd1 100644 --- a/icuSources/common/uloc.cpp +++ b/icuSources/common/uloc.cpp @@ -98,6 +98,7 @@ locale_getKeywords(const char *localeID, */ /* Generated using org.unicode.cldr.icu.GenerateISO639LanguageTables */ /* ISO639 table version is 20150505 */ +/* Subsequent hand addition of selected languages */ static const char * const LANGUAGES[] = { "aa", "ab", "ace", "ach", "ada", "ady", "ae", "aeb", "af", "afh", "agq", "ain", "ak", "akk", "akz", "ale", @@ -109,7 +110,7 @@ static const char * const LANGUAGES[] = { "bgn", "bho", "bi", "bik", "bin", "bjn", "bkm", "bla", "bm", "bn", "bo", "bpy", "bqi", "br", "bra", "brh", "brx", "bs", "bss", "bua", "bug", "bum", "byn", "byv", - "ca", "cad", "car", "cay", "cch", "ce", "ceb", "cgg", + "ca", "cad", "car", "cay", "cch", "ccp", "ce", "ceb", "cgg", "ch", "chb", "chg", "chk", "chm", "chn", "cho", "chp", "chr", "chy", "ckb", "co", "cop", "cps", "cr", "crh", "cs", "csb", "cu", "cv", "cy", @@ -213,6 +214,7 @@ static const char* const REPLACEMENT_LANGUAGES[]={ */ /* Generated using org.unicode.cldr.icu.GenerateISO639LanguageTables */ /* ISO639 table version is 20150505 */ +/* Subsequent hand addition of selected languages */ static const char * const LANGUAGES_3[] = { "aar", "abk", "ace", "ach", "ada", "ady", "ave", "aeb", "afr", "afh", "agq", "ain", "aka", "akk", "akz", "ale", @@ -224,7 +226,7 @@ static const char * const LANGUAGES_3[] = { "bgn", "bho", "bis", "bik", "bin", "bjn", "bkm", "bla", "bam", "ben", "bod", "bpy", "bqi", "bre", "bra", "brh", "brx", "bos", "bss", "bua", "bug", "bum", "byn", "byv", - "cat", "cad", "car", "cay", "cch", "che", "ceb", "cgg", + "cat", "cad", "car", "cay", "cch", "ccp", "che", "ceb", "cgg", "cha", "chb", "chg", "chk", "chm", "chn", "cho", "chp", "chr", "chy", "ckb", "cos", "cop", "cps", "cre", "crh", "ces", "csb", "chu", "chv", "cym", @@ -529,14 +531,16 @@ static const VariantMap VARIANT_MAP[] = { #define _hasBCP47Extension(id) (id && uprv_strstr(id, "@") == NULL && getShortestSubtagLength(localeID) == 1) /* Converts the BCP47 id to Unicode id. Does nothing to id if conversion fails */ #define _ConvertBCP47(finalID, id, buffer, length,err) \ - if (uloc_forLanguageTag(id, buffer, length, NULL, err) <= 0 || U_FAILURE(*err)) { \ + if (uloc_forLanguageTag(id, buffer, length, NULL, err) <= 0 || \ + U_FAILURE(*err) || *err == U_STRING_NOT_TERMINATED_WARNING) { \ finalID=id; \ + if (*err == U_STRING_NOT_TERMINATED_WARNING) { *err = U_BUFFER_OVERFLOW_ERROR; } \ } else { \ finalID=buffer; \ } /* Gets the size of the shortest subtag in the given localeID. */ static int32_t getShortestSubtagLength(const char *localeID) { - int32_t localeIDLength = uprv_strlen(localeID); + int32_t localeIDLength = static_cast(uprv_strlen(localeID)); int32_t length = localeIDLength; int32_t tmpLength = 0; int32_t i; @@ -2486,7 +2490,7 @@ uloc_acceptLanguage(char *result, int32_t resultAvailable, #if defined(ULOC_DEBUG) fprintf(stderr,"%02d: %s\n", i, acceptList[i]); #endif - while((l=uenum_next(availableLocales, NULL, status))) { + while((l=uenum_next(availableLocales, NULL, status)) != NULL) { #if defined(ULOC_DEBUG) fprintf(stderr," %s\n", l); #endif @@ -2526,7 +2530,7 @@ uloc_acceptLanguage(char *result, int32_t resultAvailable, #if defined(ULOC_DEBUG) fprintf(stderr,"Try: [%s]", fallbackList[i]); #endif - while((l=uenum_next(availableLocales, NULL, status))) { + while((l=uenum_next(availableLocales, NULL, status)) != NULL) { #if defined(ULOC_DEBUG) fprintf(stderr," %s\n", l); #endif diff --git a/icuSources/common/uloc_tag.cpp b/icuSources/common/uloc_tag.cpp index dcd72716..87b9f63f 100644 --- a/icuSources/common/uloc_tag.cpp +++ b/icuSources/common/uloc_tag.cpp @@ -1022,7 +1022,7 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac no known mapping. This implementation normalizes the the value to lower case */ - int32_t bcpValueLen = uprv_strlen(bcpValue); + int32_t bcpValueLen = static_cast(uprv_strlen(bcpValue)); if (bcpValueLen < extBufCapacity) { uprv_strcpy(pExtBuf, bcpValue); T_CString_toLowerCase(pExtBuf); @@ -1288,7 +1288,7 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT bufIdx++; } - len = uprv_strlen(attr->attribute); + len = static_cast(uprv_strlen(attr->attribute)); uprv_memcpy(buf + bufIdx, attr->attribute, len); bufIdx += len; @@ -1841,7 +1841,7 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta int32_t newTagLength; grandfatheredLen = tagLen; /* back up for output parsedLen */ - newTagLength = uprv_strlen(GRANDFATHERED[i+1]); + newTagLength = static_cast(uprv_strlen(GRANDFATHERED[i+1])); if (tagLen < newTagLength) { uprv_free(tagBuf); tagBuf = (char*)uprv_malloc(newTagLength + 1); diff --git a/icuSources/common/umapfile.cpp b/icuSources/common/umapfile.cpp index df588a4f..53699e76 100644 --- a/icuSources/common/umapfile.cpp +++ b/icuSources/common/umapfile.cpp @@ -102,10 +102,7 @@ { HANDLE map; HANDLE file; - SECURITY_ATTRIBUTES mappingAttributes; - SECURITY_ATTRIBUTES *mappingAttributesPtr = NULL; - SECURITY_DESCRIPTOR securityDesc; - + UDataMemory_init(pData); /* Clear the output struct. */ /* open the input file */ @@ -143,6 +140,11 @@ This is required for multiuser systems on Windows 2000 SP4 and beyond */ // TODO: UWP does not have this function and I do not think it is required? #if U_PLATFORM_HAS_WINUWP_API == 0 + + SECURITY_ATTRIBUTES mappingAttributes; + SECURITY_ATTRIBUTES *mappingAttributesPtr = NULL; + SECURITY_DESCRIPTOR securityDesc; + if (InitializeSecurityDescriptor(&securityDesc, SECURITY_DESCRIPTOR_REVISION)) { /* give the security descriptor a Null Dacl done using the "TRUE, (PACL)NULL" here */ if (SetSecurityDescriptorDacl(&securityDesc, TRUE, (PACL)NULL, FALSE)) { diff --git a/icuSources/common/umutex.cpp b/icuSources/common/umutex.cpp index 77c17782..29dbc90e 100644 --- a/icuSources/common/umutex.cpp +++ b/icuSources/common/umutex.cpp @@ -132,7 +132,7 @@ umtx_condBroadcast(UConditionVar *condition) { } U_CAPI void U_EXPORT2 -umtx_condSignal(UConditionVar *condition) { +umtx_condSignal(UConditionVar * /* condition */) { // Function not implemented. There is no immediate requirement from ICU to have it. // Once ICU drops support for Windows XP and Server 2003, ICU Condition Variables will be // changed to be thin wrappers on native Windows CONDITION_VARIABLEs, and this function diff --git a/icuSources/common/unicode/brkiter.h b/icuSources/common/unicode/brkiter.h index 98560e55..c86c5115 100644 --- a/icuSources/common/unicode/brkiter.h +++ b/icuSources/common/unicode/brkiter.h @@ -253,7 +253,7 @@ public: virtual int32_t next(void) = 0; /** - * Return character index of the current interator position within the text. + * Return character index of the current iterator position within the text. * @return The boundary most recently returned. * @stable ICU 2.0 */ @@ -280,7 +280,7 @@ public: virtual int32_t preceding(int32_t offset) = 0; /** - * Return true if the specfied position is a boundary position. + * Return true if the specified position is a boundary position. * As a side effect, the current position of the iterator is set * to the first boundary position at or following the specified offset. * @param offset the offset to check. @@ -295,21 +295,20 @@ public: * does nothing. Negative values move to previous boundaries * and positive values move to later boundaries. * @return The new iterator position, or - * DONE if there are fewer than |n| boundaries in the specfied direction. + * DONE if there are fewer than |n| boundaries in the specified direction. * @stable ICU 2.0 */ virtual int32_t next(int32_t n) = 0; /** - * For RuleBasedBreakIterators, return the status tag from the - * break rule that determined the most recently - * returned break position. + * For RuleBasedBreakIterators, return the status tag from the break rule + * that determined the boundary at the current iteration position. *

* For break iterator types that do not support a rule status, * a default value of 0 is returned. *

- * @return the status from the break rule that determined the most recently - * returned break position. + * @return the status from the break rule that determined the boundary at + * the current iteration position. * @see RuleBaseBreakIterator::getRuleStatus() * @see UWordBreak * @stable ICU 52 @@ -318,7 +317,7 @@ public: /** * For RuleBasedBreakIterators, get the status (tag) values from the break rule(s) - * that determined the most recently returned break position. + * that determined the boundary at the current iteration position. *

* For break iterator types that do not support rule status, * no values are returned. @@ -334,10 +333,10 @@ public: * @param fillInVec an array to be filled in with the status values. * @param capacity the length of the supplied vector. A length of zero causes * the function to return the number of status values, in the - * normal way, without attemtping to store any values. + * normal way, without attempting to store any values. * @param status receives error codes. * @return The number of rule status values from rules that determined - * the most recent boundary returned by the break iterator. + * the boundary at the current iteration position. * In the event of a U_BUFFER_OVERFLOW_ERROR, the return value * is the total number of status values that were available, * not the reduced number that were actually returned. @@ -472,7 +471,7 @@ public: static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); /** - * Get name of the object for the desired Locale, in the desired langauge. + * Get name of the object for the desired Locale, in the desired language. * @param objectLocale must be from getAvailableLocales. * @param displayLocale specifies the desired locale for output. * @param name the fill-in parameter of the return value @@ -485,7 +484,7 @@ public: UnicodeString& name); /** - * Get name of the object for the desired Locale, in the langauge of the + * Get name of the object for the desired Locale, in the language of the * default locale. * @param objectLocale must be from getMatchingLocales * @param name the fill-in parameter of the return value @@ -618,8 +617,17 @@ public: */ virtual BreakIterator &refreshInputText(UText *input, UErrorCode &status) = 0; +#ifndef U_HIDE_INTERNAL_API + /** + * Set the ULineWordOptions for this break iterator. + * @param lineWordOpts The ULineWordOptions to set. + * @internal Apple only + */ + void setLineWordOpts(ULineWordOptions lineWordOpts); +#endif /* U_HIDE_INTERNAL_API */ + private: - static BreakIterator* buildInstance(const Locale& loc, const char *type, int32_t kind, UErrorCode& status); + static BreakIterator* buildInstance(const Locale& loc, const char *type, UErrorCode& status); static BreakIterator* createInstance(const Locale& loc, int32_t kind, UErrorCode& status); static BreakIterator* makeInstance(const Locale& loc, int32_t kind, UErrorCode& status); @@ -632,30 +640,25 @@ protected: /** @internal */ BreakIterator(); /** @internal */ - BreakIterator (const BreakIterator &other) : UObject(other) {} + BreakIterator (const BreakIterator &other); #ifndef U_HIDE_INTERNAL_API /** @internal */ - BreakIterator (const Locale& valid, const Locale& actual); + BreakIterator (const Locale& valid, const Locale &actual); + /** @internal. Assignment Operator, used by RuleBasedBreakIterator. */ + BreakIterator &operator = (const BreakIterator &other); #endif /* U_HIDE_INTERNAL_API */ - UBool fKeepAll; + ULineWordOptions fLineWordOpts; private: - /** @internal */ + /** @internal (private) */ char actualLocale[ULOC_FULLNAME_CAPACITY]; char validLocale[ULOC_FULLNAME_CAPACITY]; - - /** - * The assignment operator has no real implementation. - * It's provided to make the compiler happy. Do not call. - */ - BreakIterator& operator=(const BreakIterator&); - void setKeepAll(UBool keepAll); }; -inline void BreakIterator::setKeepAll(UBool keepAll) +inline void BreakIterator::setLineWordOpts(ULineWordOptions lineWordOpts) { - fKeepAll = keepAll; + fLineWordOpts = lineWordOpts; } #ifndef U_HIDE_DEPRECATED_API @@ -672,5 +675,5 @@ U_NAMESPACE_END #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ -#endif // _BRKITER +#endif // BRKITER_H //eof diff --git a/icuSources/common/unicode/bytestream.h b/icuSources/common/unicode/bytestream.h index 70993f6f..df324d9d 100644 --- a/icuSources/common/unicode/bytestream.h +++ b/icuSources/common/unicode/bytestream.h @@ -127,8 +127,8 @@ public: virtual void Flush(); private: - ByteSink(const ByteSink &); // copy constructor not implemented - ByteSink &operator=(const ByteSink &); // assignment operator not implemented + ByteSink(const ByteSink &) = delete; + ByteSink &operator=(const ByteSink &) = delete; }; // ------------------------------------------------------------- @@ -218,9 +218,10 @@ private: int32_t size_; int32_t appended_; UBool overflowed_; - CheckedArrayByteSink(); ///< default constructor not implemented - CheckedArrayByteSink(const CheckedArrayByteSink &); ///< copy constructor not implemented - CheckedArrayByteSink &operator=(const CheckedArrayByteSink &); ///< assignment operator not implemented + + CheckedArrayByteSink() = delete; + CheckedArrayByteSink(const CheckedArrayByteSink &) = delete; + CheckedArrayByteSink &operator=(const CheckedArrayByteSink &) = delete; }; /** @@ -237,6 +238,21 @@ class StringByteSink : public ByteSink { * @stable ICU 4.2 */ StringByteSink(StringClass* dest) : dest_(dest) { } +#ifndef U_HIDE_DRAFT_API + /** + * Constructs a ByteSink that reserves append capacity and will append bytes to the dest string. + * + * @param dest pointer to string object to append to + * @param initialAppendCapacity capacity beyond dest->length() to be reserve()d + * @draft ICU 60 + */ + StringByteSink(StringClass* dest, int32_t initialAppendCapacity) : dest_(dest) { + if (initialAppendCapacity > 0 && + (uint32_t)initialAppendCapacity > (dest->capacity() - dest->length())) { + dest->reserve(dest->length() + initialAppendCapacity); + } + } +#endif // U_HIDE_DRAFT_API /** * Append "bytes[0,n-1]" to this. * @param data the pointer to the bytes @@ -246,9 +262,10 @@ class StringByteSink : public ByteSink { virtual void Append(const char* data, int32_t n) { dest_->append(data, n); } private: StringClass* dest_; - StringByteSink(); ///< default constructor not implemented - StringByteSink(const StringByteSink &); ///< copy constructor not implemented - StringByteSink &operator=(const StringByteSink &); ///< assignment operator not implemented + + StringByteSink() = delete; + StringByteSink(const StringByteSink &) = delete; + StringByteSink &operator=(const StringByteSink &) = delete; }; U_NAMESPACE_END diff --git a/icuSources/common/unicode/bytestriebuilder.h b/icuSources/common/unicode/bytestriebuilder.h index bd975ec2..652ba55f 100644 --- a/icuSources/common/unicode/bytestriebuilder.h +++ b/icuSources/common/unicode/bytestriebuilder.h @@ -144,7 +144,7 @@ private: virtual int32_t getMaxLinearMatchLength() const { return BytesTrie::kMaxLinearMatchLength; } /** - * @internal + * @internal (private) */ class BTLinearMatchNode : public LinearMatchNode { public: @@ -155,7 +155,6 @@ private: const char *s; }; - // don't use #ifndef U_HIDE_INTERNAL_API with private class members or virtual methods. virtual Node *createLinearMatchNode(int32_t i, int32_t byteIndex, int32_t length, Node *nextNode) const; diff --git a/icuSources/common/unicode/caniter.h b/icuSources/common/unicode/caniter.h index 6e01060d..fe222515 100644 --- a/icuSources/common/unicode/caniter.h +++ b/icuSources/common/unicode/caniter.h @@ -154,13 +154,13 @@ private: /** * Copy constructor. Private for now. - * @internal + * @internal (private) */ CanonicalIterator(const CanonicalIterator& other); /** * Assignment operator. Private for now. - * @internal + * @internal (private) */ CanonicalIterator& operator=(const CanonicalIterator& other); diff --git a/icuSources/common/unicode/casemap.h b/icuSources/common/unicode/casemap.h index f3fc734d..5e693087 100644 --- a/icuSources/common/unicode/casemap.h +++ b/icuSources/common/unicode/casemap.h @@ -8,6 +8,7 @@ #define __CASEMAP_H__ #include "unicode/utypes.h" +#include "unicode/stringpiece.h" #include "unicode/uobject.h" /** @@ -18,15 +19,14 @@ #if U_SHOW_CPLUSPLUS_API U_NAMESPACE_BEGIN -#ifndef U_HIDE_DRAFT_API - class BreakIterator; +class ByteSink; class Edits; /** * Low-level C++ case mapping functions. * - * @draft ICU 59 + * @stable ICU 59 */ class U_COMMON_API CaseMap U_FINAL : public UMemory { public: @@ -37,7 +37,7 @@ public: * The source string and the destination buffer must not overlap. * * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See UCASEMAP_OMIT_UNCHANGED_TEXT. + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. * @param src The original string. * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. * @param dest A buffer for the result string. The result will be NUL-terminated if @@ -49,7 +49,8 @@ public: * @param edits Records edits for index mapping, working with styled text, * and getting only changes (if any). * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first. edits can be NULL. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be NULL. * @param errorCode Reference to an in/out error code value * which must not indicate a failure before the function call. * @return The length of the result string, if successful. @@ -57,7 +58,7 @@ public: * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. * * @see u_strToLower - * @draft ICU 59 + * @stable ICU 59 */ static int32_t toLower( const char *locale, uint32_t options, @@ -72,7 +73,7 @@ public: * The source string and the destination buffer must not overlap. * * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See UCASEMAP_OMIT_UNCHANGED_TEXT. + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. * @param src The original string. * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. * @param dest A buffer for the result string. The result will be NUL-terminated if @@ -84,7 +85,8 @@ public: * @param edits Records edits for index mapping, working with styled text, * and getting only changes (if any). * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first. edits can be NULL. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be NULL. * @param errorCode Reference to an in/out error code value * which must not indicate a failure before the function call. * @return The length of the result string, if successful. @@ -92,7 +94,7 @@ public: * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. * * @see u_strToUpper - * @draft ICU 59 + * @stable ICU 59 */ static int32_t toUpper( const char *locale, uint32_t options, @@ -113,8 +115,10 @@ public: * all others. (This can be modified with options bits.) * * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See UCASEMAP_OMIT_UNCHANGED_TEXT, - * U_TITLECASE_NO_LOWERCASE, U_TITLECASE_NO_BREAK_ADJUSTMENT. + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT, U_EDITS_NO_RESET, + * U_TITLECASE_NO_LOWERCASE, + * U_TITLECASE_NO_BREAK_ADJUSTMENT, U_TITLECASE_ADJUST_TO_CASED, + * U_TITLECASE_WHOLE_STRING, U_TITLECASE_SENTENCES. * @param iter A break iterator to find the first characters of words that are to be titlecased. * It is set to the source string (setText()) * and used one or more times for iteration (first() and next()). @@ -131,7 +135,8 @@ public: * @param edits Records edits for index mapping, working with styled text, * and getting only changes (if any). * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first. edits can be NULL. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be NULL. * @param errorCode Reference to an in/out error code value * which must not indicate a failure before the function call. * @return The length of the result string, if successful. @@ -140,7 +145,7 @@ public: * * @see u_strToTitle * @see ucasemap_toTitle - * @draft ICU 59 + * @stable ICU 59 */ static int32_t toTitle( const char *locale, uint32_t options, BreakIterator *iter, @@ -160,7 +165,7 @@ public: * The result may be longer or shorter than the original. * The source string and the destination buffer must not overlap. * - * @param options Options bit set, usually 0. See UCASEMAP_OMIT_UNCHANGED_TEXT, + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT, U_EDITS_NO_RESET, * U_FOLD_CASE_DEFAULT, U_FOLD_CASE_EXCLUDE_SPECIAL_I. * @param src The original string. * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. @@ -173,7 +178,8 @@ public: * @param edits Records edits for index mapping, working with styled text, * and getting only changes (if any). * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first. edits can be NULL. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be NULL. * @param errorCode Reference to an in/out error code value * which must not indicate a failure before the function call. * @return The length of the result string, if successful. @@ -181,7 +187,7 @@ public: * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. * * @see u_strFoldCase - * @draft ICU 59 + * @stable ICU 59 */ static int32_t fold( uint32_t options, @@ -189,6 +195,131 @@ public: char16_t *dest, int32_t destCapacity, Edits *edits, UErrorCode &errorCode); +#ifndef U_HIDE_DRAFT_API + /** + * Lowercases a UTF-8 string and optionally records edits. + * Casing is locale-dependent and context-sensitive. + * The result may be longer or shorter than the original. + * + * @param locale The locale ID. ("" = root locale, NULL = default locale.) + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. + * @param src The original string. + * @param sink A ByteSink to which the result string is written. + * sink.Flush() is called at the end. + * @param edits Records edits for index mapping, working with styled text, + * and getting only changes (if any). + * The Edits contents is undefined if any error occurs. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be NULL. + * @param errorCode Reference to an in/out error code value + * which must not indicate a failure before the function call. + * + * @see ucasemap_utf8ToLower + * @draft ICU 60 + */ + static void utf8ToLower( + const char *locale, uint32_t options, + StringPiece src, ByteSink &sink, Edits *edits, + UErrorCode &errorCode); + + /** + * Uppercases a UTF-8 string and optionally records edits. + * Casing is locale-dependent and context-sensitive. + * The result may be longer or shorter than the original. + * + * @param locale The locale ID. ("" = root locale, NULL = default locale.) + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. + * @param src The original string. + * @param sink A ByteSink to which the result string is written. + * sink.Flush() is called at the end. + * @param edits Records edits for index mapping, working with styled text, + * and getting only changes (if any). + * The Edits contents is undefined if any error occurs. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be NULL. + * @param errorCode Reference to an in/out error code value + * which must not indicate a failure before the function call. + * + * @see ucasemap_utf8ToUpper + * @draft ICU 60 + */ + static void utf8ToUpper( + const char *locale, uint32_t options, + StringPiece src, ByteSink &sink, Edits *edits, + UErrorCode &errorCode); + +#if !UCONFIG_NO_BREAK_ITERATION + + /** + * Titlecases a UTF-8 string and optionally records edits. + * Casing is locale-dependent and context-sensitive. + * The result may be longer or shorter than the original. + * + * Titlecasing uses a break iterator to find the first characters of words + * that are to be titlecased. It titlecases those characters and lowercases + * all others. (This can be modified with options bits.) + * + * @param locale The locale ID. ("" = root locale, NULL = default locale.) + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT, U_EDITS_NO_RESET, + * U_TITLECASE_NO_LOWERCASE, + * U_TITLECASE_NO_BREAK_ADJUSTMENT, U_TITLECASE_ADJUST_TO_CASED, + * U_TITLECASE_WHOLE_STRING, U_TITLECASE_SENTENCES. + * @param iter A break iterator to find the first characters of words that are to be titlecased. + * It is set to the source string (setUText()) + * and used one or more times for iteration (first() and next()). + * If NULL, then a word break iterator for the locale is used + * (or something equivalent). + * @param src The original string. + * @param sink A ByteSink to which the result string is written. + * sink.Flush() is called at the end. + * @param edits Records edits for index mapping, working with styled text, + * and getting only changes (if any). + * The Edits contents is undefined if any error occurs. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be NULL. + * @param errorCode Reference to an in/out error code value + * which must not indicate a failure before the function call. + * + * @see ucasemap_utf8ToTitle + * @draft ICU 60 + */ + static void utf8ToTitle( + const char *locale, uint32_t options, BreakIterator *iter, + StringPiece src, ByteSink &sink, Edits *edits, + UErrorCode &errorCode); + +#endif // UCONFIG_NO_BREAK_ITERATION + + /** + * Case-folds a UTF-8 string and optionally records edits. + * + * Case folding is locale-independent and not context-sensitive, + * but there is an option for whether to include or exclude mappings for dotted I + * and dotless i that are marked with 'T' in CaseFolding.txt. + * + * The result may be longer or shorter than the original. + * + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. + * @param src The original string. + * @param sink A ByteSink to which the result string is written. + * sink.Flush() is called at the end. + * @param edits Records edits for index mapping, working with styled text, + * and getting only changes (if any). + * The Edits contents is undefined if any error occurs. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be NULL. + * @param errorCode Reference to an in/out error code value + * which must not indicate a failure before the function call. + * + * @see ucasemap_utf8FoldCase + * @draft ICU 60 + */ + static void utf8Fold( + uint32_t options, + StringPiece src, ByteSink &sink, Edits *edits, + UErrorCode &errorCode); +#endif // U_HIDE_DRAFT_API + /** * Lowercases a UTF-8 string and optionally records edits. * Casing is locale-dependent and context-sensitive. @@ -196,7 +327,7 @@ public: * The source string and the destination buffer must not overlap. * * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See UCASEMAP_OMIT_UNCHANGED_TEXT. + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. * @param src The original string. * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. * @param dest A buffer for the result string. The result will be NUL-terminated if @@ -208,7 +339,8 @@ public: * @param edits Records edits for index mapping, working with styled text, * and getting only changes (if any). * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first. edits can be NULL. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be NULL. * @param errorCode Reference to an in/out error code value * which must not indicate a failure before the function call. * @return The length of the result string, if successful. @@ -216,9 +348,9 @@ public: * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. * * @see ucasemap_utf8ToLower - * @draft ICU 59 + * @stable ICU 59 */ - static int32_t utf8ToLower( + static int32_t utf8ToLower( const char *locale, uint32_t options, const char *src, int32_t srcLength, char *dest, int32_t destCapacity, Edits *edits, @@ -231,7 +363,7 @@ public: * The source string and the destination buffer must not overlap. * * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See UCASEMAP_OMIT_UNCHANGED_TEXT. + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. * @param src The original string. * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. * @param dest A buffer for the result string. The result will be NUL-terminated if @@ -243,7 +375,8 @@ public: * @param edits Records edits for index mapping, working with styled text, * and getting only changes (if any). * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first. edits can be NULL. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be NULL. * @param errorCode Reference to an in/out error code value * which must not indicate a failure before the function call. * @return The length of the result string, if successful. @@ -251,7 +384,7 @@ public: * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. * * @see ucasemap_utf8ToUpper - * @draft ICU 59 + * @stable ICU 59 */ static int32_t utf8ToUpper( const char *locale, uint32_t options, @@ -272,10 +405,12 @@ public: * all others. (This can be modified with options bits.) * * @param locale The locale ID. ("" = root locale, NULL = default locale.) - * @param options Options bit set, usually 0. See UCASEMAP_OMIT_UNCHANGED_TEXT, - * U_TITLECASE_NO_LOWERCASE, U_TITLECASE_NO_BREAK_ADJUSTMENT. + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT, U_EDITS_NO_RESET, + * U_TITLECASE_NO_LOWERCASE, + * U_TITLECASE_NO_BREAK_ADJUSTMENT, U_TITLECASE_ADJUST_TO_CASED, + * U_TITLECASE_WHOLE_STRING, U_TITLECASE_SENTENCES. * @param iter A break iterator to find the first characters of words that are to be titlecased. - * It is set to the source string (setText()) + * It is set to the source string (setUText()) * and used one or more times for iteration (first() and next()). * If NULL, then a word break iterator for the locale is used * (or something equivalent). @@ -290,7 +425,8 @@ public: * @param edits Records edits for index mapping, working with styled text, * and getting only changes (if any). * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first. edits can be NULL. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be NULL. * @param errorCode Reference to an in/out error code value * which must not indicate a failure before the function call. * @return The length of the result string, if successful. @@ -298,7 +434,7 @@ public: * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. * * @see ucasemap_utf8ToTitle - * @draft ICU 59 + * @stable ICU 59 */ static int32_t utf8ToTitle( const char *locale, uint32_t options, BreakIterator *iter, @@ -318,7 +454,7 @@ public: * The result may be longer or shorter than the original. * The source string and the destination buffer must not overlap. * - * @param options Options bit set, usually 0. See UCASEMAP_OMIT_UNCHANGED_TEXT, + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT, U_EDITS_NO_RESET, * U_FOLD_CASE_DEFAULT, U_FOLD_CASE_EXCLUDE_SPECIAL_I. * @param src The original string. * @param srcLength The length of the original string. If -1, then src must be NUL-terminated. @@ -331,7 +467,8 @@ public: * @param edits Records edits for index mapping, working with styled text, * and getting only changes (if any). * The Edits contents is undefined if any error occurs. - * This function calls edits->reset() first. edits can be NULL. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be NULL. * @param errorCode Reference to an in/out error code value * which must not indicate a failure before the function call. * @return The length of the result string, if successful. @@ -339,7 +476,7 @@ public: * the full length is returned and a U_BUFFER_OVERFLOW_ERROR is set. * * @see ucasemap_utf8FoldCase - * @draft ICU 59 + * @stable ICU 59 */ static int32_t utf8Fold( uint32_t options, @@ -353,8 +490,6 @@ private: CaseMap &operator=(const CaseMap &other) = delete; }; -#endif // U_HIDE_DRAFT_API - U_NAMESPACE_END #endif // U_SHOW_CPLUSPLUS_API diff --git a/icuSources/common/unicode/char16ptr.h b/icuSources/common/unicode/char16ptr.h index 0de3010a..baddd9bd 100644 --- a/icuSources/common/unicode/char16ptr.h +++ b/icuSources/common/unicode/char16ptr.h @@ -31,25 +31,23 @@ U_NAMESPACE_BEGIN # define U_ALIASING_BARRIER(ptr) asm volatile("" : : "rm"(ptr) : "memory") #endif -// Do not use #ifndef U_HIDE_DRAFT_API for the following class, it -// is now used in place of UChar* in several stable C++ methods /** * char16_t * wrapper with implicit conversion from distinct but bit-compatible pointer types. - * @draft ICU 59 + * @stable ICU 59 */ class U_COMMON_API Char16Ptr U_FINAL { public: /** * Copies the pointer. * @param p pointer - * @draft ICU 59 + * @stable ICU 59 */ inline Char16Ptr(char16_t *p); #if !U_CHAR16_IS_TYPEDEF /** * Converts the pointer to char16_t *. * @param p pointer to be converted - * @draft ICU 59 + * @stable ICU 59 */ inline Char16Ptr(uint16_t *p); #endif @@ -58,32 +56,32 @@ public: * Converts the pointer to char16_t *. * (Only defined if U_SIZEOF_WCHAR_T==2.) * @param p pointer to be converted - * @draft ICU 59 + * @stable ICU 59 */ inline Char16Ptr(wchar_t *p); #endif /** * nullptr constructor. * @param p nullptr - * @draft ICU 59 + * @stable ICU 59 */ inline Char16Ptr(std::nullptr_t p); /** * Destructor. - * @draft ICU 59 + * @stable ICU 59 */ inline ~Char16Ptr(); /** * Pointer access. * @return the wrapped pointer - * @draft ICU 59 + * @stable ICU 59 */ inline char16_t *get() const; /** * char16_t pointer access via type conversion (e.g., static_cast). * @return the wrapped pointer - * @draft ICU 59 + * @stable ICU 59 */ inline operator char16_t *() const { return get(); } @@ -96,67 +94,65 @@ private: return reinterpret_cast(t); } - char16_t *p; + char16_t *p_; #else union { char16_t *cp; uint16_t *up; wchar_t *wp; - } u; + } u_; #endif }; #ifdef U_ALIASING_BARRIER -Char16Ptr::Char16Ptr(char16_t *p) : p(p) {} +Char16Ptr::Char16Ptr(char16_t *p) : p_(p) {} #if !U_CHAR16_IS_TYPEDEF -Char16Ptr::Char16Ptr(uint16_t *p) : p(cast(p)) {} +Char16Ptr::Char16Ptr(uint16_t *p) : p_(cast(p)) {} #endif #if U_SIZEOF_WCHAR_T==2 -Char16Ptr::Char16Ptr(wchar_t *p) : p(cast(p)) {} +Char16Ptr::Char16Ptr(wchar_t *p) : p_(cast(p)) {} #endif -Char16Ptr::Char16Ptr(std::nullptr_t p) : p(p) {} +Char16Ptr::Char16Ptr(std::nullptr_t p) : p_(p) {} Char16Ptr::~Char16Ptr() { - U_ALIASING_BARRIER(p); + U_ALIASING_BARRIER(p_); } -char16_t *Char16Ptr::get() const { return p; } +char16_t *Char16Ptr::get() const { return p_; } #else -Char16Ptr::Char16Ptr(char16_t *p) { u.cp = p; } +Char16Ptr::Char16Ptr(char16_t *p) { u_.cp = p; } #if !U_CHAR16_IS_TYPEDEF -Char16Ptr::Char16Ptr(uint16_t *p) { u.up = p; } +Char16Ptr::Char16Ptr(uint16_t *p) { u_.up = p; } #endif #if U_SIZEOF_WCHAR_T==2 -Char16Ptr::Char16Ptr(wchar_t *p) { u.wp = p; } +Char16Ptr::Char16Ptr(wchar_t *p) { u_.wp = p; } #endif -Char16Ptr::Char16Ptr(std::nullptr_t p) { u.cp = p; } +Char16Ptr::Char16Ptr(std::nullptr_t p) { u_.cp = p; } Char16Ptr::~Char16Ptr() {} -char16_t *Char16Ptr::get() const { return u.cp; } +char16_t *Char16Ptr::get() const { return u_.cp; } #endif -// Do not use #ifndef U_HIDE_DRAFT_API for the following class, it is -// now used in place of const UChar* in several stable C++ methods /** * const char16_t * wrapper with implicit conversion from distinct but bit-compatible pointer types. - * @draft ICU 59 + * @stable ICU 59 */ class U_COMMON_API ConstChar16Ptr U_FINAL { public: /** * Copies the pointer. * @param p pointer - * @draft ICU 59 + * @stable ICU 59 */ inline ConstChar16Ptr(const char16_t *p); #if !U_CHAR16_IS_TYPEDEF /** * Converts the pointer to char16_t *. * @param p pointer to be converted - * @draft ICU 59 + * @stable ICU 59 */ inline ConstChar16Ptr(const uint16_t *p); #endif @@ -165,33 +161,33 @@ public: * Converts the pointer to char16_t *. * (Only defined if U_SIZEOF_WCHAR_T==2.) * @param p pointer to be converted - * @draft ICU 59 + * @stable ICU 59 */ inline ConstChar16Ptr(const wchar_t *p); #endif /** * nullptr constructor. * @param p nullptr - * @draft ICU 59 + * @stable ICU 59 */ inline ConstChar16Ptr(const std::nullptr_t p); /** * Destructor. - * @draft ICU 59 + * @stable ICU 59 */ inline ~ConstChar16Ptr(); /** * Pointer access. * @return the wrapped pointer - * @draft ICU 59 + * @stable ICU 59 */ inline const char16_t *get() const; /** * char16_t pointer access via type conversion (e.g., static_cast). * @return the wrapped pointer - * @draft ICU 59 + * @stable ICU 59 */ inline operator const char16_t *() const { return get(); } @@ -204,45 +200,45 @@ private: return reinterpret_cast(t); } - const char16_t *p; + const char16_t *p_; #else union { const char16_t *cp; const uint16_t *up; const wchar_t *wp; - } u; + } u_; #endif }; #ifdef U_ALIASING_BARRIER -ConstChar16Ptr::ConstChar16Ptr(const char16_t *p) : p(p) {} +ConstChar16Ptr::ConstChar16Ptr(const char16_t *p) : p_(p) {} #if !U_CHAR16_IS_TYPEDEF -ConstChar16Ptr::ConstChar16Ptr(const uint16_t *p) : p(cast(p)) {} +ConstChar16Ptr::ConstChar16Ptr(const uint16_t *p) : p_(cast(p)) {} #endif #if U_SIZEOF_WCHAR_T==2 -ConstChar16Ptr::ConstChar16Ptr(const wchar_t *p) : p(cast(p)) {} +ConstChar16Ptr::ConstChar16Ptr(const wchar_t *p) : p_(cast(p)) {} #endif -ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t p) : p(p) {} +ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t p) : p_(p) {} ConstChar16Ptr::~ConstChar16Ptr() { - U_ALIASING_BARRIER(p); + U_ALIASING_BARRIER(p_); } -const char16_t *ConstChar16Ptr::get() const { return p; } +const char16_t *ConstChar16Ptr::get() const { return p_; } #else -ConstChar16Ptr::ConstChar16Ptr(const char16_t *p) { u.cp = p; } +ConstChar16Ptr::ConstChar16Ptr(const char16_t *p) { u_.cp = p; } #if !U_CHAR16_IS_TYPEDEF -ConstChar16Ptr::ConstChar16Ptr(const uint16_t *p) { u.up = p; } +ConstChar16Ptr::ConstChar16Ptr(const uint16_t *p) { u_.up = p; } #endif #if U_SIZEOF_WCHAR_T==2 -ConstChar16Ptr::ConstChar16Ptr(const wchar_t *p) { u.wp = p; } +ConstChar16Ptr::ConstChar16Ptr(const wchar_t *p) { u_.wp = p; } #endif -ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t p) { u.cp = p; } +ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t p) { u_.cp = p; } ConstChar16Ptr::~ConstChar16Ptr() {} -const char16_t *ConstChar16Ptr::get() const { return u.cp; } +const char16_t *ConstChar16Ptr::get() const { return u_.cp; } #endif @@ -251,7 +247,7 @@ const char16_t *ConstChar16Ptr::get() const { return u.cp; } * Includes an aliasing barrier if available. * @param p pointer * @return p as const UChar * - * @draft ICU 59 + * @stable ICU 59 */ inline const UChar *toUCharPtr(const char16_t *p) { #ifdef U_ALIASING_BARRIER @@ -265,7 +261,7 @@ inline const UChar *toUCharPtr(const char16_t *p) { * Includes an aliasing barrier if available. * @param p pointer * @return p as UChar * - * @draft ICU 59 + * @stable ICU 59 */ inline UChar *toUCharPtr(char16_t *p) { #ifdef U_ALIASING_BARRIER @@ -279,7 +275,7 @@ inline UChar *toUCharPtr(char16_t *p) { * Includes an aliasing barrier if available. * @param p pointer * @return p as const OldUChar * - * @draft ICU 59 + * @stable ICU 59 */ inline const OldUChar *toOldUCharPtr(const char16_t *p) { #ifdef U_ALIASING_BARRIER @@ -293,7 +289,7 @@ inline const OldUChar *toOldUCharPtr(const char16_t *p) { * Includes an aliasing barrier if available. * @param p pointer * @return p as OldUChar * - * @draft ICU 59 + * @stable ICU 59 */ inline OldUChar *toOldUCharPtr(char16_t *p) { #ifdef U_ALIASING_BARRIER diff --git a/icuSources/common/unicode/chariter.h b/icuSources/common/unicode/chariter.h index 23cd84e2..218398bf 100644 --- a/icuSources/common/unicode/chariter.h +++ b/icuSources/common/unicode/chariter.h @@ -570,7 +570,7 @@ public: * Returns the numeric index in the underlying text-storage * object of the character the iterator currently refers to * (i.e., the character returned by current()). - * @return the numberic index in the text-storage object of + * @return the numeric index in the text-storage object of * the character the iterator currently refers to * @stable ICU 2.0 */ diff --git a/icuSources/common/unicode/docmain.h b/icuSources/common/unicode/docmain.h index 698e2ae5..b98da28c 100644 --- a/icuSources/common/unicode/docmain.h +++ b/icuSources/common/unicode/docmain.h @@ -139,8 +139,8 @@ * * * Number Formatting - * unum.h - * icu::NumberFormat + * unumberformatter.h, unum.h + * icu::number::NumberFormatter (ICU 60+) or icu::NumberFormat (older versions) * * * Number Spellout
(Rule Based Number Formatting) diff --git a/icuSources/common/unicode/dtintrv.h b/icuSources/common/unicode/dtintrv.h index 81b6e0ec..c7203e6e 100644 --- a/icuSources/common/unicode/dtintrv.h +++ b/icuSources/common/unicode/dtintrv.h @@ -70,7 +70,7 @@ public: *

      * .   Base* polymorphic_pointer = createPolymorphicObject();
      * .   if (polymorphic_pointer->getDynamicClassID() ==
-     * .       erived::getStaticClassID()) ...
+     * .       derived::getStaticClassID()) ...
      * 
* @return The class ID for all objects of this class. * @stable ICU 4.0 diff --git a/icuSources/common/unicode/edits.h b/icuSources/common/unicode/edits.h index fd95a8c2..a6ee0022 100644 --- a/icuSources/common/unicode/edits.h +++ b/icuSources/common/unicode/edits.h @@ -18,101 +18,223 @@ #if U_SHOW_CPLUSPLUS_API U_NAMESPACE_BEGIN -#ifndef U_HIDE_DRAFT_API +class UnicodeString; /** - * Records lengths of string edits but not replacement text. - * Supports replacements, insertions, deletions in linear progression. - * Does not support moving/reordering of text. + * Records lengths of string edits but not replacement text. Supports replacements, insertions, deletions + * in linear progression. Does not support moving/reordering of text. + * + * There are two types of edits: change edits and no-change edits. Add edits to + * instances of this class using {@link #addReplace(int, int)} (for change edits) and + * {@link #addUnchanged(int)} (for no-change edits). Change edits are retained with full granularity, + * whereas adjacent no-change edits are always merged together. In no-change edits, there is a one-to-one + * mapping between code points in the source and destination strings. + * + * After all edits have been added, instances of this class should be considered immutable, and an + * {@link Edits::Iterator} can be used for queries. + * + * There are four flavors of Edits::Iterator: + * + *
    + *
  • {@link #getFineIterator()} retains full granularity of change edits. + *
  • {@link #getFineChangesIterator()} retains full granularity of change edits, and when calling + * next() on the iterator, skips over no-change edits (unchanged regions). + *
  • {@link #getCoarseIterator()} treats adjacent change edits as a single edit. (Adjacent no-change + * edits are automatically merged during the construction phase.) + *
  • {@link #getCoarseChangesIterator()} treats adjacent change edits as a single edit, and when + * calling next() on the iterator, skips over no-change edits (unchanged regions). + *
+ * + * For example, consider the string "abcßDeF", which case-folds to "abcssdef". This string has the + * following fine edits: + *
    + *
  • abc ⇨ abc (no-change) + *
  • ß ⇨ ss (change) + *
  • D ⇨ d (change) + *
  • e ⇨ e (no-change) + *
  • F ⇨ f (change) + *
+ * and the following coarse edits (note how adjacent change edits get merged together): + *
    + *
  • abc ⇨ abc (no-change) + *
  • ßD ⇨ ssd (change) + *
  • e ⇨ e (no-change) + *
  • F ⇨ f (change) + *
+ * + * The "fine changes" and "coarse changes" iterators will step through only the change edits when their + * {@link Edits::Iterator#next()} methods are called. They are identical to the non-change iterators when + * their {@link Edits::Iterator#findSourceIndex(int)} or {@link Edits::Iterator#findDestinationIndex(int)} + * methods are used to walk through the string. + * + * For examples of how to use this class, see the test TestCaseMapEditsIteratorDocs in + * UCharacterCaseTest.java. * * An Edits object tracks a separate UErrorCode, but ICU string transformation functions * (e.g., case mapping functions) merge any such errors into their API's UErrorCode. * - * @draft ICU 59 + * @stable ICU 59 */ class U_COMMON_API Edits U_FINAL : public UMemory { public: /** * Constructs an empty object. - * @draft ICU 59 + * @stable ICU 59 */ Edits() : - array(stackArray), capacity(STACK_CAPACITY), length(0), delta(0), - errorCode(U_ZERO_ERROR) {} + array(stackArray), capacity(STACK_CAPACITY), length(0), delta(0), numChanges(0), + errorCode_(U_ZERO_ERROR) {} + /** + * Copy constructor. + * @param other source edits + * @draft ICU 60 + */ + Edits(const Edits &other) : + array(stackArray), capacity(STACK_CAPACITY), length(other.length), + delta(other.delta), numChanges(other.numChanges), + errorCode_(other.errorCode_) { + copyArray(other); + } + /** + * Move constructor, might leave src empty. + * This object will have the same contents that the source object had. + * @param src source edits + * @draft ICU 60 + */ + Edits(Edits &&src) U_NOEXCEPT : + array(stackArray), capacity(STACK_CAPACITY), length(src.length), + delta(src.delta), numChanges(src.numChanges), + errorCode_(src.errorCode_) { + moveArray(src); + } + /** * Destructor. - * @draft ICU 59 + * @stable ICU 59 */ ~Edits(); + /** + * Assignment operator. + * @param other source edits + * @return *this + * @draft ICU 60 + */ + Edits &operator=(const Edits &other); + + /** + * Move assignment operator, might leave src empty. + * This object will have the same contents that the source object had. + * The behavior is undefined if *this and src are the same object. + * @param src source edits + * @return *this + * @draft ICU 60 + */ + Edits &operator=(Edits &&src) U_NOEXCEPT; + /** * Resets the data but may not release memory. - * @draft ICU 59 + * @stable ICU 59 */ - void reset(); + void reset() U_NOEXCEPT; /** - * Adds a record for an unchanged segment of text. + * Adds a no-change edit: a record for an unchanged segment of text. * Normally called from inside ICU string transformation functions, not user code. - * @draft ICU 59 + * @stable ICU 59 */ void addUnchanged(int32_t unchangedLength); /** - * Adds a record for a text replacement/insertion/deletion. + * Adds a change edit: a record for a text replacement/insertion/deletion. * Normally called from inside ICU string transformation functions, not user code. - * @draft ICU 59 + * @stable ICU 59 */ void addReplace(int32_t oldLength, int32_t newLength); /** * Sets the UErrorCode if an error occurred while recording edits. * Preserves older error codes in the outErrorCode. * Normally called from inside ICU string transformation functions, not user code. + * @param outErrorCode Set to an error code if it does not contain one already + * and an error occurred while recording edits. + * Otherwise unchanged. * @return TRUE if U_FAILURE(outErrorCode) - * @draft ICU 59 + * @stable ICU 59 */ UBool copyErrorTo(UErrorCode &outErrorCode); /** * How much longer is the new text compared with the old text? * @return new length minus old length - * @draft ICU 59 + * @stable ICU 59 */ int32_t lengthDelta() const { return delta; } /** * @return TRUE if there are any change edits - * @draft ICU 59 + * @stable ICU 59 */ - UBool hasChanges() const; + UBool hasChanges() const { return numChanges != 0; } + +#ifndef U_HIDE_DRAFT_API + /** + * @return the number of change edits + * @draft ICU 60 + */ + int32_t numberOfChanges() const { return numChanges; } +#endif // U_HIDE_DRAFT_API /** * Access to the list of edits. + * + * At any moment in time, an instance of this class points to a single edit: a "window" into a span + * of the source string and the corresponding span of the destination string. The source string span + * starts at {@link #sourceIndex()} and runs for {@link #oldLength()} chars; the destination string + * span starts at {@link #destinationIndex()} and runs for {@link #newLength()} chars. + * + * The iterator can be moved between edits using the {@link #next()}, {@link #findSourceIndex(int)}, + * and {@link #findDestinationIndex(int)} methods. Calling any of these methods mutates the iterator + * to make it point to the corresponding edit. + * + * For more information, see the documentation for {@link Edits}. + * * @see getCoarseIterator * @see getFineIterator - * @draft ICU 59 + * @stable ICU 59 */ struct U_COMMON_API Iterator U_FINAL : public UMemory { + /** + * Default constructor, empty iterator. + * @draft ICU 60 + */ + Iterator() : + array(nullptr), index(0), length(0), + remaining(0), onlyChanges_(FALSE), coarse(FALSE), + dir(0), changed(FALSE), oldLength_(0), newLength_(0), + srcIndex(0), replIndex(0), destIndex(0) {} /** * Copy constructor. - * @draft ICU 59 + * @stable ICU 59 */ Iterator(const Iterator &other) = default; /** * Assignment operator. - * @draft ICU 59 + * @stable ICU 59 */ Iterator &operator=(const Iterator &other) = default; /** - * Advances to the next edit. + * Advances the iterator to the next edit. + * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, + * or else the function returns immediately. Check for U_FAILURE() + * on output or use with function chaining. (See User Guide for details.) * @return TRUE if there is another edit - * @draft ICU 59 + * @stable ICU 59 */ UBool next(UErrorCode &errorCode) { return next(onlyChanges_, errorCode); } /** - * Finds the edit that contains the source index. - * The source index may be found in a non-change - * even if normal iteration would skip non-changes. + * Moves the iterator to the edit that contains the source index. + * The source index may be found in a no-change edit + * even if normal iteration would skip no-change edits. * Normal iteration can continue from a found edit. * * The iterator state before this search logically does not matter. @@ -122,107 +244,273 @@ public: * if the source index is out of bounds for the source string. * * @param i source index + * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, + * or else the function returns immediately. Check for U_FAILURE() + * on output or use with function chaining. (See User Guide for details.) * @return TRUE if the edit for the source index was found - * @draft ICU 59 + * @stable ICU 59 + */ + UBool findSourceIndex(int32_t i, UErrorCode &errorCode) { + return findIndex(i, TRUE, errorCode) == 0; + } + +#ifndef U_HIDE_DRAFT_API + /** + * Moves the iterator to the edit that contains the destination index. + * The destination index may be found in a no-change edit + * even if normal iteration would skip no-change edits. + * Normal iteration can continue from a found edit. + * + * The iterator state before this search logically does not matter. + * (It may affect the performance of the search.) + * + * The iterator state after this search is undefined + * if the source index is out of bounds for the source string. + * + * @param i destination index + * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, + * or else the function returns immediately. Check for U_FAILURE() + * on output or use with function chaining. (See User Guide for details.) + * @return TRUE if the edit for the destination index was found + * @draft ICU 60 + */ + UBool findDestinationIndex(int32_t i, UErrorCode &errorCode) { + return findIndex(i, FALSE, errorCode) == 0; + } + + /** + * Computes the destination index corresponding to the given source index. + * If the source index is inside a change edit (not at its start), + * then the destination index at the end of that edit is returned, + * since there is no information about index mapping inside a change edit. + * + * (This means that indexes to the start and middle of an edit, + * for example around a grapheme cluster, are mapped to indexes + * encompassing the entire edit. + * The alternative, mapping an interior index to the start, + * would map such an interval to an empty one.) + * + * This operation will usually but not always modify this object. + * The iterator state after this search is undefined. + * + * @param i source index + * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, + * or else the function returns immediately. Check for U_FAILURE() + * on output or use with function chaining. (See User Guide for details.) + * @return destination index; undefined if i is not 0..string length + * @draft ICU 60 */ - UBool findSourceIndex(int32_t i, UErrorCode &errorCode); + int32_t destinationIndexFromSourceIndex(int32_t i, UErrorCode &errorCode); /** + * Computes the source index corresponding to the given destination index. + * If the destination index is inside a change edit (not at its start), + * then the source index at the end of that edit is returned, + * since there is no information about index mapping inside a change edit. + * + * (This means that indexes to the start and middle of an edit, + * for example around a grapheme cluster, are mapped to indexes + * encompassing the entire edit. + * The alternative, mapping an interior index to the start, + * would map such an interval to an empty one.) + * + * This operation will usually but not always modify this object. + * The iterator state after this search is undefined. + * + * @param i destination index + * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, + * or else the function returns immediately. Check for U_FAILURE() + * on output or use with function chaining. (See User Guide for details.) + * @return source index; undefined if i is not 0..string length + * @draft ICU 60 + */ + int32_t sourceIndexFromDestinationIndex(int32_t i, UErrorCode &errorCode); +#endif // U_HIDE_DRAFT_API + + /** + * Returns whether the edit currently represented by the iterator is a change edit. + * * @return TRUE if this edit replaces oldLength() units with newLength() different ones. * FALSE if oldLength units remain unchanged. - * @draft ICU 59 + * @stable ICU 59 */ UBool hasChange() const { return changed; } + /** + * The length of the current span in the source string, which starts at {@link #sourceIndex}. + * * @return the number of units in the original string which are replaced or remain unchanged. - * @draft ICU 59 + * @stable ICU 59 */ int32_t oldLength() const { return oldLength_; } + /** + * The length of the current span in the destination string, which starts at + * {@link #destinationIndex}, or in the replacement string, which starts at + * {@link #replacementIndex}. + * * @return the number of units in the modified string, if hasChange() is TRUE. * Same as oldLength if hasChange() is FALSE. - * @draft ICU 59 + * @stable ICU 59 */ int32_t newLength() const { return newLength_; } /** + * The start index of the current span in the source string; the span has length + * {@link #oldLength}. + * * @return the current index into the source string - * @draft ICU 59 + * @stable ICU 59 */ int32_t sourceIndex() const { return srcIndex; } + /** + * The start index of the current span in the replacement string; the span has length + * {@link #newLength}. Well-defined only if the current edit is a change edit. + *

+ * The replacement string is the concatenation of all substrings of the destination + * string corresponding to change edits. + *

+ * This method is intended to be used together with operations that write only replacement + * characters (e.g., {@link CaseMap#omitUnchangedText()}). The source string can then be modified + * in-place. + * * @return the current index into the replacement-characters-only string, * not counting unchanged spans - * @draft ICU 59 + * @stable ICU 59 */ - int32_t replacementIndex() const { return replIndex; } + int32_t replacementIndex() const { + // TODO: Throw an exception if we aren't in a change edit? + return replIndex; + } + /** + * The start index of the current span in the destination string; the span has length + * {@link #newLength}. + * * @return the current index into the full destination string - * @draft ICU 59 + * @stable ICU 59 */ int32_t destinationIndex() const { return destIndex; } +#ifndef U_HIDE_INTERNAL_API + /** + * A string representation of the current edit represented by the iterator for debugging. You + * should not depend on the contents of the return string. + * @internal + */ + UnicodeString& toString(UnicodeString& appendTo) const; +#endif // U_HIDE_INTERNAL_API + private: friend class Edits; Iterator(const uint16_t *a, int32_t len, UBool oc, UBool crs); int32_t readLength(int32_t head); - void updateIndexes(); + void updateNextIndexes(); + void updatePreviousIndexes(); UBool noNext(); UBool next(UBool onlyChanges, UErrorCode &errorCode); + UBool previous(UErrorCode &errorCode); + /** @return -1: error or i<0; 0: found; 1: i>=string length */ + int32_t findIndex(int32_t i, UBool findSource, UErrorCode &errorCode); const uint16_t *array; int32_t index, length; + // 0 if we are not within compressed equal-length changes. + // Otherwise the number of remaining changes, including the current one. int32_t remaining; UBool onlyChanges_, coarse; + int8_t dir; // iteration direction: back(<0), initial(0), forward(>0) UBool changed; int32_t oldLength_, newLength_; int32_t srcIndex, replIndex, destIndex; }; /** - * Returns an Iterator for coarse-grained changes for simple string updates. - * Skips non-changes. + * Returns an Iterator for coarse-grained change edits + * (adjacent change edits are treated as one). + * Can be used to perform simple string updates. + * Skips no-change edits. * @return an Iterator that merges adjacent changes. - * @draft ICU 59 + * @stable ICU 59 */ Iterator getCoarseChangesIterator() const { return Iterator(array, length, TRUE, TRUE); } /** - * Returns an Iterator for coarse-grained changes and non-changes for simple string updates. + * Returns an Iterator for coarse-grained change and no-change edits + * (adjacent change edits are treated as one). + * Can be used to perform simple string updates. + * Adjacent change edits are treated as one edit. * @return an Iterator that merges adjacent changes. - * @draft ICU 59 + * @stable ICU 59 */ Iterator getCoarseIterator() const { return Iterator(array, length, FALSE, TRUE); } /** - * Returns an Iterator for fine-grained changes for modifying styled text. - * Skips non-changes. + * Returns an Iterator for fine-grained change edits + * (full granularity of change edits is retained). + * Can be used for modifying styled text. + * Skips no-change edits. * @return an Iterator that separates adjacent changes. - * @draft ICU 59 + * @stable ICU 59 */ Iterator getFineChangesIterator() const { return Iterator(array, length, TRUE, FALSE); } /** - * Returns an Iterator for fine-grained changes and non-changes for modifying styled text. + * Returns an Iterator for fine-grained change and no-change edits + * (full granularity of change edits is retained). + * Can be used for modifying styled text. * @return an Iterator that separates adjacent changes. - * @draft ICU 59 + * @stable ICU 59 */ Iterator getFineIterator() const { return Iterator(array, length, FALSE, FALSE); } +#ifndef U_HIDE_DRAFT_API + /** + * Merges the two input Edits and appends the result to this object. + * + * Consider two string transformations (for example, normalization and case mapping) + * where each records Edits in addition to writing an output string.
+ * Edits ab reflect how substrings of input string a + * map to substrings of intermediate string b.
+ * Edits bc reflect how substrings of intermediate string b + * map to substrings of output string c.
+ * This function merges ab and bc such that the additional edits + * recorded in this object reflect how substrings of input string a + * map to substrings of output string c. + * + * If unrelated Edits are passed in where the output string of the first + * has a different length than the input string of the second, + * then a U_ILLEGAL_ARGUMENT_ERROR is reported. + * + * @param ab reflects how substrings of input string a + * map to substrings of intermediate string b. + * @param bc reflects how substrings of intermediate string b + * map to substrings of output string c. + * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, + * or else the function returns immediately. Check for U_FAILURE() + * on output or use with function chaining. (See User Guide for details.) + * @return *this, with the merged edits appended + * @draft ICU 60 + */ + Edits &mergeAndAppend(const Edits &ab, const Edits &bc, UErrorCode &errorCode); +#endif // U_HIDE_DRAFT_API + private: - Edits(const Edits &) = delete; - Edits &operator=(const Edits &) = delete; + void releaseArray() U_NOEXCEPT; + Edits ©Array(const Edits &other); + Edits &moveArray(Edits &src) U_NOEXCEPT; void setLastUnit(int32_t last) { array[length - 1] = (uint16_t)last; } int32_t lastUnit() const { return length > 0 ? array[length - 1] : 0xffff; } @@ -235,12 +523,11 @@ private: int32_t capacity; int32_t length; int32_t delta; - UErrorCode errorCode; + int32_t numChanges; + UErrorCode errorCode_; uint16_t stackArray[STACK_CAPACITY]; }; -#endif // U_HIDE_DRAFT_API - U_NAMESPACE_END #endif // U_SHOW_CPLUSPLUS_API diff --git a/icuSources/common/unicode/filteredbrk.h b/icuSources/common/unicode/filteredbrk.h index ed37584c..9368dfd1 100644 --- a/icuSources/common/unicode/filteredbrk.h +++ b/icuSources/common/unicode/filteredbrk.h @@ -56,14 +56,28 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { */ static FilteredBreakIteratorBuilder *createInstance(const Locale& where, UErrorCode& status); +#ifndef U_HIDE_DEPRECATED_API + /** + * This function has been deprecated in favor of createEmptyInstance, which has + * identical behavior. + * @param status The error code. + * @return the new builder + * @deprecated ICU 60 use createEmptyInstance instead + * @see createEmptyInstance() + */ + static FilteredBreakIteratorBuilder *createInstance(UErrorCode &status); +#endif /* U_HIDE_DEPRECATED_API */ + +#ifndef U_HIDE_DRAFT_API /** * Construct an empty FilteredBreakIteratorBuilder. * In this state, it will not suppress any segment boundaries. * @param status The error code. * @return the new builder - * @stable ICU 56 + * @draft ICU 60 */ - static FilteredBreakIteratorBuilder *createInstance(UErrorCode &status); + static FilteredBreakIteratorBuilder *createEmptyInstance(UErrorCode &status); +#endif /* U_HIDE_DRAFT_API */ /** * Suppress a certain string from being the end of a segment. @@ -90,6 +104,18 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { */ virtual UBool unsuppressBreakAfter(const UnicodeString& string, UErrorCode& status) = 0; + /** + * This function has been deprecated in favor of wrapIteratorWithFilter() + * The behavior is identical. + * @param adoptBreakIterator the break iterator to adopt + * @param status error code + * @return the new BreakIterator, owned by the caller. + * @deprecated ICU 60 use wrapIteratorWithFilter() instead + * @see wrapBreakIteratorWithFilter() + */ + virtual BreakIterator *build(BreakIterator* adoptBreakIterator, UErrorCode& status) = 0; + +#ifndef U_HIDE_DRAFT_API /** * Wrap (adopt) an existing break iterator in a new filtered instance. * The resulting BreakIterator is owned by the caller. @@ -97,12 +123,16 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * Note that the adoptBreakIterator is adopted by the new BreakIterator * and should no longer be used by the caller. * The FilteredBreakIteratorBuilder may be reused. + * This function is an alias for build() * @param adoptBreakIterator the break iterator to adopt * @param status error code * @return the new BreakIterator, owned by the caller. - * @stable ICU 56 + * @draft ICU 60 */ - virtual BreakIterator *build(BreakIterator* adoptBreakIterator, UErrorCode& status) = 0; + inline BreakIterator *wrapIteratorWithFilter(BreakIterator* adoptBreakIterator, UErrorCode& status) { + return build(adoptBreakIterator, status); + } +#endif /* U_HIDE_DRAFT_API */ protected: /** diff --git a/icuSources/common/unicode/localpointer.h b/icuSources/common/unicode/localpointer.h index 3ab82018..e17ee3d8 100644 --- a/icuSources/common/unicode/localpointer.h +++ b/icuSources/common/unicode/localpointer.h @@ -213,7 +213,6 @@ public: errorCode=U_MEMORY_ALLOCATION_ERROR; } } -#if U_HAVE_RVALUE_REFERENCES /** * Move constructor, leaves src with isNull(). * @param src source smart pointer @@ -222,7 +221,6 @@ public: LocalPointer(LocalPointer &&src) U_NOEXCEPT : LocalPointerBase(src.ptr) { src.ptr=NULL; } -#endif /** * Destructor deletes the object it owns. * @stable ICU 4.4 @@ -230,7 +228,6 @@ public: ~LocalPointer() { delete LocalPointerBase::ptr; } -#if U_HAVE_RVALUE_REFERENCES /** * Move assignment operator, leaves src with isNull(). * The behavior is undefined if *this and src are the same object. @@ -241,7 +238,6 @@ public: LocalPointer &operator=(LocalPointer &&src) U_NOEXCEPT { return moveFrom(src); } -#endif // do not use #ifndef U_HIDE_DRAFT_API for moveFrom, needed by non-draft API /** * Move assignment, leaves src with isNull(). @@ -362,7 +358,6 @@ public: errorCode=U_MEMORY_ALLOCATION_ERROR; } } -#if U_HAVE_RVALUE_REFERENCES /** * Move constructor, leaves src with isNull(). * @param src source smart pointer @@ -371,7 +366,6 @@ public: LocalArray(LocalArray &&src) U_NOEXCEPT : LocalPointerBase(src.ptr) { src.ptr=NULL; } -#endif /** * Destructor deletes the array it owns. * @stable ICU 4.4 @@ -379,7 +373,6 @@ public: ~LocalArray() { delete[] LocalPointerBase::ptr; } -#if U_HAVE_RVALUE_REFERENCES /** * Move assignment operator, leaves src with isNull(). * The behavior is undefined if *this and src are the same object. @@ -390,7 +383,6 @@ public: LocalArray &operator=(LocalArray &&src) U_NOEXCEPT { return moveFrom(src); } -#endif // do not use #ifndef U_HIDE_DRAFT_API for moveFrom, needed by non-draft API /** * Move assignment, leaves src with isNull(). @@ -492,7 +484,6 @@ public: * @see LocalPointer * @stable ICU 4.4 */ -#if U_HAVE_RVALUE_REFERENCES #define U_DEFINE_LOCAL_OPEN_POINTER(LocalPointerClassName, Type, closeFunction) \ class LocalPointerClassName : public LocalPointerBase { \ public: \ @@ -526,34 +517,6 @@ public: ptr=p; \ } \ } -#else -#define U_DEFINE_LOCAL_OPEN_POINTER(LocalPointerClassName, Type, closeFunction) \ - class LocalPointerClassName : public LocalPointerBase { \ - public: \ - using LocalPointerBase::operator*; \ - using LocalPointerBase::operator->; \ - explicit LocalPointerClassName(Type *p=NULL) : LocalPointerBase(p) {} \ - ~LocalPointerClassName() { closeFunction(ptr); } \ - LocalPointerClassName &moveFrom(LocalPointerClassName &src) U_NOEXCEPT { \ - if (ptr != NULL) { closeFunction(ptr); } \ - LocalPointerBase::ptr=src.ptr; \ - src.ptr=NULL; \ - return *this; \ - } \ - void swap(LocalPointerClassName &other) U_NOEXCEPT { \ - Type *temp=LocalPointerBase::ptr; \ - LocalPointerBase::ptr=other.ptr; \ - other.ptr=temp; \ - } \ - friend inline void swap(LocalPointerClassName &p1, LocalPointerClassName &p2) U_NOEXCEPT { \ - p1.swap(p2); \ - } \ - void adoptInstead(Type *p) { \ - if (ptr != NULL) { closeFunction(ptr); } \ - ptr=p; \ - } \ - } -#endif U_NAMESPACE_END diff --git a/icuSources/common/unicode/locid.h b/icuSources/common/unicode/locid.h index 28412f06..fa4d85f0 100644 --- a/icuSources/common/unicode/locid.h +++ b/icuSources/common/unicode/locid.h @@ -89,7 +89,7 @@ class UnicodeString; *

* The third constructor requires a third argument--the Variant. * The Variant codes are vendor and browser-specific. - * For example, use REVISED for a langauge's revised script orthography, and POSIX for POSIX. + * For example, use REVISED for a language's revised script orthography, and POSIX for POSIX. * Where there are two variants, separate them with an underscore, and * put the most important one first. For * example, a Traditional Spanish collation might be referenced, with @@ -354,7 +354,7 @@ public: * the default locale ID of the runtime environment. * * @param newLocale Locale to set to. If NULL, set to the value obtained - * from the runtime environement. + * from the runtime environment. * @param success The error code. * @system * @stable ICU 2.0 @@ -630,7 +630,7 @@ public: /** * Fills in "name" with the name of this locale in a format suitable for user display - * in the locale specfied by "displayLocale". This function uses getDisplayLanguage(), + * in the locale specified by "displayLocale". This function uses getDisplayLanguage(), * getDisplayCountry(), and getDisplayVariant() to do its work, and outputs the display * name in the format "language (country[,variant])". For example, if displayLocale is * fr_FR, then en_US's display name would be "Anglais (États-Unis)", and no_NO_NY's diff --git a/icuSources/common/unicode/normalizer2.h b/icuSources/common/unicode/normalizer2.h index f9eba67d..56723d95 100644 --- a/icuSources/common/unicode/normalizer2.h +++ b/icuSources/common/unicode/normalizer2.h @@ -28,6 +28,7 @@ #if !UCONFIG_NO_NORMALIZATION +#include "unicode/stringpiece.h" #include "unicode/uniset.h" #include "unicode/unistr.h" #include "unicode/unorm2.h" @@ -35,6 +36,8 @@ #if U_SHOW_CPLUSPLUS_API U_NAMESPACE_BEGIN +class ByteSink; + /** * Unicode normalization functionality for standard Unicode normalization or * for using custom mapping tables. @@ -216,6 +219,35 @@ public: normalize(const UnicodeString &src, UnicodeString &dest, UErrorCode &errorCode) const = 0; + + /** + * Normalizes a UTF-8 string and optionally records how source substrings + * relate to changed and unchanged result substrings. + * + * Currently implemented completely only for "compose" modes, + * such as for NFC, NFKC, and NFKC_Casefold + * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS). + * Otherwise currently converts to & from UTF-16 and does not support edits. + * + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. + * @param src Source UTF-8 string. + * @param sink A ByteSink to which the normalized UTF-8 result string is written. + * sink.Flush() is called at the end. + * @param edits Records edits for index mapping, working with styled text, + * and getting only changes (if any). + * The Edits contents is undefined if any error occurs. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be nullptr. + * @param errorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @draft ICU 60 + */ + virtual void + normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink, + Edits *edits, UErrorCode &errorCode) const; + /** * Appends the normalized form of the second string to the first string * (merging them at the boundary) and returns the first string. @@ -341,6 +373,30 @@ public: */ virtual UBool isNormalized(const UnicodeString &s, UErrorCode &errorCode) const = 0; + /** + * Tests if the UTF-8 string is normalized. + * Internally, in cases where the quickCheck() method would return "maybe" + * (which is only possible for the two COMPOSE modes) this method + * resolves to "yes" or "no" to provide a definitive result, + * at the cost of doing more work in those cases. + * + * This works for all normalization modes, + * but it is currently optimized for UTF-8 only for "compose" modes, + * such as for NFC, NFKC, and NFKC_Casefold + * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS). + * For other modes it currently converts to UTF-16 and calls isNormalized(). + * + * @param s UTF-8 input string + * @param errorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return TRUE if s is normalized + * @draft ICU 60 + */ + virtual UBool + isNormalizedUTF8(StringPiece s, UErrorCode &errorCode) const; + /** * Tests if the string is normalized. @@ -480,7 +536,36 @@ public: virtual UnicodeString & normalize(const UnicodeString &src, UnicodeString &dest, - UErrorCode &errorCode) const; + UErrorCode &errorCode) const U_OVERRIDE; + + /** + * Normalizes a UTF-8 string and optionally records how source substrings + * relate to changed and unchanged result substrings. + * + * Currently implemented completely only for "compose" modes, + * such as for NFC, NFKC, and NFKC_Casefold + * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS). + * Otherwise currently converts to & from UTF-16 and does not support edits. + * + * @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET. + * @param src Source UTF-8 string. + * @param sink A ByteSink to which the normalized UTF-8 result string is written. + * sink.Flush() is called at the end. + * @param edits Records edits for index mapping, working with styled text, + * and getting only changes (if any). + * The Edits contents is undefined if any error occurs. + * This function calls edits->reset() first unless + * options includes U_EDITS_NO_RESET. edits can be nullptr. + * @param errorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @draft ICU 60 + */ + virtual void + normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink, + Edits *edits, UErrorCode &errorCode) const U_OVERRIDE; + /** * Appends the normalized form of the second string to the first string * (merging them at the boundary) and returns the first string. @@ -498,7 +583,7 @@ public: virtual UnicodeString & normalizeSecondAndAppend(UnicodeString &first, const UnicodeString &second, - UErrorCode &errorCode) const; + UErrorCode &errorCode) const U_OVERRIDE; /** * Appends the second string to the first string * (merging them at the boundary) and returns the first string. @@ -516,7 +601,7 @@ public: virtual UnicodeString & append(UnicodeString &first, const UnicodeString &second, - UErrorCode &errorCode) const; + UErrorCode &errorCode) const U_OVERRIDE; /** * Gets the decomposition mapping of c. @@ -530,7 +615,7 @@ public: * @stable ICU 4.6 */ virtual UBool - getDecomposition(UChar32 c, UnicodeString &decomposition) const; + getDecomposition(UChar32 c, UnicodeString &decomposition) const U_OVERRIDE; /** * Gets the raw decomposition mapping of c. @@ -544,7 +629,7 @@ public: * @stable ICU 49 */ virtual UBool - getRawDecomposition(UChar32 c, UnicodeString &decomposition) const; + getRawDecomposition(UChar32 c, UnicodeString &decomposition) const U_OVERRIDE; /** * Performs pairwise composition of a & b and returns the composite if there is one. @@ -557,7 +642,7 @@ public: * @stable ICU 49 */ virtual UChar32 - composePair(UChar32 a, UChar32 b) const; + composePair(UChar32 a, UChar32 b) const U_OVERRIDE; /** * Gets the combining class of c. @@ -568,7 +653,7 @@ public: * @stable ICU 49 */ virtual uint8_t - getCombiningClass(UChar32 c) const; + getCombiningClass(UChar32 c) const U_OVERRIDE; /** * Tests if the string is normalized. @@ -582,7 +667,30 @@ public: * @stable ICU 4.4 */ virtual UBool - isNormalized(const UnicodeString &s, UErrorCode &errorCode) const; + isNormalized(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE; + /** + * Tests if the UTF-8 string is normalized. + * Internally, in cases where the quickCheck() method would return "maybe" + * (which is only possible for the two COMPOSE modes) this method + * resolves to "yes" or "no" to provide a definitive result, + * at the cost of doing more work in those cases. + * + * This works for all normalization modes, + * but it is currently optimized for UTF-8 only for "compose" modes, + * such as for NFC, NFKC, and NFKC_Casefold + * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS). + * For other modes it currently converts to UTF-16 and calls isNormalized(). + * + * @param s UTF-8 input string + * @param errorCode Standard ICU error code. Its input value must + * pass the U_SUCCESS() test, or else the function returns + * immediately. Check for U_FAILURE() on output or use with + * function chaining. (See User Guide for details.) + * @return TRUE if s is normalized + * @draft ICU 60 + */ + virtual UBool + isNormalizedUTF8(StringPiece s, UErrorCode &errorCode) const U_OVERRIDE; /** * Tests if the string is normalized. * For details see the Normalizer2 base class documentation. @@ -595,7 +703,7 @@ public: * @stable ICU 4.4 */ virtual UNormalizationCheckResult - quickCheck(const UnicodeString &s, UErrorCode &errorCode) const; + quickCheck(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE; /** * Returns the end of the normalized substring of the input string. * For details see the Normalizer2 base class documentation. @@ -608,7 +716,7 @@ public: * @stable ICU 4.4 */ virtual int32_t - spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const; + spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE; /** * Tests if the character always has a normalization boundary before it, @@ -618,7 +726,7 @@ public: * @return TRUE if c has a normalization boundary before it * @stable ICU 4.4 */ - virtual UBool hasBoundaryBefore(UChar32 c) const; + virtual UBool hasBoundaryBefore(UChar32 c) const U_OVERRIDE; /** * Tests if the character always has a normalization boundary after it, @@ -628,7 +736,7 @@ public: * @return TRUE if c has a normalization boundary after it * @stable ICU 4.4 */ - virtual UBool hasBoundaryAfter(UChar32 c) const; + virtual UBool hasBoundaryAfter(UChar32 c) const U_OVERRIDE; /** * Tests if the character is normalization-inert. @@ -637,7 +745,7 @@ public: * @return TRUE if c is normalization-inert * @stable ICU 4.4 */ - virtual UBool isInert(UChar32 c) const; + virtual UBool isInert(UChar32 c) const U_OVERRIDE; private: UnicodeString & normalize(const UnicodeString &src, @@ -645,6 +753,12 @@ private: USetSpanCondition spanCondition, UErrorCode &errorCode) const; + void + normalizeUTF8(uint32_t options, const char *src, int32_t length, + ByteSink &sink, Edits *edits, + USetSpanCondition spanCondition, + UErrorCode &errorCode) const; + UnicodeString & normalizeSecondAndAppend(UnicodeString &first, const UnicodeString &second, diff --git a/icuSources/common/unicode/parseerr.h b/icuSources/common/unicode/parseerr.h index fc1e3f4c..c23cc273 100644 --- a/icuSources/common/unicode/parseerr.h +++ b/icuSources/common/unicode/parseerr.h @@ -58,9 +58,9 @@ enum { U_PARSE_CONTEXT_LEN = 16 }; typedef struct UParseError { /** - * The line on which the error occured. If the parser uses this + * The line on which the error occurred. If the parser uses this * field, it sets it to the line number of the source text line on - * which the error appears, which will be be a value >= 1. If the + * which the error appears, which will be a value >= 1. If the * parse does not support line numbers, the value will be <= 0. * @stable ICU 2.0 */ diff --git a/icuSources/common/unicode/platform.h b/icuSources/common/unicode/platform.h index 057182d3..7a3a87a0 100644 --- a/icuSources/common/unicode/platform.h +++ b/icuSources/common/unicode/platform.h @@ -132,6 +132,8 @@ #define U_PF_BROWSER_NATIVE_CLIENT 4020 /** Android is based on Linux. @internal */ #define U_PF_ANDROID 4050 +/** Fuchsia is a POSIX-ish platform. @internal */ +#define U_PF_FUCHSIA 4100 /* Maximum value for Linux-based platform is 4499 */ /** z/OS is the successor to OS/390 which was the successor to MVS. @internal */ #define U_PF_OS390 9000 @@ -152,6 +154,8 @@ # include #elif defined(__pnacl__) || defined(__native_client__) # define U_PLATFORM U_PF_BROWSER_NATIVE_CLIENT +#elif defined(__Fuchsia__) +# define U_PLATFORM U_PF_FUCHSIA #elif defined(linux) || defined(__linux__) || defined(__linux) # define U_PLATFORM U_PF_LINUX #elif defined(__APPLE__) && defined(__MACH__) @@ -330,31 +334,6 @@ # define U_HAVE_INTTYPES_H U_HAVE_STDINT_H #endif -/** - * \def U_IOSTREAM_SOURCE - * Defines what support for C++ streams is available. - * - * If U_IOSTREAM_SOURCE is set to 199711, then <iostream> is available - * (the ISO/IEC C++ FDIS was published in November 1997), and then - * one should qualify streams using the std namespace in ICU header - * files. - * Starting with ICU 49, this is the only supported version. - * - * If U_IOSTREAM_SOURCE is set to 198506, then <iostream.h> is - * available instead (in June 1985 Stroustrup published - * "An Extensible I/O Facility for C++" at the summer USENIX conference). - * Starting with ICU 49, this version is not supported any more. - * - * If U_IOSTREAM_SOURCE is 0 (or any value less than 199711), - * then C++ streams are not available and - * support for them will be silently suppressed in ICU. - * - * @internal - */ -#ifndef U_IOSTREAM_SOURCE -#define U_IOSTREAM_SOURCE 199711 -#endif - /*===========================================================================*/ /** @{ Compiler and environment features */ /*===========================================================================*/ @@ -489,9 +468,9 @@ /* Otherwise use the predefined value. */ #elif !defined(__cplusplus) # define U_CPLUSPLUS_VERSION 0 -#elif __cplusplus >= 201402L +#elif __cplusplus >= 201402L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L) # define U_CPLUSPLUS_VERSION 14 -#elif __cplusplus >= 201103L +#elif __cplusplus >= 201103L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201103L) # define U_CPLUSPLUS_VERSION 11 #else // C++98 or C++03 @@ -505,22 +484,6 @@ namespace std { }; #endif -/** - * \def U_HAVE_RVALUE_REFERENCES - * Set to 1 if the compiler supports rvalue references. - * C++11 feature, necessary for move constructor & move assignment. - * @internal - */ -#ifdef U_HAVE_RVALUE_REFERENCES - /* Use the predefined value. */ -#elif U_CPLUSPLUS_VERSION >= 11 || __has_feature(cxx_rvalue_references) \ - || defined(__GXX_EXPERIMENTAL_CXX0X__) \ - || (defined(_MSC_VER) && _MSC_VER >= 1600) /* Visual Studio 2010 */ -# define U_HAVE_RVALUE_REFERENCES 1 -#else -# define U_HAVE_RVALUE_REFERENCES 0 -#endif - /** * \def U_NOEXCEPT * "noexcept" if supported, otherwise empty. @@ -654,7 +617,7 @@ namespace std { */ #ifdef U_CHARSET_IS_UTF8 /* Use the predefined value. */ -#elif U_PLATFORM == U_PF_ANDROID || U_PLATFORM_IS_DARWIN_BASED +#elif U_PLATFORM_IS_LINUX_BASED || U_PLATFORM_IS_DARWIN_BASED # define U_CHARSET_IS_UTF8 1 #else # define U_CHARSET_IS_UTF8 0 @@ -772,8 +735,10 @@ namespace std { #else /* * Notes: - * Visual Studio 10 (_MSC_VER>=1600) defines char16_t but - * does not support u"abc" string literals. + * Visual Studio 2010 (_MSC_VER==1600) defines char16_t as a typedef + * and does not support u"abc" string literals. + * Visual Studio 2015 (_MSC_VER>=1900) and above adds support for + * both char16_t and u"abc" string literals. * gcc 4.4 defines the __CHAR16_TYPE__ macro to a usable type but * does not support u"abc" string literals. * C++11 and C11 require support for UTF-16 literals @@ -871,6 +836,16 @@ namespace std { # define U_CALLCONV U_EXPORT2 #endif +/** + * \def U_CALLCONV_FPTR + * Similar to U_CALLCONV, but only used on function pointers. + * @internal + */ +#if U_PLATFORM == U_PF_OS390 && defined(__cplusplus) +# define U_CALLCONV_FPTR U_CALLCONV +#else +# define U_CALLCONV_FPTR +#endif /* @} */ #endif diff --git a/icuSources/common/unicode/putil.h b/icuSources/common/unicode/putil.h index 406551a8..759b136c 100644 --- a/icuSources/common/unicode/putil.h +++ b/icuSources/common/unicode/putil.h @@ -38,7 +38,7 @@ /** * Platform utilities isolates the platform dependencies of the - * libarary. For each platform which this code is ported to, these + * library. For each platform which this code is ported to, these * functions may have to be re-implemented. */ @@ -53,7 +53,7 @@ * The data directory is determined as follows: * If u_setDataDirectory() has been called, that is it, otherwise * if the ICU_DATA environment variable is set, use that, otherwise - * If a data directory was specifed at ICU build time + * If a data directory was specified at ICU build time * * \code * #define ICU_DATA_DIR "path" @@ -93,7 +93,7 @@ U_STABLE void U_EXPORT2 u_setDataDirectory(const char *directory); #ifndef U_HIDE_INTERNAL_API /** * Return the time zone files override directory, or an empty string if - * no directory was specified. Certain time zone resources will be preferrentially + * no directory was specified. Certain time zone resources will be preferentially * loaded from individual files in this directory. * * @return the time zone data override directory. diff --git a/icuSources/common/unicode/rbbi.h b/icuSources/common/unicode/rbbi.h index 8575368a..ff98c56f 100644 --- a/icuSources/common/unicode/rbbi.h +++ b/icuSources/common/unicode/rbbi.h @@ -29,26 +29,18 @@ #include "unicode/udata.h" #include "unicode/parseerr.h" #include "unicode/schriter.h" -#include "unicode/uchriter.h" - - -struct UTrie; +// for Apple addition: +#include "unicode/urbtok.h" #if U_SHOW_CPLUSPLUS_API U_NAMESPACE_BEGIN /** @internal */ +class LanguageBreakEngine; struct RBBIDataHeader; -class RuleBasedBreakIteratorTables; -class BreakIterator; class RBBIDataWrapper; -class UStack; -class LanguageBreakEngine; class UnhandledEngine; -struct RBBIStateTable; - - - +class UStack; /** * @@ -63,83 +55,53 @@ struct RBBIStateTable; */ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { -// The following was changed from protected to private per #12071. -// However Apple code needs these, so change back to protected. -protected: +private: /** * The UText through which this BreakIterator accesses the text - * @internal - */ - UText *fText; - - /** - * A character iterator that refers to the same text as the UText, above. - * Only included for compatibility with old API, which was based on CharacterIterators. - * Value may be adopted from outside, or one of fSCharIter or fDCharIter, below. - */ - CharacterIterator *fCharIter; - - /** - * When the input text is provided by a UnicodeString, this will point to - * a characterIterator that wraps that data. Needed only for the - * implementation of getText(), a backwards compatibility issue. + * @internal (private) */ - StringCharacterIterator *fSCharIter; - - /** - * When the input text is provided by a UText, this - * dummy CharacterIterator over an empty string will - * be returned from getText() - */ - UCharCharacterIterator *fDCharIter; + UText fText; +#ifndef U_HIDE_INTERNAL_API +public: +#endif /* U_HIDE_INTERNAL_API */ /** - * The rule data for this BreakIterator instance + * The rule data for this BreakIterator instance. + * Not for general use; Public only for testing purposes. * @internal */ RBBIDataWrapper *fData; - - /** Index of the Rule {tag} values for the most recent match. - * @internal - */ - int32_t fLastRuleStatusIndex; +private: /** - * Rule tag value valid flag. - * Some iterator operations don't intrinsically set the correct tag value. - * This flag lets us lazily compute the value if we are ever asked for it. - * @internal + * Character categories for the Latin1 subset of Unicode + * @internal Apple-only */ - UBool fLastStatusIndexValid; + uint16_t *fLatin1Cat; /** - * Counter for the number of characters encountered with the "dictionary" - * flag set. - * @internal - */ - uint32_t fDictionaryCharCount; + * The current position of the iterator. Pinned, 0 < fPosition <= text.length. + * Never has the value UBRK_DONE (-1). + */ + int32_t fPosition; /** - * When a range of characters is divided up using the dictionary, the break - * positions that are discovered are stored here, preventing us from having - * to use either the dictionary or the state table again until the iterator - * leaves this range of text. Has the most impact for line breaking. - * @internal - */ - int32_t* fCachedBreakPositions; + * TODO: + */ + int32_t fRuleStatusIndex; /** - * The number of elements in fCachedBreakPositions - * @internal + * Cache of previously determined boundary positions. */ - int32_t fNumCachedBreakPositions; + class BreakCache; + BreakCache *fBreakCache; /** - * if fCachedBreakPositions is not null, this indicates which item in the - * cache the current iteration position refers to - * @internal + * Cache of boundary positions within a region of text that has been + * sub-divided by dictionary based breaking. */ - int32_t fPositionInCache; + class DictionaryCache; + DictionaryCache *fDictionaryCache; /** * @@ -160,29 +122,38 @@ protected: UnhandledEngine *fUnhandledBreakEngine; /** - * - * The type of the break iterator, or -1 if it has not been set. + * Counter for the number of characters encountered with the "dictionary" + * flag set. * @internal */ - int32_t fBreakType; + uint32_t fDictionaryCharCount; - //======================================================================= - // constructors - //======================================================================= + /** + * A character iterator that refers to the same text as the UText, above. + * Only included for compatibility with old API, which was based on CharacterIterators. + * Value may be adopted from outside, or one of fSCharIter or fDCharIter, below. + */ + CharacterIterator *fCharIter; /** - * Open-source ICU eliminated this enum in #12071, restored here since Apple needs it - * Constant to be used in the constructor - * RuleBasedBreakIterator(RBBIDataHeader*, EDontAdopt, UErrorCode &); - * which does not adopt the memory indicated by the RBBIDataHeader* - * parameter. - * - * @internal + * When the input text is provided by a UnicodeString, this will point to + * a characterIterator that wraps that data. Needed only for the + * implementation of getText(), a backwards compatibility issue. */ - enum EDontAdopt { - kDontAdopt - }; + StringCharacterIterator fSCharIter; + + /** + * True when iteration has run off the end, and iterator functions should return UBRK_DONE. + */ + UBool fDone; + //======================================================================= + // constructors + //======================================================================= + +// The following is intended to be private in open-source. +// However Apple needs it to be public for urbtok.cpp +public: /** * Constructor from a flattened set of RBBI data in malloced memory. * RulesBasedBreakIterators built from a custom set of rules @@ -194,25 +165,13 @@ protected: * @internal */ RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status); +private: - /** - * Open-source ICU eliminated this method in #12071, restored here since Apple needs it - * Constructor from a flattened set of RBBI data in memory which need not - * be malloced (e.g. it may be a memory-mapped file, etc.). - * - * This version does not adopt the memory, and does not - * free it when done. - * @internal - */ - RuleBasedBreakIterator(const RBBIDataHeader* data, enum EDontAdopt dontAdopt, UErrorCode &status); - - + /** @internal */ friend class RBBIRuleBuilder; /** @internal */ friend class BreakIterator; - - public: /** Default constructor. Creates an empty shell of an iterator, with no @@ -242,17 +201,17 @@ public: UErrorCode &status); /** - * Contruct a RuleBasedBreakIterator from a set of precompiled binary rules. + * Construct a RuleBasedBreakIterator from a set of precompiled binary rules. * Binary rules are obtained from RulesBasedBreakIterator::getBinaryRules(). * Construction of a break iterator in this way is substantially faster than - * constuction from source rules. + * construction from source rules. * * Ownership of the storage containing the compiled rules remains with the * caller of this function. The compiled rules must not be modified or * deleted during the life of the break iterator. * * The compiled rules are not compatible across different major versions of ICU. - * The compiled rules are comaptible only between machines with the same + * The compiled rules are compatible only between machines with the same * byte ordering (little or big endian) and the same base character set family * (ASCII or EBCDIC). * @@ -321,7 +280,7 @@ public: * behavior, and iterating over the same text, as this one. * Differs from the copy constructor in that it is polymorphic, and * will correctly clone (copy) a derived class. - * clone() is thread safe. Multiple threads may simultaeneously + * clone() is thread safe. Multiple threads may simultaneously * clone the same source break iterator. * @return a newly-constructed RuleBasedBreakIterator * @stable ICU 2.0 @@ -486,7 +445,7 @@ public: virtual int32_t preceding(int32_t offset); /** - * Returns true if the specfied position is a boundary position. As a side + * Returns true if the specified position is a boundary position. As a side * effect, leaves the iterator pointing to the first boundary position at * or after "offset". * @param offset the offset to check. @@ -496,7 +455,10 @@ public: virtual UBool isBoundary(int32_t offset); /** - * Returns the current iteration position. + * Returns the current iteration position. Note that UBRK_DONE is never + * returned from this function; if iteration has run to the end of a + * string, current() will return the length of the string while + * next() will return UBRK_DONE). * @return The current iteration position. * @stable ICU 2.0 */ @@ -504,8 +466,8 @@ public: /** - * Return the status tag from the break rule that determined the most recently - * returned break position. For break rules that do not specify a + * Return the status tag from the break rule that determined the boundary at + * the current iteration position. For break rules that do not specify a * status, a default value of 0 is returned. If more than one break rule * would cause a boundary to be located at some position in the text, * the numerically largest of the applicable status values is returned. @@ -522,15 +484,14 @@ public: * position from next(), previous(), or * any other break iterator functions that returns a boundary position. *

+ * Note that getRuleStatus() returns the value corresponding to + * current() index even after next() has returned DONE. + *

* When creating custom break rules, one is free to define whatever * status values may be convenient for the application. *

- * Note: this function is not thread safe. It should not have been - * declared const, and the const remains only for compatibility - * reasons. (The function is logically const, but not bit-wise const). - *

- * @return the status from the break rule that determined the most recently - * returned break position. + * @return the status from the break rule that determined the boundary + * at the current iteration position. * * @see UWordBreak * @stable ICU 2.2 @@ -538,8 +499,8 @@ public: virtual int32_t getRuleStatus() const; /** - * Get the status (tag) values from the break rule(s) that determined the most - * recently returned break position. + * Get the status (tag) values from the break rule(s) that determined the boundary + * at the current iteration position. *

* The returned status value(s) are stored into an array provided by the caller. * The values are stored in sorted (ascending) order. @@ -550,10 +511,10 @@ public: * @param fillInVec an array to be filled in with the status values. * @param capacity the length of the supplied vector. A length of zero causes * the function to return the number of status values, in the - * normal way, without attemtping to store any values. + * normal way, without attempting to store any values. * @param status receives error codes. - * @return The number of rule status values from rules that determined - * the most recent boundary returned by the break iterator. + * @return The number of rule status values from the rules that determined + * the boundary at the current iteration position. * In the event of a U_BUFFER_OVERFLOW_ERROR, the return value * is the total number of status values that were available, * not the reduced number that were actually returned. @@ -562,6 +523,23 @@ public: */ virtual int32_t getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status); + /** + * Apple custom extension + * Initializes Latin1 category + * @internal + */ + void initLatin1Cat(void); + + /** + * Apple custom extension + * Fetch the next set of tokens. + * @param maxTokens The maximum number of tokens to return. + * @param outTokenRanges Pointer to output array of token ranges. + * @param outTokenFlags (optional) pointer to output array of token flags. + * @internal + */ + int32_t tokenize(int32_t maxTokens, RuleBasedTokenRange *outTokenRanges, unsigned long *outTokenFlags); + /** * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. * This method is to implement a simple version of RTTI, since not all @@ -593,7 +571,7 @@ public: * * Create a clone (copy) of this break iterator in memory provided * by the caller. The idea is to increase performance by avoiding - * a storage allocation. Use of this functoin is NOT RECOMMENDED. + * a storage allocation. Use of this function is NOT RECOMMENDED. * Performance gains are minimal, and correct buffer management is * tricky. Use clone() instead. * @@ -606,7 +584,7 @@ public: * storage for the cloned object. * * @param status Error status. U_SAFECLONE_ALLOCATED_WARNING will be - * returned if the the provided buffer was too small, and + * returned if the provided buffer was too small, and * the clone was therefore put on the heap. * * @return Pointer to the clone object. This may differ from the stackBuffer @@ -629,7 +607,7 @@ public: * The binary data can only be used with the same version of ICU * and on the same platform type (processor endian-ness) * - * @param length Returns the length of the binary data. (Out paramter.) + * @param length Returns the length of the binary data. (Out parameter.) * * @return A pointer to the binary (compiled) rule data. The storage * belongs to the RulesBasedBreakIterator object, not the @@ -666,88 +644,73 @@ public: virtual RuleBasedBreakIterator &refreshInputText(UText *input, UErrorCode &status); -// The following was changed from protected to private per #12071. -// However Apple code needs these, so change back to protected. -protected: +private: //======================================================================= // implementation //======================================================================= /** * Dumps caches and performs other actions associated with a complete change * in text or iteration position. - * @internal + * @internal (private) */ void reset(void); - /** - * Set the type of the break iterator. - * @internal - */ - void setBreakType(int32_t type); - /** * Common initialization function, used by constructors and bufferClone. - * @internal + * @internal (private) */ - void init(); - -private: - - /** - * This method backs the iterator back up to a "safe position" in the text. - * This is a position that we know, without any context, must be a break position. - * The various calling methods then iterate forward from this safe position to - * the appropriate position to return. (For more information, see the description - * of buildBackwardsStateTable() in RuleBasedBreakIterator.Builder.) - * @param statetable state table used of moving backwards - * @internal - */ - int32_t handlePrevious(const RBBIStateTable *statetable); + void init(UErrorCode &status); /** - * This method is the actual implementation of the next() method. All iteration - * vectors through here. This method initializes the state machine to state 1 - * and advances through the text character by character until we reach the end - * of the text or the state machine transitions to state 0. We update our return - * value every time the state machine passes through a possible end state. - * @param statetable state table used of moving forwards - * @internal + * Iterate backwards from an arbitrary position in the input text using the + * synthesized Safe Reverse rules. + * This locates a "Safe Position" from which the forward break rules + * will operate correctly. A Safe Position is not necessarily a boundary itself. + * + * @param fromPosition the position in the input text to begin the iteration. + * @internal (private) */ - int32_t handleNext(const RBBIStateTable *statetable); - -protected: + int32_t handleSafePrevious(int32_t fromPosition); /** - * This is the function that actually implements dictionary-based - * breaking. Covering at least the range from startPos to endPos, - * it checks for dictionary characters, and if it finds them determines - * the appropriate object to deal with them. It may cache found breaks in - * fCachedBreakPositions as it goes. It may well also look at text outside - * the range startPos to endPos. - * If going forward, endPos is the normal Unicode break result, and - * if goind in reverse, startPos is the normal Unicode break result - * @param startPos The start position of a range of text - * @param endPos The end position of a range of text - * @param reverse The call is for the reverse direction - * @internal + * Find a rule-based boundary by running the state machine. + * Input + * fPosition, the position in the text to begin from. + * Output + * fPosition: the boundary following the starting position. + * fDictionaryCharCount the number of dictionary characters encountered. + * If > 0, the segment will be further subdivided + * fRuleStatusIndex Info from the state table indicating which rules caused the boundary. + * + * @internal (private) */ - int32_t checkDictionary(int32_t startPos, int32_t endPos, UBool reverse); + int32_t handleNext(); + int32_t handleNextInternal(); -private: /** * This function returns the appropriate LanguageBreakEngine for a * given character c. * @param c A character in the dictionary set - * @internal + * @internal (private) */ const LanguageBreakEngine *getLanguageBreakEngine(UChar32 c); + public: +#ifndef U_HIDE_INTERNAL_API /** - * @internal + * Debugging function only. + * @internal + */ + void dumpCache(); + + /** + * Debugging function only. + * @internal */ - void makeRuleStatusValid(); + void dumpTables(); +#endif /* U_HIDE_INTERNAL_API */ }; //------------------------------------------------------------------------------ diff --git a/icuSources/common/unicode/resbund.h b/icuSources/common/unicode/resbund.h index 725e3d05..4904b6e3 100644 --- a/icuSources/common/unicode/resbund.h +++ b/icuSources/common/unicode/resbund.h @@ -133,7 +133,7 @@ public: ResourceBundle(UErrorCode &err); /** - * Standard constructor, onstructs a resource bundle for the locale-specific + * Standard constructor, constructs a resource bundle for the locale-specific * bundle in the specified package. * * @param packageName The packageName and locale together point to an ICU udata object, diff --git a/icuSources/common/unicode/schriter.h b/icuSources/common/unicode/schriter.h index 5281e3a8..29360e72 100644 --- a/icuSources/common/unicode/schriter.h +++ b/icuSources/common/unicode/schriter.h @@ -70,7 +70,7 @@ public: * Create an iterator over the UnicodeString referred to by "textStr". * The UnicodeString object is copied. * The iteration range begins with the code unit specified by - * "textBegin" and ends with the code unit BEFORE the code unit specfied + * "textBegin" and ends with the code unit BEFORE the code unit specified * by "textEnd". The starting position is specified by "textPos". If * "textBegin" and "textEnd" don't form a valid range on "text" (i.e., * textBegin >= textEnd or either is negative or greater than text.size()), diff --git a/icuSources/common/unicode/simpleformatter.h b/icuSources/common/unicode/simpleformatter.h index e111a718..0e891ed3 100644 --- a/icuSources/common/unicode/simpleformatter.h +++ b/icuSources/common/unicode/simpleformatter.h @@ -22,6 +22,13 @@ #if U_SHOW_CPLUSPLUS_API U_NAMESPACE_BEGIN +// Forward declaration: +namespace number { +namespace impl { +class SimpleModifier; +} +} + /** * Formats simple patterns like "{1} was born in {0}". * Minimal subset of MessageFormat; fast, simple, minimal dependencies. @@ -287,6 +294,9 @@ private: UnicodeString &result, const UnicodeString *resultCopy, UBool forbidResultAsValue, int32_t *offsets, int32_t offsetsLength, UErrorCode &errorCode); + + // Give access to internals to SimpleModifier for number formatting + friend class number::impl::SimpleModifier; }; U_NAMESPACE_END diff --git a/icuSources/common/unicode/stringoptions.h b/icuSources/common/unicode/stringoptions.h new file mode 100644 index 00000000..f2de96e9 --- /dev/null +++ b/icuSources/common/unicode/stringoptions.h @@ -0,0 +1,198 @@ +// © 2017 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +// stringoptions.h +// created: 2017jun08 Markus W. Scherer + +#ifndef __STRINGOPTIONS_H__ +#define __STRINGOPTIONS_H__ + +#include "unicode/utypes.h" + +/** + * \file + * \brief C API: Bit set option bit constants for various string and character processing functions. + */ + +/** + * Option value for case folding: Use default mappings defined in CaseFolding.txt. + * + * @stable ICU 2.0 + */ +#define U_FOLD_CASE_DEFAULT 0 + +/** + * Option value for case folding: + * + * Use the modified set of mappings provided in CaseFolding.txt to handle dotted I + * and dotless i appropriately for Turkic languages (tr, az). + * + * Before Unicode 3.2, CaseFolding.txt contains mappings marked with 'I' that + * are to be included for default mappings and + * excluded for the Turkic-specific mappings. + * + * Unicode 3.2 CaseFolding.txt instead contains mappings marked with 'T' that + * are to be excluded for default mappings and + * included for the Turkic-specific mappings. + * + * @stable ICU 2.0 + */ +#define U_FOLD_CASE_EXCLUDE_SPECIAL_I 1 + +#ifndef U_HIDE_DRAFT_API + +/** + * Titlecase the string as a whole rather than each word. + * (Titlecase only the character at index 0, possibly adjusted.) + * Option bits value for titlecasing APIs that take an options bit set. + * + * It is an error to specify multiple titlecasing iterator options together, + * including both an options bit and an explicit BreakIterator. + * + * @see U_TITLECASE_ADJUST_TO_CASED + * @draft ICU 60 + */ +#define U_TITLECASE_WHOLE_STRING 0x20 + +/** + * Titlecase sentences rather than words. + * (Titlecase only the first character of each sentence, possibly adjusted.) + * Option bits value for titlecasing APIs that take an options bit set. + * + * It is an error to specify multiple titlecasing iterator options together, + * including both an options bit and an explicit BreakIterator. + * + * @see U_TITLECASE_ADJUST_TO_CASED + * @draft ICU 60 + */ +#define U_TITLECASE_SENTENCES 0x40 + +#endif // U_HIDE_DRAFT_API + +/** + * Do not lowercase non-initial parts of words when titlecasing. + * Option bit for titlecasing APIs that take an options bit set. + * + * By default, titlecasing will titlecase the character at each + * (possibly adjusted) BreakIterator index and + * lowercase all other characters up to the next iterator index. + * With this option, the other characters will not be modified. + * + * @see U_TITLECASE_ADJUST_TO_CASED + * @see UnicodeString::toTitle + * @see CaseMap::toTitle + * @see ucasemap_setOptions + * @see ucasemap_toTitle + * @see ucasemap_utf8ToTitle + * @stable ICU 3.8 + */ +#define U_TITLECASE_NO_LOWERCASE 0x100 + +/** + * Do not adjust the titlecasing BreakIterator indexes; + * titlecase exactly the characters at breaks from the iterator. + * Option bit for titlecasing APIs that take an options bit set. + * + * By default, titlecasing will take each break iterator index, + * adjust it to the next relevant character (see U_TITLECASE_ADJUST_TO_CASED), + * and titlecase that one. + * + * Other characters are lowercased. + * + * It is an error to specify multiple titlecasing adjustment options together. + * + * @see U_TITLECASE_ADJUST_TO_CASED + * @see U_TITLECASE_NO_LOWERCASE + * @see UnicodeString::toTitle + * @see CaseMap::toTitle + * @see ucasemap_setOptions + * @see ucasemap_toTitle + * @see ucasemap_utf8ToTitle + * @stable ICU 3.8 + */ +#define U_TITLECASE_NO_BREAK_ADJUSTMENT 0x200 + +#ifndef U_HIDE_DRAFT_API + +/** + * Adjust each titlecasing BreakIterator index to the next cased character. + * (See the Unicode Standard, chapter 3, Default Case Conversion, R3 toTitlecase(X).) + * Option bit for titlecasing APIs that take an options bit set. + * + * This used to be the default index adjustment in ICU. + * Since ICU 60, the default index adjustment is to the next character that is + * a letter, number, symbol, or private use code point. + * (Uncased modifier letters are skipped.) + * The difference in behavior is small for word titlecasing, + * but the new adjustment is much better for whole-string and sentence titlecasing: + * It yields "49ers" and "«丰(abc)»" instead of "49Ers" and "«丰(Abc)»". + * + * It is an error to specify multiple titlecasing adjustment options together. + * + * @see U_TITLECASE_NO_BREAK_ADJUSTMENT + * @draft ICU 60 + */ +#define U_TITLECASE_ADJUST_TO_CASED 0x400 + +/** + * Option for string transformation functions to not first reset the Edits object. + * Used for example in some case-mapping and normalization functions. + * + * @see CaseMap + * @see Edits + * @see Normalizer2 + * @draft ICU 60 + */ +#define U_EDITS_NO_RESET 0x2000 + +/** + * Omit unchanged text when recording how source substrings + * relate to changed and unchanged result substrings. + * Used for example in some case-mapping and normalization functions. + * + * @see CaseMap + * @see Edits + * @see Normalizer2 + * @draft ICU 60 + */ +#define U_OMIT_UNCHANGED_TEXT 0x4000 + +#endif // U_HIDE_DRAFT_API + +/** + * Option bit for u_strCaseCompare, u_strcasecmp, unorm_compare, etc: + * Compare strings in code point order instead of code unit order. + * @stable ICU 2.2 + */ +#define U_COMPARE_CODE_POINT_ORDER 0x8000 + +/** + * Option bit for unorm_compare: + * Perform case-insensitive comparison. + * @stable ICU 2.2 + */ +#define U_COMPARE_IGNORE_CASE 0x10000 + +/** + * Option bit for unorm_compare: + * Both input strings are assumed to fulfill FCD conditions. + * @stable ICU 2.2 + */ +#define UNORM_INPUT_IS_FCD 0x20000 + +// Related definitions elsewhere. +// Options that are not meaningful in the same functions +// can share the same bits. +// +// Public: +// unicode/unorm.h #define UNORM_COMPARE_NORM_OPTIONS_SHIFT 20 +// +// Internal: (may change or be removed) +// ucase.h #define _STRCASECMP_OPTIONS_MASK 0xffff +// ucase.h #define _FOLD_CASE_OPTIONS_MASK 7 +// ucasemap_imp.h #define U_TITLECASE_ITERATOR_MASK 0xe0 +// ucasemap_imp.h #define U_TITLECASE_ADJUSTMENT_MASK 0x600 +// ustr_imp.h #define _STRNCMP_STYLE 0x1000 +// unormcmp.cpp #define _COMPARE_EQUIV 0x80000 + +#endif // __STRINGOPTIONS_H__ diff --git a/icuSources/common/unicode/stringtriebuilder.h b/icuSources/common/unicode/stringtriebuilder.h index 42329048..46776a2e 100644 --- a/icuSources/common/unicode/stringtriebuilder.h +++ b/icuSources/common/unicode/stringtriebuilder.h @@ -257,7 +257,7 @@ protected: /** @internal */ class FinalValueNode : public Node { public: - FinalValueNode(int32_t v) : Node(0x111111*37+v), value(v) {} + FinalValueNode(int32_t v) : Node(0x111111u*37u+v), value(v) {} virtual UBool operator==(const Node &other) const; virtual void write(StringTrieBuilder &builder); protected: @@ -277,7 +277,7 @@ protected: void setValue(int32_t v) { hasValue=TRUE; value=v; - hash=hash*37+v; + hash=hash*37u+v; } protected: UBool hasValue; @@ -291,7 +291,7 @@ protected: class IntermediateValueNode : public ValueNode { public: IntermediateValueNode(int32_t v, Node *nextNode) - : ValueNode(0x222222*37+hashCode(nextNode)), next(nextNode) { setValue(v); } + : ValueNode(0x222222u*37u+hashCode(nextNode)), next(nextNode) { setValue(v); } virtual UBool operator==(const Node &other) const; virtual int32_t markRightEdgesFirst(int32_t edgeNumber); virtual void write(StringTrieBuilder &builder); @@ -308,7 +308,7 @@ protected: class LinearMatchNode : public ValueNode { public: LinearMatchNode(int32_t len, Node *nextNode) - : ValueNode((0x333333*37+len)*37+hashCode(nextNode)), + : ValueNode((0x333333u*37u+len)*37u+hashCode(nextNode)), length(len), next(nextNode) {} virtual UBool operator==(const Node &other) const; virtual int32_t markRightEdgesFirst(int32_t edgeNumber); @@ -343,7 +343,7 @@ protected: equal[length]=NULL; values[length]=value; ++length; - hash=(hash*37+c)*37+value; + hash=(hash*37u+c)*37u+value; } // Adds a unit which leads to another match node. void add(int32_t c, Node *node) { @@ -351,7 +351,7 @@ protected: equal[length]=node; values[length]=0; ++length; - hash=(hash*37+c)*37+hashCode(node); + hash=(hash*37u+c)*37u+hashCode(node); } protected: Node *equal[kMaxBranchLinearSubNodeLength]; // NULL means "has final value". @@ -366,8 +366,8 @@ protected: class SplitBranchNode : public BranchNode { public: SplitBranchNode(char16_t middleUnit, Node *lessThanNode, Node *greaterOrEqualNode) - : BranchNode(((0x555555*37+middleUnit)*37+ - hashCode(lessThanNode))*37+hashCode(greaterOrEqualNode)), + : BranchNode(((0x555555u*37u+middleUnit)*37u+ + hashCode(lessThanNode))*37u+hashCode(greaterOrEqualNode)), unit(middleUnit), lessThan(lessThanNode), greaterOrEqual(greaterOrEqualNode) {} virtual UBool operator==(const Node &other) const; virtual int32_t markRightEdgesFirst(int32_t edgeNumber); @@ -383,7 +383,7 @@ protected: class BranchHeadNode : public ValueNode { public: BranchHeadNode(int32_t len, Node *subNode) - : ValueNode((0x666666*37+len)*37+hashCode(subNode)), + : ValueNode((0x666666u*37u+len)*37u+hashCode(subNode)), length(len), next(subNode) {} virtual UBool operator==(const Node &other) const; virtual int32_t markRightEdgesFirst(int32_t edgeNumber); diff --git a/icuSources/common/unicode/ubidi.h b/icuSources/common/unicode/ubidi.h index c969f36d..1a9cb8fc 100644 --- a/icuSources/common/unicode/ubidi.h +++ b/icuSources/common/unicode/ubidi.h @@ -692,7 +692,7 @@ typedef enum UBiDiReorderingMode { * @stable ICU 3.6 */ UBIDI_REORDER_DEFAULT = 0, /** Logical to Visual algorithm which handles numbers in a way which - * mimicks the behavior of Windows XP. + * mimics the behavior of Windows XP. * @stable ICU 3.6 */ UBIDI_REORDER_NUMBERS_SPECIAL, /** Logical to Visual algorithm grouping numbers with adjacent R characters diff --git a/icuSources/common/unicode/ubiditransform.h b/icuSources/common/unicode/ubiditransform.h index c75a4f5e..12d45d7d 100644 --- a/icuSources/common/unicode/ubiditransform.h +++ b/icuSources/common/unicode/ubiditransform.h @@ -23,8 +23,6 @@ #include "unicode/uchar.h" #include "unicode/localpointer.h" -#ifndef U_HIDE_DRAFT_API - /** * \file * \brief Bidi Transformations @@ -60,17 +58,17 @@ * @see UBIDI_REORDER_DEFAULT * @see UBIDI_REORDER_INVERSE_LIKE_DIRECT * @see UBIDI_REORDER_RUNS_ONLY - * @draft ICU 58 + * @stable ICU 58 */ typedef enum { /** 0: Constant indicating a logical order. * This is the default for input text. - * @draft ICU 58 + * @stable ICU 58 */ UBIDI_LOGICAL = 0, /** 1: Constant indicating a visual order. * This is a default for output text. - * @draft ICU 58 + * @stable ICU 58 */ UBIDI_VISUAL } UBiDiOrder; @@ -83,20 +81,20 @@ typedef enum { * @see ubidi_setReorderingOptions * @see ubidi_writeReordered * @see ubidi_writeReverse - * @draft ICU 58 + * @stable ICU 58 */ typedef enum { /** 0: Constant indicating that character mirroring should not be * performed. * This is the default. - * @draft ICU 58 + * @stable ICU 58 */ UBIDI_MIRRORING_OFF = 0, /** 1: Constant indicating that character mirroring should be performed. * This corresponds to calling ubidi_writeReordered or * ubidi_writeReverse with the * UBIDI_DO_MIRRORING option bit set. - * @draft ICU 58 + * @stable ICU 58 */ UBIDI_MIRRORING_ON } UBiDiMirroring; @@ -104,7 +102,7 @@ typedef enum { /** * Forward declaration of the UBiDiTransform structure that stores * information used by the layout transformation engine. - * @draft ICU 58 + * @stable ICU 58 */ typedef struct UBiDiTransform UBiDiTransform; @@ -240,9 +238,9 @@ typedef struct UBiDiTransform UBiDiTransform; * @see UBiDiMirroring * @see ubidi_setPara * @see u_shapeArabic - * @draft ICU 58 + * @stable ICU 58 */ -U_DRAFT uint32_t U_EXPORT2 +U_STABLE uint32_t U_EXPORT2 ubiditransform_transform(UBiDiTransform *pBiDiTransform, const UChar *src, int32_t srcLength, UChar *dest, int32_t destSize, @@ -286,16 +284,16 @@ ubiditransform_transform(UBiDiTransform *pBiDiTransform, * ubiditransform_close(). * * @return An empty UBiDiTransform object. - * @draft ICU 58 + * @stable ICU 58 */ -U_DRAFT UBiDiTransform* U_EXPORT2 +U_STABLE UBiDiTransform* U_EXPORT2 ubiditransform_open(UErrorCode *pErrorCode); /** * Deallocates the given UBiDiTransform object. - * @draft ICU 58 + * @stable ICU 58 */ -U_DRAFT void U_EXPORT2 +U_STABLE void U_EXPORT2 ubiditransform_close(UBiDiTransform *pBidiTransform); #if U_SHOW_CPLUSPLUS_API @@ -309,7 +307,7 @@ U_NAMESPACE_BEGIN * * @see LocalPointerBase * @see LocalPointer - * @draft ICU 58 + * @stable ICU 58 */ U_DEFINE_LOCAL_OPEN_POINTER(LocalUBiDiTransformPointer, UBiDiTransform, ubiditransform_close); @@ -317,5 +315,4 @@ U_NAMESPACE_END #endif // U_SHOW_CPLUSPLUS_API -#endif /* U_HIDE_DRAFT_API */ #endif diff --git a/icuSources/common/unicode/ubrk.h b/icuSources/common/unicode/ubrk.h index 1f114fe9..532083fc 100644 --- a/icuSources/common/unicode/ubrk.h +++ b/icuSources/common/unicode/ubrk.h @@ -221,6 +221,25 @@ typedef enum USentenceBreakTag { } USentenceBreakTag; +/** + * Masks to control line break word options (per the CSS word-break property). + * NORMAL allows breaks between CJK characters in the middle of words. Other masks + * prohibit breaks between characters of specific scripts (or all scripts) except as + * determined by a dictionary, or by spaces or other mechanisms (Western-style breaking). + * + * @internal Apple only +*/ +typedef enum ULineWordOptions { + /** Allow breaks between characters of all CJK scripts */ + UBRK_LINEWORD_NORMAL = 0, + /** Prevent breaks between Hangul characters, except as determined by a dictionary. */ + UBRK_LINEWORD_KEEP_HANGUL = 1, + /** Prevent breaks between characters of any script, except as determined by a dictionary. */ + UBRK_LINEWORD_KEEP_ALL = 0x7F +} ULineWordOptions; + + + /** * Open a new UBreakIterator for locating text boundaries for a specified locale. * A UBreakIterator may be used for detecting character, line, word, @@ -230,7 +249,8 @@ typedef enum USentenceBreakTag { * @param locale The locale specifying the text-breaking conventions. Note that * locale keys such as "lb" and "ss" may be used to modify text break behavior, * see general discussion of BreakIterator C API. - * @param text The text to be iterated over. + * @param text The text to be iterated over. May be null, in which case ubrk_setText() is + * used to specify the text to be iterated. * @param textLength The number of characters in text, or -1 if null-terminated. * @param status A UErrorCode to receive any errors. * @return A UBreakIterator for the specified locale. @@ -267,7 +287,6 @@ ubrk_openRules(const UChar *rules, UParseError *parseErr, UErrorCode *status); -#ifndef U_HIDE_DRAFT_API /** * Open a new UBreakIterator for locating text boundaries using precompiled binary rules. * Opening a UBreakIterator this way is substantially faster than using ubrk_openRules. @@ -286,15 +305,13 @@ ubrk_openRules(const UChar *rules, * @param status Pointer to UErrorCode to receive any errors. * @return UBreakIterator for the specified rules. * @see ubrk_getBinaryRules - * @draft ICU 59 + * @stable ICU 59 */ -U_DRAFT UBreakIterator* U_EXPORT2 +U_STABLE UBreakIterator* U_EXPORT2 ubrk_openBinaryRules(const uint8_t *binaryRules, int32_t rulesLength, const UChar * text, int32_t textLength, UErrorCode * status); -#endif /* U_HIDE_DRAFT_API */ - /** * Thread safe cloning operation * @param bi iterator to be cloned @@ -358,6 +375,20 @@ U_NAMESPACE_END #endif // U_SHOW_CPLUSPLUS_API +#ifndef U_HIDE_INTERNAL_API +/** + * Set the ULineWordOptions for the specified break iterator. + * + * @param bi The iterator to use + * @param lineWordOpts The ULineWordOptions to set. + * @internal Apple only + */ +U_INTERNAL void U_EXPORT2 +ubrk_setLineWordOpts(UBreakIterator* bi, + ULineWordOptions lineWordOpts); + +#endif /* U_HIDE_INTERNAL_API */ + /** * Sets an existing iterator to point to a new piece of text. * The break iterator retains a pointer to the supplied text. @@ -509,7 +540,7 @@ ubrk_countAvailable(void); /** -* Returns true if the specfied position is a boundary position. As a side +* Returns true if the specified position is a boundary position. As a side * effect, leaves the iterator pointing to the first boundary position at * or after "offset". * @param bi The break iterator to use. @@ -543,7 +574,7 @@ ubrk_getRuleStatus(UBreakIterator *bi); * @param fillInVec an array to be filled in with the status values. * @param capacity the length of the supplied vector. A length of zero causes * the function to return the number of status values, in the - * normal way, without attemtping to store any values. + * normal way, without attempting to store any values. * @param status receives error codes. * @return The number of rule status values from rules that determined * the most recent boundary returned by the break iterator. @@ -595,7 +626,6 @@ ubrk_refreshUText(UBreakIterator *bi, UErrorCode *status); -#ifndef U_HIDE_DRAFT_API /** * Get a compiled binary version of the rules specifying the behavior of a UBreakIterator. * The binary rules may be used with ubrk_openBinaryRules to open a new UBreakIterator @@ -619,15 +649,13 @@ ubrk_refreshUText(UBreakIterator *bi, * otherwise 0. If not preflighting and this is larger than * rulesCapacity, *status will be set to an error. * @see ubrk_openBinaryRules - * @draft ICU 59 + * @stable ICU 59 */ -U_DRAFT int32_t U_EXPORT2 +U_STABLE int32_t U_EXPORT2 ubrk_getBinaryRules(UBreakIterator *bi, uint8_t * binaryRules, int32_t rulesCapacity, UErrorCode * status); -#endif /* U_HIDE_DRAFT_API */ - #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ #endif diff --git a/icuSources/common/unicode/ucasemap.h b/icuSources/common/unicode/ucasemap.h index f4663ef7..e00d7eae 100644 --- a/icuSources/common/unicode/ucasemap.h +++ b/icuSources/common/unicode/ucasemap.h @@ -23,6 +23,7 @@ #include "unicode/utypes.h" #include "unicode/localpointer.h" +#include "unicode/stringoptions.h" #include "unicode/ustring.h" /** @@ -144,56 +145,6 @@ ucasemap_setLocale(UCaseMap *csm, const char *locale, UErrorCode *pErrorCode); U_STABLE void U_EXPORT2 ucasemap_setOptions(UCaseMap *csm, uint32_t options, UErrorCode *pErrorCode); -/** - * Do not lowercase non-initial parts of words when titlecasing. - * Option bit for titlecasing APIs that take an options bit set. - * - * By default, titlecasing will titlecase the first cased character - * of a word and lowercase all other characters. - * With this option, the other characters will not be modified. - * - * @see ucasemap_setOptions - * @see ucasemap_toTitle - * @see ucasemap_utf8ToTitle - * @see UnicodeString::toTitle - * @stable ICU 3.8 - */ -#define U_TITLECASE_NO_LOWERCASE 0x100 - -/** - * Do not adjust the titlecasing indexes from BreakIterator::next() indexes; - * titlecase exactly the characters at breaks from the iterator. - * Option bit for titlecasing APIs that take an options bit set. - * - * By default, titlecasing will take each break iterator index, - * adjust it by looking for the next cased character, and titlecase that one. - * Other characters are lowercased. - * - * This follows Unicode 4 & 5 section 3.13 Default Case Operations: - * - * R3 toTitlecase(X): Find the word boundaries based on Unicode Standard Annex - * #29, "Text Boundaries." Between each pair of word boundaries, find the first - * cased character F. If F exists, map F to default_title(F); then map each - * subsequent character C to default_lower(C). - * - * @see ucasemap_setOptions - * @see ucasemap_toTitle - * @see ucasemap_utf8ToTitle - * @see UnicodeString::toTitle - * @see U_TITLECASE_NO_LOWERCASE - * @stable ICU 3.8 - */ -#define U_TITLECASE_NO_BREAK_ADJUSTMENT 0x200 - -/** - * Omit unchanged text when case-mapping with Edits. - * - * @see CaseMap - * @see Edits - * @draft ICU 59 - */ -#define UCASEMAP_OMIT_UNCHANGED_TEXT 0x4000 - #if !UCONFIG_NO_BREAK_ITERATION /** @@ -251,7 +202,7 @@ ucasemap_setBreakIterator(UCaseMap *csm, UBreakIterator *iterToAdopt, UErrorCode * The standard titlecase iterator for the root locale implements the * algorithm of Unicode TR 21. * - * This function uses only the setUText(), first(), next() and close() methods of the + * This function uses only the setText(), first() and next() methods of the * provided break iterator. * * The result may be longer or shorter than the original. diff --git a/icuSources/common/unicode/uchar.h b/icuSources/common/unicode/uchar.h index bca55b15..6d31083e 100644 --- a/icuSources/common/unicode/uchar.h +++ b/icuSources/common/unicode/uchar.h @@ -26,6 +26,7 @@ #define UCHAR_H #include "unicode/utypes.h" +#include "unicode/stringoptions.h" U_CDECL_BEGIN @@ -41,7 +42,7 @@ U_CDECL_BEGIN * @see u_getUnicodeVersion * @stable ICU 2.0 */ -#define U_UNICODE_VERSION "10.0" +#define U_UNICODE_VERSION "11.0" /** * \file @@ -111,11 +112,11 @@ U_CDECL_BEGIN * Comparison: * - u_isUWhiteSpace=UCHAR_WHITE_SPACE: Unicode White_Space property; * most of general categories "Z" (separators) + most whitespace ISO controls - * (including no-break spaces, but excluding IS1..IS4 and ZWSP) + * (including no-break spaces, but excluding IS1..IS4) * - u_isWhitespace: Java isWhitespace; Z + whitespace ISO controls but excluding no-break spaces * - u_isJavaSpaceChar: Java isSpaceChar; just Z (including no-break spaces) * - u_isspace: Z + whitespace ISO controls (including no-break spaces) - * - u_isblank: "horizontal spaces" = TAB + Zs - ZWSP + * - u_isblank: "horizontal spaces" = TAB + Zs */ /** @@ -445,6 +446,13 @@ typedef enum UProperty { * @stable ICU 60 */ UCHAR_PREPENDED_CONCATENATION_MARK=63, + /** + * Binary property Extended_Pictographic. + * See http://www.unicode.org/reports/tr51/#Emoji_Properties + * + * @stable ICU 62 + */ + UCHAR_EXTENDED_PICTOGRAPHIC=64, #ifndef U_HIDE_DEPRECATED_API /** * One more than the last constant for binary Unicode properties. @@ -1682,6 +1690,31 @@ enum UBlockCode { /** @stable ICU 60 */ UBLOCK_ZANABAZAR_SQUARE = 280, /*[11A00]*/ + // New blocks in Unicode 11.0 + + /** @stable ICU 62 */ + UBLOCK_CHESS_SYMBOLS = 281, /*[1FA00]*/ + /** @stable ICU 62 */ + UBLOCK_DOGRA = 282, /*[11800]*/ + /** @stable ICU 62 */ + UBLOCK_GEORGIAN_EXTENDED = 283, /*[1C90]*/ + /** @stable ICU 62 */ + UBLOCK_GUNJALA_GONDI = 284, /*[11D60]*/ + /** @stable ICU 62 */ + UBLOCK_HANIFI_ROHINGYA = 285, /*[10D00]*/ + /** @stable ICU 62 */ + UBLOCK_INDIC_SIYAQ_NUMBERS = 286, /*[1EC70]*/ + /** @stable ICU 62 */ + UBLOCK_MAKASAR = 287, /*[11EE0]*/ + /** @stable ICU 62 */ + UBLOCK_MAYAN_NUMERALS = 288, /*[1D2E0]*/ + /** @stable ICU 62 */ + UBLOCK_MEDEFAIDRIN = 289, /*[16E40]*/ + /** @stable ICU 62 */ + UBLOCK_OLD_SOGDIAN = 290, /*[10F00]*/ + /** @stable ICU 62 */ + UBLOCK_SOGDIAN = 291, /*[10F30]*/ + #ifndef U_HIDE_DEPRECATED_API /** * One more than the highest normal UBlockCode value. @@ -1689,7 +1722,7 @@ enum UBlockCode { * * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ - UBLOCK_COUNT = 281, + UBLOCK_COUNT = 292, #endif // U_HIDE_DEPRECATED_API /** @stable ICU 2.0 */ @@ -1978,6 +2011,9 @@ typedef enum UJoiningGroup { U_JG_MALAYALAM_SSA, /**< @stable ICU 60 */ U_JG_MALAYALAM_TTA, /**< @stable ICU 60 */ + U_JG_HANIFI_ROHINGYA_KINNA_YA, /**< @stable ICU 62 */ + U_JG_HANIFI_ROHINGYA_PA, /**< @stable ICU 62 */ + #ifndef U_HIDE_DEPRECATED_API /** * One more than the highest normal UJoiningGroup value. @@ -2028,6 +2064,7 @@ typedef enum UGraphemeClusterBreak { U_GCB_GLUE_AFTER_ZWJ = 16, /*[GAZ]*/ /** @stable ICU 58 */ U_GCB_ZWJ = 17, /*[ZWJ]*/ + #ifndef U_HIDE_DEPRECATED_API /** * One more than the highest normal UGraphemeClusterBreak value. @@ -2089,6 +2126,9 @@ typedef enum UWordBreakValues { U_WB_GLUE_AFTER_ZWJ = 20, /*[GAZ]*/ /** @stable ICU 58 */ U_WB_ZWJ = 21, /*[ZWJ]*/ + /** @stable ICU 62 */ + U_WB_WSEGSPACE = 22, /*[WSEGSPACE]*/ + #ifndef U_HIDE_DEPRECATED_API /** * One more than the highest normal UWordBreakValues value. @@ -2096,7 +2136,7 @@ typedef enum UWordBreakValues { * * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ - U_WB_COUNT = 22 + U_WB_COUNT = 23 #endif // U_HIDE_DEPRECATED_API } UWordBreakValues; @@ -2701,8 +2741,7 @@ u_isgraph(UChar32 c); * * same as * - * TRUE for U+0009 (TAB) and characters with general category "Zs" (space separators) - * except Zero Width Space (ZWSP, U+200B). + * TRUE for U+0009 (TAB) and characters with general category "Zs" (space separators). * * Note: There are several ICU whitespace functions; please see the uchar.h * file documentation for a detailed comparison. @@ -3569,27 +3608,6 @@ u_toupper(UChar32 c); U_STABLE UChar32 U_EXPORT2 u_totitle(UChar32 c); -/** Option value for case folding: use default mappings defined in CaseFolding.txt. @stable ICU 2.0 */ -#define U_FOLD_CASE_DEFAULT 0 - -/** - * Option value for case folding: - * - * Use the modified set of mappings provided in CaseFolding.txt to handle dotted I - * and dotless i appropriately for Turkic languages (tr, az). - * - * Before Unicode 3.2, CaseFolding.txt contains mappings marked with 'I' that - * are to be included for default mappings and - * excluded for the Turkic-specific mappings. - * - * Unicode 3.2 CaseFolding.txt instead contains mappings marked with 'T' that - * are to be excluded for default mappings and - * included for the Turkic-specific mappings. - * - * @stable ICU 2.0 - */ -#define U_FOLD_CASE_EXCLUDE_SPECIAL_I 1 - /** * The given character is mapped to its case folding equivalent according to * UnicodeData.txt and CaseFolding.txt; diff --git a/icuSources/common/unicode/uclean.h b/icuSources/common/unicode/uclean.h index 5beb1f7c..7cef6dba 100644 --- a/icuSources/common/unicode/uclean.h +++ b/icuSources/common/unicode/uclean.h @@ -70,7 +70,7 @@ u_init(UErrorCode *status); * This has the effect of restoring ICU to its initial condition, before * any of these override functions were installed. Refer to * u_setMemoryFunctions(), u_setMutexFunctions and - * utrace_setFunctions(). If ICU is to be reinitialized after after + * utrace_setFunctions(). If ICU is to be reinitialized after * calling u_cleanup(), these runtime override functions will need to * be set up again if they are still required. *

@@ -104,7 +104,7 @@ u_cleanup(void); U_CDECL_BEGIN /** * Pointer type for a user supplied memory allocation function. - * @param context user supplied value, obtained from from u_setMemoryFunctions(). + * @param context user supplied value, obtained from u_setMemoryFunctions(). * @param size The number of bytes to be allocated * @return Pointer to the newly allocated memory, or NULL if the allocation failed. * @stable ICU 2.8 @@ -113,7 +113,7 @@ U_CDECL_BEGIN typedef void *U_CALLCONV UMemAllocFn(const void *context, size_t size); /** * Pointer type for a user supplied memory re-allocation function. - * @param context user supplied value, obtained from from u_setMemoryFunctions(). + * @param context user supplied value, obtained from u_setMemoryFunctions(). * @param size The number of bytes to be allocated * @return Pointer to the newly allocated memory, or NULL if the allocation failed. * @stable ICU 2.8 @@ -123,7 +123,7 @@ typedef void *U_CALLCONV UMemReallocFn(const void *context, void *mem, size_t si /** * Pointer type for a user supplied memory free function. Behavior should be * similar the standard C library free(). - * @param context user supplied value, obtained from from u_setMemoryFunctions(). + * @param context user supplied value, obtained from u_setMemoryFunctions(). * @param mem Pointer to the memory block to be resized * @param size The new size for the block * @return Pointer to the resized memory block, or NULL if the resizing failed. @@ -149,7 +149,7 @@ typedef void U_CALLCONV UMemFreeFn (const void *context, void *mem); * @system */ U_STABLE void U_EXPORT2 -u_setMemoryFunctions(const void *context, UMemAllocFn * U_CALLCONV a, UMemReallocFn * U_CALLCONV r, UMemFreeFn * U_CALLCONV f, +u_setMemoryFunctions(const void *context, UMemAllocFn * U_CALLCONV_FPTR a, UMemReallocFn * U_CALLCONV_FPTR r, UMemFreeFn * U_CALLCONV_FPTR f, UErrorCode *status); U_CDECL_END @@ -179,8 +179,8 @@ U_CDECL_BEGIN * The user-supplied function will be called by ICU whenever ICU needs to create a * new mutex. The function implementation should create a mutex, and store a pointer * to something that uniquely identifies the mutex into the UMTX that is supplied - * as a paramter. - * @param context user supplied value, obtained from from u_setMutexFunctions(). + * as a parameter. + * @param context user supplied value, obtained from u_setMutexFunctions(). * @param mutex Receives a pointer that identifies the new mutex. * The mutex init function must set the UMTX to a non-null value. * Subsequent calls by ICU to lock, unlock, or destroy a mutex will @@ -197,7 +197,7 @@ typedef void U_CALLCONV UMtxInitFn (const void *context, UMTX *mutex, UErrorCod * Function Pointer type for a user supplied mutex functions. * One of the user-supplied functions with this signature will be called by ICU * whenever ICU needs to lock, unlock, or destroy a mutex. - * @param context user supplied value, obtained from from u_setMutexFunctions(). + * @param context user supplied value, obtained from u_setMutexFunctions(). * @param mutex specify the mutex on which to operate. * @deprecated ICU 52. This function is no longer supported. * @system @@ -229,7 +229,7 @@ u_setMutexFunctions(const void *context, UMtxInitFn *init, UMtxFn *destroy, UMtx /** * Pointer type for a user supplied atomic increment or decrement function. - * @param context user supplied value, obtained from from u_setAtomicIncDecFunctions(). + * @param context user supplied value, obtained from u_setAtomicIncDecFunctions(). * @param p Pointer to a 32 bit int to be incremented or decremented * @return The value of the variable after the inc or dec operation. * @deprecated ICU 52. This function is no longer supported. diff --git a/icuSources/common/unicode/ucnv.h b/icuSources/common/unicode/ucnv.h index ad718aad..ebe4db53 100644 --- a/icuSources/common/unicode/ucnv.h +++ b/icuSources/common/unicode/ucnv.h @@ -29,7 +29,7 @@ * converter, you can get its properties, set options, convert your data and * close the converter.

* - *

Since many software programs recogize different converter names for + *

Since many software programs recognize different converter names for * different types of converters, there are other functions in this API to * iterate over the converter aliases. The functions {@link ucnv_getAvailableName() }, * {@link ucnv_getAlias() } and {@link ucnv_getStandardName() } are some of the @@ -184,7 +184,7 @@ typedef enum { /** * Function pointer for error callback in the codepage to unicode direction. - * Called when an error has occured in conversion to unicode, or on open/close of the callback (see reason). + * Called when an error has occurred in conversion to unicode, or on open/close of the callback (see reason). * @param context Pointer to the callback's private data * @param args Information about the conversion in progress * @param codeUnits Points to 'length' bytes of the concerned codepage sequence @@ -207,7 +207,7 @@ typedef void (U_EXPORT2 *UConverterToUCallback) ( /** * Function pointer for error callback in the unicode to codepage direction. - * Called when an error has occured in conversion from unicode, or on open/close of the callback (see reason). + * Called when an error has occurred in conversion from unicode, or on open/close of the callback (see reason). * @param context Pointer to the callback's private data * @param args Information about the conversion in progress * @param codeUnits Points to 'length' UChars of the concerned Unicode sequence @@ -353,7 +353,7 @@ ucnv_compareNames(const char *name1, const char *name2); * ucnv_getAlias for a complete list that is available. * If this parameter is NULL, the default converter will be used. * @param err outgoing error status U_MEMORY_ALLOCATION_ERROR, U_FILE_ACCESS_ERROR - * @return the created Unicode converter object, or NULL if an error occured + * @return the created Unicode converter object, or NULL if an error occurred * @see ucnv_openU * @see ucnv_openCCSID * @see ucnv_getAvailableName @@ -386,7 +386,7 @@ ucnv_open(const char *converterName, UErrorCode *err); * @param err outgoing error status U_MEMORY_ALLOCATION_ERROR, * U_FILE_ACCESS_ERROR * @return the created Unicode converter object, or NULL if an - * error occured + * error occurred * @see ucnv_open * @see ucnv_openCCSID * @see ucnv_close @@ -452,7 +452,7 @@ ucnv_openU(const UChar *name, * @param platform the platform in which the codepage number exists * @param err error status U_MEMORY_ALLOCATION_ERROR, U_FILE_ACCESS_ERROR * @return the created Unicode converter object, or NULL if an error - * occured. + * occurred. * @see ucnv_open * @see ucnv_openU * @see ucnv_close @@ -489,7 +489,7 @@ ucnv_openCCSID(int32_t codepage, * @param packageName name of the package (equivalent to 'path' in udata_open() call) * @param converterName name of the data item to be used, without suffix. * @param err outgoing error status U_MEMORY_ALLOCATION_ERROR, U_FILE_ACCESS_ERROR - * @return the created Unicode converter object, or NULL if an error occured + * @return the created Unicode converter object, or NULL if an error occurred * @see udata_open * @see ucnv_open * @see ucnv_safeClone @@ -596,7 +596,7 @@ U_NAMESPACE_END * stateful, then subChars will be an empty string. * * @param converter the Unicode converter - * @param subChars the subsitution characters + * @param subChars the substitution characters * @param len on input the capacity of subChars, on output the number * of bytes copied to it * @param err the outgoing error status code. @@ -832,7 +832,7 @@ ucnv_getMinCharSize(const UConverter *converter); * name will be filled in. * * @param converter the Unicode converter. - * @param displayLocale is the specific Locale we want to localised for + * @param displayLocale is the specific Locale we want to localized for * @param displayName user provided buffer to be filled in * @param displayNameCapacity size of displayName Buffer * @param err error status code @@ -877,7 +877,7 @@ ucnv_getName(const UConverter *converter, UErrorCode *err); * * @param converter the Unicode converter * @param err the error status code. - * @return If any error occurrs, -1 will be returned otherwise, the codepage number + * @return If any error occurs, -1 will be returned otherwise, the codepage number * will be returned * @see ucnv_openCCSID * @see ucnv_getPlatform diff --git a/icuSources/common/unicode/ucnv_err.h b/icuSources/common/unicode/ucnv_err.h index 2f74754c..d234710a 100644 --- a/icuSources/common/unicode/ucnv_err.h +++ b/icuSources/common/unicode/ucnv_err.h @@ -119,19 +119,19 @@ typedef struct UConverter UConverter; #define UCNV_ESCAPE_JAVA "J" /** * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to C (\\uXXXX \\UXXXXXXXX) - * TO_U_CALLBACK_ESCAPE option to escape the character value accoding to C (\\xXXXX) + * TO_U_CALLBACK_ESCAPE option to escape the character value according to C (\\xXXXX) * @stable ICU 2.0 */ #define UCNV_ESCAPE_C "C" /** * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to XML Decimal escape \htmlonly(&#DDDD;)\endhtmlonly - * TO_U_CALLBACK_ESCAPE context option to escape the character value accoding to XML Decimal escape \htmlonly(&#DDDD;)\endhtmlonly + * TO_U_CALLBACK_ESCAPE context option to escape the character value according to XML Decimal escape \htmlonly(&#DDDD;)\endhtmlonly * @stable ICU 2.0 */ #define UCNV_ESCAPE_XML_DEC "D" /** * FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to XML Hex escape \htmlonly(&#xXXXX;)\endhtmlonly - * TO_U_CALLBACK_ESCAPE context option to escape the character value accoding to XML Hex escape \htmlonly(&#xXXXX;)\endhtmlonly + * TO_U_CALLBACK_ESCAPE context option to escape the character value according to XML Hex escape \htmlonly(&#xXXXX;)\endhtmlonly * @stable ICU 2.0 */ #define UCNV_ESCAPE_XML_HEX "X" @@ -171,7 +171,7 @@ typedef enum { code points. The error code U_INVALID_CHAR_FOUND will be set. */ UCNV_RESET = 3, /**< The callback is called with this reason when a - 'reset' has occured. Callback should reset all + 'reset' has occurred. Callback should reset all state. */ UCNV_CLOSE = 4, /**< Called when the converter is closed. The callback should release any allocated memory.*/ @@ -199,7 +199,7 @@ typedef struct { const UChar *sourceLimit; /**< Pointer to the limit (end + 1) of source buffer. @stable ICU 2.0 */ char *target; /**< Pointer to the target buffer. @stable ICU 2.0 */ const char *targetLimit; /**< Pointer to the limit (end + 1) of target buffer. @stable ICU 2.0 */ - int32_t *offsets; /**< Pointer to the buffer that recieves the offsets. *offset = blah ; offset++;. @stable ICU 2.0 */ + int32_t *offsets; /**< Pointer to the buffer that receives the offsets. *offset = blah ; offset++;. @stable ICU 2.0 */ } UConverterFromUnicodeArgs; @@ -215,7 +215,7 @@ typedef struct { const char *sourceLimit; /**< Pointer to the limit (end + 1) of source buffer. @stable ICU 2.0 */ UChar *target; /**< Pointer to the target buffer. @stable ICU 2.0 */ const UChar *targetLimit; /**< Pointer to the limit (end + 1) of target buffer. @stable ICU 2.0 */ - int32_t *offsets; /**< Pointer to the buffer that recieves the offsets. *offset = blah ; offset++;. @stable ICU 2.0 */ + int32_t *offsets; /**< Pointer to the buffer that receives the offsets. *offset = blah ; offset++;. @stable ICU 2.0 */ } UConverterToUnicodeArgs; diff --git a/icuSources/common/unicode/uconfig.h b/icuSources/common/unicode/uconfig.h index a6721214..4c19cd50 100644 --- a/icuSources/common/unicode/uconfig.h +++ b/icuSources/common/unicode/uconfig.h @@ -76,7 +76,7 @@ #endif /** - * Determines wheter to enable auto cleanup of libraries. + * Determines whether to enable auto cleanup of libraries. * @internal */ #ifndef UCLN_NO_AUTO_CLEANUP @@ -262,7 +262,8 @@ /** * \def UCONFIG_NO_CONVERSION - * ICU will not completely build with this switch turned on. + * ICU will not completely build (compiling the tools fails) with this + * switch turned on. * This switch turns off all converters. * * You may want to use this together with U_CHARSET_IS_UTF8 defined to 1 @@ -320,7 +321,9 @@ */ #ifndef UCONFIG_NO_NORMALIZATION # define UCONFIG_NO_NORMALIZATION 0 -#elif UCONFIG_NO_NORMALIZATION +#endif + +#if UCONFIG_NO_NORMALIZATION /* common library */ /* ICU 50 CJK dictionary BreakIterator uses normalization */ # define UCONFIG_NO_BREAK_ITERATION 1 diff --git a/icuSources/common/unicode/ucurr.h b/icuSources/common/unicode/ucurr.h index 1abb3b22..192bc298 100644 --- a/icuSources/common/unicode/ucurr.h +++ b/icuSources/common/unicode/ucurr.h @@ -103,6 +103,19 @@ typedef enum UCurrNameStyle { * @stable ICU 2.6 */ UCURR_LONG_NAME + +#ifndef U_HIDE_DRAFT_API + , + /** + * Selector for getName() indicating the narrow currency symbol. + * The narrow currency symbol is similar to the regular currency + * symbol, but it always takes the shortest form: for example, + * "$" instead of "US$" for USD in en-CA. + * + * @draft ICU 61 + */ + UCURR_NARROW_SYMBOL_NAME +#endif // U_HIDE_DRAFT_API } UCurrNameStyle; #if !UCONFIG_NO_SERVICE diff --git a/icuSources/common/unicode/udisplaycontext.h b/icuSources/common/unicode/udisplaycontext.h index d7a93ebf..f9fb1fdf 100644 --- a/icuSources/common/unicode/udisplaycontext.h +++ b/icuSources/common/unicode/udisplaycontext.h @@ -44,14 +44,12 @@ enum UDisplayContextType { * @stable ICU 54 */ UDISPCTX_TYPE_DISPLAY_LENGTH = 2, -#ifndef U_HIDE_DRAFT_API /** * Type to retrieve the substitute handling setting, e.g. * UDISPCTX_SUBSTITUTE, UDISPCTX_NO_SUBSTITUTE. - * @draft ICU 58 + * @stable ICU 58 */ UDISPCTX_TYPE_SUBSTITUTE_HANDLING = 3 -#endif /* U_HIDE_DRAFT_API */ #ifndef U_HIDE_INTERNAL_API , /** @@ -152,7 +150,6 @@ enum UDisplayContext { * @stable ICU 54 */ UDISPCTX_LENGTH_SHORT = (UDISPCTX_TYPE_DISPLAY_LENGTH<<8) + 1, -#ifndef U_HIDE_DRAFT_API /** * ================================ * SUBSTITUTE_HANDLING can be set to one of UDISPCTX_SUBSTITUTE or @@ -163,16 +160,15 @@ enum UDisplayContext { * A possible setting for SUBSTITUTE_HANDLING: * Returns a fallback value (e.g., the input code) when no data is available. * This is the default value. - * @draft ICU 58 + * @stable ICU 58 */ UDISPCTX_SUBSTITUTE = (UDISPCTX_TYPE_SUBSTITUTE_HANDLING<<8) + 0, /** * A possible setting for SUBSTITUTE_HANDLING: * Returns a null value when no data is available. - * @draft ICU 58 + * @stable ICU 58 */ UDISPCTX_NO_SUBSTITUTE = (UDISPCTX_TYPE_SUBSTITUTE_HANDLING<<8) + 1 -#endif /* U_HIDE_DRAFT_API */ #ifndef U_HIDE_INTERNAL_API , /** diff --git a/icuSources/common/unicode/umachine.h b/icuSources/common/unicode/umachine.h index b03809e1..08911285 100644 --- a/icuSources/common/unicode/umachine.h +++ b/icuSources/common/unicode/umachine.h @@ -299,6 +299,10 @@ typedef int8_t UBool; // for AIX, uchar.h needs to be included # include # define U_CHAR16_IS_TYPEDEF 1 +#elif defined(_MSC_VER) && (_MSC_VER < 1900) +// Versions of Visual Studio/MSVC below 2015 do not support char16_t as a real type, +// and instead use a typedef. https://msdn.microsoft.com/library/bb531344.aspx +# define U_CHAR16_IS_TYPEDEF 1 #else # define U_CHAR16_IS_TYPEDEF 0 #endif @@ -366,7 +370,7 @@ typedef int8_t UBool; * Exception: ICU 58 UChar was defined to UCHAR_TYPE if that macro was defined. * The current UChar responds to UCHAR_TYPE but OldUChar does not. * - * @draft ICU 59 + * @stable ICU 59 */ #if U_SIZEOF_WCHAR_T==2 typedef wchar_t OldUChar; diff --git a/icuSources/common/unicode/uniset.h b/icuSources/common/unicode/uniset.h index 5e9e3ddc..0b1f9beb 100644 --- a/icuSources/common/unicode/uniset.h +++ b/icuSources/common/unicode/uniset.h @@ -1501,6 +1501,7 @@ private: private: friend class RBBIRuleScanner; + friend class RBBIRuleScanner57; //---------------------------------------------------------------- // Implementation: Clone as thawed (see ICU4J Freezable) @@ -1522,6 +1523,7 @@ private: UnicodeString& rebuiltPat, uint32_t options, UnicodeSet& (UnicodeSet::*caseClosure)(int32_t attribute), + int32_t depth, UErrorCode& ec); //---------------------------------------------------------------- diff --git a/icuSources/common/unicode/unistr.h b/icuSources/common/unicode/unistr.h index 1a8f74f9..b2939d36 100644 --- a/icuSources/common/unicode/unistr.h +++ b/icuSources/common/unicode/unistr.h @@ -38,16 +38,6 @@ struct UConverter; // unicode/ucnv.h -#ifndef U_COMPARE_CODE_POINT_ORDER -/* see also ustring.h and unorm.h */ -/** - * Option bit for u_strCaseCompare, u_strcasecmp, unorm_compare, etc: - * Compare strings in code point order instead of code unit order. - * @stable ICU 2.2 - */ -#define U_COMPARE_CODE_POINT_ORDER 0x8000 -#endif - #ifndef USTRING_H /** * \ingroup ustring_ustrlen @@ -1735,7 +1725,7 @@ public: */ template StringClass &toUTF8String(StringClass &result) const { - StringByteSink sbs(&result); + StringByteSink sbs(&result, length()); toUTF8(sbs); return result; } @@ -1906,9 +1896,8 @@ public: */ UnicodeString &fastCopyFrom(const UnicodeString &src); -#if U_HAVE_RVALUE_REFERENCES /** - * Move assignment operator, might leave src in bogus state. + * Move assignment operator; might leave src in bogus state. * This string will have the same contents and state that the source string had. * The behavior is undefined if *this and src are the same object. * @param src source string @@ -1918,10 +1907,10 @@ public: UnicodeString &operator=(UnicodeString &&src) U_NOEXCEPT { return moveFrom(src); } -#endif + // do not use #ifndef U_HIDE_DRAFT_API for moveFrom, needed by non-draft API /** - * Move assignment, might leave src in bogus state. + * Move assignment; might leave src in bogus state. * This string will have the same contents and state that the source string had. * The behavior is undefined if *this and src are the same object. * @@ -2791,11 +2780,11 @@ public: * break iterator is opened. * Otherwise the provided iterator is set to the string's text. * @param locale The locale to consider. + * @param options Options bit set, usually 0. See U_TITLECASE_NO_LOWERCASE, + * U_TITLECASE_NO_BREAK_ADJUSTMENT, U_TITLECASE_ADJUST_TO_CASED, + * U_TITLECASE_WHOLE_STRING, U_TITLECASE_SENTENCES. * @param options Options bit set, see ucasemap_open(). * @return A reference to this. - * @see U_TITLECASE_NO_LOWERCASE - * @see U_TITLECASE_NO_BREAK_ADJUSTMENT - * @see ucasemap_open * @stable ICU 3.8 */ UnicodeString &toTitle(BreakIterator *titleIter, const Locale &locale, uint32_t options); @@ -3011,10 +3000,6 @@ public: */ UNISTR_FROM_STRING_EXPLICIT UnicodeString(const char16_t *text); - /* - * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, - * it should always be available regardless of U_HIDE_DRAFT_API status - */ #if !U_CHAR16_IS_TYPEDEF /** * uint16_t * constructor. @@ -3024,16 +3009,12 @@ public: * -DUNISTR_FROM_STRING_EXPLICIT=explicit * on the compiler command line or similar. * @param text NUL-terminated UTF-16 string - * @draft ICU 59 + * @stable ICU 59 */ UNISTR_FROM_STRING_EXPLICIT UnicodeString(const uint16_t *text) : UnicodeString(ConstChar16Ptr(text)) {} #endif - /* - * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, - * it should always be available regardless of U_HIDE_DRAFT_API status - */ #if U_SIZEOF_WCHAR_T==2 || defined(U_IN_DOXYGEN) /** * wchar_t * constructor. @@ -3044,16 +3025,12 @@ public: * -DUNISTR_FROM_STRING_EXPLICIT=explicit * on the compiler command line or similar. * @param text NUL-terminated UTF-16 string - * @draft ICU 59 + * @stable ICU 59 */ UNISTR_FROM_STRING_EXPLICIT UnicodeString(const wchar_t *text) : UnicodeString(ConstChar16Ptr(text)) {} #endif - /* - * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, - * it should always be available regardless of U_HIDE_DRAFT_API status - */ /** * nullptr_t constructor. * Effectively the same as the default constructor, makes an empty string object. @@ -3062,7 +3039,7 @@ public: * -DUNISTR_FROM_STRING_EXPLICIT=explicit * on the compiler command line or similar. * @param text nullptr - * @draft ICU 59 + * @stable ICU 59 */ UNISTR_FROM_STRING_EXPLICIT inline UnicodeString(const std::nullptr_t text); @@ -3076,26 +3053,18 @@ public: UnicodeString(const char16_t *text, int32_t textLength); - /* - * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, - * it should always be available regardless of U_HIDE_DRAFT_API status - */ #if !U_CHAR16_IS_TYPEDEF /** * uint16_t * constructor. * Delegates to UnicodeString(const char16_t *, int32_t). * @param text UTF-16 string * @param length string length - * @draft ICU 59 + * @stable ICU 59 */ UnicodeString(const uint16_t *text, int32_t length) : UnicodeString(ConstChar16Ptr(text), length) {} #endif - /* - * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, - * it should always be available regardless of U_HIDE_DRAFT_API status - */ #if U_SIZEOF_WCHAR_T==2 || defined(U_IN_DOXYGEN) /** * wchar_t * constructor. @@ -3103,22 +3072,18 @@ public: * Delegates to UnicodeString(const char16_t *, int32_t). * @param text NUL-terminated UTF-16 string * @param length string length - * @draft ICU 59 + * @stable ICU 59 */ UnicodeString(const wchar_t *text, int32_t length) : UnicodeString(ConstChar16Ptr(text), length) {} #endif - /* - * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, - * it should always be available regardless of U_HIDE_DRAFT_API status - */ /** * nullptr_t constructor. * Effectively the same as the default constructor, makes an empty string object. * @param text nullptr * @param length ignored - * @draft ICU 59 + * @stable ICU 59 */ inline UnicodeString(const std::nullptr_t text, int32_t length); @@ -3168,10 +3133,6 @@ public: */ UnicodeString(char16_t *buffer, int32_t buffLength, int32_t buffCapacity); - /* - * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, - * it should always be available regardless of U_HIDE_DRAFT_API status - */ #if !U_CHAR16_IS_TYPEDEF /** * Writable-aliasing uint16_t * constructor. @@ -3179,16 +3140,12 @@ public: * @param buffer writable buffer of/for UTF-16 text * @param buffLength length of the current buffer contents * @param buffCapacity buffer capacity - * @draft ICU 59 + * @stable ICU 59 */ UnicodeString(uint16_t *buffer, int32_t buffLength, int32_t buffCapacity) : UnicodeString(Char16Ptr(buffer), buffLength, buffCapacity) {} #endif - /* - * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, - * it should always be available regardless of U_HIDE_DRAFT_API status - */ #if U_SIZEOF_WCHAR_T==2 || defined(U_IN_DOXYGEN) /** * Writable-aliasing wchar_t * constructor. @@ -3197,23 +3154,19 @@ public: * @param buffer writable buffer of/for UTF-16 text * @param buffLength length of the current buffer contents * @param buffCapacity buffer capacity - * @draft ICU 59 + * @stable ICU 59 */ UnicodeString(wchar_t *buffer, int32_t buffLength, int32_t buffCapacity) : UnicodeString(Char16Ptr(buffer), buffLength, buffCapacity) {} #endif - /* - * Do not use #ifndef U_HIDE_DRAFT_API for the following constructor, - * it should always be available regardless of U_HIDE_DRAFT_API status - */ /** * Writable-aliasing nullptr_t constructor. * Effectively the same as the default constructor, makes an empty string object. * @param buffer nullptr * @param buffLength ignored * @param buffCapacity ignored - * @draft ICU 59 + * @stable ICU 59 */ inline UnicodeString(std::nullptr_t buffer, int32_t buffLength, int32_t buffCapacity); @@ -3365,15 +3318,13 @@ public: */ UnicodeString(const UnicodeString& that); -#if U_HAVE_RVALUE_REFERENCES /** - * Move constructor, might leave src in bogus state. + * Move constructor; might leave src in bogus state. * This string will have the same contents and state that the source string had. * @param src source string * @stable ICU 56 */ UnicodeString(UnicodeString &&src) U_NOEXCEPT; -#endif /** * 'Substring' constructor from tail of source string. diff --git a/icuSources/common/unicode/unorm.h b/icuSources/common/unicode/unorm.h index 1b5af167..3839de12 100644 --- a/icuSources/common/unicode/unorm.h +++ b/icuSources/common/unicode/unorm.h @@ -210,7 +210,7 @@ enum { * the output was truncated, and the error code is set to U_BUFFER_OVERFLOW_ERROR. * @deprecated ICU 56 Use unorm2.h instead. */ -U_STABLE int32_t U_EXPORT2 +U_DEPRECATED int32_t U_EXPORT2 unorm_normalize(const UChar *source, int32_t sourceLength, UNormalizationMode mode, int32_t options, UChar *result, int32_t resultLength, @@ -236,7 +236,7 @@ unorm_normalize(const UChar *source, int32_t sourceLength, * @see unorm_isNormalized * @deprecated ICU 56 Use unorm2.h instead. */ -U_STABLE UNormalizationCheckResult U_EXPORT2 +U_DEPRECATED UNormalizationCheckResult U_EXPORT2 unorm_quickCheck(const UChar *source, int32_t sourcelength, UNormalizationMode mode, UErrorCode *status); @@ -257,7 +257,7 @@ unorm_quickCheck(const UChar *source, int32_t sourcelength, * @see unorm_isNormalized * @deprecated ICU 56 Use unorm2.h instead. */ -U_STABLE UNormalizationCheckResult U_EXPORT2 +U_DEPRECATED UNormalizationCheckResult U_EXPORT2 unorm_quickCheckWithOptions(const UChar *src, int32_t srcLength, UNormalizationMode mode, int32_t options, UErrorCode *pErrorCode); @@ -283,7 +283,7 @@ unorm_quickCheckWithOptions(const UChar *src, int32_t srcLength, * @see unorm_quickCheck * @deprecated ICU 56 Use unorm2.h instead. */ -U_STABLE UBool U_EXPORT2 +U_DEPRECATED UBool U_EXPORT2 unorm_isNormalized(const UChar *src, int32_t srcLength, UNormalizationMode mode, UErrorCode *pErrorCode); @@ -305,7 +305,7 @@ unorm_isNormalized(const UChar *src, int32_t srcLength, * @see unorm_isNormalized * @deprecated ICU 56 Use unorm2.h instead. */ -U_STABLE UBool U_EXPORT2 +U_DEPRECATED UBool U_EXPORT2 unorm_isNormalizedWithOptions(const UChar *src, int32_t srcLength, UNormalizationMode mode, int32_t options, UErrorCode *pErrorCode); @@ -383,7 +383,7 @@ unorm_isNormalizedWithOptions(const UChar *src, int32_t srcLength, * * @deprecated ICU 56 Use unorm2.h instead. */ -U_STABLE int32_t U_EXPORT2 +U_DEPRECATED int32_t U_EXPORT2 unorm_next(UCharIterator *src, UChar *dest, int32_t destCapacity, UNormalizationMode mode, int32_t options, @@ -416,7 +416,7 @@ unorm_next(UCharIterator *src, * * @deprecated ICU 56 Use unorm2.h instead. */ -U_STABLE int32_t U_EXPORT2 +U_DEPRECATED int32_t U_EXPORT2 unorm_previous(UCharIterator *src, UChar *dest, int32_t destCapacity, UNormalizationMode mode, int32_t options, @@ -460,7 +460,7 @@ unorm_previous(UCharIterator *src, * * @deprecated ICU 56 Use unorm2.h instead. */ -U_STABLE int32_t U_EXPORT2 +U_DEPRECATED int32_t U_EXPORT2 unorm_concatenate(const UChar *left, int32_t leftLength, const UChar *right, int32_t rightLength, UChar *dest, int32_t destCapacity, diff --git a/icuSources/common/unicode/unorm2.h b/icuSources/common/unicode/unorm2.h index c3d9b0b0..39889bdf 100644 --- a/icuSources/common/unicode/unorm2.h +++ b/icuSources/common/unicode/unorm2.h @@ -32,6 +32,7 @@ #include "unicode/utypes.h" #include "unicode/localpointer.h" +#include "unicode/stringoptions.h" #include "unicode/uset.h" /** @@ -526,30 +527,6 @@ unorm2_hasBoundaryAfter(const UNormalizer2 *norm2, UChar32 c); U_STABLE UBool U_EXPORT2 unorm2_isInert(const UNormalizer2 *norm2, UChar32 c); -/** - * Option bit for unorm_compare: - * Both input strings are assumed to fulfill FCD conditions. - * @stable ICU 2.2 - */ -#define UNORM_INPUT_IS_FCD 0x20000 - -/** - * Option bit for unorm_compare: - * Perform case-insensitive comparison. - * @stable ICU 2.2 - */ -#define U_COMPARE_IGNORE_CASE 0x10000 - -#ifndef U_COMPARE_CODE_POINT_ORDER -/* see also unistr.h and ustring.h */ -/** - * Option bit for u_strCaseCompare, u_strcasecmp, unorm_compare, etc: - * Compare strings in code point order instead of code unit order. - * @stable ICU 2.2 - */ -#define U_COMPARE_CODE_POINT_ORDER 0x8000 -#endif - /** * Compares two strings for canonical equivalence. * Further options include case-insensitive comparison and diff --git a/icuSources/common/unicode/urbtok.h b/icuSources/common/unicode/urbtok.h index 75cb7a1e..bab40341 100644 --- a/icuSources/common/unicode/urbtok.h +++ b/icuSources/common/unicode/urbtok.h @@ -1,6 +1,6 @@ /* ****************************************************************************** -* Copyright (C) 2006-2008, 2017 Apple Inc. All Rights Reserved. +* Copyright (C) 2006-2008, 2017-2018 Apple Inc. All Rights Reserved. ****************************************************************************** */ @@ -11,22 +11,65 @@ #if !UCONFIG_NO_BREAK_ITERATION -#include "unicode/utext.h" #include "unicode/ubrk.h" #include "unicode/parseerr.h" /** * The interfaces here are meant to extend the functionality of the standard * ubrk_* interfaces in ubrk.h to allow for faster batch tokenization. This - * was primarily intended for Spotlight and related processes. Note that - * urbtok_tokenize here does not fully support all features of ICU break rules. + * was primarily intended for Spotlight and related processes. There are two + * versions of these: + * + * The versions prefixed urbtok_ extend the standard ICU RuleBasedBreakIterator + * class. These are intended to fully support all of the current rule syntax used + * by that class, and should urbtok_tokenize give results equivalent to a loop using a + * combination of the standard functions ubrk_next to get the next break (determining + * the length of the previous token) and ubrk_getRuleStatusVec to get a flag value + * formed as the bitwise OR of all of the values in the returnend vector, skipping all + * tokens whose flag value is -1. urbtok_tokenize is faster than such a loop since it + * assumes only one pass over the text in the forward direction, and shut skips caching + * of breaks positions and makes other simplifying assumptions. However, it may not be + * fast enough fo Spotlight. + * + * Thus we also include the versions prefixed by urbtok57_, which use a legacy ICU 57 + * version of RuleBasedBreakIterator and an Apple subclass RuleBasedTokenizer. These + * versions do not support any RuleBasedBreakIterator rule sytax enhancements from + * later than ICU 57. + * + * The two different sets of functions should not be mixed; urbtok57_getBinaryRules + * should only be used with a UBreakIterator created using urbtok57_openRules; + * urbtok57_tokenize should only be used with a UBreakIterator created using + * urbtok57_openRules or urbtok_openBinaryRules[NoCopy], etc. Similarly, the + * urbtok_ functions should only be used with other urbtok_ functions. + */ + +/** + * struct for returning token results */ - typedef struct RuleBasedTokenRange { signed long location; signed long length; } RuleBasedTokenRange; +/** + * Open a new UBreakIterator for locating text boundaries for a specified locale. + * A UBreakIterator may be used for detecting character, line, word, + * and sentence breaks in text. + * @param type The type of UBreakIterator to open: one of UBRK_CHARACTER, UBRK_WORD, + * UBRK_LINE, UBRK_SENTENCE + * @param locale The locale specifying the text-breaking conventions. Note that + * locale keys such as "lb" and "ss" may be used to modify text break behavior, + * see general discussion of BreakIterator C API. + * @param status A UErrorCode to receive any errors. + * @return A UBreakIterator for the specified type and locale. + * @see ubrk_open + * @internal + */ +U_INTERNAL UBreakIterator* U_EXPORT2 +urbtok_open(UBreakIteratorType type, + const char *locale, + UErrorCode *status); + /** * Open a new UBreakIterator for tokenizing text using specified breaking rules. * The rule syntax is ... (TBD) @@ -133,6 +176,95 @@ urbtok_swapBinaryRules(const uint8_t *rules, UErrorCode *status); + +/** + * Open a new UBreakIterator for tokenizing text using specified breaking rules. + * The rule syntax is ... (TBD) + * @param rules A set of rules specifying the text breaking conventions. + * @param rulesLength The number of characters in rules, or -1 if null-terminated. + * @param parseErr Receives position and context information for any syntax errors + * detected while parsing the rules. + * @param status A UErrorCode to receive any errors. + * @return A UBreakIterator for the specified rules. + * @see ubrk_open + * @internal + */ +U_INTERNAL UBreakIterator* U_EXPORT2 +urbtok57_openRules(const UChar *rules, + int32_t rulesLength, + UParseError *parseErr, + UErrorCode *status); + +/** + * Open a new UBreakIterator for tokenizing text using specified breaking rules. + * @param rules A set of rules specifying the text breaking conventions. The binary rules + * must be at least 32-bit aligned. Note: This version makes a copy of the + * rules, so after calling this function the caller can close or release + * the rules that were passed to this function. The copy created by this + * call will be freed when ubrk_close() is called on the UBreakIterator*. + * @param status A UErrorCode to receive any errors. + * @return A UBreakIterator for the specified rules. + * @see ubrk_open + * @internal + */ +U_INTERNAL UBreakIterator* U_EXPORT2 +urbtok57_openBinaryRules(const uint8_t *rules, + UErrorCode *status); + +/** + * Open a new UBreakIterator for tokenizing text using specified breaking rules. + * @param rules A set of rules specifying the text breaking conventions. The binary rules + * must be at least 32-bit aligned. Note: This version does NOT make a copy + * of the rules, so after calling this function the caller must not close or + * release the rules passed to this function until after they are finished + * with this UBreakIterator* (and any others created using the same rules) + * and have called ubrk_close() to close the UBreakIterator* (and any others + * using the same rules). + * @param status A UErrorCode to receive any errors. + * @return A UBreakIterator for the specified rules. + * @see ubrk_open + * @internal + */ +U_INTERNAL UBreakIterator* U_EXPORT2 +urbtok57_openBinaryRulesNoCopy(const uint8_t *rules, + UErrorCode *status); + +/** + * Get the (native-endian) binary break rules for this tokenizer. + * @param bi The tokenizer to use. + * @param buffer The output buffer for the rules. You can pass 0 to get the required size. + * @param buffSize The size of the output buffer. + * @param status A UErrorCode to receive any errors. + * @return The actual size of the binary rules, whether they fit the buffer or not. + * @internal + */ +U_INTERNAL uint32_t U_EXPORT2 +urbtok57_getBinaryRules(UBreakIterator *bi, + uint8_t *buffer, + uint32_t buffSize, + UErrorCode *status); + +/** + * Tokenize text using a rule-based tokenizer. + * This is primarily intended for speedy batch tokenization using very simple rules. + * It does not currently implement support for all of the features of ICU break rules + * (adding that would reduce performance). If you need support for all of the ICU rule + * features, please use the standard Apple urbtok_tokenize, or a loop with standard + * ICU interfaes ubrk_next and ubrk_getRuleStatusVec. + * + * @param bi The tokenizer to use. + * @param maxTokens The maximum number of tokens to return. + * @param outTokens An array of RuleBasedTokenRange to fill in with the tokens. + * @param outTokenFlags An (optional) array of uint32_t to fill in with token flags. + * @return The number of tokens returned, 0 if done. + * @internal + */ +U_INTERNAL int32_t U_EXPORT2 +urbtok57_tokenize(UBreakIterator *bi, + int32_t maxTokens, + RuleBasedTokenRange *outTokens, + unsigned long *outTokenFlags); + #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ #endif diff --git a/icuSources/common/unicode/urename.h b/icuSources/common/unicode/urename.h index 21c839ab..4175e527 100644 --- a/icuSources/common/unicode/urename.h +++ b/icuSources/common/unicode/urename.h @@ -445,7 +445,6 @@ #define ubidi_getReorderingOptions U_ICU_ENTRY_POINT_RENAME(ubidi_getReorderingOptions) #define ubidi_getResultLength U_ICU_ENTRY_POINT_RENAME(ubidi_getResultLength) #define ubidi_getRuns U_ICU_ENTRY_POINT_RENAME(ubidi_getRuns) -#define ubidi_getSingleton U_ICU_ENTRY_POINT_RENAME(ubidi_getSingleton) #define ubidi_getText U_ICU_ENTRY_POINT_RENAME(ubidi_getText) #define ubidi_getVisualIndex U_ICU_ENTRY_POINT_RENAME(ubidi_getVisualIndex) #define ubidi_getVisualMap U_ICU_ENTRY_POINT_RENAME(ubidi_getVisualMap) @@ -550,6 +549,7 @@ #define ucase_addStringCaseClosure U_ICU_ENTRY_POINT_RENAME(ucase_addStringCaseClosure) #define ucase_fold U_ICU_ENTRY_POINT_RENAME(ucase_fold) #define ucase_getCaseLocale U_ICU_ENTRY_POINT_RENAME(ucase_getCaseLocale) +#define ucase_getTrie U_ICU_ENTRY_POINT_RENAME(ucase_getTrie) #define ucase_getType U_ICU_ENTRY_POINT_RENAME(ucase_getType) #define ucase_getTypeOrIgnorable U_ICU_ENTRY_POINT_RENAME(ucase_getTypeOrIgnorable) #define ucase_hasBinaryProperty U_ICU_ENTRY_POINT_RENAME(ucase_hasBinaryProperty) @@ -613,6 +613,7 @@ #define ucnv_createConverterFromPackage U_ICU_ENTRY_POINT_RENAME(ucnv_createConverterFromPackage) #define ucnv_createConverterFromSharedData U_ICU_ENTRY_POINT_RENAME(ucnv_createConverterFromSharedData) #define ucnv_detectUnicodeSignature U_ICU_ENTRY_POINT_RENAME(ucnv_detectUnicodeSignature) +#define ucnv_enableCleanup U_ICU_ENTRY_POINT_RENAME(ucnv_enableCleanup) #define ucnv_extContinueMatchFromU U_ICU_ENTRY_POINT_RENAME(ucnv_extContinueMatchFromU) #define ucnv_extContinueMatchToU U_ICU_ENTRY_POINT_RENAME(ucnv_extContinueMatchToU) #define ucnv_extGetUnicodeSet U_ICU_ENTRY_POINT_RENAME(ucnv_extGetUnicodeSet) @@ -861,6 +862,7 @@ #define udatpg_getBestPatternWithOptions U_ICU_ENTRY_POINT_RENAME(udatpg_getBestPatternWithOptions) #define udatpg_getDateTimeFormat U_ICU_ENTRY_POINT_RENAME(udatpg_getDateTimeFormat) #define udatpg_getDecimal U_ICU_ENTRY_POINT_RENAME(udatpg_getDecimal) +#define udatpg_getFieldDisplayName U_ICU_ENTRY_POINT_RENAME(udatpg_getFieldDisplayName) #define udatpg_getPatternForSkeleton U_ICU_ENTRY_POINT_RENAME(udatpg_getPatternForSkeleton) #define udatpg_getSkeleton U_ICU_ENTRY_POINT_RENAME(udatpg_getSkeleton) #define udatpg_open U_ICU_ENTRY_POINT_RENAME(udatpg_open) @@ -944,6 +946,7 @@ #define uhash_iget U_ICU_ENTRY_POINT_RENAME(uhash_iget) #define uhash_igeti U_ICU_ENTRY_POINT_RENAME(uhash_igeti) #define uhash_init U_ICU_ENTRY_POINT_RENAME(uhash_init) +#define uhash_initSize U_ICU_ENTRY_POINT_RENAME(uhash_initSize) #define uhash_iput U_ICU_ENTRY_POINT_RENAME(uhash_iput) #define uhash_iputi U_ICU_ENTRY_POINT_RENAME(uhash_iputi) #define uhash_iremove U_ICU_ENTRY_POINT_RENAME(uhash_iremove) @@ -1168,6 +1171,16 @@ #define unum_setSymbol U_ICU_ENTRY_POINT_RENAME(unum_setSymbol) #define unum_setTextAttribute U_ICU_ENTRY_POINT_RENAME(unum_setTextAttribute) #define unum_toPattern U_ICU_ENTRY_POINT_RENAME(unum_toPattern) +#define unumf_close U_ICU_ENTRY_POINT_RENAME(unumf_close) +#define unumf_closeResult U_ICU_ENTRY_POINT_RENAME(unumf_closeResult) +#define unumf_formatDecimal U_ICU_ENTRY_POINT_RENAME(unumf_formatDecimal) +#define unumf_formatDouble U_ICU_ENTRY_POINT_RENAME(unumf_formatDouble) +#define unumf_formatInt U_ICU_ENTRY_POINT_RENAME(unumf_formatInt) +#define unumf_openForSkeletonAndLocale U_ICU_ENTRY_POINT_RENAME(unumf_openForSkeletonAndLocale) +#define unumf_openResult U_ICU_ENTRY_POINT_RENAME(unumf_openResult) +#define unumf_resultGetAllFieldPositions U_ICU_ENTRY_POINT_RENAME(unumf_resultGetAllFieldPositions) +#define unumf_resultNextFieldPosition U_ICU_ENTRY_POINT_RENAME(unumf_resultNextFieldPosition) +#define unumf_resultToString U_ICU_ENTRY_POINT_RENAME(unumf_resultToString) #define unumsys_close U_ICU_ENTRY_POINT_RENAME(unumsys_close) #define unumsys_getDescription U_ICU_ENTRY_POINT_RENAME(unumsys_getDescription) #define unumsys_getName U_ICU_ENTRY_POINT_RENAME(unumsys_getName) @@ -1207,6 +1220,7 @@ #define uplug_setPlugNoUnload U_ICU_ENTRY_POINT_RENAME(uplug_setPlugNoUnload) #define uprops_getSource U_ICU_ENTRY_POINT_RENAME(uprops_getSource) #define upropsvec_addPropertyStarts U_ICU_ENTRY_POINT_RENAME(upropsvec_addPropertyStarts) +#define uprv_add32_overflow U_ICU_ENTRY_POINT_RENAME(uprv_add32_overflow) #define uprv_aestrncpy U_ICU_ENTRY_POINT_RENAME(uprv_aestrncpy) #define uprv_asciiFromEbcdic U_ICU_ENTRY_POINT_RENAME(uprv_asciiFromEbcdic) #define uprv_asciitolower U_ICU_ENTRY_POINT_RENAME(uprv_asciitolower) @@ -1324,7 +1338,6 @@ #define uprv_getRawUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getRawUTCtime) #define uprv_getStaticCurrencyName U_ICU_ENTRY_POINT_RENAME(uprv_getStaticCurrencyName) #define uprv_getUTCtime U_ICU_ENTRY_POINT_RENAME(uprv_getUTCtime) -#define uprv_haveProperties U_ICU_ENTRY_POINT_RENAME(uprv_haveProperties) #define uprv_int32Comparator U_ICU_ENTRY_POINT_RENAME(uprv_int32Comparator) #define uprv_isASCIILetter U_ICU_ENTRY_POINT_RENAME(uprv_isASCIILetter) #define uprv_isInfinite U_ICU_ENTRY_POINT_RENAME(uprv_isInfinite) @@ -1342,6 +1355,7 @@ #define uprv_maximumPtr U_ICU_ENTRY_POINT_RENAME(uprv_maximumPtr) #define uprv_min U_ICU_ENTRY_POINT_RENAME(uprv_min) #define uprv_modf U_ICU_ENTRY_POINT_RENAME(uprv_modf) +#define uprv_mul32_overflow U_ICU_ENTRY_POINT_RENAME(uprv_mul32_overflow) #define uprv_parseCurrency U_ICU_ENTRY_POINT_RENAME(uprv_parseCurrency) #define uprv_pathIsAbsolute U_ICU_ENTRY_POINT_RENAME(uprv_pathIsAbsolute) #define uprv_pow U_ICU_ENTRY_POINT_RENAME(uprv_pow) @@ -1654,6 +1668,7 @@ #define ustr_hashICharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashICharsN) #define ustr_hashUCharsN U_ICU_ENTRY_POINT_RENAME(ustr_hashUCharsN) #define ustrcase_getCaseLocale U_ICU_ENTRY_POINT_RENAME(ustrcase_getCaseLocale) +#define ustrcase_getTitleBreakIterator U_ICU_ENTRY_POINT_RENAME(ustrcase_getTitleBreakIterator) #define ustrcase_internalFold U_ICU_ENTRY_POINT_RENAME(ustrcase_internalFold) #define ustrcase_internalToLower U_ICU_ENTRY_POINT_RENAME(ustrcase_internalToLower) #define ustrcase_internalToTitle U_ICU_ENTRY_POINT_RENAME(ustrcase_internalToTitle) diff --git a/icuSources/common/unicode/ures.h b/icuSources/common/unicode/ures.h index 264adf29..c7eaf39b 100644 --- a/icuSources/common/unicode/ures.h +++ b/icuSources/common/unicode/ures.h @@ -16,7 +16,7 @@ * 04/04/99 helena Fixed internal header inclusion. * 04/15/99 Madhu Updated Javadoc * 06/14/99 stephen Removed functions taking a filename suffix. -* 07/20/99 stephen Language-independent ypedef to void* +* 07/20/99 stephen Language-independent typedef to void* * 11/09/99 weiv Added ures_getLocale() * 06/24/02 weiv Added support for resource sharing ****************************************************************************** @@ -138,7 +138,7 @@ typedef enum { /** * Opens a UResourceBundle, from which users can extract strings by using * their corresponding keys. - * Note that the caller is responsible of calling ures_close on each succesfully + * Note that the caller is responsible of calling ures_close on each successfully * opened resource bundle. * @param packageName The packageName and locale together point to an ICU udata object, * as defined by udata_open( packageName, "res", locale, err) @@ -301,7 +301,7 @@ ures_getVersion(const UResourceBundle* resB, * you to query for the real locale of the resource. For example, if you requested * "en_US_CALIFORNIA" and only "en_US" bundle exists, "en_US" will be returned. * For subresources, the locale where this resource comes from will be returned. - * If fallback has occured, getLocale will reflect this. + * If fallback has occurred, getLocale will reflect this. * * @param resourceBundle resource bundle in question * @param status just for catching illegal arguments @@ -580,7 +580,7 @@ ures_hasNext(const UResourceBundle *resourceBundle); * @param fillIn if NULL a new UResourceBundle struct is allocated and must be closed by the caller. * Alternatively, you can supply a struct to be filled by this function. * @param status fills in the outgoing error code. You may still get a non NULL result even if an - * error occured. Check status instead. + * error occurred. Check status instead. * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it * @stable ICU 2.0 */ @@ -596,7 +596,7 @@ ures_getNextResource(UResourceBundle *resourceBundle, * @param resourceBundle a resource * @param len fill in length of the string * @param key fill in for key associated with this string. NULL if no key - * @param status fills in the outgoing error code. If an error occured, we may return NULL, but don't + * @param status fills in the outgoing error code. If an error occurred, we may return NULL, but don't * count on it. Check status instead! * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. * @stable ICU 2.0 @@ -615,7 +615,7 @@ ures_getNextString(UResourceBundle *resourceBundle, * @param fillIn if NULL a new UResourceBundle struct is allocated and must be closed by the caller. * Alternatively, you can supply a struct to be filled by this function. * @param status fills in the outgoing error code. Don't count on NULL being returned if an error has - * occured. Check status instead. + * occurred. Check status instead. * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must close it * @stable ICU 2.0 */ @@ -631,7 +631,7 @@ ures_getByIndex(const UResourceBundle *resourceBundle, * @param resourceBundle a resource * @param indexS an index to the wanted string. * @param len fill in length of the string - * @param status fills in the outgoing error code. If an error occured, we may return NULL, but don't + * @param status fills in the outgoing error code. If an error occurred, we may return NULL, but don't * count on it. Check status instead! * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. * @stable ICU 2.0 @@ -722,7 +722,7 @@ ures_getByKey(const UResourceBundle *resourceBundle, * @param resB a resource * @param key a key associated with the wanted string * @param len fill in length of the string - * @param status fills in the outgoing error code. If an error occured, we may return NULL, but don't + * @param status fills in the outgoing error code. If an error occurred, we may return NULL, but don't * count on it. Check status instead! * @return a pointer to a zero-terminated UChar array which lives in a memory mapped/DLL file. * @stable ICU 2.0 diff --git a/icuSources/common/unicode/uscript.h b/icuSources/common/unicode/uscript.h index 545edac6..283cc322 100644 --- a/icuSources/common/unicode/uscript.h +++ b/icuSources/common/unicode/uscript.h @@ -451,6 +451,21 @@ typedef enum UScriptCode { /** @stable ICU 60 */ USCRIPT_ZANABAZAR_SQUARE = 177,/* Zanb */ + /** @stable ICU 62 */ + USCRIPT_DOGRA = 178,/* Dogr */ + /** @stable ICU 62 */ + USCRIPT_GUNJALA_GONDI = 179,/* Gong */ + /** @stable ICU 62 */ + USCRIPT_MAKASAR = 180,/* Maka */ + /** @stable ICU 62 */ + USCRIPT_MEDEFAIDRIN = 181,/* Medf */ + /** @stable ICU 62 */ + USCRIPT_HANIFI_ROHINGYA = 182,/* Rohg */ + /** @stable ICU 62 */ + USCRIPT_SOGDIAN = 183,/* Sogd */ + /** @stable ICU 62 */ + USCRIPT_OLD_SOGDIAN = 184,/* Sogo */ + #ifndef U_HIDE_DEPRECATED_API /** * One more than the highest normal UScriptCode value. @@ -458,7 +473,7 @@ typedef enum UScriptCode { * * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ - USCRIPT_CODE_LIMIT = 178 + USCRIPT_CODE_LIMIT = 185 #endif // U_HIDE_DEPRECATED_API } UScriptCode; @@ -476,7 +491,7 @@ typedef enum UScriptCode { * @param nameOrAbbrOrLocale name of the script, as given in * PropertyValueAliases.txt, or ISO 15924 code or locale * @param fillIn the UScriptCode buffer to fill in the script code - * @param capacity the capacity (size) fo UScriptCode buffer passed in. + * @param capacity the capacity (size) of UScriptCode buffer passed in. * @param err the error status code. * @return The number of script codes filled in the buffer passed in * @stable ICU 2.4 diff --git a/icuSources/common/unicode/ushape.h b/icuSources/common/unicode/ushape.h index c64fe227..78b4d027 100644 --- a/icuSources/common/unicode/ushape.h +++ b/icuSources/common/unicode/ushape.h @@ -93,7 +93,7 @@ * which must not indicate a failure before the function call. * * @return The number of UChars written to the destination buffer. - * If an error occured, then no output was written, or it may be + * If an error occurred, then no output was written, or it may be * incomplete. If U_BUFFER_OVERFLOW_ERROR is set, then * the return value indicates the necessary destination buffer size. * @stable ICU 2.0 diff --git a/icuSources/common/unicode/usprep.h b/icuSources/common/unicode/usprep.h index 249f9948..8cb52f1e 100644 --- a/icuSources/common/unicode/usprep.h +++ b/icuSources/common/unicode/usprep.h @@ -33,14 +33,14 @@ * StringPrep prepares Unicode strings for use in network protocols. * Profiles of StingPrep are set of rules and data according to with the * Unicode Strings are prepared. Each profiles contains tables which describe - * how a code point should be treated. The tables are broadly classied into + * how a code point should be treated. The tables are broadly classified into *

    - *
  • Unassinged Table: Contains code points that are unassigned + *
  • Unassigned Table: Contains code points that are unassigned * in the Unicode Version supported by StringPrep. Currently * RFC 3454 supports Unicode 3.2.
  • - *
  • Prohibited Table: Contains code points that are prohibted from + *
  • Prohibited Table: Contains code points that are prohibited from * the output of the StringPrep processing function.
  • - *
  • Mapping Table: Contains code ponts that are deleted from the output or case mapped.
  • + *
  • Mapping Table: Contains code points that are deleted from the output or case mapped.
  • *
* * The procedure for preparing Unicode strings: @@ -230,7 +230,7 @@ U_NAMESPACE_END /** * Prepare the input buffer for use in applications with the given profile. This operation maps, normalizes(NFKC), - * checks for prohited and BiDi characters in the order defined by RFC 3454 + * checks for prohibited and BiDi characters in the order defined by RFC 3454 * depending on the options specified in the profile. * * @param prep The profile to use diff --git a/icuSources/common/unicode/ustring.h b/icuSources/common/unicode/ustring.h index 31b05566..33e64cea 100644 --- a/icuSources/common/unicode/ustring.h +++ b/icuSources/common/unicode/ustring.h @@ -403,7 +403,7 @@ u_strspn(const UChar *string, const UChar *matchSet); * @param saveState The current pointer within the original string, * which is set by this function. The saveState * parameter should the address of a local variable of type - * UChar *. (i.e. defined "Uhar *myLocalSaveState" and use + * UChar *. (i.e. defined "UChar *myLocalSaveState" and use * &myLocalSaveState for this parameter). * @return A pointer to the next token found in src, or NULL * when there are no more tokens. @@ -497,16 +497,6 @@ u_strCompare(const UChar *s1, int32_t length1, U_STABLE int32_t U_EXPORT2 u_strCompareIter(UCharIterator *iter1, UCharIterator *iter2, UBool codePointOrder); -#ifndef U_COMPARE_CODE_POINT_ORDER -/* see also unistr.h and unorm.h */ -/** - * Option bit for u_strCaseCompare, u_strcasecmp, unorm_compare, etc: - * Compare strings in code point order instead of code unit order. - * @stable ICU 2.2 - */ -#define U_COMPARE_CODE_POINT_ORDER 0x8000 -#endif - /** * Compare two strings case-insensitively using full case folding. * This is equivalent to @@ -894,7 +884,7 @@ u_memrchr32(const UChar *s, UChar32 c, int32_t count); * Unicode String literals in C. * We need one macro to declare a variable for the string * and to statically preinitialize it if possible, - * and a second macro to dynamically intialize such a string variable if necessary. + * and a second macro to dynamically initialize such a string variable if necessary. * * The macros are defined for maximum performance. * They work only for strings that contain "invariant characters", i.e., @@ -1699,4 +1689,36 @@ u_strFromJavaModifiedUTF8WithSub( UChar32 subchar, int32_t *pNumSubstitutions, UErrorCode *pErrorCode); +#ifndef U_HIDE_INTERNAL_API +/** + * Check whether the string is well-formed according to various criteria: + * - No code points that are defined as non-characters (e.g. 0xFFFF) or are undefined in + * the version of Unicode currently supported. + * - No isolated surrogate code points. + * - No overly-long sequences of non-starter combining marks, i.e. more than 30 characters + * in a row with non-zero combining class (which may have category Mn or Mc); this + * violates Stream-Safe Text Format per UAX #15. This test does not ensure that the + * string satisfies Stream-Safe Text Format (because it does not convert to NFKC first), + * but any string that fails this test is certainly not Stream-Safe. + * - No emoji variation selectors applied to non-emoji code points. This function may + * also check for other non-standard variation sequences. + * - No tag sequences that are ill-formed per definition ED-14a in UTS #51 (e.g. tag + * sequences must have an emoji base and a terminator). + * - Bidi controls do not lead to a bidi embedding level of greater than max_depth (125) + * approximately according to the algorithm in + * [https://www.unicode.org/reports/tr9/#Explicit_Levels_and_Directions] + * (we do not evaluate paragraph direction or FSI direction so may actually toerate a + * level or two beyond the official limit in some cases) + * + * @param s The input string. + * @param length The length of the string, or -1 if it is NUL-terminated. + * @return Boolean value for whether the string is well-formed according to the + * specified criteria. + * @internal Apple only + */ +U_INTERNAL UBool U_EXPORT2 +u_strIsWellFormed(const UChar *s, int32_t length); + +#endif /* U_HIDE_INTERNAL_API */ + #endif diff --git a/icuSources/common/unicode/utext.h b/icuSources/common/unicode/utext.h index 657ba755..81730606 100644 --- a/icuSources/common/unicode/utext.h +++ b/icuSources/common/unicode/utext.h @@ -389,7 +389,7 @@ utext_equals(const UText *a, const UText *b); /***************************************************************************** * - * Functions to work with the text represeted by a UText wrapper + * Functions to work with the text represented by a UText wrapper * *****************************************************************************/ @@ -433,7 +433,7 @@ utext_isLengthExpensive(const UText *ut); * * The iteration position will be set to the start of the returned code point. * - * This function is roughly equivalent to the the sequence + * This function is roughly equivalent to the sequence * utext_setNativeIndex(index); * utext_current32(); * (There is a subtle difference if the index is out of bounds by being less than zero - @@ -592,7 +592,7 @@ U_STABLE void U_EXPORT2 utext_setNativeIndex(UText *ut, int64_t nativeIndex); /** - * Move the iterator postion by delta code points. The number of code points + * Move the iterator position by delta code points. The number of code points * is a signed number; a negative delta will move the iterator backwards, * towards the start of the text. *

@@ -611,7 +611,7 @@ U_STABLE UBool U_EXPORT2 utext_moveIndex32(UText *ut, int32_t delta); /** - * Get the native index of the character preceeding the current position. + * Get the native index of the character preceding the current position. * If the iteration position is already at the start of the text, zero * is returned. * The value returned is the same as that obtained from the following sequence, @@ -628,7 +628,7 @@ utext_moveIndex32(UText *ut, int32_t delta); * native index of the character most recently returned from utext_next(). * * @param ut the text to be accessed - * @return the native index of the character preceeding the current index position, + * @return the native index of the character preceding the current index position, * or zero if the current position is at the start of the text. * @stable ICU 3.6 */ @@ -655,10 +655,10 @@ utext_getPreviousNativeIndex(UText *ut); * @param ut the UText from which to extract data. * @param nativeStart the native index of the first character to extract.\ * If the specified index is out of range, - * it will be pinned to to be within 0 <= index <= textLength + * it will be pinned to be within 0 <= index <= textLength * @param nativeLimit the native string index of the position following the last * character to extract. If the specified index is out of range, - * it will be pinned to to be within 0 <= index <= textLength. + * it will be pinned to be within 0 <= index <= textLength. * nativeLimit must be >= nativeStart. * @param dest the UChar (UTF-16) buffer into which the extracted text is placed * @param destCapacity The size, in UChars, of the destination buffer. May be zero @@ -768,7 +768,7 @@ utext_extract(UText *ut, */ #define UTEXT_SETNATIVEINDEX(ut, ix) \ { int64_t __offset = (ix) - (ut)->chunkNativeStart; \ - if (__offset>=0 && __offset<=(int64_t)(ut)->nativeIndexingLimit) { \ + if (__offset>=0 && __offset<(int64_t)(ut)->nativeIndexingLimit && (ut)->chunkContents[__offset]<0xdc00) { \ (ut)->chunkOffset=(int32_t)__offset; \ } else { \ utext_setNativeIndex((ut), (ix)); } } @@ -906,7 +906,7 @@ utext_copy(UText *ut, * Caution: freezing a UText will disable changes made via the specific * frozen UText wrapper only; it will not have any effect on the ability to * directly modify the text by bypassing the UText. Any such backdoor modifications - * are always an error while UText access is occuring because the underlying + * are always an error while UText access is occurring because the underlying * text can get out of sync with UText's buffering. *

* @@ -1054,7 +1054,7 @@ UTextAccess(UText *ut, int64_t nativeIndex, UBool forward); * be NUL-terminated if there is sufficient space in the destination buffer. * * @param ut the UText from which to extract data. - * @param nativeStart the native index of the first characer to extract. + * @param nativeStart the native index of the first character to extract. * @param nativeLimit the native string index of the position following the last * character to extract. * @param dest the UChar (UTF-16) buffer into which the extracted text is placed @@ -1211,7 +1211,7 @@ UTextClose(UText *ut); struct UTextFuncs { /** * (public) Function table size, sizeof(UTextFuncs) - * Intended for use should the table grow to accomodate added + * Intended for use should the table grow to accommodate added * functions in the future, to allow tests for older format * function tables that do not contain the extensions. * @@ -1345,7 +1345,7 @@ typedef struct UTextFuncs UTextFuncs; struct UText { /** * (private) Magic. Used to help detect when UText functions are handed - * invalid or unitialized UText structs. + * invalid or uninitialized UText structs. * utext_openXYZ() functions take an initialized, * but not necessarily open, UText struct as an * optional fill-in parameter. This magic field @@ -1367,7 +1367,7 @@ struct UText { /** - * Text provider properties. This set of flags is maintainted by the + * Text provider properties. This set of flags is maintained by the * text provider implementation. * @stable ICU 3.4 */ @@ -1452,7 +1452,7 @@ struct UText { void *pExtra; /** - * (protected) Pointer to string or text-containin object or similar. + * (protected) Pointer to string or text-containing object or similar. * This is the source of the text that this UText is wrapping, in a format * that is known to the text provider functions. * @stable ICU 3.4 diff --git a/icuSources/common/unicode/utf.h b/icuSources/common/unicode/utf.h index dff42868..ef512997 100644 --- a/icuSources/common/unicode/utf.h +++ b/icuSources/common/unicode/utf.h @@ -23,9 +23,6 @@ * This file defines macros for checking whether a code point is * a surrogate or a non-character etc. * - * The UChar and UChar32 data types for Unicode code units and code points - * are defined in umachine.h because they can be machine-dependent. - * * If U_NO_DEFAULT_INCLUDE_UTF_HEADERS is 0 then utf.h is included by utypes.h * and itself includes utf8.h and utf16.h after some * common definitions. @@ -50,11 +47,11 @@ * but are optimized for the much more frequently occurring BMP code points. * * umachine.h defines UChar to be an unsigned 16-bit integer. - * Where available, UChar is defined to be a char16_t - * or a wchar_t (if that is an unsigned 16-bit type), otherwise uint16_t. + * Since ICU 59, ICU uses char16_t in C++, UChar only in C, + * and defines UChar=char16_t by default. See the UChar API docs for details. * * UChar32 is defined to be a signed 32-bit integer (int32_t), large enough for a 21-bit - * Unicode code point (Unicode scalar value, 0..0x10ffff). + * Unicode code point (Unicode scalar value, 0..0x10ffff) and U_SENTINEL (-1). * Before ICU 2.4, the definition of UChar32 was similarly platform-dependent as * the definition of UChar. For details see the documentation for UChar32 itself. * @@ -63,11 +60,20 @@ * For actual Unicode character properties see uchar.h. * * By default, string operations must be done with error checking in case - * a string is not well-formed UTF-16. - * The macros will detect if a surrogate code unit is unpaired + * a string is not well-formed UTF-16 or UTF-8. + * + * The U16_ macros detect if a surrogate code unit is unpaired * (lead unit without trail unit or vice versa) and just return the unit itself * as the code point. * + * The U8_ macros detect illegal byte sequences and return a negative value. + * Starting with ICU 60, the observable length of a single illegal byte sequence + * skipped by one of these macros follows the Unicode 6+ recommendation + * which is consistent with the W3C Encoding Standard. + * + * There are ..._OR_FFFD versions of both U16_ and U8_ macros + * that return U+FFFD for illegal code unit sequences. + * * The regular "safe" macros require that the initial, passed-in string index * is within bounds. They only check the index when they read more than one * code unit. This is usually done with code similar to the following loop: @@ -91,10 +97,7 @@ * The performance differences are much larger here because UTF-8 provides so * many opportunities for malformed sequences. * The unsafe UTF-8 macros are entirely implemented inside the macro definitions - * and are fast, while the safe UTF-8 macros call functions for all but the - * trivial (ASCII) cases. - * (ICU 3.6 optimizes U8_NEXT() and U8_APPEND() to handle most other common - * characters inline as well.) + * and are fast, while the safe UTF-8 macros call functions for some complicated cases. * * Unlike with UTF-16, malformed sequences cannot be expressed with distinct * code point values (0..U+10ffff). They are indicated with negative values instead. @@ -126,8 +129,7 @@ */ #define U_IS_UNICODE_NONCHAR(c) \ ((c)>=0xfdd0 && \ - ((uint32_t)(c)<=0xfdef || ((c)&0xfffe)==0xfffe) && \ - (uint32_t)(c)<=0x10ffff) + ((c)<=0xfdef || ((c)&0xfffe)==0xfffe) && (c)<=0x10ffff) /** * Is c a Unicode code point value (0..U+10ffff) @@ -148,9 +150,7 @@ */ #define U_IS_UNICODE_CHAR(c) \ ((uint32_t)(c)<0xd800 || \ - ((uint32_t)(c)>0xdfff && \ - (uint32_t)(c)<=0x10ffff && \ - !U_IS_UNICODE_NONCHAR(c))) + (0xdfff<(c) && (c)<=0x10ffff && !U_IS_UNICODE_NONCHAR(c))) /** * Is this code point a BMP code point (U+0000..U+ffff)? diff --git a/icuSources/common/unicode/utf16.h b/icuSources/common/unicode/utf16.h index 9cc73f7b..35fd0986 100644 --- a/icuSources/common/unicode/utf16.h +++ b/icuSources/common/unicode/utf16.h @@ -185,8 +185,8 @@ * * The length can be negative for a NUL-terminated string. * - * If the offset points to a single, unpaired surrogate, then that itself - * will be returned as the code point. + * If the offset points to a single, unpaired surrogate, then + * c is set to that unpaired surrogate. * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT. * * @param s const UChar * string @@ -213,6 +213,53 @@ } \ } +#ifndef U_HIDE_DRAFT_API + +/** + * Get a code point from a string at a random-access offset, + * without changing the offset. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The offset may point to either the lead or trail surrogate unit + * for a supplementary code point, in which case the macro will read + * the adjacent matching surrogate as well. + * + * The length can be negative for a NUL-terminated string. + * + * If the offset points to a single, unpaired surrogate, then + * c is set to U+FFFD. + * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT_OR_FFFD. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start<=i(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \ + (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \ + } else { \ + (c)=0xfffd; \ + } \ + } \ + } \ +} + +#endif // U_HIDE_DRAFT_API + /* definitions with forward iteration --------------------------------------- */ /** @@ -253,8 +300,7 @@ * for a supplementary code point, in which case the macro will read * the following trail surrogate as well. * If the offset points to a trail surrogate or - * to a single, unpaired lead surrogate, then that itself - * will be returned as the code point. + * to a single, unpaired lead surrogate, then c is set to that unpaired surrogate. * * @param s const UChar * string * @param i string offset, must be i(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \ + --(i); \ + (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \ + } else { \ + (c)=0xfffd; \ + } \ + } \ +} + +#endif // U_HIDE_DRAFT_API + /** * Move the string offset from one code point boundary to the previous one. * (Pre-decrementing backward iteration.) diff --git a/icuSources/common/unicode/utf8.h b/icuSources/common/unicode/utf8.h index 18e7e945..4bb063c5 100644 --- a/icuSources/common/unicode/utf8.h +++ b/icuSources/common/unicode/utf8.h @@ -41,34 +41,24 @@ /* internal definitions ----------------------------------------------------- */ - - /** * Counts the trail bytes for a UTF-8 lead byte. - * Returns 0 for 0..0xbf as well as for 0xfe and 0xff. + * Returns 0 for 0..0xc1 as well as for 0xf5..0xff. + * leadByte might be evaluated multiple times. * * This is internal since it is not meant to be called directly by external clients; * however it is called by public macros in this file and thus must remain stable. * - * Note: Beginning with ICU 50, the implementation uses a multi-condition expression - * which was shown in 2012 (on x86-64) to compile to fast, branch-free code. - * leadByte is evaluated multiple times. - * - * The pre-ICU 50 implementation used the exported array utf8_countTrailBytes: - * #define U8_COUNT_TRAIL_BYTES(leadByte) (utf8_countTrailBytes[leadByte]) - * leadByte was evaluated exactly once. - * * @param leadByte The first byte of a UTF-8 sequence. Must be 0..0xff. * @internal */ #define U8_COUNT_TRAIL_BYTES(leadByte) \ - ((uint8_t)(leadByte)<0xf0 ? \ - ((uint8_t)(leadByte)>=0xc0)+((uint8_t)(leadByte)>=0xe0) : \ - (uint8_t)(leadByte)<0xfe ? 3+((uint8_t)(leadByte)>=0xf8)+((uint8_t)(leadByte)>=0xfc) : 0) + (U8_IS_LEAD(leadByte) ? \ + ((uint8_t)(leadByte)>=0xe0)+((uint8_t)(leadByte)>=0xf0)+1 : 0) /** * Counts the trail bytes for a UTF-8 lead byte of a valid UTF-8 sequence. - * The maximum supported lead byte is 0xf4 corresponding to U+10FFFF. + * Returns 0 for 0..0xc1. Undefined for 0xf5..0xff. * leadByte might be evaluated multiple times. * * This is internal since it is not meant to be called directly by external clients; @@ -78,7 +68,7 @@ * @internal */ #define U8_COUNT_TRAIL_BYTES_UNSAFE(leadByte) \ - (((leadByte)>=0xc0)+((leadByte)>=0xe0)+((leadByte)>=0xf0)) + (((uint8_t)(leadByte)>=0xc2)+((uint8_t)(leadByte)>=0xe0)+((uint8_t)(leadByte)>=0xf0)) /** * Mask a UTF-8 lead byte, leave only the lower bits that form part of the code point value. @@ -89,6 +79,40 @@ */ #define U8_MASK_LEAD_BYTE(leadByte, countTrailBytes) ((leadByte)&=(1<<(6-(countTrailBytes)))-1) +/** + * Internal bit vector for 3-byte UTF-8 validity check, for use in U8_IS_VALID_LEAD3_AND_T1. + * Each bit indicates whether one lead byte + first trail byte pair starts a valid sequence. + * Lead byte E0..EF bits 3..0 are used as byte index, + * first trail byte bits 7..5 are used as bit index into that byte. + * @see U8_IS_VALID_LEAD3_AND_T1 + * @internal + */ +#define U8_LEAD3_T1_BITS "\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x10\x30\x30" + +/** + * Internal 3-byte UTF-8 validity check. + * Non-zero if lead byte E0..EF and first trail byte 00..FF start a valid sequence. + * @internal + */ +#define U8_IS_VALID_LEAD3_AND_T1(lead, t1) (U8_LEAD3_T1_BITS[(lead)&0xf]&(1<<((uint8_t)(t1)>>5))) + +/** + * Internal bit vector for 4-byte UTF-8 validity check, for use in U8_IS_VALID_LEAD4_AND_T1. + * Each bit indicates whether one lead byte + first trail byte pair starts a valid sequence. + * First trail byte bits 7..4 are used as byte index, + * lead byte F0..F4 bits 2..0 are used as bit index into that byte. + * @see U8_IS_VALID_LEAD4_AND_T1 + * @internal + */ +#define U8_LEAD4_T1_BITS "\x00\x00\x00\x00\x00\x00\x00\x00\x1E\x0F\x0F\x0F\x00\x00\x00\x00" + +/** + * Internal 4-byte UTF-8 validity check. + * Non-zero if lead byte F0..F4 and first trail byte 00..FF start a valid sequence. + * @internal + */ +#define U8_IS_VALID_LEAD4_AND_T1(lead, t1) (U8_LEAD4_T1_BITS[(uint8_t)(t1)>>4]&(1<<((lead)&7))) + /** * Function for handling "next code point" with error-checking. * @@ -148,20 +172,21 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); #define U8_IS_SINGLE(c) (((c)&0x80)==0) /** - * Is this code unit (byte) a UTF-8 lead byte? + * Is this code unit (byte) a UTF-8 lead byte? (0xC2..0xF4) * @param c 8-bit code unit (byte) * @return TRUE or FALSE * @stable ICU 2.4 */ -#define U8_IS_LEAD(c) ((uint8_t)((c)-0xc0)<0x3e) +#define U8_IS_LEAD(c) ((uint8_t)((c)-0xc2)<=0x32) +// 0x32=0xf4-0xc2 /** - * Is this code unit (byte) a UTF-8 trail byte? + * Is this code unit (byte) a UTF-8 trail byte? (0x80..0xBF) * @param c 8-bit code unit (byte) * @return TRUE or FALSE * @stable ICU 2.4 */ -#define U8_IS_TRAIL(c) (((c)&0xc0)==0x80) +#define U8_IS_TRAIL(c) ((int8_t)(c)<-0x40) /** * How many code units (bytes) are used for the UTF-8 encoding @@ -289,7 +314,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); */ #define U8_NEXT_UNSAFE(s, i, c) { \ (c)=(uint8_t)(s)[(i)++]; \ - if((c)>=0x80) { \ + if(!U8_IS_SINGLE(c)) { \ if((c)<0xe0) { \ (c)=(((c)&0x1f)<<6)|((s)[(i)++]&0x3f); \ } else if((c)<0xf0) { \ @@ -323,32 +348,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); * @see U8_NEXT_UNSAFE * @stable ICU 2.4 */ -#define U8_NEXT(s, i, length, c) { \ - (c)=(uint8_t)(s)[(i)++]; \ - if((c)>=0x80) { \ - uint8_t __t1, __t2; \ - if( /* handle U+1000..U+CFFF inline */ \ - (0xe0<(c) && (c)<=0xec) && \ - (((i)+1)<(length) || (length)<0) && \ - (__t1=(uint8_t)((s)[i]-0x80))<=0x3f && \ - (__t2=(uint8_t)((s)[(i)+1]-0x80))<= 0x3f \ - ) { \ - /* no need for (c&0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ \ - (c)=(UChar)(((c)<<12)|(__t1<<6)|__t2); \ - (i)+=2; \ - } else if( /* handle U+0080..U+07FF inline */ \ - ((c)<0xe0 && (c)>=0xc2) && \ - ((i)!=(length)) && \ - (__t1=(uint8_t)((s)[i]-0x80))<=0x3f \ - ) { \ - (c)=(((c)&0x1f)<<6)|__t1; \ - ++(i); \ - } else { \ - /* function call for "complicated" and error cases */ \ - (c)=utf8_nextCharSafeBody((const uint8_t *)s, &(i), (length), c, -1); \ - } \ - } \ -} +#define U8_NEXT(s, i, length, c) U8_INTERNAL_NEXT_OR_SUB(s, i, length, c, U_SENTINEL) /** * Get a code point from a string at a code point boundary offset, @@ -374,29 +374,33 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); * @see U8_NEXT * @stable ICU 51 */ -#define U8_NEXT_OR_FFFD(s, i, length, c) { \ +#define U8_NEXT_OR_FFFD(s, i, length, c) U8_INTERNAL_NEXT_OR_SUB(s, i, length, c, 0xfffd) + +/** @internal */ +#define U8_INTERNAL_NEXT_OR_SUB(s, i, length, c, sub) { \ (c)=(uint8_t)(s)[(i)++]; \ - if((c)>=0x80) { \ - uint8_t __t1, __t2; \ - if( /* handle U+1000..U+CFFF inline */ \ - (0xe0<(c) && (c)<=0xec) && \ - (((i)+1)<(length) || (length)<0) && \ - (__t1=(uint8_t)((s)[i]-0x80))<=0x3f && \ - (__t2=(uint8_t)((s)[(i)+1]-0x80))<= 0x3f \ - ) { \ - /* no need for (c&0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ \ - (c)=(UChar)(((c)<<12)|(__t1<<6)|__t2); \ - (i)+=2; \ - } else if( /* handle U+0080..U+07FF inline */ \ - ((c)<0xe0 && (c)>=0xc2) && \ - ((i)!=(length)) && \ - (__t1=(uint8_t)((s)[i]-0x80))<=0x3f \ - ) { \ - (c)=(((c)&0x1f)<<6)|__t1; \ - ++(i); \ + if(!U8_IS_SINGLE(c)) { \ + uint8_t __t = 0; \ + if((i)!=(length) && \ + /* fetch/validate/assemble all but last trail byte */ \ + ((c)>=0xe0 ? \ + ((c)<0xf0 ? /* U+0800..U+FFFF except surrogates */ \ + U8_LEAD3_T1_BITS[(c)&=0xf]&(1<<((__t=(s)[i])>>5)) && \ + (__t&=0x3f, 1) \ + : /* U+10000..U+10FFFF */ \ + ((c)-=0xf0)<=4 && \ + U8_LEAD4_T1_BITS[(__t=(s)[i])>>4]&(1<<(c)) && \ + ((c)=((c)<<6)|(__t&0x3f), ++(i)!=(length)) && \ + (__t=(s)[i]-0x80)<=0x3f) && \ + /* valid second-to-last trail byte */ \ + ((c)=((c)<<6)|__t, ++(i)!=(length)) \ + : /* U+0080..U+07FF */ \ + (c)>=0xc2 && ((c)&=0x1f, 1)) && \ + /* last trail byte */ \ + (__t=(s)[i]-0x80)<=0x3f && \ + ((c)=((c)<<6)|__t, ++(i), 1)) { \ } else { \ - /* function call for "complicated" and error cases */ \ - (c)=utf8_nextCharSafeBody((const uint8_t *)s, &(i), (length), c, -3); \ + (c)=(sub); /* ill-formed*/ \ } \ } \ } @@ -415,21 +419,22 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); * @stable ICU 2.4 */ #define U8_APPEND_UNSAFE(s, i, c) { \ - if((uint32_t)(c)<=0x7f) { \ - (s)[(i)++]=(uint8_t)(c); \ + uint32_t __uc=(c); \ + if(__uc<=0x7f) { \ + (s)[(i)++]=(uint8_t)__uc; \ } else { \ - if((uint32_t)(c)<=0x7ff) { \ - (s)[(i)++]=(uint8_t)(((c)>>6)|0xc0); \ + if(__uc<=0x7ff) { \ + (s)[(i)++]=(uint8_t)((__uc>>6)|0xc0); \ } else { \ - if((uint32_t)(c)<=0xffff) { \ - (s)[(i)++]=(uint8_t)(((c)>>12)|0xe0); \ + if(__uc<=0xffff) { \ + (s)[(i)++]=(uint8_t)((__uc>>12)|0xe0); \ } else { \ - (s)[(i)++]=(uint8_t)(((c)>>18)|0xf0); \ - (s)[(i)++]=(uint8_t)((((c)>>12)&0x3f)|0x80); \ + (s)[(i)++]=(uint8_t)((__uc>>18)|0xf0); \ + (s)[(i)++]=(uint8_t)(((__uc>>12)&0x3f)|0x80); \ } \ - (s)[(i)++]=(uint8_t)((((c)>>6)&0x3f)|0x80); \ + (s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \ } \ - (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); \ + (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ } \ } @@ -451,17 +456,23 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); * @stable ICU 2.4 */ #define U8_APPEND(s, i, capacity, c, isError) { \ - if((uint32_t)(c)<=0x7f) { \ - (s)[(i)++]=(uint8_t)(c); \ - } else if((uint32_t)(c)<=0x7ff && (i)+1<(capacity)) { \ - (s)[(i)++]=(uint8_t)(((c)>>6)|0xc0); \ - (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); \ - } else if((uint32_t)(c)<=0xd7ff && (i)+2<(capacity)) { \ - (s)[(i)++]=(uint8_t)(((c)>>12)|0xe0); \ - (s)[(i)++]=(uint8_t)((((c)>>6)&0x3f)|0x80); \ - (s)[(i)++]=(uint8_t)(((c)&0x3f)|0x80); \ + uint32_t __uc=(c); \ + if(__uc<=0x7f) { \ + (s)[(i)++]=(uint8_t)__uc; \ + } else if(__uc<=0x7ff && (i)+1<(capacity)) { \ + (s)[(i)++]=(uint8_t)((__uc>>6)|0xc0); \ + (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ + } else if((__uc<=0xd7ff || (0xe000<=__uc && __uc<=0xffff)) && (i)+2<(capacity)) { \ + (s)[(i)++]=(uint8_t)((__uc>>12)|0xe0); \ + (s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \ + (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ + } else if(0xffff<__uc && __uc<=0x10ffff && (i)+3<(capacity)) { \ + (s)[(i)++]=(uint8_t)((__uc>>18)|0xf0); \ + (s)[(i)++]=(uint8_t)(((__uc>>12)&0x3f)|0x80); \ + (s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \ + (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ } else { \ - (i)=utf8_appendCharSafeBody(s, (i), (capacity), c, &(isError)); \ + (isError)=TRUE; \ } \ } @@ -476,7 +487,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); * @stable ICU 2.4 */ #define U8_FWD_1_UNSAFE(s, i) { \ - (i)+=1+U8_COUNT_TRAIL_BYTES_UNSAFE((uint8_t)(s)[i]); \ + (i)+=1+U8_COUNT_TRAIL_BYTES_UNSAFE((s)[i]); \ } /** @@ -493,15 +504,24 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); * @stable ICU 2.4 */ #define U8_FWD_1(s, i, length) { \ - uint8_t __b=(uint8_t)(s)[(i)++]; \ - if(U8_IS_LEAD(__b)) { \ - uint8_t __count=U8_COUNT_TRAIL_BYTES(__b); \ - if((i)+__count>(length) && (length)>=0) { \ - __count=(uint8_t)((length)-(i)); \ - } \ - while(__count>0 && U8_IS_TRAIL((s)[i])) { \ - ++(i); \ - --__count; \ + uint8_t __b=(s)[(i)++]; \ + if(U8_IS_LEAD(__b) && (i)!=(length)) { \ + uint8_t __t1=(s)[i]; \ + if((0xe0<=__b && __b<0xf0)) { \ + if(U8_IS_VALID_LEAD3_AND_T1(__b, __t1) && \ + ++(i)!=(length) && U8_IS_TRAIL((s)[i])) { \ + ++(i); \ + } \ + } else if(__b<0xe0) { \ + if(U8_IS_TRAIL(__t1)) { \ + ++(i); \ + } \ + } else /* c>=0xf0 */ { \ + if(U8_IS_VALID_LEAD4_AND_T1(__b, __t1) && \ + ++(i)!=(length) && U8_IS_TRAIL((s)[i]) && \ + ++(i)!=(length) && U8_IS_TRAIL((s)[i])) { \ + ++(i); \ + } \ } \ } \ } @@ -572,12 +592,15 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); * If the offset points to a UTF-8 trail byte, * then the offset is moved backward to the corresponding lead byte. * Otherwise, it is not modified. + * * "Safe" macro, checks for illegal sequences and for string boundaries. + * Unlike U8_TRUNCATE_IF_INCOMPLETE(), this macro always reads s[i]. * * @param s const uint8_t * string * @param start int32_t starting string offset (usually 0) * @param i int32_t string offset, must be start<=i * @see U8_SET_CP_START_UNSAFE + * @see U8_TRUNCATE_IF_INCOMPLETE * @stable ICU 2.4 */ #define U8_SET_CP_START(s, start, i) { \ @@ -586,6 +609,57 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); } \ } +#ifndef U_HIDE_DRAFT_API +/** + * If the string ends with a UTF-8 byte sequence that is valid so far + * but incomplete, then reduce the length of the string to end before + * the lead byte of that incomplete sequence. + * For example, if the string ends with E1 80, the length is reduced by 2. + * + * In all other cases (the string ends with a complete sequence, or it is not + * possible for any further trail byte to extend the trailing sequence) + * the length remains unchanged. + * + * Useful for processing text split across multiple buffers + * (save the incomplete sequence for later) + * and for optimizing iteration + * (check for string length only once per character). + * + * "Safe" macro, checks for illegal sequences and for string boundaries. + * Unlike U8_SET_CP_START(), this macro never reads s[length]. + * + * (In UTF-16, simply check for U16_IS_LEAD(last code unit).) + * + * @param s const uint8_t * string + * @param start int32_t starting string offset (usually 0) + * @param length int32_t string length (usually start<=length) + * @see U8_SET_CP_START + * @draft ICU 61 + */ +#define U8_TRUNCATE_IF_INCOMPLETE(s, start, length) \ + if((length)>(start)) { \ + uint8_t __b1=s[(length)-1]; \ + if(U8_IS_SINGLE(__b1)) { \ + /* common ASCII character */ \ + } else if(U8_IS_LEAD(__b1)) { \ + --(length); \ + } else if(U8_IS_TRAIL(__b1) && ((length)-2)>=(start)) { \ + uint8_t __b2=s[(length)-2]; \ + if(0xe0<=__b2 && __b2<=0xf4) { \ + if(__b2<0xf0 ? U8_IS_VALID_LEAD3_AND_T1(__b2, __b1) : \ + U8_IS_VALID_LEAD4_AND_T1(__b2, __b1)) { \ + (length)-=2; \ + } \ + } else if(U8_IS_TRAIL(__b2) && ((length)-3)>=(start)) { \ + uint8_t __b3=s[(length)-3]; \ + if(0xf0<=__b3 && __b3<=0xf4 && U8_IS_VALID_LEAD4_AND_T1(__b3, __b2)) { \ + (length)-=3; \ + } \ + } \ + } \ + } +#endif // U_HIDE_DRAFT_API + /* definitions with backward iteration -------------------------------------- */ /** @@ -615,7 +689,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); /* c is a trail byte */ \ (c)&=0x3f; \ for(;;) { \ - __b=(uint8_t)(s)[--(i)]; \ + __b=(s)[--(i)]; \ if(__b>=0xc0) { \ U8_MASK_LEAD_BYTE(__b, __count); \ (c)|=(UChar32)__b<<__shift; \ @@ -651,7 +725,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); */ #define U8_PREV(s, start, i, c) { \ (c)=(uint8_t)(s)[--(i)]; \ - if((c)>=0x80) { \ + if(!U8_IS_SINGLE(c)) { \ (c)=utf8_prevCharSafeBody((const uint8_t *)s, start, &(i), c, -1); \ } \ } @@ -682,7 +756,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); */ #define U8_PREV_OR_FFFD(s, start, i, c) { \ (c)=(uint8_t)(s)[--(i)]; \ - if((c)>=0x80) { \ + if(!U8_IS_SINGLE(c)) { \ (c)=utf8_prevCharSafeBody((const uint8_t *)s, start, &(i), c, -3); \ } \ } diff --git a/icuSources/common/unicode/utf_old.h b/icuSources/common/unicode/utf_old.h index 250cb8c0..55c17c01 100644 --- a/icuSources/common/unicode/utf_old.h +++ b/icuSources/common/unicode/utf_old.h @@ -145,7 +145,22 @@ #ifndef __UTF_OLD_H__ #define __UTF_OLD_H__ -#ifndef U_HIDE_DEPRECATED_API +/** + * \def U_HIDE_OBSOLETE_UTF_OLD_H + * + * Hides the obsolete definitions in unicode/utf_old.h. + * Recommended to be set to 1 at compile time to make sure + * the long-deprecated macros are no longer used. + * + * For reasons for the deprecation see the utf_old.h file comments. + * + * @internal + */ +#ifndef U_HIDE_OBSOLETE_UTF_OLD_H +# define U_HIDE_OBSOLETE_UTF_OLD_H 0 +#endif + +#if !defined(U_HIDE_DEPRECATED_API) && !U_HIDE_OBSOLETE_UTF_OLD_H #include "unicode/utf.h" #include "unicode/utf8.h" @@ -1184,7 +1199,6 @@ U_CFUNC U_IMPORT const uint8_t utf8_countTrailBytes[]; /* U_IMPORT2? */ /*U_I */ #define UTF_SET_CHAR_LIMIT(s, start, i, length) U16_SET_CP_LIMIT(s, start, i, length) -#endif /* U_HIDE_DEPRECATED_API */ +#endif // !U_HIDE_DEPRECATED_API && !U_HIDE_OBSOLETE_UTF_OLD_H #endif - diff --git a/icuSources/common/unicode/utrace.h b/icuSources/common/unicode/utrace.h index 6b4c4df9..66269784 100644 --- a/icuSources/common/unicode/utrace.h +++ b/icuSources/common/unicode/utrace.h @@ -183,7 +183,7 @@ UTraceData(const void *context, int32_t fnNumber, int32_t level, * tracing functions must themselves filter by checking that the * current thread is the desired thread. * - * @param context an uninterpretted pointer. Whatever is passed in + * @param context an uninterpreted pointer. Whatever is passed in * here will in turn be passed to each of the tracing * functions UTraceEntry, UTraceExit and UTraceData. * ICU does not use or alter this pointer. @@ -320,7 +320,7 @@ utrace_getFunctions(const void **context, * human readable form. Note that a UTraceData function may choose * to not format the data; it could, for example, save it in * in the raw form it was received (more compact), leaving - * formatting for a later trace analyis tool. + * formatting for a later trace analysis tool. * @param outBuf pointer to a buffer to receive the formatted output. Output * will be nul terminated if there is space in the buffer - * if the length of the requested output < the output buffer size. diff --git a/icuSources/common/unicode/utypes.h b/icuSources/common/unicode/utypes.h index fe693421..cc5eefb6 100644 --- a/icuSources/common/unicode/utypes.h +++ b/icuSources/common/unicode/utypes.h @@ -163,7 +163,7 @@ /** * U_ICU_ENTRY_POINT is the name of the DLL entry point to the ICU data library. * Defined as a literal, not a string. - * Tricky Preprocessor use - ## operator replaces macro paramters with the literal string + * Tricky Preprocessor use - ## operator replaces macro parameters with the literal string * from the corresponding macro invocation, _before_ other macro substitutions. * Need a nested \#defines to get the actual version numbers rather than * the literal text U_ICU_VERSION_MAJOR_NUM into the name. @@ -468,14 +468,14 @@ typedef enum UErrorCode { U_BUFFER_OVERFLOW_ERROR = 15, /**< A result would not fit in the supplied buffer */ U_UNSUPPORTED_ERROR = 16, /**< Requested operation not supported in current context */ U_RESOURCE_TYPE_MISMATCH = 17, /**< an operation is requested over a resource that does not support it */ - U_ILLEGAL_ESCAPE_SEQUENCE = 18, /**< ISO-2022 illlegal escape sequence */ + U_ILLEGAL_ESCAPE_SEQUENCE = 18, /**< ISO-2022 illegal escape sequence */ U_UNSUPPORTED_ESCAPE_SEQUENCE = 19, /**< ISO-2022 unsupported escape sequence */ U_NO_SPACE_AVAILABLE = 20, /**< No space available for in-buffer expansion for Arabic shaping */ U_CE_NOT_FOUND_ERROR = 21, /**< Currently used only while setting variable top, but can be used generally */ U_PRIMARY_TOO_LONG_ERROR = 22, /**< User tried to set variable top to a primary that is longer than two bytes */ U_STATE_TOO_OLD_ERROR = 23, /**< ICU cannot construct a service from this state, as it is no longer supported */ U_TOO_MANY_ALIASES_ERROR = 24, /**< There are too many aliases in the path to the requested resource. - It is very possible that a circular alias definition has occured */ + It is very possible that a circular alias definition has occurred */ U_ENUM_OUT_OF_SYNC_ERROR = 25, /**< UEnumeration out of sync with underlying collection */ U_INVARIANT_CONVERSION_ERROR = 26, /**< Unable to convert a UChar* string to char* with the invariant converter. */ U_INVALID_STATE_ERROR = 27, /**< Requested operation can not be completed with ICU in its current state */ @@ -521,7 +521,7 @@ typedef enum UErrorCode { U_MULTIPLE_COMPOUND_FILTERS, /**< More than one compound filter */ U_INVALID_RBT_SYNTAX, /**< A "::id" rule was passed to the RuleBasedTransliterator parser */ U_INVALID_PROPERTY_PATTERN, /**< UNUSED as of ICU 2.4 */ - U_MALFORMED_PRAGMA, /**< A 'use' pragma is invlalid */ + U_MALFORMED_PRAGMA, /**< A 'use' pragma is invalid */ U_UNCLOSED_SEGMENT, /**< A closing ')' is missing */ U_ILLEGAL_CHAR_IN_SEGMENT, /**< UNUSED as of ICU 2.4 */ U_VARIABLE_RANGE_EXHAUSTED, /**< Too many stand-ins generated for the given variable range */ @@ -561,12 +561,18 @@ typedef enum UErrorCode { U_DEFAULT_KEYWORD_MISSING, /**< Missing DEFAULT rule in plural rules */ U_DECIMAL_NUMBER_SYNTAX_ERROR, /**< Decimal number syntax error */ U_FORMAT_INEXACT_ERROR, /**< Cannot format a number exactly and rounding mode is ROUND_UNNECESSARY @stable ICU 4.8 */ +#ifndef U_HIDE_DRAFT_API + U_NUMBER_ARG_OUTOFBOUNDS_ERROR, /**< The argument to a NumberFormatter helper method was out of bounds; the bounds are usually 0 to 999. @draft ICU 61 */ +#endif // U_HIDE_DRAFT_API +#ifndef U_HIDE_DRAFT_API + U_NUMBER_SKELETON_SYNTAX_ERROR, /**< The number skeleton passed to C++ NumberFormatter or C UNumberFormatter was invalid or contained a syntax error. @draft ICU 62 */ +#endif // U_HIDE_DRAFT_API #ifndef U_HIDE_DEPRECATED_API /** * One more than the highest normal formatting API error code. * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ - U_FMT_PARSE_ERROR_LIMIT, + U_FMT_PARSE_ERROR_LIMIT = 0x10114, #endif // U_HIDE_DEPRECATED_API /* @@ -577,7 +583,7 @@ typedef enum UErrorCode { U_BRK_HEX_DIGITS_EXPECTED, /**< Hex digits expected as part of a escaped char in a rule. */ U_BRK_SEMICOLON_EXPECTED, /**< Missing ';' at the end of a RBBI rule. */ U_BRK_RULE_SYNTAX, /**< Syntax error in RBBI rule. */ - U_BRK_UNCLOSED_SET, /**< UnicodeSet witing an RBBI rule missing a closing ']'. */ + U_BRK_UNCLOSED_SET, /**< UnicodeSet writing an RBBI rule missing a closing ']'. */ U_BRK_ASSIGN_ERROR, /**< Syntax error in RBBI rule assignment statement. */ U_BRK_VARIABLE_REDFINITION, /**< RBBI rule $Variable redefined. */ U_BRK_MISMATCHED_PAREN, /**< Mis-matched parentheses in an RBBI rule. */ @@ -586,7 +592,7 @@ typedef enum UErrorCode { U_BRK_INIT_ERROR, /**< Initialization failure. Probable missing ICU Data. */ U_BRK_RULE_EMPTY_SET, /**< Rule contains an empty Unicode Set. */ U_BRK_UNRECOGNIZED_OPTION, /**< !!option in RBBI rules not recognized. */ - U_BRK_MALFORMED_RULE_TAG, /**< The {nnn} tag on a rule is mal formed */ + U_BRK_MALFORMED_RULE_TAG, /**< The {nnn} tag on a rule is malformed */ #ifndef U_HIDE_DEPRECATED_API /** * One more than the highest normal BreakIterator error code. diff --git a/icuSources/common/unicode/uvernum.h b/icuSources/common/unicode/uvernum.h index cae59ad8..22406611 100644 --- a/icuSources/common/unicode/uvernum.h +++ b/icuSources/common/unicode/uvernum.h @@ -58,7 +58,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION_MAJOR_NUM 59 +#define U_ICU_VERSION_MAJOR_NUM 62 /** The current ICU minor version as an integer. * This value will change in the subsequent releases of ICU @@ -84,7 +84,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_SUFFIX _59 +#define U_ICU_VERSION_SUFFIX _62 /** * \def U_DEF2_ICU_ENTRY_POINT_RENAME @@ -119,24 +119,26 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION "59.1" +#define U_ICU_VERSION "62.1" -/** The current ICU library major/minor version as a string without dots, for library name suffixes. - * This value will change in the subsequent releases of ICU - * @stable ICU 2.6 +/** + * The current ICU library major version number as a string, for library name suffixes. + * This value will change in subsequent releases of ICU. + * + * Until ICU 4.8, this was the combination of the single-digit major and minor ICU version numbers + * into one string without dots ("48"). + * Since ICU 49, it is the double-digit major ICU version number. + * See http://userguide.icu-project.org/design#TOC-Version-Numbers-in-ICU + * + * @stable ICU 2.6 */ -#if U_PLATFORM_HAS_WINUWP_API == 0 -#define U_ICU_VERSION_SHORT "59" -#else -// U_DISABLE_RENAMING does not impact dat file name -#define U_ICU_VERSION_SHORT -#endif /* U_PLATFORM_HAS_WINUWP_API == 0 */ +#define U_ICU_VERSION_SHORT "62" #ifndef U_HIDE_INTERNAL_API /** Data version in ICU4C. * @internal ICU 4.4 Internal Use Only **/ -#define U_ICU_DATA_VERSION "59.1" +#define U_ICU_DATA_VERSION "62.1" #endif /* U_HIDE_INTERNAL_API */ /*=========================================================================== diff --git a/icuSources/common/unicode/uversion.h b/icuSources/common/unicode/uversion.h index e24068d0..4aaa8b4d 100644 --- a/icuSources/common/unicode/uversion.h +++ b/icuSources/common/unicode/uversion.h @@ -105,7 +105,7 @@ typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH]; * @stable ICU 2.4 */ -/* Define namespace symbols if the compiler supports it. */ +/* Define C++ namespace symbols. */ #ifdef __cplusplus # if U_DISABLE_RENAMING # define U_ICU_NAMESPACE icu @@ -122,7 +122,13 @@ typedef uint8_t UVersionInfo[U_MAX_VERSION_LENGTH]; # define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE:: # ifndef U_USING_ICU_NAMESPACE -# define U_USING_ICU_NAMESPACE 1 +# if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || \ + defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) || \ + defined(U_LAYOUTEX_IMPLEMENTATION) || defined(U_TOOLUTIL_IMPLEMENTATION) +# define U_USING_ICU_NAMESPACE 0 +# else +# define U_USING_ICU_NAMESPACE 0 +# endif # endif # if U_USING_ICU_NAMESPACE U_NAMESPACE_USE diff --git a/icuSources/common/unifiedcache.cpp b/icuSources/common/unifiedcache.cpp index fd2d107a..f0f660ed 100644 --- a/icuSources/common/unifiedcache.cpp +++ b/icuSources/common/unifiedcache.cpp @@ -2,30 +2,32 @@ // License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** -* Copyright (C) 2015, International Business Machines Corporation and -* others. All Rights Reserved. +* Copyright (C) 2015, International Business Machines Corporation and +* others. All Rights Reserved. ****************************************************************************** -* -* File UNIFIEDCACHE.CPP +* +* File unifiedcache.cpp ****************************************************************************** */ -#include "uhash.h" #include "unifiedcache.h" -#include "umutex.h" + +#include // For std::max() + #include "mutex.h" #include "uassert.h" +#include "uhash.h" #include "ucln_cmn.h" +#include "umutex.h" static icu::UnifiedCache *gCache = NULL; -static icu::SharedObject *gNoValue = NULL; static UMutex gCacheMutex = U_MUTEX_INITIALIZER; static UConditionVar gInProgressValueAddedCond = U_CONDITION_INITIALIZER; static icu::UInitOnce gCacheInitOnce = U_INITONCE_INITIALIZER; -static const int32_t MAX_EVICT_ITERATIONS = 10; -static int32_t DEFAULT_MAX_UNUSED = 1000; -static int32_t DEFAULT_PERCENTAGE_OF_IN_USE = 100; +static const int32_t MAX_EVICT_ITERATIONS = 10; +static const int32_t DEFAULT_MAX_UNUSED = 1000; +static const int32_t DEFAULT_PERCENTAGE_OF_IN_USE = 100; U_CDECL_BEGIN @@ -35,10 +37,6 @@ static UBool U_CALLCONV unifiedcache_cleanup() { delete gCache; gCache = NULL; } - if (gNoValue) { - delete gNoValue; - gNoValue = NULL; - } return TRUE; } U_CDECL_END @@ -73,23 +71,15 @@ static void U_CALLCONV cacheInit(UErrorCode &status) { ucln_common_registerCleanup( UCLN_COMMON_UNIFIED_CACHE, unifiedcache_cleanup); - // gNoValue must be created first to avoid assertion error in - // cache constructor. - gNoValue = new SharedObject(); gCache = new UnifiedCache(status); if (gCache == NULL) { status = U_MEMORY_ALLOCATION_ERROR; } if (U_FAILURE(status)) { delete gCache; - delete gNoValue; gCache = NULL; - gNoValue = NULL; return; } - // We add a softref because we want hash elements with gNoValue to be - // elligible for purging but we don't ever want gNoValue to be deleted. - gNoValue->addSoftRef(); } UnifiedCache *UnifiedCache::getInstance(UErrorCode &status) { @@ -104,14 +94,24 @@ UnifiedCache *UnifiedCache::getInstance(UErrorCode &status) { UnifiedCache::UnifiedCache(UErrorCode &status) : fHashtable(NULL), fEvictPos(UHASH_FIRST), - fItemsInUseCount(0), + fNumValuesTotal(0), + fNumValuesInUse(0), fMaxUnused(DEFAULT_MAX_UNUSED), fMaxPercentageOfInUse(DEFAULT_PERCENTAGE_OF_IN_USE), - fAutoEvictedCount(0) { + fAutoEvictedCount(0), + fNoValue(nullptr) { if (U_FAILURE(status)) { return; } - U_ASSERT(gNoValue != NULL); + fNoValue = new SharedObject(); + if (fNoValue == nullptr) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + fNoValue->softRefCount = 1; // Add fake references to prevent fNoValue from being deleted + fNoValue->hardRefCount = 1; // when other references to it are removed. + fNoValue->cachePtr = this; + fHashtable = uhash_open( &ucache_hashKeys, &ucache_compareKeys, @@ -139,7 +139,7 @@ void UnifiedCache::setEvictionPolicy( int32_t UnifiedCache::unusedCount() const { Mutex lock(&gCacheMutex); - return uhash_count(fHashtable) - fItemsInUseCount; + return uhash_count(fHashtable) - fNumValuesInUse; } int64_t UnifiedCache::autoEvictedCount() const { @@ -161,6 +161,12 @@ void UnifiedCache::flush() const { while (_flush(FALSE)); } +void UnifiedCache::handleUnreferencedObject() const { + Mutex lock(&gCacheMutex); + --fNumValuesInUse; + _runEvictionSlice(); +} + #ifdef UNIFIED_CACHE_DEBUG #include @@ -196,10 +202,10 @@ void UnifiedCache::_dumpContents() const { ++cnt; fprintf( stderr, - "Unified Cache: Key '%s', error %d, value %p, total refcount %d, soft refcount %d\n", + "Unified Cache: Key '%s', error %d, value %p, total refcount %d, soft refcount %d\n", key->writeDescription(buffer, 256), key->creationStatus, - sharedObject == gNoValue ? NULL :sharedObject, + sharedObject == fNoValue ? NULL :sharedObject, sharedObject->getRefCount(), sharedObject->getSoftRefCount()); } @@ -213,16 +219,17 @@ UnifiedCache::~UnifiedCache() { flush(); { // Now all that should be left in the cache are entries that refer to - // each other and entries with hard references from outside the cache. + // each other and entries with hard references from outside the cache. // Nothing we can do about these so proceed to wipe out the cache. Mutex lock(&gCacheMutex); _flush(TRUE); } uhash_close(fHashtable); + fHashtable = nullptr; + delete fNoValue; + fNoValue = nullptr; } -// Returns the next element in the cache round robin style. -// On entry, gCacheMutex must be held. const UHashElement * UnifiedCache::_nextElement() const { const UHashElement *element = uhash_nextElement(fHashtable, &fEvictPos); @@ -233,46 +240,36 @@ UnifiedCache::_nextElement() const { return element; } -// Flushes the contents of the cache. If cache values hold references to other -// cache values then _flush should be called in a loop until it returns FALSE. -// On entry, gCacheMutex must be held. -// On exit, those values with are evictable are flushed. If all is true -// then every value is flushed even if it is not evictable. -// Returns TRUE if any value in cache was flushed or FALSE otherwise. UBool UnifiedCache::_flush(UBool all) const { UBool result = FALSE; int32_t origSize = uhash_count(fHashtable); for (int32_t i = 0; i < origSize; ++i) { const UHashElement *element = _nextElement(); + if (element == nullptr) { + break; + } if (all || _isEvictable(element)) { const SharedObject *sharedObject = (const SharedObject *) element->value.pointer; + U_ASSERT(sharedObject->cachePtr = this); uhash_removeElement(fHashtable, element); - sharedObject->removeSoftRef(); + removeSoftRef(sharedObject); // Deletes the sharedObject when softRefCount goes to zero. result = TRUE; } } return result; } -// Computes how many items should be evicted. -// On entry, gCacheMutex must be held. -// Returns number of items that should be evicted or a value <= 0 if no -// items need to be evicted. int32_t UnifiedCache::_computeCountOfItemsToEvict() const { - int32_t maxPercentageOfInUseCount = - fItemsInUseCount * fMaxPercentageOfInUse / 100; - int32_t maxUnusedCount = fMaxUnused; - if (maxUnusedCount < maxPercentageOfInUseCount) { - maxUnusedCount = maxPercentageOfInUseCount; - } - return uhash_count(fHashtable) - fItemsInUseCount - maxUnusedCount; + int32_t totalItems = uhash_count(fHashtable); + int32_t evictableItems = totalItems - fNumValuesInUse; + + int32_t unusedLimitByPercentage = fNumValuesInUse * fMaxPercentageOfInUse / 100; + int32_t unusedLimit = std::max(unusedLimitByPercentage, fMaxUnused); + int32_t countOfItemsToEvict = std::max(0, evictableItems - unusedLimit); + return countOfItemsToEvict; } -// Run an eviction slice. -// On entry, gCacheMutex must be held. -// _runEvictionSlice runs a slice of the evict pipeline by examining the next -// 10 entries in the cache round robin style evicting them if they are eligible. void UnifiedCache::_runEvictionSlice() const { int32_t maxItemsToEvict = _computeCountOfItemsToEvict(); if (maxItemsToEvict <= 0) { @@ -280,11 +277,14 @@ void UnifiedCache::_runEvictionSlice() const { } for (int32_t i = 0; i < MAX_EVICT_ITERATIONS; ++i) { const UHashElement *element = _nextElement(); + if (element == nullptr) { + break; + } if (_isEvictable(element)) { const SharedObject *sharedObject = (const SharedObject *) element->value.pointer; uhash_removeElement(fHashtable, element); - sharedObject->removeSoftRef(); + removeSoftRef(sharedObject); // Deletes sharedObject when SoftRefCount goes to zero. ++fAutoEvictedCount; if (--maxItemsToEvict == 0) { break; @@ -293,13 +293,8 @@ void UnifiedCache::_runEvictionSlice() const { } } - -// Places a new value and creationStatus in the cache for the given key. -// On entry, gCacheMutex must be held. key must not exist in the cache. -// On exit, value and creation status placed under key. Soft reference added -// to value on successful add. On error sets status. void UnifiedCache::_putNew( - const CacheKeyBase &key, + const CacheKeyBase &key, const SharedObject *value, const UErrorCode creationStatus, UErrorCode &status) const { @@ -312,24 +307,17 @@ void UnifiedCache::_putNew( return; } keyToAdopt->fCreationStatus = creationStatus; - if (value->noSoftReferences()) { + if (value->softRefCount == 0) { _registerMaster(keyToAdopt, value); } - uhash_put(fHashtable, keyToAdopt, (void *) value, &status); + void *oldValue = uhash_put(fHashtable, keyToAdopt, (void *) value, &status); + U_ASSERT(oldValue == nullptr); + (void)oldValue; if (U_SUCCESS(status)) { - value->addSoftRef(); + value->softRefCount++; } } -// Places value and status at key if there is no value at key or if cache -// entry for key is in progress. Otherwise, it leaves the current value and -// status there. -// On entry. gCacheMutex must not be held. value must be -// included in the reference count of the object to which it points. -// On exit, value and status are changed to what was already in the cache if -// something was there and not in progress. Otherwise, value and status are left -// unchanged in which case they are placed in the cache on a best-effort basis. -// Caller must call removeRef() on value. void UnifiedCache::_putIfAbsentAndGet( const CacheKeyBase &key, const SharedObject *&value, @@ -352,15 +340,7 @@ void UnifiedCache::_putIfAbsentAndGet( _runEvictionSlice(); } -// Attempts to fetch value and status for key from cache. -// On entry, gCacheMutex must not be held value must be NULL and status must -// be U_ZERO_ERROR. -// On exit, either returns FALSE (In this -// case caller should try to create the object) or returns TRUE with value -// pointing to the fetched value and status set to fetched status. When -// FALSE is returned status may be set to failure if an in progress hash -// entry could not be made but value will remain unchanged. When TRUE is -// returned, caler must call removeRef() on value. + UBool UnifiedCache::_poll( const CacheKeyBase &key, const SharedObject *&value, @@ -369,27 +349,29 @@ UBool UnifiedCache::_poll( U_ASSERT(status == U_ZERO_ERROR); Mutex lock(&gCacheMutex); const UHashElement *element = uhash_find(fHashtable, &key); - while (element != NULL && _inProgress(element)) { + + // If the hash table contains an inProgress placeholder entry for this key, + // this means that another thread is currently constructing the value object. + // Loop, waiting for that construction to complete. + while (element != NULL && _inProgress(element)) { umtx_condWait(&gInProgressValueAddedCond, &gCacheMutex); element = uhash_find(fHashtable, &key); } + + // If the hash table contains an entry for the key, + // fetch out the contents and return them. if (element != NULL) { - _fetch(element, value, status); + _fetch(element, value, status); return TRUE; } - _putNew(key, gNoValue, U_ZERO_ERROR, status); + + // The hash table contained nothing for this key. + // Insert an inProgress place holder value. + // Our caller will create the final value and update the hash table. + _putNew(key, fNoValue, U_ZERO_ERROR, status); return FALSE; } -// Gets value out of cache. -// On entry. gCacheMutex must not be held. value must be NULL. status -// must be U_ZERO_ERROR. -// On exit. value and status set to what is in cache at key or on cache -// miss the key's createObject() is called and value and status are set to -// the result of that. In this latter case, best effort is made to add the -// value and status to the cache. If createObject() fails to create a value, -// gNoValue is stored in cache, and value is set to NULL. Caller must call -// removeRef on value if non NULL. void UnifiedCache::_get( const CacheKeyBase &key, const SharedObject *&value, @@ -398,7 +380,7 @@ void UnifiedCache::_get( U_ASSERT(value == NULL); U_ASSERT(status == U_ZERO_ERROR); if (_poll(key, value, status)) { - if (value == gNoValue) { + if (value == fNoValue) { SharedObject::clearPtr(value); } return; @@ -410,134 +392,76 @@ void UnifiedCache::_get( U_ASSERT(value == NULL || value->hasHardReferences()); U_ASSERT(value != NULL || status != U_ZERO_ERROR); if (value == NULL) { - SharedObject::copyPtr(gNoValue, value); + SharedObject::copyPtr(fNoValue, value); } _putIfAbsentAndGet(key, value, status); - if (value == gNoValue) { + if (value == fNoValue) { SharedObject::clearPtr(value); } } -void UnifiedCache::decrementItemsInUseWithLockingAndEviction() const { - Mutex mutex(&gCacheMutex); - decrementItemsInUse(); - _runEvictionSlice(); -} - -void UnifiedCache::incrementItemsInUse() const { - ++fItemsInUseCount; -} - -void UnifiedCache::decrementItemsInUse() const { - --fItemsInUseCount; +void UnifiedCache::_registerMaster( + const CacheKeyBase *theKey, const SharedObject *value) const { + theKey->fIsMaster = true; + value->cachePtr = this; + ++fNumValuesTotal; + ++fNumValuesInUse; } -// Register a master cache entry. -// On entry, gCacheMutex must be held. -// On exit, items in use count incremented, entry is marked as a master -// entry, and value registered with cache so that subsequent calls to -// addRef() and removeRef() on it correctly updates items in use count -void UnifiedCache::_registerMaster( - const CacheKeyBase *theKey, const SharedObject *value) const { - theKey->fIsMaster = TRUE; - ++fItemsInUseCount; - value->registerWithCache(this); -} - -// Store a value and error in given hash entry. -// On entry, gCacheMutex must be held. Hash entry element must be in progress. -// value must be non NULL. -// On Exit, soft reference added to value. value and status stored in hash -// entry. Soft reference removed from previous stored value. Waiting -// threads notified. void UnifiedCache::_put( - const UHashElement *element, + const UHashElement *element, const SharedObject *value, const UErrorCode status) const { U_ASSERT(_inProgress(element)); const CacheKeyBase *theKey = (const CacheKeyBase *) element->key.pointer; const SharedObject *oldValue = (const SharedObject *) element->value.pointer; theKey->fCreationStatus = status; - if (value->noSoftReferences()) { + if (value->softRefCount == 0) { _registerMaster(theKey, value); } - value->addSoftRef(); + value->softRefCount++; UHashElement *ptr = const_cast(element); ptr->value.pointer = (void *) value; - oldValue->removeSoftRef(); + U_ASSERT(oldValue == fNoValue); + removeSoftRef(oldValue); // Tell waiting threads that we replace in-progress status with // an error. umtx_condBroadcast(&gInProgressValueAddedCond); } -void -UnifiedCache::copyPtr(const SharedObject *src, const SharedObject *&dest) { - if(src != dest) { - if(dest != NULL) { - dest->removeRefWhileHoldingCacheLock(); - } - dest = src; - if(src != NULL) { - src->addRefWhileHoldingCacheLock(); - } - } -} - -void -UnifiedCache::clearPtr(const SharedObject *&ptr) { - if (ptr != NULL) { - ptr->removeRefWhileHoldingCacheLock(); - ptr = NULL; - } -} - - -// Fetch value and error code from a particular hash entry. -// On entry, gCacheMutex must be held. value must be either NULL or must be -// included in the ref count of the object to which it points. -// On exit, value and status set to what is in the hash entry. Caller must -// eventually call removeRef on value. -// If hash entry is in progress, value will be set to gNoValue and status will -// be set to U_ZERO_ERROR. void UnifiedCache::_fetch( const UHashElement *element, const SharedObject *&value, - UErrorCode &status) { + UErrorCode &status) const { const CacheKeyBase *theKey = (const CacheKeyBase *) element->key.pointer; status = theKey->fCreationStatus; - // Since we have the cache lock, calling regular SharedObject methods + // Since we have the cache lock, calling regular SharedObject add/removeRef // could cause us to deadlock on ourselves since they may need to lock // the cache mutex. - UnifiedCache::copyPtr((const SharedObject *) element->value.pointer, value); + removeHardRef(value); + value = static_cast(element->value.pointer); + addHardRef(value); } -// Determine if given hash entry is in progress. -// On entry, gCacheMutex must be held. -UBool UnifiedCache::_inProgress(const UHashElement *element) { - const SharedObject *value = NULL; + +UBool UnifiedCache::_inProgress(const UHashElement* element) const { UErrorCode status = U_ZERO_ERROR; + const SharedObject * value = NULL; _fetch(element, value, status); UBool result = _inProgress(value, status); - - // Since we have the cache lock, calling regular SharedObject methods - // could cause us to deadlock on ourselves since they may need to lock - // the cache mutex. - UnifiedCache::clearPtr(value); + removeHardRef(value); return result; } -// Determine if given hash entry is in progress. -// On entry, gCacheMutex must be held. UBool UnifiedCache::_inProgress( - const SharedObject *theValue, UErrorCode creationStatus) { - return (theValue == gNoValue && creationStatus == U_ZERO_ERROR); + const SharedObject* theValue, UErrorCode creationStatus) const { + return (theValue == fNoValue && creationStatus == U_ZERO_ERROR); } -// Determine if given hash entry is eligible for eviction. -// On entry, gCacheMutex must be held. -UBool UnifiedCache::_isEvictable(const UHashElement *element) { +UBool UnifiedCache::_isEvictable(const UHashElement *element) const +{ const CacheKeyBase *theKey = (const CacheKeyBase *) element->key.pointer; const SharedObject *theValue = (const SharedObject *) element->value.pointer; @@ -549,7 +473,47 @@ UBool UnifiedCache::_isEvictable(const UHashElement *element) { // We can evict entries that are either not a master or have just // one reference (The one reference being from the cache itself). - return (!theKey->fIsMaster || (theValue->getSoftRefCount() == 1 && theValue->noHardReferences())); + return (!theKey->fIsMaster || (theValue->softRefCount == 1 && theValue->noHardReferences())); +} + +void UnifiedCache::removeSoftRef(const SharedObject *value) const { + U_ASSERT(value->cachePtr == this); + U_ASSERT(value->softRefCount > 0); + if (--value->softRefCount == 0) { + --fNumValuesTotal; + if (value->noHardReferences()) { + delete value; + } else { + // This path only happens from flush(all). Which only happens from the + // UnifiedCache destructor. Nulling out value.cacheptr changes the behavior + // of value.removeRef(), causing the deletion to be done there. + value->cachePtr = nullptr; + } + } +} + +int32_t UnifiedCache::removeHardRef(const SharedObject *value) const { + int refCount = 0; + if (value) { + refCount = umtx_atomic_dec(&value->hardRefCount); + U_ASSERT(refCount >= 0); + if (refCount == 0) { + --fNumValuesInUse; + } + } + return refCount; +} + +int32_t UnifiedCache::addHardRef(const SharedObject *value) const { + int refCount = 0; + if (value) { + refCount = umtx_atomic_inc(&value->hardRefCount); + U_ASSERT(refCount >= 1); + if (refCount == 1) { + fNumValuesInUse++; + } + } + return refCount; } U_NAMESPACE_END diff --git a/icuSources/common/unifiedcache.h b/icuSources/common/unifiedcache.h index 97da7ff5..4c9992be 100644 --- a/icuSources/common/unifiedcache.h +++ b/icuSources/common/unifiedcache.h @@ -107,7 +107,7 @@ class CacheKey : public CacheKeyBase { */ virtual int32_t hashCode() const { const char *s = typeid(T).name(); - return ustr_hashCharsN(s, uprv_strlen(s)); + return ustr_hashCharsN(s, static_cast(uprv_strlen(s))); } /** @@ -190,7 +190,7 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase { UnifiedCache(UErrorCode &status); /** - * Returns the cache instance. + * Return a pointer to the global cache instance. */ static UnifiedCache *getInstance(UErrorCode &status); @@ -294,7 +294,7 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase { /** * Configures at what point evcition of unused entries will begin. - * Eviction is triggered whenever the number of unused entries exeeds + * Eviction is triggered whenever the number of evictable keys exeeds * BOTH count AND (number of in-use items) * (percentageOfInUseItems / 100). * Once the number of unused entries drops below one of these, * eviction ceases. Because eviction happens incrementally, @@ -341,60 +341,214 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase { */ int32_t unusedCount() const; - virtual void incrementItemsInUse() const; - virtual void decrementItemsInUseWithLockingAndEviction() const; - virtual void decrementItemsInUse() const; + virtual void handleUnreferencedObject() const; virtual ~UnifiedCache(); + private: UHashtable *fHashtable; mutable int32_t fEvictPos; - mutable int32_t fItemsInUseCount; + mutable int32_t fNumValuesTotal; + mutable int32_t fNumValuesInUse; int32_t fMaxUnused; int32_t fMaxPercentageOfInUse; mutable int64_t fAutoEvictedCount; + SharedObject *fNoValue; + UnifiedCache(const UnifiedCache &other); UnifiedCache &operator=(const UnifiedCache &other); + + /** + * Flushes the contents of the cache. If cache values hold references to other + * cache values then _flush should be called in a loop until it returns FALSE. + * + * On entry, gCacheMutex must be held. + * On exit, those values with are evictable are flushed. + * + * @param all if false flush evictable items only, which are those with no external + * references, plus those that can be safely recreated.
+ * if true, flush all elements. Any values (sharedObjects) with remaining + * hard (external) references are not deleted, but are detached from + * the cache, so that a subsequent removeRefs can delete them. + * _flush is not thread safe when all is true. + * @return TRUE if any value in cache was flushed or FALSE otherwise. + */ UBool _flush(UBool all) const; + + /** + * Gets value out of cache. + * On entry. gCacheMutex must not be held. value must be NULL. status + * must be U_ZERO_ERROR. + * On exit. value and status set to what is in cache at key or on cache + * miss the key's createObject() is called and value and status are set to + * the result of that. In this latter case, best effort is made to add the + * value and status to the cache. If createObject() fails to create a value, + * fNoValue is stored in cache, and value is set to NULL. Caller must call + * removeRef on value if non NULL. + */ void _get( const CacheKeyBase &key, const SharedObject *&value, const void *creationContext, UErrorCode &status) const; - UBool _poll( - const CacheKeyBase &key, - const SharedObject *&value, - UErrorCode &status) const; - void _putNew( - const CacheKeyBase &key, - const SharedObject *value, - const UErrorCode creationStatus, - UErrorCode &status) const; + + /** + * Attempts to fetch value and status for key from cache. + * On entry, gCacheMutex must not be held value must be NULL and status must + * be U_ZERO_ERROR. + * On exit, either returns FALSE (In this + * case caller should try to create the object) or returns TRUE with value + * pointing to the fetched value and status set to fetched status. When + * FALSE is returned status may be set to failure if an in progress hash + * entry could not be made but value will remain unchanged. When TRUE is + * returned, caller must call removeRef() on value. + */ + UBool _poll( + const CacheKeyBase &key, + const SharedObject *&value, + UErrorCode &status) const; + + /** + * Places a new value and creationStatus in the cache for the given key. + * On entry, gCacheMutex must be held. key must not exist in the cache. + * On exit, value and creation status placed under key. Soft reference added + * to value on successful add. On error sets status. + */ + void _putNew( + const CacheKeyBase &key, + const SharedObject *value, + const UErrorCode creationStatus, + UErrorCode &status) const; + + /** + * Places value and status at key if there is no value at key or if cache + * entry for key is in progress. Otherwise, it leaves the current value and + * status there. + * + * On entry. gCacheMutex must not be held. Value must be + * included in the reference count of the object to which it points. + * + * On exit, value and status are changed to what was already in the cache if + * something was there and not in progress. Otherwise, value and status are left + * unchanged in which case they are placed in the cache on a best-effort basis. + * Caller must call removeRef() on value. + */ void _putIfAbsentAndGet( const CacheKeyBase &key, const SharedObject *&value, UErrorCode &status) const; - const UHashElement *_nextElement() const; + + /** + * Returns the next element in the cache round robin style. + * Returns nullptr if the cache is empty. + * On entry, gCacheMutex must be held. + */ + const UHashElement *_nextElement() const; + + /** + * Return the number of cache items that would need to be evicted + * to bring usage into conformance with eviction policy. + * + * An item corresponds to an entry in the hash table, a hash table element. + * + * On entry, gCacheMutex must be held. + */ int32_t _computeCountOfItemsToEvict() const; + + /** + * Run an eviction slice. + * On entry, gCacheMutex must be held. + * _runEvictionSlice runs a slice of the evict pipeline by examining the next + * 10 entries in the cache round robin style evicting them if they are eligible. + */ void _runEvictionSlice() const; - void _registerMaster( - const CacheKeyBase *theKey, const SharedObject *value) const; + + /** + * Register a master cache entry. A master key is the first key to create + * a given SharedObject value. Subsequent keys whose create function + * produce referneces to an already existing SharedObject are not masters - + * they can be evicted and subsequently recreated. + * + * On entry, gCacheMutex must be held. + * On exit, items in use count incremented, entry is marked as a master + * entry, and value registered with cache so that subsequent calls to + * addRef() and removeRef() on it correctly interact with the cache. + */ + void _registerMaster(const CacheKeyBase *theKey, const SharedObject *value) const; + + /** + * Store a value and creation error status in given hash entry. + * On entry, gCacheMutex must be held. Hash entry element must be in progress. + * value must be non NULL. + * On Exit, soft reference added to value. value and status stored in hash + * entry. Soft reference removed from previous stored value. Waiting + * threads notified. + */ void _put( const UHashElement *element, const SharedObject *value, const UErrorCode status) const; + /** + * Remove a soft reference, and delete the SharedObject if no references remain. + * To be used from within the UnifiedCache implementation only. + * gCacheMutex must be held by caller. + * @param value the SharedObject to be acted on. + */ + void removeSoftRef(const SharedObject *value) const; + + /** + * Increment the hard reference count of the given SharedObject. + * gCacheMutex must be held by the caller. + * Update numValuesEvictable on transitions between zero and one reference. + * + * @param value The SharedObject to be referenced. + * @return the hard reference count after the addition. + */ + int32_t addHardRef(const SharedObject *value) const; + + /** + * Decrement the hard reference count of the given SharedObject. + * gCacheMutex must be held by the caller. + * Update numValuesEvictable on transitions between one and zero reference. + * + * @param value The SharedObject to be referenced. + * @return the hard reference count after the removal. + */ + int32_t removeHardRef(const SharedObject *value) const; + + #ifdef UNIFIED_CACHE_DEBUG void _dumpContents() const; #endif - static void copyPtr(const SharedObject *src, const SharedObject *&dest); - static void clearPtr(const SharedObject *&ptr); - static void _fetch( - const UHashElement *element, - const SharedObject *&value, - UErrorCode &status); - static UBool _inProgress(const UHashElement *element); - static UBool _inProgress( - const SharedObject *theValue, UErrorCode creationStatus); - static UBool _isEvictable(const UHashElement *element); + + /** + * Fetch value and error code from a particular hash entry. + * On entry, gCacheMutex must be held. value must be either NULL or must be + * included in the ref count of the object to which it points. + * On exit, value and status set to what is in the hash entry. Caller must + * eventually call removeRef on value. + * If hash entry is in progress, value will be set to gNoValue and status will + * be set to U_ZERO_ERROR. + */ + void _fetch(const UHashElement *element, const SharedObject *&value, + UErrorCode &status) const; + + /** + * Determine if given hash entry is in progress. + * On entry, gCacheMutex must be held. + */ + UBool _inProgress(const UHashElement *element) const; + + /** + * Determine if given hash entry is in progress. + * On entry, gCacheMutex must be held. + */ + UBool _inProgress(const SharedObject *theValue, UErrorCode creationStatus) const; + + /** + * Determine if given hash entry is eligible for eviction. + * On entry, gCacheMutex must be held. + */ + UBool _isEvictable(const UHashElement *element) const; }; U_NAMESPACE_END diff --git a/icuSources/common/uniset_closure.cpp b/icuSources/common/uniset_closure.cpp index 44bb4bcd..0b7da796 100644 --- a/icuSources/common/uniset_closure.cpp +++ b/icuSources/common/uniset_closure.cpp @@ -129,7 +129,7 @@ UnicodeSet& UnicodeSet::applyPattern(const UnicodeString& pattern, // _applyPattern calls add() etc., which set pat to empty. UnicodeString rebuiltPat; RuleCharacterIterator chars(pattern, symbols, pos); - applyPattern(chars, symbols, rebuiltPat, options, &UnicodeSet::closeOver, status); + applyPattern(chars, symbols, rebuiltPat, options, &UnicodeSet::closeOver, 0, status); if (U_FAILURE(status)) return *this; if (chars.inVariable()) { // syntaxError(chars, "Extra chars in variable value"); diff --git a/icuSources/common/uniset_props.cpp b/icuSources/common/uniset_props.cpp index 0a137408..6ae6e712 100644 --- a/icuSources/common/uniset_props.cpp +++ b/icuSources/common/uniset_props.cpp @@ -231,7 +231,7 @@ void U_CALLCONV UnicodeSet_initInclusion(int32_t src, UErrorCode &status) { ucase_addPropertyStarts(&sa, &status); break; case UPROPS_SRC_BIDI: - ubidi_addPropertyStarts(ubidi_getSingleton(), &sa, &status); + ubidi_addPropertyStarts(&sa, &status); break; default: status = U_INTERNAL_PROGRAM_ERROR; @@ -257,6 +257,7 @@ const UnicodeSet* UnicodeSet::getInclusions(int32_t src, UErrorCode &status) { return i.fSet; } +namespace { // Cache some sets for other services -------------------------------------- *** void U_CALLCONV createUni32Set(UErrorCode &errorCode) { @@ -315,6 +316,8 @@ isPOSIXClose(const UnicodeString &pattern, int32_t pos) { // memory leak checker tools #define _dbgct(me) +} // namespace + //---------------------------------------------------------------- // Constructors &c //---------------------------------------------------------------- @@ -382,7 +385,7 @@ UnicodeSet::applyPatternIgnoreSpace(const UnicodeString& pattern, // _applyPattern calls add() etc., which set pat to empty. UnicodeString rebuiltPat; RuleCharacterIterator chars(pattern, symbols, pos); - applyPattern(chars, symbols, rebuiltPat, USET_IGNORE_SPACE, NULL, status); + applyPattern(chars, symbols, rebuiltPat, USET_IGNORE_SPACE, NULL, 0, status); if (U_FAILURE(status)) return; if (chars.inVariable()) { // syntaxError(chars, "Extra chars in variable value"); @@ -406,6 +409,8 @@ UBool UnicodeSet::resemblesPattern(const UnicodeString& pattern, int32_t pos) { // Implementation: Pattern parsing //---------------------------------------------------------------- +namespace { + /** * A small all-inline class to manage a UnicodeSet pointer. Add * operator->() etc. as needed. @@ -424,6 +429,10 @@ public: } }; +constexpr int32_t MAX_DEPTH = 100; + +} // namespace + /** * Parse the pattern from the given RuleCharacterIterator. The * iterator is advanced over the parsed pattern. @@ -443,8 +452,13 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars, UnicodeString& rebuiltPat, uint32_t options, UnicodeSet& (UnicodeSet::*caseClosure)(int32_t attribute), + int32_t depth, UErrorCode& ec) { if (U_FAILURE(ec)) return; + if (depth > MAX_DEPTH) { + ec = U_ILLEGAL_ARGUMENT_ERROR; + return; + } // Syntax characters: [ ] ^ - & { } @@ -579,7 +593,7 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars, } switch (setMode) { case 1: - nested->applyPattern(chars, symbols, patLocal, options, caseClosure, ec); + nested->applyPattern(chars, symbols, patLocal, options, caseClosure, depth + 1, ec); break; case 2: chars.skipIgnored(opts); @@ -837,6 +851,8 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars, // Property set implementation //---------------------------------------------------------------- +namespace { + static UBool numericValueFilter(UChar32 ch, void* context) { return u_getNumericValue(ch) == *(double*)context; } @@ -868,6 +884,8 @@ static UBool scriptExtensionsFilter(UChar32 ch, void* context) { return uscript_hasScript(ch, *(UScriptCode*)context); } +} // namespace + /** * Generic filter-based scanning code for UCD property UnicodeSets. */ @@ -924,6 +942,8 @@ void UnicodeSet::applyFilter(UnicodeSet::Filter filter, } } +namespace { + static UBool mungeCharName(char* dst, const char* src, int32_t dstCapacity) { /* Note: we use ' ' in compiler code page */ int32_t j = 0; @@ -941,6 +961,8 @@ static UBool mungeCharName(char* dst, const char* src, int32_t dstCapacity) { return TRUE; } +} // namespace + //---------------------------------------------------------------- // Property set API //---------------------------------------------------------------- @@ -987,7 +1009,7 @@ UnicodeSet::applyPropertyAlias(const UnicodeString& prop, UProperty p; int32_t v; - UBool mustNotBeEmpty = FALSE, invert = FALSE; + UBool invert = FALSE; if (value.length() > 0) { p = u_getPropertyEnum(pname.data()); @@ -1009,14 +1031,15 @@ UnicodeSet::applyPropertyAlias(const UnicodeString& prop, p == UCHAR_LEAD_CANONICAL_COMBINING_CLASS) { char* end; double value = uprv_strtod(vname.data(), &end); - v = (int32_t) value; - if (v != value || v < 0 || *end != 0) { - // non-integral or negative value, or trailing junk + // Anything between 0 and 255 is valid even if unused. + // Cast double->int only after range check. + // We catch NaN here because comparing it with both 0 and 255 will be false + // (as are all comparisons with NaN). + if (*end != 0 || !(0 <= value && value <= 255) || + (v = (int32_t)value) != value) { + // non-integral value or outside 0..255, or trailing junk FAIL(ec); } - // If the resultant set is empty then the numeric value - // was invalid. - mustNotBeEmpty = TRUE; } else { FAIL(ec); } @@ -1115,12 +1138,6 @@ UnicodeSet::applyPropertyAlias(const UnicodeString& prop, complement(); } - if (U_SUCCESS(ec) && (mustNotBeEmpty && isEmpty())) { - // mustNotBeEmpty is set to true if an empty set indicates - // invalid input. - ec = U_ILLEGAL_ARGUMENT_ERROR; - } - if (isBogus() && U_SUCCESS(ec)) { // We likely ran out of memory. AHHH! ec = U_MEMORY_ALLOCATION_ERROR; diff --git a/icuSources/common/unisetspan.cpp b/icuSources/common/unisetspan.cpp index 83bc7945..0a889347 100644 --- a/icuSources/common/unisetspan.cpp +++ b/icuSources/common/unisetspan.cpp @@ -502,7 +502,7 @@ spanOneBack(const UnicodeSet &set, const UChar *s, int32_t length) { static inline int32_t spanOneUTF8(const UnicodeSet &set, const uint8_t *s, int32_t length) { UChar32 c=*s; - if((int8_t)c>=0) { + if(U8_IS_SINGLE(c)) { return set.contains(c) ? 1 : -1; } // Take advantage of non-ASCII fastpaths in U8_NEXT_OR_FFFD(). @@ -514,7 +514,7 @@ spanOneUTF8(const UnicodeSet &set, const uint8_t *s, int32_t length) { static inline int32_t spanOneBackUTF8(const UnicodeSet &set, const uint8_t *s, int32_t length) { UChar32 c=s[length-1]; - if((int8_t)c>=0) { + if(U8_IS_SINGLE(c)) { return set.contains(c) ? 1 : -1; } int32_t i=length-1; @@ -1006,11 +1006,9 @@ int32_t UnicodeSetStringSpan::spanUTF8(const uint8_t *s, int32_t length, USetSpa // Try to match if the increment is not listed already. // Match at code point boundaries. (The UTF-8 strings were converted // from UTF-16 and are guaranteed to be well-formed.) - if( !U8_IS_TRAIL(s[pos-overlap]) && - !offsets.containsOffset(inc) && - matches8(s+pos-overlap, s8, length8) - - ) { + if(!U8_IS_TRAIL(s[pos-overlap]) && + !offsets.containsOffset(inc) && + matches8(s+pos-overlap, s8, length8)) { if(inc==rest) { return length; // Reached the end of the string. } @@ -1052,11 +1050,10 @@ int32_t UnicodeSetStringSpan::spanUTF8(const uint8_t *s, int32_t length, USetSpa // Try to match if the string is longer or starts earlier. // Match at code point boundaries. (The UTF-8 strings were converted // from UTF-16 and are guaranteed to be well-formed.) - if( !U8_IS_TRAIL(s[pos-overlap]) && - (overlap>maxOverlap || /* redundant overlap==maxOverlap && */ inc>maxInc) && - matches8(s+pos-overlap, s8, length8) - - ) { + if(!U8_IS_TRAIL(s[pos-overlap]) && + (overlap>maxOverlap || + /* redundant overlap==maxOverlap && */ inc>maxInc) && + matches8(s+pos-overlap, s8, length8)) { maxInc=inc; // Longest match from earliest start. maxOverlap=overlap; break; diff --git a/icuSources/common/unistr.cpp b/icuSources/common/unistr.cpp index 1bfb71aa..5d7cab2e 100644 --- a/icuSources/common/unistr.cpp +++ b/icuSources/common/unistr.cpp @@ -308,12 +308,10 @@ UnicodeString::UnicodeString(const UnicodeString& that) { copyFrom(that); } -#if U_HAVE_RVALUE_REFERENCES UnicodeString::UnicodeString(UnicodeString &&src) U_NOEXCEPT { fUnion.fFields.fLengthAndFlags = kShortString; moveFrom(src); } -#endif UnicodeString::UnicodeString(const UnicodeString& that, int32_t srcStart) { diff --git a/icuSources/common/unistr_case.cpp b/icuSources/common/unistr_case.cpp index 1c62ce5e..2138d60c 100644 --- a/icuSources/common/unistr_case.cpp +++ b/icuSources/common/unistr_case.cpp @@ -19,6 +19,7 @@ */ #include "unicode/utypes.h" +#include "unicode/brkiter.h" #include "unicode/casemap.h" #include "unicode/edits.h" #include "unicode/putil.h" @@ -104,6 +105,12 @@ UnicodeString::caseMap(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITER UBool writable = isBufferWritable(); UErrorCode errorCode = U_ZERO_ERROR; +#if !UCONFIG_NO_BREAK_ITERATION + // Read-only alias to the original string contents for the titlecasing BreakIterator. + // We cannot set the iterator simply to *this because *this is being modified. + UnicodeString oldString; +#endif + // Try to avoid heap-allocating a new character array for this string. if (writable ? oldLength <= UPRV_LENGTHOF(oldBuffer) : oldLength < US_STACKBUF_SIZE) { // Short string: Copy the contents into a temporary buffer and @@ -123,6 +130,12 @@ UnicodeString::caseMap(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITER buffer = fUnion.fStackFields.fBuffer; capacity = US_STACKBUF_SIZE; } +#if !UCONFIG_NO_BREAK_ITERATION + if (iter != nullptr) { + oldString.setTo(FALSE, oldArray, oldLength); + iter->setText(oldString); + } +#endif newLength = stringCaseMapper(caseLocale, options, UCASEMAP_BREAK_ITERATOR buffer, capacity, oldArray, oldLength, NULL, errorCode); @@ -143,7 +156,13 @@ UnicodeString::caseMap(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITER oldArray = getArrayStart(); Edits edits; UChar replacementChars[200]; - stringCaseMapper(caseLocale, options | UCASEMAP_OMIT_UNCHANGED_TEXT, UCASEMAP_BREAK_ITERATOR +#if !UCONFIG_NO_BREAK_ITERATION + if (iter != nullptr) { + oldString.setTo(FALSE, oldArray, oldLength); + iter->setText(oldString); + } +#endif + stringCaseMapper(caseLocale, options | U_OMIT_UNCHANGED_TEXT, UCASEMAP_BREAK_ITERATOR replacementChars, UPRV_LENGTHOF(replacementChars), oldArray, oldLength, &edits, errorCode); if (U_SUCCESS(errorCode)) { @@ -179,6 +198,7 @@ UnicodeString::caseMap(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITER return *this; } errorCode = U_ZERO_ERROR; + // No need to iter->setText() again: The case mapper restarts via iter->first(). newLength = stringCaseMapper(caseLocale, options, UCASEMAP_BREAK_ITERATOR getArrayStart(), getCapacity(), oldArray, oldLength, NULL, errorCode); diff --git a/icuSources/common/unistr_titlecase_brkiter.cpp b/icuSources/common/unistr_titlecase_brkiter.cpp index 3156fdfc..4969884b 100644 --- a/icuSources/common/unistr_titlecase_brkiter.cpp +++ b/icuSources/common/unistr_titlecase_brkiter.cpp @@ -30,36 +30,26 @@ U_NAMESPACE_BEGIN UnicodeString & -UnicodeString::toTitle(BreakIterator *titleIter) { - return toTitle(titleIter, Locale::getDefault(), 0); +UnicodeString::toTitle(BreakIterator *iter) { + return toTitle(iter, Locale::getDefault(), 0); } UnicodeString & -UnicodeString::toTitle(BreakIterator *titleIter, const Locale &locale) { - return toTitle(titleIter, locale, 0); +UnicodeString::toTitle(BreakIterator *iter, const Locale &locale) { + return toTitle(iter, locale, 0); } UnicodeString & -UnicodeString::toTitle(BreakIterator *titleIter, const Locale &locale, uint32_t options) { - BreakIterator *bi=titleIter; - if(bi==NULL) { - UErrorCode errorCode=U_ZERO_ERROR; - bi=BreakIterator::createWordInstance(locale, errorCode); - if(U_FAILURE(errorCode)) { - setToBogus(); - return *this; +UnicodeString::toTitle(BreakIterator *iter, const Locale &locale, uint32_t options) { + LocalPointer ownedIter; + UErrorCode errorCode = U_ZERO_ERROR; + iter = ustrcase_getTitleBreakIterator(&locale, "", options, iter, ownedIter, errorCode); + if (iter == nullptr) { + setToBogus(); + return *this; } - } - // Because the "this" string is both the source and the destination, - // make a copy of the original source for use by the break iterator. - // See tickets #13127 and #13128 - UnicodeString copyOfInput(*this); - bi->setText(copyOfInput); - caseMap(ustrcase_getCaseLocale(locale.getBaseName()), options, bi, ustrcase_internalToTitle); - if(titleIter==NULL) { - delete bi; - } - return *this; + caseMap(ustrcase_getCaseLocale(locale.getBaseName()), options, iter, ustrcase_internalToTitle); + return *this; } U_NAMESPACE_END diff --git a/icuSources/common/uprops.cpp b/icuSources/common/uprops.cpp index ace3c4d6..43fdb1b0 100644 --- a/icuSources/common/uprops.cpp +++ b/icuSources/common/uprops.cpp @@ -38,8 +38,6 @@ U_NAMESPACE_USE -#define GET_BIDI_PROPS() ubidi_getSingleton() - /* general properties API functions ----------------------------------------- */ struct BinaryProperty; @@ -62,15 +60,15 @@ static UBool caseBinaryPropertyContains(const BinaryProperty &/*prop*/, UChar32 } static UBool isBidiControl(const BinaryProperty &/*prop*/, UChar32 c, UProperty /*which*/) { - return ubidi_isBidiControl(GET_BIDI_PROPS(), c); + return ubidi_isBidiControl(c); } static UBool isMirrored(const BinaryProperty &/*prop*/, UChar32 c, UProperty /*which*/) { - return ubidi_isMirrored(GET_BIDI_PROPS(), c); + return ubidi_isMirrored(c); } static UBool isJoinControl(const BinaryProperty &/*prop*/, UChar32 c, UProperty /*which*/) { - return ubidi_isJoinControl(GET_BIDI_PROPS(), c); + return ubidi_isJoinControl(c); } #if UCONFIG_NO_NORMALIZATION @@ -284,6 +282,7 @@ static const BinaryProperty binProps[UCHAR_BINARY_LIMIT]={ { 2, U_MASK(UPROPS_2_EMOJI_COMPONENT), defaultContains }, { 2, 0, isRegionalIndicator }, { 1, U_MASK(UPROPS_PREPENDED_CONCATENATION_MARK), defaultContains }, + { 2, U_MASK(UPROPS_2_EXTENDED_PICTOGRAPHIC), defaultContains }, }; U_CAPI UBool U_EXPORT2 @@ -298,6 +297,13 @@ u_hasBinaryProperty(UChar32 c, UProperty which) { } } +// Apple-only specific version of the above +U_CAPI UBool U_EXPORT2 +u_isEmoji(UChar32 c) { + const BinaryProperty &prop=binProps[UCHAR_EMOJI]; + return prop.contains(prop, c, UCHAR_EMOJI); +} + struct IntProperty; typedef int32_t IntPropertyGetValue(const IntProperty &prop, UChar32 c, UProperty which); @@ -329,11 +335,11 @@ static int32_t getBiDiClass(const IntProperty &/*prop*/, UChar32 c, UProperty /* } static int32_t getBiDiPairedBracketType(const IntProperty &/*prop*/, UChar32 c, UProperty /*which*/) { - return (int32_t)ubidi_getPairedBracketType(GET_BIDI_PROPS(), c); + return (int32_t)ubidi_getPairedBracketType(c); } static int32_t biDiGetMaxValue(const IntProperty &/*prop*/, UProperty which) { - return ubidi_getMaxValue(GET_BIDI_PROPS(), which); + return ubidi_getMaxValue(which); } #if UCONFIG_NO_NORMALIZATION @@ -351,11 +357,11 @@ static int32_t getGeneralCategory(const IntProperty &/*prop*/, UChar32 c, UPrope } static int32_t getJoiningGroup(const IntProperty &/*prop*/, UChar32 c, UProperty /*which*/) { - return ubidi_getJoiningGroup(GET_BIDI_PROPS(), c); + return ubidi_getJoiningGroup(c); } static int32_t getJoiningType(const IntProperty &/*prop*/, UChar32 c, UProperty /*which*/) { - return ubidi_getJoiningType(GET_BIDI_PROPS(), c); + return ubidi_getJoiningType(c); } static int32_t getNumericType(const IntProperty &/*prop*/, UChar32 c, UProperty /*which*/) { diff --git a/icuSources/common/uprops.h b/icuSources/common/uprops.h index 6f67756c..2078384c 100644 --- a/icuSources/common/uprops.h +++ b/icuSources/common/uprops.h @@ -196,8 +196,7 @@ enum { /* * Properties in vector word 2 * Bits - * 31..27 http://www.unicode.org/reports/tr51/#Emoji_Properties - * 26 reserved + * 31..26 http://www.unicode.org/reports/tr51/#Emoji_Properties * 25..20 Line Break * 19..15 Sentence Break * 14..10 Word Break @@ -205,7 +204,8 @@ enum { * 4.. 0 Decomposition Type */ enum { - UPROPS_2_EMOJI_COMPONENT=27, + UPROPS_2_EXTENDED_PICTOGRAPHIC=26, + UPROPS_2_EMOJI_COMPONENT, UPROPS_2_EMOJI, UPROPS_2_EMOJI_PRESENTATION, UPROPS_2_EMOJI_MODIFIER, diff --git a/icuSources/common/urbtok.cpp b/icuSources/common/urbtok.cpp index 7a368606..511027c7 100644 --- a/icuSources/common/urbtok.cpp +++ b/icuSources/common/urbtok.cpp @@ -10,14 +10,29 @@ #include "unicode/urbtok.h" -#include "rbtok.h" #include "unicode/ustring.h" +#include "unicode/rbbi.h" +#include "rbbirb.h" #include "rbbidata.h" +#include "rbbidata57.h" +#include "rbtok.h" #include "cmemory.h" #include "ucmndata.h" U_NAMESPACE_USE +U_CAPI UBreakIterator* U_EXPORT2 +urbtok_open(UBreakIteratorType type, + const char *locale, + UErrorCode *status) +{ + UBreakIterator* result = ubrk_open(type, locale, NULL, 0, status); + if(U_SUCCESS(*status)) { + ((RuleBasedBreakIterator*)result)->initLatin1Cat(); + } + return result; +} + U_CAPI UBreakIterator* U_EXPORT2 urbtok_openRules(const UChar *rules, int32_t rulesLength, @@ -27,16 +42,13 @@ urbtok_openRules(const UChar *rules, if (status == NULL || U_FAILURE(*status)){ return 0; } - - BreakIterator *result = 0; UnicodeString ruleString(rules, rulesLength); - result = new RuleBasedTokenizer(ruleString, *parseErr, *status); + BreakIterator *result = RBBIRuleBuilder::createRuleBasedBreakIterator(ruleString, parseErr, *status); if(U_FAILURE(*status)) { return 0; } - - UBreakIterator *uBI = (UBreakIterator *)result; - return uBI; + ((RuleBasedBreakIterator*)result)->initLatin1Cat(); + return (UBreakIterator *)result; } U_CAPI UBreakIterator* U_EXPORT2 @@ -46,7 +58,6 @@ urbtok_openBinaryRules(const uint8_t *rules, if (status == NULL || U_FAILURE(*status)){ return 0; } - uint32_t length = ((const RBBIDataHeader *)rules)->fLength; uint8_t *ruleCopy = (uint8_t *) uprv_malloc(length); if (ruleCopy == 0) @@ -56,14 +67,13 @@ urbtok_openBinaryRules(const uint8_t *rules, } // Copy the rules so they can be adopted by the tokenizer uprv_memcpy(ruleCopy, rules, length); - BreakIterator *result = 0; - result = new RuleBasedTokenizer(ruleCopy, *status); + // The following intended-to-be-private constructor does adopt the rules. + BreakIterator *result = new RuleBasedBreakIterator((RBBIDataHeader *)ruleCopy, *status); if(U_FAILURE(*status)) { return 0; } - - UBreakIterator *uBI = (UBreakIterator *)result; - return uBI; + ((RuleBasedBreakIterator*)result)->initLatin1Cat(); + return (UBreakIterator *)result; } U_CAPI UBreakIterator* U_EXPORT2 @@ -73,15 +83,15 @@ urbtok_openBinaryRulesNoCopy(const uint8_t *rules, if (status == NULL || U_FAILURE(*status)){ return 0; } + uint32_t length = ((const RBBIDataHeader *)rules)->fLength; - BreakIterator *result = 0; - result = new RuleBasedTokenizer(rules, RuleBasedTokenizer::kDontAdopt, *status); + // The following public constructor does not adopt the rules + BreakIterator *result = new RuleBasedBreakIterator(rules, length, *status); if(U_FAILURE(*status)) { return 0; } - - UBreakIterator *uBI = (UBreakIterator *)result; - return uBI; + ((RuleBasedBreakIterator*)result)->initLatin1Cat(); + return (UBreakIterator *)result; } U_CAPI uint32_t U_EXPORT2 @@ -93,17 +103,23 @@ urbtok_getBinaryRules(UBreakIterator *bi, if (status == NULL || U_FAILURE(*status)){ return 0; } - + if (buffer == NULL && buffSize > 0) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + RuleBasedBreakIterator *rbbi; + if ((rbbi = dynamic_cast(reinterpret_cast(bi))) == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } uint32_t length; - const uint8_t *rules = ((RuleBasedBreakIterator *)bi)->getBinaryRules(length); + const uint8_t *rules = rbbi->getBinaryRules(length); if (buffer != 0) { - if (length > buffSize) - { + if (length > buffSize) { *status = U_BUFFER_OVERFLOW_ERROR; } - else - { + else { uprv_memcpy(buffer, rules, length); } } @@ -116,7 +132,17 @@ urbtok_tokenize(UBreakIterator *bi, RuleBasedTokenRange *outTokens, unsigned long *outTokenFlags) { - return ((RuleBasedTokenizer *)bi)->tokenize(maxTokens, outTokens, outTokenFlags); + // Using dynamic_cast/reinterpret_cast has a significant performance impact + // on calls to urbtok_tokenize with maxTokens=1, use a regular cast instead + //RuleBasedBreakIterator *rbbi; + //if ((rbbi = dynamic_cast(reinterpret_cast(bi))) == NULL) { + // return 0; + //} + //return rbbi->tokenize(maxTokens, outTokens, outTokenFlags); + if (bi == NULL || outTokens == NULL) { + return 0; + } + return ((RuleBasedBreakIterator*)bi)->tokenize(maxTokens, outTokens, outTokenFlags); } U_CAPI void U_EXPORT2 @@ -184,5 +210,111 @@ closeSwapper: udata_closeSwapper(ds); } +U_CAPI UBreakIterator* U_EXPORT2 +urbtok57_openRules(const UChar *rules, + int32_t rulesLength, + UParseError *parseErr, + UErrorCode *status) +{ + if (status == NULL || U_FAILURE(*status)){ + return 0; + } + + BreakIterator *result = 0; + UnicodeString ruleString(rules, rulesLength); + result = new RuleBasedTokenizer(ruleString, *parseErr, *status); + if(U_FAILURE(*status)) { + return 0; + } + + UBreakIterator *uBI = (UBreakIterator *)result; + return uBI; +} + +U_CAPI UBreakIterator* U_EXPORT2 +urbtok57_openBinaryRules(const uint8_t *rules, + UErrorCode *status) +{ + if (status == NULL || U_FAILURE(*status)){ + return 0; + } + + uint32_t length = ((const RBBIDataHeader57 *)rules)->fLength; + uint8_t *ruleCopy = (uint8_t *) uprv_malloc(length); + if (ruleCopy == 0) + { + *status = U_MEMORY_ALLOCATION_ERROR; + return 0; + } + // Copy the rules so they can be adopted by the tokenizer + uprv_memcpy(ruleCopy, rules, length); + BreakIterator *result = 0; + result = new RuleBasedTokenizer(ruleCopy, *status); + if(U_FAILURE(*status)) { + return 0; + } + + UBreakIterator *uBI = (UBreakIterator *)result; + return uBI; +} + +U_CAPI UBreakIterator* U_EXPORT2 +urbtok57_openBinaryRulesNoCopy(const uint8_t *rules, + UErrorCode *status) +{ + if (status == NULL || U_FAILURE(*status)){ + return 0; + } + + BreakIterator *result = 0; + result = new RuleBasedTokenizer(rules, RuleBasedTokenizer::kDontAdopt, *status); + if(U_FAILURE(*status)) { + return 0; + } + + UBreakIterator *uBI = (UBreakIterator *)result; + return uBI; +} + +U_CAPI uint32_t U_EXPORT2 +urbtok57_getBinaryRules(UBreakIterator *bi, + uint8_t *buffer, + uint32_t buffSize, + UErrorCode *status) +{ + if (status == NULL || U_FAILURE(*status)){ + return 0; + } + if (buffer == NULL && buffSize > 0) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + RuleBasedBreakIterator57 *rbbi57; + if ((rbbi57 = dynamic_cast(reinterpret_cast(bi))) == NULL) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + uint32_t length; + const uint8_t *rules = rbbi57->getBinaryRules(length); + if (buffer != 0) + { + if (length > buffSize) { + *status = U_BUFFER_OVERFLOW_ERROR; + } + else { + uprv_memcpy(buffer, rules, length); + } + } + return length; +} + +U_CAPI int32_t U_EXPORT2 +urbtok57_tokenize(UBreakIterator *bi, + int32_t maxTokens, + RuleBasedTokenRange *outTokens, + unsigned long *outTokenFlags) +{ + return ((RuleBasedTokenizer *)bi)->tokenize(maxTokens, outTokens, outTokenFlags); +} #endif /* #if !UCONFIG_NO_BREAK_ITERATION */ diff --git a/icuSources/common/uresbund.cpp b/icuSources/common/uresbund.cpp index c0104218..26a23e70 100644 --- a/icuSources/common/uresbund.cpp +++ b/icuSources/common/uresbund.cpp @@ -1083,6 +1083,7 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r, pathBuf = (char *)uprv_malloc((uprv_strlen(keyPath)+1)*sizeof(char)); if(pathBuf == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; + ures_close(mainRes); return NULL; } } diff --git a/icuSources/common/uscript_props.cpp b/icuSources/common/uscript_props.cpp index 7998c52c..bfdb68c7 100644 --- a/icuSources/common/uscript_props.cpp +++ b/icuSources/common/uscript_props.cpp @@ -71,7 +71,7 @@ const int32_t SCRIPT_PROPS[] = { 0x0EA5 | RECOMMENDED | LB_LETTERS, // Laoo 0x004C | RECOMMENDED | CASED, // Latn 0x0D15 | RECOMMENDED, // Mlym - 0x1826 | LIMITED_USE, // Mong + 0x1826 | EXCLUSION, // Mong 0x1000 | RECOMMENDED | LB_LETTERS, // Mymr 0x168F | EXCLUSION, // Ogam 0x10300 | EXCLUSION, // Ital @@ -222,6 +222,13 @@ const int32_t SCRIPT_PROPS[] = { 0x11D10 | EXCLUSION, // Gonm 0x11A5C | EXCLUSION, // Soyo 0x11A0B | EXCLUSION, // Zanb + 0x1180B | EXCLUSION, // Dogr + 0x11D71 | LIMITED_USE, // Gong + 0x11EE5 | EXCLUSION, // Maka + 0x16E40 | EXCLUSION | CASED, // Medf + 0x10D12 | LIMITED_USE | RTL, // Rohg + 0x10F42 | EXCLUSION | RTL, // Sogd + 0x10F19 | EXCLUSION | RTL, // Sogo // End copy-paste from parsescriptmetadata.py }; diff --git a/icuSources/common/ushape.cpp b/icuSources/common/ushape.cpp index 90f339b4..a640ae29 100644 --- a/icuSources/common/ushape.cpp +++ b/icuSources/common/ushape.cpp @@ -342,18 +342,16 @@ static void _shapeToArabicDigitsWithContext(UChar *s, int32_t length, UChar digitBase, UBool isLogical, UBool lastStrongWasAL) { - const UBiDiProps *bdp; int32_t i; UChar c; - bdp=ubidi_getSingleton(); digitBase-=0x30; /* the iteration direction depends on the type of input */ if(isLogical) { for(i=0; i0; /* pre-decrement in the body */) { c=s[--i]; - switch(ubidi_getClass(bdp, c)) { + switch(ubidi_getClass(c)) { case U_LEFT_TO_RIGHT: /* L */ case U_RIGHT_TO_LEFT: /* R */ lastStrongWasAL=FALSE; diff --git a/icuSources/common/usprep.cpp b/icuSources/common/usprep.cpp index d96e825c..cc8069dc 100644 --- a/icuSources/common/usprep.cpp +++ b/icuSources/common/usprep.cpp @@ -347,10 +347,6 @@ usprep_getProfile(const char* path, newProfile->doNFKC = (UBool)((newProfile->indexes[_SPREP_OPTIONS] & _SPREP_NORMALIZATION_ON) > 0); newProfile->checkBiDi = (UBool)((newProfile->indexes[_SPREP_OPTIONS] & _SPREP_CHECK_BIDI_ON) > 0); - if(newProfile->checkBiDi) { - newProfile->bdp = ubidi_getSingleton(); - } - LocalMemory key; LocalMemory keyName; LocalMemory keyPath; @@ -735,7 +731,7 @@ usprep_prepare( const UStringPrepProfile* profile, } if(profile->checkBiDi) { - direction = ubidi_getClass(profile->bdp, ch); + direction = ubidi_getClass(ch); if(firstCharDir == U_CHAR_DIRECTION_COUNT){ firstCharDir = direction; } diff --git a/icuSources/common/ustr_cnv.cpp b/icuSources/common/ustr_cnv.cpp index 38f4d821..97c78bfa 100644 --- a/icuSources/common/ustr_cnv.cpp +++ b/icuSources/common/ustr_cnv.cpp @@ -28,6 +28,7 @@ #include "cmemory.h" #include "umutex.h" #include "ustr_cnv.h" +#include "ucnv_bld.h" /* mutexed access to a shared default converter ----------------------------- */ @@ -68,8 +69,8 @@ u_releaseDefaultConverter(UConverter *converter) if (converter != NULL) { ucnv_reset(converter); } + ucnv_enableCleanup(); umtx_lock(NULL); - if(gDefaultConverter == NULL) { gDefaultConverter = converter; converter = NULL; diff --git a/icuSources/common/ustr_imp.h b/icuSources/common/ustr_imp.h index 9815915f..34ca2f74 100644 --- a/icuSources/common/ustr_imp.h +++ b/icuSources/common/ustr_imp.h @@ -18,6 +18,7 @@ #define __USTR_IMP_H__ #include "unicode/utypes.h" +#include "unicode/utf8.h" /** * Internal option for unorm_cmpEquivFold() for strncmp style. @@ -81,4 +82,75 @@ u_terminateUChar32s(UChar32 *dest, int32_t destCapacity, int32_t length, UErrorC U_CAPI int32_t U_EXPORT2 u_terminateWChars(wchar_t *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode); +/** + * Counts the bytes of any whole valid sequence for a UTF-8 lead byte. + * Returns 1 for ASCII 0..0x7f. + * Returns 0 for 0x80..0xc1 as well as for 0xf5..0xff. + * leadByte might be evaluated multiple times. + * + * @param leadByte The first byte of a UTF-8 sequence. Must be 0..0xff. + * @return 0..4 + */ +#define U8_COUNT_BYTES(leadByte) \ + (U8_IS_SINGLE(leadByte) ? 1 : U8_COUNT_BYTES_NON_ASCII(leadByte)) + +/** + * Counts the bytes of any whole valid sequence for a UTF-8 lead byte. + * Returns 0 for 0x00..0xc1 as well as for 0xf5..0xff. + * leadByte might be evaluated multiple times. + * + * @param leadByte The first byte of a UTF-8 sequence. Must be 0..0xff. + * @return 0 or 2..4 + */ +#define U8_COUNT_BYTES_NON_ASCII(leadByte) \ + (U8_IS_LEAD(leadByte) ? ((uint8_t)(leadByte)>=0xe0)+((uint8_t)(leadByte)>=0xf0)+2 : 0) + +#ifdef __cplusplus + +U_NAMESPACE_BEGIN + +class UTF8 { +public: + UTF8() = delete; // all static + + /** + * Is t a valid UTF-8 trail byte? + * + * @param prev Must be the preceding lead byte if i==1 and length>=3; + * otherwise ignored. + * @param t The i-th byte following the lead byte. + * @param i The index (1..3) of byte t in the byte sequence. 0 1) { + return U8_IS_TRAIL(t); + } else if (length == 3) { + return U8_IS_VALID_LEAD3_AND_T1(prev, t); + } else { // length == 4 + return U8_IS_VALID_LEAD4_AND_T1(prev, t); + } + } +}; + +U_NAMESPACE_END + +#endif // __cplusplus + +/** + * Check whether a code point has the emoji property. + * (implemented in uchar.cpp as reduced version of u_hasBinaryProperty) + * + * @param c Code point to test. + * @return TRUE or FALSE according to whether c has the emoji property. + * + * @internal Apple only + */ +U_CAPI UBool U_EXPORT2 +u_isEmoji(UChar32 c); + + #endif diff --git a/icuSources/common/ustr_titlecase_brkiter.cpp b/icuSources/common/ustr_titlecase_brkiter.cpp index 0b2ba020..89888cf3 100644 --- a/icuSources/common/ustr_titlecase_brkiter.cpp +++ b/icuSources/common/ustr_titlecase_brkiter.cpp @@ -23,46 +23,153 @@ #include "unicode/brkiter.h" #include "unicode/casemap.h" +#include "unicode/chariter.h" #include "unicode/localpointer.h" #include "unicode/ubrk.h" #include "unicode/ucasemap.h" +#include "unicode/utext.h" #include "cmemory.h" +#include "uassert.h" #include "ucase.h" #include "ucasemap_imp.h" -U_NAMESPACE_USE +U_NAMESPACE_BEGIN -/* functions available in the common library (for unistr_case.cpp) */ +/** + * Whole-string BreakIterator. + * Titlecasing only calls setText(), first(), and next(). + * We implement the rest only to satisfy the abstract interface. + */ +class WholeStringBreakIterator : public BreakIterator { +public: + WholeStringBreakIterator() : BreakIterator(), length(0) {} + ~WholeStringBreakIterator() U_OVERRIDE; + UBool operator==(const BreakIterator&) const U_OVERRIDE; + BreakIterator *clone() const U_OVERRIDE; + static UClassID U_EXPORT2 getStaticClassID(); + UClassID getDynamicClassID() const U_OVERRIDE; + CharacterIterator &getText() const U_OVERRIDE; + UText *getUText(UText *fillIn, UErrorCode &errorCode) const U_OVERRIDE; + void setText(const UnicodeString &text) U_OVERRIDE; + void setText(UText *text, UErrorCode &errorCode) U_OVERRIDE; + void adoptText(CharacterIterator* it) U_OVERRIDE; + int32_t first() U_OVERRIDE; + int32_t last() U_OVERRIDE; + int32_t previous() U_OVERRIDE; + int32_t next() U_OVERRIDE; + int32_t current() const U_OVERRIDE; + int32_t following(int32_t offset) U_OVERRIDE; + int32_t preceding(int32_t offset) U_OVERRIDE; + UBool isBoundary(int32_t offset) U_OVERRIDE; + int32_t next(int32_t n) U_OVERRIDE; + BreakIterator *createBufferClone(void *stackBuffer, int32_t &BufferSize, + UErrorCode &errorCode) U_OVERRIDE; + BreakIterator &refreshInputText(UText *input, UErrorCode &errorCode) U_OVERRIDE; -/* public API functions */ +private: + int32_t length; +}; -U_CAPI int32_t U_EXPORT2 -u_strToTitle(UChar *dest, int32_t destCapacity, - const UChar *src, int32_t srcLength, - UBreakIterator *titleIter, - const char *locale, - UErrorCode *pErrorCode) { - LocalPointer ownedIter; - BreakIterator *iter; - if(titleIter!=NULL) { - iter=reinterpret_cast(titleIter); - } else { - iter=BreakIterator::createWordInstance(Locale(locale), *pErrorCode); - ownedIter.adoptInstead(iter); +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(WholeStringBreakIterator) + +WholeStringBreakIterator::~WholeStringBreakIterator() {} +UBool WholeStringBreakIterator::operator==(const BreakIterator&) const { return FALSE; } +BreakIterator *WholeStringBreakIterator::clone() const { return nullptr; } + +CharacterIterator &WholeStringBreakIterator::getText() const { + U_ASSERT(FALSE); // really should not be called + // Returns a null reference. + // Otherwise we would have to define a dummy CharacterIterator, + // and either have it as a field and const_cast it to a non-const reference, + // or have it via a pointer and return a reference to that. + CharacterIterator *none = nullptr; + return *none; +} +UText *WholeStringBreakIterator::getUText(UText * /*fillIn*/, UErrorCode &errorCode) const { + if (U_SUCCESS(errorCode)) { + errorCode = U_UNSUPPORTED_ERROR; } - if(U_FAILURE(*pErrorCode)) { - return 0; + return nullptr; +} + +void WholeStringBreakIterator::setText(const UnicodeString &text) { + length = text.length(); +} +void WholeStringBreakIterator::setText(UText *text, UErrorCode &errorCode) { + if (U_SUCCESS(errorCode)) { + int64_t length64 = utext_nativeLength(text); + if (length64 <= INT32_MAX) { + length = (int32_t)length64; + } else { + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + } } - UnicodeString s(srcLength<0, src, srcLength); - iter->setText(s); - return ustrcase_mapWithOverlap( - ustrcase_getCaseLocale(locale), 0, iter, - dest, destCapacity, - src, srcLength, - ustrcase_internalToTitle, *pErrorCode); +} +void WholeStringBreakIterator::adoptText(CharacterIterator* it) { + U_ASSERT(FALSE); // should not be called + length = it->getLength(); + delete it; } -U_NAMESPACE_BEGIN +int32_t WholeStringBreakIterator::first() { return 0; } +int32_t WholeStringBreakIterator::last() { return length; } +int32_t WholeStringBreakIterator::previous() { return 0; } +int32_t WholeStringBreakIterator::next() { return length; } +int32_t WholeStringBreakIterator::current() const { return 0; } +int32_t WholeStringBreakIterator::following(int32_t /*offset*/) { return length; } +int32_t WholeStringBreakIterator::preceding(int32_t /*offset*/) { return 0; } +UBool WholeStringBreakIterator::isBoundary(int32_t /*offset*/) { return FALSE; } +int32_t WholeStringBreakIterator::next(int32_t /*n*/) { return length; } + +BreakIterator *WholeStringBreakIterator::createBufferClone( + void * /*stackBuffer*/, int32_t & /*BufferSize*/, UErrorCode &errorCode) { + if (U_SUCCESS(errorCode)) { + errorCode = U_UNSUPPORTED_ERROR; + } + return nullptr; +} +BreakIterator &WholeStringBreakIterator::refreshInputText( + UText * /*input*/, UErrorCode &errorCode) { + if (U_SUCCESS(errorCode)) { + errorCode = U_UNSUPPORTED_ERROR; + } + return *this; +} + +U_CFUNC +BreakIterator *ustrcase_getTitleBreakIterator( + const Locale *locale, const char *locID, uint32_t options, BreakIterator *iter, + LocalPointer &ownedIter, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return nullptr; } + options &= U_TITLECASE_ITERATOR_MASK; + if (options != 0 && iter != nullptr) { + errorCode = U_ILLEGAL_ARGUMENT_ERROR; + return nullptr; + } + if (iter == nullptr) { + switch (options) { + case 0: + iter = BreakIterator::createWordInstance( + locale != nullptr ? *locale : Locale(locID), errorCode); + break; + case U_TITLECASE_WHOLE_STRING: + iter = new WholeStringBreakIterator(); + if (iter == nullptr) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + } + break; + case U_TITLECASE_SENTENCES: + iter = BreakIterator::createSentenceInstance( + locale != nullptr ? *locale : Locale(locID), errorCode); + break; + default: + errorCode = U_ILLEGAL_ARGUMENT_ERROR; + break; + } + ownedIter.adoptInstead(iter); + } + return iter; +} int32_t CaseMap::toTitle( const char *locale, uint32_t options, BreakIterator *iter, @@ -70,11 +177,8 @@ int32_t CaseMap::toTitle( UChar *dest, int32_t destCapacity, Edits *edits, UErrorCode &errorCode) { LocalPointer ownedIter; + iter = ustrcase_getTitleBreakIterator(nullptr, locale, options, iter, ownedIter, errorCode); if(iter==NULL) { - iter=BreakIterator::createWordInstance(Locale(locale), errorCode); - ownedIter.adoptInstead(iter); - } - if(U_FAILURE(errorCode)) { return 0; } UnicodeString s(srcLength<0, src, srcLength); @@ -88,6 +192,30 @@ int32_t CaseMap::toTitle( U_NAMESPACE_END +U_NAMESPACE_USE + +U_CAPI int32_t U_EXPORT2 +u_strToTitle(UChar *dest, int32_t destCapacity, + const UChar *src, int32_t srcLength, + UBreakIterator *titleIter, + const char *locale, + UErrorCode *pErrorCode) { + LocalPointer ownedIter; + BreakIterator *iter = ustrcase_getTitleBreakIterator( + nullptr, locale, 0, reinterpret_cast(titleIter), + ownedIter, *pErrorCode); + if (iter == nullptr) { + return 0; + } + UnicodeString s(srcLength<0, src, srcLength); + iter->setText(s); + return ustrcase_mapWithOverlap( + ustrcase_getCaseLocale(locale), 0, iter, + dest, destCapacity, + src, srcLength, + ustrcase_internalToTitle, *pErrorCode); +} + U_CAPI int32_t U_EXPORT2 ucasemap_toTitle(UCaseMap *csm, UChar *dest, int32_t destCapacity, @@ -97,10 +225,13 @@ ucasemap_toTitle(UCaseMap *csm, return 0; } if (csm->iter == NULL) { - csm->iter = BreakIterator::createWordInstance(Locale(csm->locale), *pErrorCode); - } - if (U_FAILURE(*pErrorCode)) { - return 0; + LocalPointer ownedIter; + BreakIterator *iter = ustrcase_getTitleBreakIterator( + nullptr, csm->locale, csm->options, nullptr, ownedIter, *pErrorCode); + if (iter == nullptr) { + return 0; + } + csm->iter = ownedIter.orphan(); } UnicodeString s(srcLength<0, src, srcLength); csm->iter->setText(s); diff --git a/icuSources/common/ustr_wcs.cpp b/icuSources/common/ustr_wcs.cpp index e7205496..e9f278e9 100644 --- a/icuSources/common/ustr_wcs.cpp +++ b/icuSources/common/ustr_wcs.cpp @@ -342,7 +342,7 @@ _strFromWCS( UChar *dest, pSrcLimit = src + srcLength; for(;;){ - register int32_t nulLen = 0; + int32_t nulLen = 0; /* find nulls in the string */ while(nulLenaddUnchanged(cpLength); - if(options & UCASEMAP_OMIT_UNCHANGED_TEXT) { - return destIndex; - } + } + if(options & U_OMIT_UNCHANGED_TEXT) { + return destIndex; } c=~result; if(destIndexaddUnchanged(length); + } + if(options & U_OMIT_UNCHANGED_TEXT) { + return destIndex; + } + if(length>(INT32_MAX-destIndex)) { + return -1; // integer overflow + } + if((destIndex+length)<=destCapacity) { + u_memcpy(dest+destIndex, s, length); + } + return destIndex + length; +} + +inline int32_t appendUnchanged(UChar *dest, int32_t destIndex, int32_t destCapacity, const UChar *s, int32_t length, uint32_t options, icu::Edits *edits) { - if(length>0) { - if(edits!=NULL) { - edits->addUnchanged(length); - if(options & UCASEMAP_OMIT_UNCHANGED_TEXT) { - return destIndex; - } - } - if(length>(INT32_MAX-destIndex)) { - return -1; // integer overflow - } - if((destIndex+length)<=destCapacity) { - u_memcpy(dest+destIndex, s, length); - } - destIndex+=length; + if (length <= 0) { + return destIndex; } - return destIndex; + return appendNonEmptyUnchanged(dest, destIndex, destCapacity, s, length, options, edits); } -static UChar32 U_CALLCONV +UChar32 U_CALLCONV utf16_caseContextIterator(void *context, int8_t dir) { UCaseContext *csc=(UCaseContext *)context; UChar32 c; @@ -196,39 +195,205 @@ utf16_caseContextIterator(void *context, int8_t dir) { return U_SENTINEL; } -/* - * Case-maps [srcStart..srcLimit[ but takes - * context [0..srcLength[ into account. +/** + * caseLocale >= 0: Lowercases [srcStart..srcLimit[ but takes context [0..srcLength[ into account. + * caseLocale < 0: Case-folds [srcStart..srcLimit[. */ -static int32_t -_caseMap(int32_t caseLocale, uint32_t options, UCaseMapFull *map, - UChar *dest, int32_t destCapacity, - const UChar *src, UCaseContext *csc, - int32_t srcStart, int32_t srcLimit, - icu::Edits *edits, - UErrorCode &errorCode) { - /* case mapping loop */ - int32_t srcIndex=srcStart; - int32_t destIndex=0; - while(srcIndexcpStart=cpStart=srcIndex; +int32_t toLower(int32_t caseLocale, uint32_t options, + UChar *dest, int32_t destCapacity, + const UChar *src, UCaseContext *csc, int32_t srcStart, int32_t srcLimit, + icu::Edits *edits, UErrorCode &errorCode) { + const int8_t *latinToLower; + if (caseLocale == UCASE_LOC_ROOT || + (caseLocale >= 0 ? + !(caseLocale == UCASE_LOC_TURKISH || caseLocale == UCASE_LOC_LITHUANIAN) : + (options & _FOLD_CASE_OPTIONS_MASK) == U_FOLD_CASE_DEFAULT)) { + latinToLower = LatinCase::TO_LOWER_NORMAL; + } else { + latinToLower = LatinCase::TO_LOWER_TR_LT; + } + const UTrie2 *trie = ucase_getTrie(); + int32_t destIndex = 0; + int32_t prev = srcStart; + int32_t srcIndex = srcStart; + for (;;) { + // fast path for simple cases + UChar lead; + while (srcIndex < srcLimit) { + lead = src[srcIndex]; + int32_t delta; + if (lead < LatinCase::LONG_S) { + int8_t d = latinToLower[lead]; + if (d == LatinCase::EXC) { break; } + ++srcIndex; + if (d == 0) { continue; } + delta = d; + } else if (lead >= 0xd800) { + break; // surrogate or higher + } else { + uint16_t props = UTRIE2_GET16_FROM_U16_SINGLE_LEAD(trie, lead); + if (UCASE_HAS_EXCEPTION(props)) { break; } + ++srcIndex; + if (!UCASE_IS_UPPER_OR_TITLE(props) || (delta = UCASE_GET_DELTA(props)) == 0) { + continue; + } + } + lead += delta; + destIndex = appendUnchanged(dest, destIndex, destCapacity, + src + prev, srcIndex - 1 - prev, options, edits); + if (destIndex >= 0) { + destIndex = appendUChar(dest, destIndex, destCapacity, lead); + if (edits != nullptr) { + edits->addReplace(1, 1); + } + } + if (destIndex < 0) { + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + prev = srcIndex; + } + if (srcIndex >= srcLimit) { + break; + } + // slow path + int32_t cpStart = srcIndex++; + UChar trail; UChar32 c; - U16_NEXT(src, srcIndex, srcLimit, c); - csc->cpLimit=srcIndex; + if (U16_IS_LEAD(lead) && srcIndex < srcLimit && U16_IS_TRAIL(trail = src[srcIndex])) { + c = U16_GET_SUPPLEMENTARY(lead, trail); + ++srcIndex; + } else { + c = lead; + } const UChar *s; - c=map(c, utf16_caseContextIterator, csc, &s, caseLocale); - destIndex = appendResult(dest, destIndex, destCapacity, c, s, - srcIndex - cpStart, options, edits); - if (destIndex < 0) { - errorCode = U_INDEX_OUTOFBOUNDS_ERROR; - return 0; + if (caseLocale >= 0) { + csc->cpStart = cpStart; + csc->cpLimit = srcIndex; + c = ucase_toFullLower(c, utf16_caseContextIterator, csc, &s, caseLocale); + } else { + c = ucase_toFullFolding(c, &s, options); + } + if (c >= 0) { + destIndex = appendUnchanged(dest, destIndex, destCapacity, + src + prev, cpStart - prev, options, edits); + if (destIndex >= 0) { + destIndex = appendResult(dest, destIndex, destCapacity, c, s, + srcIndex - cpStart, options, edits); + } + if (destIndex < 0) { + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + prev = srcIndex; } } + destIndex = appendUnchanged(dest, destIndex, destCapacity, + src + prev, srcIndex - prev, options, edits); + if (destIndex < 0) { + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + return destIndex; +} +int32_t toUpper(int32_t caseLocale, uint32_t options, + UChar *dest, int32_t destCapacity, + const UChar *src, UCaseContext *csc, int32_t srcLength, + icu::Edits *edits, UErrorCode &errorCode) { + const int8_t *latinToUpper; + if (caseLocale == UCASE_LOC_TURKISH) { + latinToUpper = LatinCase::TO_UPPER_TR; + } else { + latinToUpper = LatinCase::TO_UPPER_NORMAL; + } + const UTrie2 *trie = ucase_getTrie(); + int32_t destIndex = 0; + int32_t prev = 0; + int32_t srcIndex = 0; + for (;;) { + // fast path for simple cases + UChar lead; + while (srcIndex < srcLength) { + lead = src[srcIndex]; + int32_t delta; + if (lead < LatinCase::LONG_S) { + int8_t d = latinToUpper[lead]; + if (d == LatinCase::EXC) { break; } + ++srcIndex; + if (d == 0) { continue; } + delta = d; + } else if (lead >= 0xd800) { + break; // surrogate or higher + } else { + uint16_t props = UTRIE2_GET16_FROM_U16_SINGLE_LEAD(trie, lead); + if (UCASE_HAS_EXCEPTION(props)) { break; } + ++srcIndex; + if (UCASE_GET_TYPE(props) != UCASE_LOWER || (delta = UCASE_GET_DELTA(props)) == 0) { + continue; + } + } + lead += delta; + destIndex = appendUnchanged(dest, destIndex, destCapacity, + src + prev, srcIndex - 1 - prev, options, edits); + if (destIndex >= 0) { + destIndex = appendUChar(dest, destIndex, destCapacity, lead); + if (edits != nullptr) { + edits->addReplace(1, 1); + } + } + if (destIndex < 0) { + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + prev = srcIndex; + } + if (srcIndex >= srcLength) { + break; + } + // slow path + int32_t cpStart; + csc->cpStart = cpStart = srcIndex++; + UChar trail; + UChar32 c; + if (U16_IS_LEAD(lead) && srcIndex < srcLength && U16_IS_TRAIL(trail = src[srcIndex])) { + c = U16_GET_SUPPLEMENTARY(lead, trail); + ++srcIndex; + } else { + c = lead; + } + csc->cpLimit = srcIndex; + const UChar *s; + c = ucase_toFullUpper(c, utf16_caseContextIterator, csc, &s, caseLocale); + if (c >= 0) { + destIndex = appendUnchanged(dest, destIndex, destCapacity, + src + prev, cpStart - prev, options, edits); + if (destIndex >= 0) { + destIndex = appendResult(dest, destIndex, destCapacity, c, s, + srcIndex - cpStart, options, edits); + } + if (destIndex < 0) { + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + prev = srcIndex; + } + } + destIndex = appendUnchanged(dest, destIndex, destCapacity, + src + prev, srcIndex - prev, options, edits); + if (destIndex < 0) { + errorCode = U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } return destIndex; } +} // namespace + +U_NAMESPACE_END + +U_NAMESPACE_USE + #if !UCONFIG_NO_BREAK_ITERATION U_CFUNC int32_t U_CALLCONV @@ -237,7 +402,7 @@ ustrcase_internalToTitle(int32_t caseLocale, uint32_t options, BreakIterator *it const UChar *src, int32_t srcLength, icu::Edits *edits, UErrorCode &errorCode) { - if(U_FAILURE(errorCode)) { + if (!ustrcase_checkTitleAdjustmentOptions(options, errorCode)) { return 0; } @@ -264,45 +429,38 @@ ustrcase_internalToTitle(int32_t caseLocale, uint32_t options, BreakIterator *it } /* - * Unicode 4 & 5 section 3.13 Default Case Operations: - * - * R3 toTitlecase(X): Find the word boundaries based on Unicode Standard Annex - * #29, "Text Boundaries." Between each pair of word boundaries, find the first - * cased character F. If F exists, map F to default_title(F); then map each - * subsequent character C to default_lower(C). - * - * In this implementation, segment [prev..index[ into 3 parts: - * a) uncased characters (copy as-is) [prev..titleStart[ - * b) first case letter (titlecase) [titleStart..titleLimit[ + * Segment [prev..index[ into 3 parts: + * a) skipped characters (copy as-is) [prev..titleStart[ + * b) first letter (titlecase) [titleStart..titleLimit[ * c) subsequent characters (lowercase) [titleLimit..index[ */ if(prev 0; int32_t i2 = i + 1; @@ -965,7 +1124,7 @@ int32_t toUpper(uint32_t options, edits->addUnchanged(oldLength); } // Write unchanged text? - change = (options & UCASEMAP_OMIT_UNCHANGED_TEXT) == 0; + change = (options & U_OMIT_UNCHANGED_TEXT) == 0; } } @@ -1017,8 +1176,8 @@ ustrcase_internalToLower(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_IT UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; - int32_t destIndex = _caseMap( - caseLocale, options, ucase_toFullLower, + int32_t destIndex = toLower( + caseLocale, options, dest, destCapacity, src, &csc, 0, srcLength, edits, errorCode); @@ -1039,10 +1198,10 @@ ustrcase_internalToUpper(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_IT UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; - destIndex = _caseMap( - caseLocale, options, ucase_toFullUpper, + destIndex = toUpper( + caseLocale, options, dest, destCapacity, - src, &csc, 0, srcLength, + src, &csc, srcLength, edits, errorCode); } return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); @@ -1054,23 +1213,11 @@ ustrcase_internalFold(int32_t /* caseLocale */, uint32_t options, UCASEMAP_BREAK const UChar *src, int32_t srcLength, icu::Edits *edits, UErrorCode &errorCode) { - /* case mapping loop */ - int32_t srcIndex = 0; - int32_t destIndex = 0; - while (srcIndex < srcLength) { - int32_t cpStart = srcIndex; - UChar32 c; - U16_NEXT(src, srcIndex, srcLength, c); - const UChar *s; - c = ucase_toFullFolding(c, &s, options); - destIndex = appendResult(dest, destIndex, destCapacity, c, s, - srcIndex - cpStart, options, edits); - if (destIndex < 0) { - errorCode = U_INDEX_OUTOFBOUNDS_ERROR; - return 0; - } - } - + int32_t destIndex = toLower( + -1, options, + dest, destCapacity, + src, nullptr, 0, srcLength, + edits, errorCode); return checkOverflowAndEditsError(destIndex, destCapacity, edits, errorCode); } @@ -1110,7 +1257,7 @@ ustrcase_map(int32_t caseLocale, uint32_t options, UCASEMAP_BREAK_ITERATOR_PARAM return 0; } - if(edits!=NULL) { + if (edits != nullptr && (options & U_EDITS_NO_RESET) == 0) { edits->reset(); } destLength=stringCaseMapper(caseLocale, options, UCASEMAP_BREAK_ITERATOR diff --git a/icuSources/common/ustring.cpp b/icuSources/common/ustring.cpp index 6450ea2b..762cecb3 100644 --- a/icuSources/common/ustring.cpp +++ b/icuSources/common/ustring.cpp @@ -1113,6 +1113,164 @@ u_strHasMoreChar32Than(const UChar *s, int32_t length, int32_t number) { } } +/* ----- String validation functions --- */ + +/* + * Check whether the string is well-formed according to various criteria: + * - No code points that are defined as non-characters (e.g. 0xFFFF) or are undefined in + * the version of Unicode currently supported. + * - No isolated surrogate code points. + * - No overly-long sequences of non-starter combining marks, i.e. more than 30 characters + * in a row with non-zero combining class (which may have category Mn or Mc); this + * violates Stream-Safe Text Format per UAX #15. This test does not ensure that the + * string satisfies Stream-Safe Text Format (because it does not convert to NFKC first), + * but any string that fails this test is certainly not Stream-Safe. + * - No emoji variation selectors applied to non-emoji code points. This function may + * also check for other non-standard variation sequences. + * - No tag sequences that are ill-formed per definition ED-14a in UTS #51 (e.g. tag + * sequences must have an emoji base and a terminator). + * + * @internal Apple only + */ +enum { kBidiMaxDepth = 125 }; + +static UBool isWellFormed(UChar32 c, UChar32 cLast, int32_t *nonStarterCountP, UBool *inTagSeqP, + uint8_t* dirStatus, int32_t* dirStatusIndexP, int32_t* validIsolateCountP) { + if (*inTagSeqP) { + // can only have tag_spec or tag_term + if (c == 0xE007F) { // tag_term + *inTagSeqP = FALSE; + } else if (c < 0xE0020 || c > 0xE007E) { + return FALSE; + } + } else if (c < 0x0300) { + // Everything in this range (includes ASCII) is a valid character with combining class 0 + *nonStarterCountP = 0; + if (c == 0x000A || c == 0x000D || c == 0x0085 || (c >= 0x001C && c <= 0x001E)) { + // paragraph sep, reset bidi + *dirStatusIndexP = 0; + *validIsolateCountP = 0; + } + } else if ((c >= 0x2029 && c <= 0x202E) || (c >= 0x2066 && c <= 0x2069)) { + // para sep & bidi controls, all have combining class 0. The bidi control actions here + // are from [https://www.unicode.org/reports/tr9/#Explicit_Levels_and_Directions] + *nonStarterCountP = 0; + if (c == 0x2029) { // paragraph sep, reset bidi + *dirStatusIndexP = 0; + *validIsolateCountP = 0; + } else if (c == 0x2069) { // PDI + if (*validIsolateCountP > 0) { + while (*dirStatusIndexP > 0 && (dirStatus[(*dirStatusIndexP)--] & 0x80) == 0); + (*validIsolateCountP)--; + } + } else if (c == 0x202C) { // PDF + if (*dirStatusIndexP > 0 && (dirStatus[*dirStatusIndexP] & 0x80) == 0) { + (*dirStatusIndexP)--; + } + } else { + // embedding/override initiator. Need to increment the level by at least 1, and possibly 2 if the + // embedding/override direction matches the current direction (i.e. R and current odd, or L and current even). + // Since we increment first, the test for odd/even is flipped. For FSI, we do not actually determine + // whether it should be treated as RLI or LRI, so we just do the minimum increment. + uint8_t newEntry = (dirStatus[*dirStatusIndexP] & 0x7F) + 1; // min increment, flips odd/even status compared to current + if ( ((c == 0x202B || c == 0x202E || c == 0x2067) && (newEntry & 0x01) == 0) || // RLE/RLO/RLI and current was odd + ((c == 0x202A || c == 0x202D || c == 0x2066) && (newEntry & 0x01) != 0) ) { // LRE/LRO/LRI and current was even + newEntry++; + } + if (newEntry > kBidiMaxDepth || *dirStatusIndexP > kBidiMaxDepth) { + return FALSE; // Checking for this is the whole point. + } + if (c >= 0x2066 && c <= 0x2068) { // LRI/RLI/FSI + newEntry |= 0x80; // set directional isolate status + (*validIsolateCountP)++; + } + dirStatus[++(*dirStatusIndexP)] = newEntry; + } + } else if (c == 0xFE0F) { // emoji variation selector + if (!u_isEmoji(cLast)) { // previous char must be emoji + return FALSE; + } + // previous character would have set *nonStarterCountP = 0; + } else if (c >= 0xE0020 && c <= 0xE007E) { // tag_spec + if (!u_isEmoji(cLast) && cLast != 0xFE0F) { // previous char must be emoji or FE0F + return FALSE; + } + *inTagSeqP = TRUE; + // previous character would have set *nonStarterCountP = 0; + } else if (c == 0xE007F) { // tag_term + return FALSE; + } else { + // we have checked specific ranges/chars, now check general info for others + int8_t genCat = u_charType(c); + if (genCat == U_UNASSIGNED || genCat == U_SURROGATE) { + return FALSE; + } + if ((genCat == U_NON_SPACING_MARK || genCat == U_COMBINING_SPACING_MARK) && u_getCombiningClass(c) != 0) { + // non-starter + if (++(*nonStarterCountP) > 30) { + return FALSE; + } + } else { + *nonStarterCountP = 0; + } + } + return TRUE; +} + +U_CAPI UBool U_EXPORT2 +u_strIsWellFormed(const UChar *s, int32_t length) { + if (s==NULL || length<-1) { + return FALSE; + } + UChar32 c, c2, cLast = 0; + int32_t nonStarterCount = 0; + UBool inTagSeq = FALSE; + uint8_t dirStatus[kBidiMaxDepth + 3]; // low 7 bits is embed level, high bit is direction override status + int32_t dirStatusIndex = 0; + int32_t validIsolateCount = 0; + dirStatus[0] = 0; // assume initial paragraph direction L (most conservative) + if (length < 0) { + // NUL terminated + while ((c = *s++) != 0) { + // get next UChar32 c + if (U16_IS_LEAD(c)) { + if (U16_IS_TRAIL(c2 = *s)) { + s++; + c = U16_GET_SUPPLEMENTARY(c,c2); + } + } + // check current c + if (!isWellFormed(c, cLast, &nonStarterCount, &inTagSeq, dirStatus, &dirStatusIndex, &validIsolateCount)) { + return FALSE; + } + // setup next iteration + cLast = c; + } + } else { + // use length + const UChar *sLimit = s + length; + while (s < sLimit) { + // get next UChar32 c + c = *s++; + if (U16_IS_LEAD(c)) { + if (s < sLimit && U16_IS_TRAIL(c2 = *s)) { + s++; + c = U16_GET_SUPPLEMENTARY(c,c2); + } + } + // check current c + if (!isWellFormed(c, cLast, &nonStarterCount, &inTagSeq, dirStatus, &dirStatusIndex, &validIsolateCount)) { + return FALSE; + } + // setup next iteration + cLast = c; + } + } + return TRUE; +} + +/* ----- U_mem functions --- */ + U_CAPI UChar * U_EXPORT2 u_memcpy(UChar *dest, const UChar *src, int32_t count) { if(count > 0) { diff --git a/icuSources/common/ustrtrns.cpp b/icuSources/common/ustrtrns.cpp index a4682870..5dc032c0 100644 --- a/icuSources/common/ustrtrns.cpp +++ b/icuSources/common/ustrtrns.cpp @@ -256,152 +256,6 @@ u_strToUTF32(UChar32 *dest, pErrorCode); } -/* for utf8_nextCharSafeBodyTerminated() */ -static const UChar32 -utf8_minLegal[4]={ 0, 0x80, 0x800, 0x10000 }; - -/* - * Version of utf8_nextCharSafeBody() with the following differences: - * - checks for NUL termination instead of length - * - works with pointers instead of indexes - * - always strict (strict==-1) - * - * *ps points to after the lead byte and will be moved to after the last trail byte. - * c is the lead byte. - * @return the code point, or U_SENTINEL - */ -static UChar32 -utf8_nextCharSafeBodyTerminated(const uint8_t **ps, UChar32 c) { - const uint8_t *s=*ps; - uint8_t trail, illegal=0; - uint8_t count=U8_COUNT_TRAIL_BYTES(c); - U_ASSERT(count<6); - U8_MASK_LEAD_BYTE((c), count); - /* count==0 for illegally leading trail bytes and the illegal bytes 0xfe and 0xff */ - switch(count) { - /* each branch falls through to the next one */ - case 5: - case 4: - /* count>=4 is always illegal: no more than 3 trail bytes in Unicode's UTF-8 */ - illegal=1; - break; - case 3: - trail=(uint8_t)(*s++ - 0x80); - c=(c<<6)|trail; - if(trail>0x3f || c>=0x110) { - /* not a trail byte, or code point>0x10ffff (outside Unicode) */ - illegal=1; - break; - } - U_FALLTHROUGH; - case 2: - trail=(uint8_t)(*s++ - 0x80); - if(trail>0x3f) { - /* not a trail byte */ - illegal=1; - break; - } - c=(c<<6)|trail; - U_FALLTHROUGH; - case 1: - trail=(uint8_t)(*s++ - 0x80); - if(trail>0x3f) { - /* not a trail byte */ - illegal=1; - } - c=(c<<6)|trail; - break; - case 0: - return U_SENTINEL; - /* no default branch to optimize switch() - all values are covered */ - } - - /* correct sequence - all trail bytes have (b7..b6)==(10)? */ - /* illegal is also set if count>=4 */ - if(illegal || c0 && U8_IS_TRAIL(*s)) { - ++s; - --count; - } - c=U_SENTINEL; - } - *ps=s; - return c; -} - -/* - * Version of utf8_nextCharSafeBody() with the following differences: - * - works with pointers instead of indexes - * - always strict (strict==-1) - * - * *ps points to after the lead byte and will be moved to after the last trail byte. - * c is the lead byte. - * @return the code point, or U_SENTINEL - */ -static UChar32 -utf8_nextCharSafeBodyPointer(const uint8_t **ps, const uint8_t *limit, UChar32 c) { - const uint8_t *s=*ps; - uint8_t trail, illegal=0; - uint8_t count=U8_COUNT_TRAIL_BYTES(c); - if((limit-s)>=count) { - U8_MASK_LEAD_BYTE((c), count); - /* count==0 for illegally leading trail bytes and the illegal bytes 0xfe and 0xff */ - switch(count) { - /* each branch falls through to the next one */ - case 5: - case 4: - /* count>=4 is always illegal: no more than 3 trail bytes in Unicode's UTF-8 */ - illegal=1; - break; - case 3: - trail=*s++; - c=(c<<6)|(trail&0x3f); - if(c<0x110) { - illegal|=(trail&0xc0)^0x80; - } else { - /* code point>0x10ffff, outside Unicode */ - illegal=1; - break; - } - U_FALLTHROUGH; - case 2: - trail=*s++; - c=(c<<6)|(trail&0x3f); - illegal|=(trail&0xc0)^0x80; - U_FALLTHROUGH; - case 1: - trail=*s++; - c=(c<<6)|(trail&0x3f); - illegal|=(trail&0xc0)^0x80; - break; - case 0: - return U_SENTINEL; - /* no default branch to optimize switch() - all values are covered */ - } - } else { - illegal=1; /* too few bytes left */ - } - - /* correct sequence - all trail bytes have (b7..b6)==(10)? */ - /* illegal is also set if count>=4 */ - U_ASSERT(illegal || count0 && s 0) || subchar > 0x10ffff || U_IS_SURROGATE(subchar) @@ -434,7 +279,10 @@ u_strFromUTF8WithSub(UChar *dest, if(pNumSubstitutions!=NULL) { *pNumSubstitutions=0; } - numSubstitutions=0; + UChar *pDest = dest; + UChar *pDestLimit = dest+destCapacity; + int32_t reqLength = 0; + int32_t numSubstitutions=0; /* * Inline processing of UTF-8 byte sequences: @@ -455,95 +303,81 @@ u_strFromUTF8WithSub(UChar *dest, * The code explicitly checks for NULs only in the lead byte position. * A NUL byte in the trail byte position fails the trail byte range check anyway. */ - while(((ch = *pSrc) != 0) && (pDest < pDestLimit)) { - if(ch <= 0x7f){ - *pDest++=(UChar)ch; - ++pSrc; + int32_t i; + UChar32 c; + for(i = 0; (c = (uint8_t)src[i]) != 0 && (pDest < pDestLimit);) { + // modified copy of U8_NEXT() + ++i; + if(U8_IS_SINGLE(c)) { + *pDest++=(UChar)c; } else { - if(ch > 0xe0) { - if( /* handle U+1000..U+CFFF inline */ - ch <= 0xec && - (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f && - (t2 = (uint8_t)(pSrc[2] - 0x80)) <= 0x3f - ) { - /* no need for (ch & 0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ - *pDest++ = (UChar)((ch << 12) | (t1 << 6) | t2); - pSrc += 3; - continue; - } - } else if(ch < 0xe0) { - if( /* handle U+0080..U+07FF inline */ - ch >= 0xc2 && - (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f - ) { - *pDest++ = (UChar)(((ch & 0x1f) << 6) | t1); - pSrc += 2; - continue; - } - } - - /* function call for "complicated" and error cases */ - ++pSrc; /* continue after the lead byte */ - ch=utf8_nextCharSafeBodyTerminated(&pSrc, ch); - if(ch<0 && (++numSubstitutions, ch = subchar) < 0) { - *pErrorCode = U_INVALID_CHAR_FOUND; - return NULL; - } else if(ch<=0xFFFF) { - *(pDest++)=(UChar)ch; + uint8_t __t1, __t2; + if( /* handle U+0800..U+FFFF inline */ + (0xe0<=(c) && (c)<0xf0) && + U8_IS_VALID_LEAD3_AND_T1((c), src[i]) && + (__t2=src[(i)+1]-0x80)<=0x3f) { + *pDest++ = (((c)&0xf)<<12)|((src[i]&0x3f)<<6)|__t2; + i+=2; + } else if( /* handle U+0080..U+07FF inline */ + ((c)<0xe0 && (c)>=0xc2) && + (__t1=src[i]-0x80)<=0x3f) { + *pDest++ = (((c)&0x1f)<<6)|__t1; + ++(i); } else { - *(pDest++)=U16_LEAD(ch); - if(pDest 0xe0) { - if( /* handle U+1000..U+CFFF inline */ - ch <= 0xec && - (uint8_t)(pSrc[1] - 0x80) <= 0x3f && - (uint8_t)(pSrc[2] - 0x80) <= 0x3f - ) { - ++reqLength; - pSrc += 3; - continue; - } - } else if(ch < 0xe0) { - if( /* handle U+0080..U+07FF inline */ - ch >= 0xc2 && - (uint8_t)(pSrc[1] - 0x80) <= 0x3f - ) { - ++reqLength; - pSrc += 2; - continue; + uint8_t __t1, __t2; + if( /* handle U+0800..U+FFFF inline */ + (0xe0<=(c) && (c)<0xf0) && + U8_IS_VALID_LEAD3_AND_T1((c), src[i]) && + (__t2=src[(i)+1]-0x80)<=0x3f) { + ++reqLength; + i+=2; + } else if( /* handle U+0080..U+07FF inline */ + ((c)<0xe0 && (c)>=0xc2) && + (__t1=src[i]-0x80)<=0x3f) { + ++reqLength; + ++(i); + } else { + /* function call for "complicated" and error cases */ + (c)=utf8_nextCharSafeBody((const uint8_t *)src, &(i), -1, c, -1); + if(c<0 && (++numSubstitutions, c = subchar) < 0) { + *pErrorCode = U_INVALID_CHAR_FOUND; + return NULL; } + reqLength += U16_LENGTH(c); } - - /* function call for "complicated" and error cases */ - ++pSrc; /* continue after the lead byte */ - ch=utf8_nextCharSafeBodyTerminated(&pSrc, ch); - if(ch<0 && (++numSubstitutions, ch = subchar) < 0) { - *pErrorCode = U_INVALID_CHAR_FOUND; - return NULL; - } - reqLength += U16_LENGTH(ch); } } } else /* srcLength >= 0 */ { - const uint8_t *pSrcLimit = pSrc + srcLength; - int32_t count; - - /* Faster loop without ongoing checking for pSrcLimit and pDestLimit. */ + /* Faster loop without ongoing checking for srcLength and pDestLimit. */ + int32_t i = 0; + UChar32 c; for(;;) { /* * Each iteration of the inner loop progresses by at most 3 UTF-8 @@ -551,10 +385,10 @@ u_strFromUTF8WithSub(UChar *dest, * For supplementary code points (4 & 2), which are rare, * there is an additional adjustment. */ - count = (int32_t)(pDestLimit - pDest); - srcLength = (int32_t)((pSrcLimit - pSrc) / 3); - if(count > srcLength) { - count = srcLength; /* min(remaining dest, remaining src/3) */ + int32_t count = (int32_t)(pDestLimit - pDest); + int32_t count2 = (srcLength - i) / 3; + if(count > count2) { + count = count2; /* min(remaining dest, remaining src/3) */ } if(count < 3) { /* @@ -565,147 +399,123 @@ u_strFromUTF8WithSub(UChar *dest, } do { - ch = *pSrc; - if(ch <= 0x7f){ - *pDest++=(UChar)ch; - ++pSrc; + // modified copy of U8_NEXT() + c = (uint8_t)src[i++]; + if(U8_IS_SINGLE(c)) { + *pDest++=(UChar)c; } else { - if(ch > 0xe0) { - if( /* handle U+1000..U+CFFF inline */ - ch <= 0xec && - (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f && - (t2 = (uint8_t)(pSrc[2] - 0x80)) <= 0x3f - ) { - /* no need for (ch & 0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ - *pDest++ = (UChar)((ch << 12) | (t1 << 6) | t2); - pSrc += 3; - continue; - } - } else if(ch < 0xe0) { - if( /* handle U+0080..U+07FF inline */ - ch >= 0xc2 && - (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f - ) { - *pDest++ = (UChar)(((ch & 0x1f) << 6) | t1); - pSrc += 2; - continue; + uint8_t __t1, __t2; + if( /* handle U+0800..U+FFFF inline */ + (0xe0<=(c) && (c)<0xf0) && + ((i)+1)=0xc2) && + ((i)!=srcLength) && + (__t1=src[i]-0x80)<=0x3f) { + *pDest++ = (((c)&0x1f)<<6)|__t1; + ++(i); + } else { + if(c >= 0xf0 || subchar > 0xffff) { + // We may read up to four bytes and write up to two UChars, + // which we didn't account for with computing count, + // so we adjust it here. + if(--count == 0) { + --i; // back out byte c + break; + } } - } - if(ch >= 0xf0 || subchar > 0xffff) { - /* - * We may read up to six bytes and write up to two UChars, - * which we didn't account for with computing count, - * so we adjust it here. - */ - if(--count == 0) { - break; + /* function call for "complicated" and error cases */ + (c)=utf8_nextCharSafeBody((const uint8_t *)src, &(i), srcLength, c, -1); + if(c<0 && (++numSubstitutions, c = subchar) < 0) { + *pErrorCode = U_INVALID_CHAR_FOUND; + return NULL; + } else if(c<=0xFFFF) { + *(pDest++)=(UChar)c; + } else { + *(pDest++)=U16_LEAD(c); + *(pDest++)=U16_TRAIL(c); } } - - /* function call for "complicated" and error cases */ - ++pSrc; /* continue after the lead byte */ - ch=utf8_nextCharSafeBodyPointer(&pSrc, pSrcLimit, ch); - if(ch<0 && (++numSubstitutions, ch = subchar) < 0){ - *pErrorCode = U_INVALID_CHAR_FOUND; - return NULL; - }else if(ch<=0xFFFF){ - *(pDest++)=(UChar)ch; - }else{ - *(pDest++)=U16_LEAD(ch); - *(pDest++)=U16_TRAIL(ch); - } } } while(--count > 0); } - while((pSrc 0xe0) { - if( /* handle U+1000..U+CFFF inline */ - ch <= 0xec && - ((pSrcLimit - pSrc) >= 3) && - (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f && - (t2 = (uint8_t)(pSrc[2] - 0x80)) <= 0x3f - ) { - /* no need for (ch & 0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ - *pDest++ = (UChar)((ch << 12) | (t1 << 6) | t2); - pSrc += 3; - continue; - } - } else if(ch < 0xe0) { - if( /* handle U+0080..U+07FF inline */ - ch >= 0xc2 && - ((pSrcLimit - pSrc) >= 2) && - (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f - ) { - *pDest++ = (UChar)(((ch & 0x1f) << 6) | t1); - pSrc += 2; - continue; - } - } - - /* function call for "complicated" and error cases */ - ++pSrc; /* continue after the lead byte */ - ch=utf8_nextCharSafeBodyPointer(&pSrc, pSrcLimit, ch); - if(ch<0 && (++numSubstitutions, ch = subchar) < 0){ - *pErrorCode = U_INVALID_CHAR_FOUND; - return NULL; - }else if(ch<=0xFFFF){ - *(pDest++)=(UChar)ch; - }else{ - *(pDest++)=U16_LEAD(ch); - if(pDest=0xc2) && + ((i)!=srcLength) && + (__t1=src[i]-0x80)<=0x3f) { + *pDest++ = (((c)&0x1f)<<6)|__t1; + ++(i); + } else { + /* function call for "complicated" and error cases */ + (c)=utf8_nextCharSafeBody((const uint8_t *)src, &(i), srcLength, c, -1); + if(c<0 && (++numSubstitutions, c = subchar) < 0) { + *pErrorCode = U_INVALID_CHAR_FOUND; + return NULL; + } else if(c<=0xFFFF) { + *(pDest++)=(UChar)c; + } else { + *(pDest++)=U16_LEAD(c); + if(pDest 0xe0) { - if( /* handle U+1000..U+CFFF inline */ - ch <= 0xec && - ((pSrcLimit - pSrc) >= 3) && - (uint8_t)(pSrc[1] - 0x80) <= 0x3f && - (uint8_t)(pSrc[2] - 0x80) <= 0x3f - ) { - reqLength++; - pSrc += 3; - continue; - } - } else if(ch < 0xe0) { - if( /* handle U+0080..U+07FF inline */ - ch >= 0xc2 && - ((pSrcLimit - pSrc) >= 2) && - (uint8_t)(pSrc[1] - 0x80) <= 0x3f - ) { - reqLength++; - pSrc += 2; - continue; + uint8_t __t1, __t2; + if( /* handle U+0800..U+FFFF inline */ + (0xe0<=(c) && (c)<0xf0) && + ((i)+1)=0xc2) && + ((i)!=srcLength) && + (__t1=src[i]-0x80)<=0x3f) { + ++reqLength; + ++(i); + } else { + /* function call for "complicated" and error cases */ + (c)=utf8_nextCharSafeBody((const uint8_t *)src, &(i), srcLength, c, -1); + if(c<0 && (++numSubstitutions, c = subchar) < 0) { + *pErrorCode = U_INVALID_CHAR_FOUND; + return NULL; } + reqLength += U16_LENGTH(c); } - - /* function call for "complicated" and error cases */ - ++pSrc; /* continue after the lead byte */ - ch=utf8_nextCharSafeBodyPointer(&pSrc, pSrcLimit, ch); - if(ch<0 && (++numSubstitutions, ch = subchar) < 0){ - *pErrorCode = U_INVALID_CHAR_FOUND; - return NULL; - } - reqLength+=U16_LENGTH(ch); } } } @@ -753,7 +563,7 @@ u_strFromUTF8Lenient(UChar *dest, uint8_t* pSrc = (uint8_t*) src; /* args check */ - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)){ + if(U_FAILURE(*pErrorCode)){ return NULL; } @@ -994,7 +804,7 @@ u_strToUTF8WithSub(char *dest, int32_t numSubstitutions; /* args check */ - if(pErrorCode==NULL || U_FAILURE(*pErrorCode)){ + if(U_FAILURE(*pErrorCode)){ return NULL; } @@ -1266,18 +1076,8 @@ u_strFromJavaModifiedUTF8WithSub( int32_t srcLength, UChar32 subchar, int32_t *pNumSubstitutions, UErrorCode *pErrorCode) { - UChar *pDest = dest; - UChar *pDestLimit = dest+destCapacity; - UChar32 ch; - int32_t reqLength = 0; - const uint8_t* pSrc = (const uint8_t*) src; - const uint8_t *pSrcLimit; - int32_t count; - uint8_t t1, t2; /* trail bytes */ - int32_t numSubstitutions; - /* args check */ - if(U_FAILURE(*pErrorCode)){ + if(U_FAILURE(*pErrorCode)) { return NULL; } if( (src==NULL && srcLength!=0) || srcLength < -1 || @@ -1291,18 +1091,22 @@ u_strFromJavaModifiedUTF8WithSub( if(pNumSubstitutions!=NULL) { *pNumSubstitutions=0; } - numSubstitutions=0; + UChar *pDest = dest; + UChar *pDestLimit = dest+destCapacity; + int32_t reqLength = 0; + int32_t numSubstitutions=0; if(srcLength < 0) { /* * Transform a NUL-terminated ASCII string. * Handle non-ASCII strings with slower code. */ - while(((ch = *pSrc) != 0) && ch <= 0x7f && (pDest < pDestLimit)) { - *pDest++=(UChar)ch; - ++pSrc; + UChar32 c; + while(((c = (uint8_t)*src) != 0) && c <= 0x7f && (pDest < pDestLimit)) { + *pDest++=(UChar)c; + ++src; } - if(ch == 0) { + if(c == 0) { reqLength=(int32_t)(pDest - dest); if(pDestLength) { *pDestLength = reqLength; @@ -1312,33 +1116,38 @@ u_strFromJavaModifiedUTF8WithSub( u_terminateUChars(dest, destCapacity, reqLength, pErrorCode); return dest; } - srcLength = uprv_strlen((const char *)pSrc); + srcLength = static_cast(uprv_strlen(src)); } - /* Faster loop without ongoing checking for pSrcLimit and pDestLimit. */ - pSrcLimit = (pSrc == NULL) ? NULL : pSrc + srcLength; + /* Faster loop without ongoing checking for srcLength and pDestLimit. */ + UChar32 ch; + uint8_t t1, t2; + int32_t i = 0; for(;;) { - count = (int32_t)(pDestLimit - pDest); - srcLength = (int32_t)(pSrcLimit - pSrc); - if(count >= srcLength && srcLength > 0 && *pSrc <= 0x7f) { + int32_t count = (int32_t)(pDestLimit - pDest); + int32_t count2 = srcLength - i; + if(count >= count2 && srcLength > 0 && U8_IS_SINGLE(*src)) { /* fast ASCII loop */ - const uint8_t *prevSrc = pSrc; - int32_t delta; - while(pSrc < pSrcLimit && (ch = *pSrc) <= 0x7f) { - *pDest++=(UChar)ch; - ++pSrc; + int32_t start = i; + uint8_t b; + while(i < srcLength && U8_IS_SINGLE(b = src[i])) { + *pDest++=b; + ++i; } - delta = (int32_t)(pSrc - prevSrc); + int32_t delta = i - start; count -= delta; - srcLength -= delta; + count2 -= delta; } /* * Each iteration of the inner loop progresses by at most 3 UTF-8 * bytes and one UChar. */ - srcLength /= 3; - if(count > srcLength) { - count = srcLength; /* min(remaining dest, remaining src/3) */ + if(subchar > 0xFFFF) { + break; + } + count2 /= 3; + if(count > count2) { + count = count2; /* min(remaining dest, remaining src/3) */ } if(count < 3) { /* @@ -1348,29 +1157,28 @@ u_strFromJavaModifiedUTF8WithSub( break; } do { - ch = *pSrc; - if(ch <= 0x7f){ + ch = (uint8_t)src[i++]; + if(U8_IS_SINGLE(ch)) { *pDest++=(UChar)ch; - ++pSrc; } else { if(ch >= 0xe0) { if( /* handle U+0000..U+FFFF inline */ ch <= 0xef && - (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f && - (t2 = (uint8_t)(pSrc[2] - 0x80)) <= 0x3f + (t1 = (uint8_t)(src[i] - 0x80)) <= 0x3f && + (t2 = (uint8_t)(src[i+1] - 0x80)) <= 0x3f ) { /* no need for (ch & 0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ *pDest++ = (UChar)((ch << 12) | (t1 << 6) | t2); - pSrc += 3; + i += 2; continue; } } else { if( /* handle U+0000..U+07FF inline */ ch >= 0xc0 && - (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f + (t1 = (uint8_t)(src[i] - 0x80)) <= 0x3f ) { *pDest++ = (UChar)(((ch & 0x1f) << 6) | t1); - pSrc += 2; + ++i; continue; } } @@ -1383,49 +1191,43 @@ u_strFromJavaModifiedUTF8WithSub( * We need to write two UChars, adjusted count for that, * and ran out of space. */ + --i; // back out byte ch break; } else { /* function call for error cases */ - ++pSrc; /* continue after the lead byte */ - utf8_nextCharSafeBodyPointer(&pSrc, pSrcLimit, ch); + utf8_nextCharSafeBody((const uint8_t *)src, &(i), srcLength, ch, -1); ++numSubstitutions; - if(subchar<=0xFFFF) { - *(pDest++)=(UChar)subchar; - } else { - *(pDest++)=U16_LEAD(subchar); - *(pDest++)=U16_TRAIL(subchar); - } + *(pDest++)=(UChar)subchar; } } } while(--count > 0); } - while((pSrc= 0xe0) { if( /* handle U+0000..U+FFFF inline */ ch <= 0xef && - ((pSrcLimit - pSrc) >= 3) && - (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f && - (t2 = (uint8_t)(pSrc[2] - 0x80)) <= 0x3f + (i+1) < srcLength && + (t1 = (uint8_t)(src[i] - 0x80)) <= 0x3f && + (t2 = (uint8_t)(src[i+1] - 0x80)) <= 0x3f ) { /* no need for (ch & 0xf) because the upper bits are truncated after <<12 in the cast to (UChar) */ *pDest++ = (UChar)((ch << 12) | (t1 << 6) | t2); - pSrc += 3; + i += 2; continue; } } else { if( /* handle U+0000..U+07FF inline */ ch >= 0xc0 && - ((pSrcLimit - pSrc) >= 2) && - (t1 = (uint8_t)(pSrc[1] - 0x80)) <= 0x3f + i < srcLength && + (t1 = (uint8_t)(src[i] - 0x80)) <= 0x3f ) { *pDest++ = (UChar)(((ch & 0x1f) << 6) | t1); - pSrc += 2; + ++i; continue; } } @@ -1435,8 +1237,7 @@ u_strFromJavaModifiedUTF8WithSub( return NULL; } else { /* function call for error cases */ - ++pSrc; /* continue after the lead byte */ - utf8_nextCharSafeBodyPointer(&pSrc, pSrcLimit, ch); + utf8_nextCharSafeBody((const uint8_t *)src, &(i), srcLength, ch, -1); ++numSubstitutions; if(subchar<=0xFFFF) { *(pDest++)=(UChar)subchar; @@ -1453,32 +1254,31 @@ u_strFromJavaModifiedUTF8WithSub( } } - /* do not fill the dest buffer just count the UChars needed */ - while(pSrc < pSrcLimit){ - ch = *pSrc; - if(ch <= 0x7f) { + /* Pre-flight the rest of the string. */ + while(i < srcLength) { + ch = (uint8_t)src[i++]; + if(U8_IS_SINGLE(ch)) { reqLength++; - ++pSrc; } else { if(ch >= 0xe0) { if( /* handle U+0000..U+FFFF inline */ ch <= 0xef && - ((pSrcLimit - pSrc) >= 3) && - (uint8_t)(pSrc[1] - 0x80) <= 0x3f && - (uint8_t)(pSrc[2] - 0x80) <= 0x3f + (i+1) < srcLength && + (uint8_t)(src[i] - 0x80) <= 0x3f && + (uint8_t)(src[i+1] - 0x80) <= 0x3f ) { reqLength++; - pSrc += 3; + i += 2; continue; } } else { if( /* handle U+0000..U+07FF inline */ ch >= 0xc0 && - ((pSrcLimit - pSrc) >= 2) && - (uint8_t)(pSrc[1] - 0x80) <= 0x3f + i < srcLength && + (uint8_t)(src[i] - 0x80) <= 0x3f ) { reqLength++; - pSrc += 2; + ++i; continue; } } @@ -1488,8 +1288,7 @@ u_strFromJavaModifiedUTF8WithSub( return NULL; } else { /* function call for error cases */ - ++pSrc; /* continue after the lead byte */ - utf8_nextCharSafeBodyPointer(&pSrc, pSrcLimit, ch); + utf8_nextCharSafeBody((const uint8_t *)src, &(i), srcLength, ch, -1); ++numSubstitutions; reqLength+=U16_LENGTH(ch); } diff --git a/icuSources/common/utext.cpp b/icuSources/common/utext.cpp index 52ae7ff9..a2c9008a 100644 --- a/icuSources/common/utext.cpp +++ b/icuSources/common/utext.cpp @@ -847,15 +847,11 @@ U_CDECL_END //------------------------------------------------------------------------------ // Chunk size. -// Must be less than 42 (256/6), because of byte mapping from UChar indexes to native indexes. -// Worst case there are six UTF-8 bytes per UChar. -// obsolete 6 byte form fd + 5 trails maps to fffd -// obsolete 5 byte form fc + 4 trails maps to fffd -// non-shortest 4 byte forms maps to fffd -// normal supplementaries map to a pair of utf-16, two utf8 bytes per utf-16 unit -// mapToUChars array size must allow for the worst case, 6. -// This could be brought down to 4, by treating fd and fc as pure illegal, -// rather than obsolete lead bytes. But that is not compatible with the utf-8 access macros. +// Must be less than 85 (256/3), because of byte mapping from UChar indexes to native indexes. +// Worst case is three native bytes to one UChar. (Supplemenaries are 4 native bytes +// to two UChars.) +// The longest illegal byte sequence treated as a single error (and converted to U+FFFD) +// is a three-byte sequence (truncated four-byte sequence). // enum { UTF8_TEXT_CHUNK_SIZE=32 }; @@ -895,7 +891,7 @@ struct UTF8Buf { // Requires two extra slots, // one for a supplementary starting in the last normal position, // and one for an entry for the buffer limit position. - uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*6+6]; // Map native offset from bufNativeStart to + uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*3+6]; // Map native offset from bufNativeStart to // correspoding offset in filled part of buf. int32_t align; }; diff --git a/icuSources/common/utf_impl.cpp b/icuSources/common/utf_impl.cpp index 293e6f18..9dd241a1 100644 --- a/icuSources/common/utf_impl.cpp +++ b/icuSources/common/utf_impl.cpp @@ -7,7 +7,7 @@ * Corporation and others. All Rights Reserved. * ****************************************************************************** -* file name: utf_impl.c +* file name: utf_impl.cpp * encoding: UTF-8 * tab size: 8 (not used) * indentation:4 @@ -27,7 +27,6 @@ #include "unicode/utypes.h" #include "unicode/utf.h" #include "unicode/utf8.h" -#include "unicode/utf_old.h" #include "uassert.h" /* @@ -55,10 +54,6 @@ * - SUB AX, BX (result) * -finish: * (BSR: Bit Scan Reverse, scans for a 1-bit, starting from the MSB) - * - * In Unicode, all UTF-8 byte sequences with more than 4 bytes are illegal; - * lead bytes above 0xf4 are illegal. - * We keep them in this table for skipping long ISO 10646-UTF-8 sequences. */ extern "C" U_EXPORT const uint8_t utf8_countTrailBytes[256]={ @@ -77,24 +72,24 @@ utf8_countTrailBytes[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + // illegal C0 & C1 + // 2-byte lead bytes C2..DF + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + // 3-byte lead bytes E0..EF 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, - 3, 3, 3, /* illegal in Unicode */ - 4, 4, 4, 4, /* illegal in Unicode */ - 5, 5, /* illegal in Unicode */ - 0, 0 /* illegal bytes 0xfe and 0xff */ + // 4-byte lead bytes F0..F4 + // illegal F5..FF + 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -static const UChar32 -utf8_minLegal[4]={ 0, 0x80, 0x800, 0x10000 }; - static const UChar32 utf8_errorValue[6]={ - UTF8_ERROR_VALUE_1, UTF8_ERROR_VALUE_2, UTF_ERROR_VALUE, 0x10ffff, - 0x3ffffff, 0x7fffffff + // Same values as UTF8_ERROR_VALUE_1, UTF8_ERROR_VALUE_2, UTF_ERROR_VALUE, + // but without relying on the obsolete unicode/utf_old.h. + 0x15, 0x9f, 0xffff, + 0x10ffff }; static UChar32 @@ -134,61 +129,59 @@ errorValue(int32_t count, int8_t strict) { */ U_CAPI UChar32 U_EXPORT2 utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, UBool strict) { + // *pi is one after byte c. int32_t i=*pi; - uint8_t count=U8_COUNT_TRAIL_BYTES(c); - U_ASSERT(count <= 5); /* U8_COUNT_TRAIL_BYTES returns value 0...5 */ - if(i+count<=length || length<0) { - uint8_t trail; - - U8_MASK_LEAD_BYTE(c, count); - /* support NUL-terminated strings: do not read beyond the first non-trail byte */ - switch(count) { - /* each branch falls through to the next one */ - case 0: - /* count==0 for illegally leading trail bytes and the illegal bytes 0xfe and 0xff */ - case 5: - case 4: - /* count>=4 is always illegal: no more than 3 trail bytes in Unicode's UTF-8 */ - break; - case 3: - trail=s[i++]-0x80; - c=(c<<6)|trail; - /* c>=0x110 would result in code point>0x10ffff, outside Unicode */ - if(c>=0x110 || trail>0x3f) { break; } - U_FALLTHROUGH; - case 2: - trail=s[i++]-0x80; - c=(c<<6)|trail; - /* - * test for a surrogate d800..dfff unless we are lenient: - * before the last (c<<6), a surrogate is c=360..37f - */ - if(((c&0xffe0)==0x360 && strict!=-2) || trail>0x3f) { break; } - U_FALLTHROUGH; - case 1: - trail=s[i++]-0x80; - c=(c<<6)|trail; - if(trail>0x3f) { break; } - /* correct sequence - all trail bytes have (b7..b6)==(10) */ - if(c>=utf8_minLegal[count] && - /* strict: forbid non-characters like U+fffe */ - (strict<=0 || !U_IS_UNICODE_NONCHAR(c))) { + // length can be negative for NUL-terminated strings: Read and validate one byte at a time. + if(i==length || c>0xf4) { + // end of string, or not a lead byte + } else if(c>=0xf0) { + // Test for 4-byte sequences first because + // U8_NEXT() handles shorter valid sequences inline. + uint8_t t1=s[i], t2, t3; + c&=7; + if(U8_IS_VALID_LEAD4_AND_T1(c, t1) && + ++i!=length && (t2=s[i]-0x80)<=0x3f && + ++i!=length && (t3=s[i]-0x80)<=0x3f) { + ++i; + c=(c<<18)|((t1&0x3f)<<12)|(t2<<6)|t3; + // strict: forbid non-characters like U+fffe + if(strict<=0 || !U_IS_UNICODE_NONCHAR(c)) { *pi=i; return c; } - /* no default branch to optimize switch() - all values are covered */ } - } else { - /* too few bytes left */ - count=length-i; - } + } else if(c>=0xe0) { + c&=0xf; + if(strict!=-2) { + uint8_t t1=s[i], t2; + if(U8_IS_VALID_LEAD3_AND_T1(c, t1) && + ++i!=length && (t2=s[i]-0x80)<=0x3f) { + ++i; + c=(c<<12)|((t1&0x3f)<<6)|t2; + // strict: forbid non-characters like U+fffe + if(strict<=0 || !U_IS_UNICODE_NONCHAR(c)) { + *pi=i; + return c; + } + } + } else { + // strict=-2 -> lenient: allow surrogates + uint8_t t1=s[i]-0x80, t2; + if(t1<=0x3f && (c>0 || t1>=0x20) && + ++i!=length && (t2=s[i]-0x80)<=0x3f) { + *pi=i+1; + return (c<<12)|(t1<<6)|t2; + } + } + } else if(c>=0xc2) { + uint8_t t1=s[i]-0x80; + if(t1<=0x3f) { + *pi=i+1; + return ((c-0xc0)<<6)|t1; + } + } // else 0x80<=c<0xc2 is not a lead byte /* error handling */ - i=*pi; - while(count>0 && U8_IS_TRAIL(s[i])) { - ++i; - --count; - } c=errorValue(i-*pi, strict); *pi=i; return c; @@ -232,7 +225,7 @@ utf8_appendCharSafeBody(uint8_t *s, int32_t i, int32_t length, UChar32 c, UBool s+=i; offset=0; c=utf8_errorValue[length-1]; - UTF8_APPEND_CHAR_UNSAFE(s, offset, c); + U8_APPEND_UNSAFE(s, offset, c); i=i+offset; } } @@ -241,99 +234,96 @@ utf8_appendCharSafeBody(uint8_t *s, int32_t i, int32_t length, UChar32 c, UBool U_CAPI UChar32 U_EXPORT2 utf8_prevCharSafeBody(const uint8_t *s, int32_t start, int32_t *pi, UChar32 c, UBool strict) { + // *pi is the index of byte c. int32_t i=*pi; - uint8_t b, count=1, shift=6; - - if(!U8_IS_TRAIL(c)) { return errorValue(0, strict); } - - /* extract value bits from the last trail byte */ - c&=0x3f; - - for(;;) { - if(i<=start) { - /* no lead byte at all */ - return errorValue(0, strict); - } - - /* read another previous byte */ - b=s[--i]; - if((uint8_t)(b-0x80)<0x7e) { /* 0x80<=b<0xfe */ - if(b&0x40) { - /* lead byte, this will always end the loop */ - uint8_t shouldCount=U8_COUNT_TRAIL_BYTES(b); - - if(count==shouldCount) { - /* set the new position */ - *pi=i; - U8_MASK_LEAD_BYTE(b, count); - c|=(UChar32)b<=4 || c>0x10ffff || c0 && U_IS_UNICODE_NONCHAR(c))) { - /* illegal sequence or (strict and non-character) */ - if(count>=4) { - count=3; + if(U8_IS_TRAIL(c) && i>start) { + uint8_t b1=s[--i]; + if(U8_IS_LEAD(b1)) { + if(b1<0xe0) { + *pi=i; + return ((b1-0xc0)<<6)|(c&0x3f); + } else if(b1<0xf0 ? U8_IS_VALID_LEAD3_AND_T1(b1, c) : U8_IS_VALID_LEAD4_AND_T1(b1, c)) { + // Truncated 3- or 4-byte sequence. + *pi=i; + return errorValue(1, strict); + } + } else if(U8_IS_TRAIL(b1) && i>start) { + // Extract the value bits from the last trail byte. + c&=0x3f; + uint8_t b2=s[--i]; + if(0xe0<=b2 && b2<=0xf4) { + if(b2<0xf0) { + b2&=0xf; + if(strict!=-2) { + if(U8_IS_VALID_LEAD3_AND_T1(b2, b1)) { + *pi=i; + c=(b2<<12)|((b1&0x3f)<<6)|c; + if(strict<=0 || !U_IS_UNICODE_NONCHAR(c)) { + return c; + } else { + // strict: forbid non-characters like U+fffe + return errorValue(2, strict); + } } - c=errorValue(count, strict); } else { - /* exit with correct c */ + // strict=-2 -> lenient: allow surrogates + b1-=0x80; + if((b2>0 || b1>=0x20)) { + *pi=i; + return (b2<<12)|(b1<<6)|c; + } } - } else { - /* the lead byte does not match the number of trail bytes */ - /* only set the position to the lead byte if it would - include the trail byte that we started with */ - if(countstart) { + uint8_t b3=s[--i]; + if(0xf0<=b3 && b3<=0xf4) { + b3&=7; + if(U8_IS_VALID_LEAD4_AND_T1(b3, b2)) { *pi=i; - c=errorValue(count, strict); - } else { - c=errorValue(0, strict); + c=(b3<<18)|((b2&0x3f)<<12)|((b1&0x3f)<<6)|c; + if(strict<=0 || !U_IS_UNICODE_NONCHAR(c)) { + return c; + } else { + // strict: forbid non-characters like U+fffe + return errorValue(3, strict); + } } } - break; - } else if(count<5) { - /* trail byte */ - c|=(UChar32)(b&0x3f)<start) { - Z=I-5; - } else { - Z=start; - } - - /* return I if the sequence starting there is long enough to include i */ - do { - b=s[I]; - if((uint8_t)(b-0x80)>=0x7e) { /* not 0x80<=b<0xfe */ - break; - } else if(b>=0xc0) { - if(U8_COUNT_TRAIL_BYTES(b)>=(i-I)) { - return I; - } else { - break; + // Same as utf8_prevCharSafeBody(..., strict=-1) minus assembling code points. + int32_t orig_i=i; + uint8_t c=s[i]; + if(U8_IS_TRAIL(c) && i>start) { + uint8_t b1=s[--i]; + if(U8_IS_LEAD(b1)) { + if(b1<0xe0 || + (b1<0xf0 ? U8_IS_VALID_LEAD3_AND_T1(b1, c) : U8_IS_VALID_LEAD4_AND_T1(b1, c))) { + return i; + } + } else if(U8_IS_TRAIL(b1) && i>start) { + uint8_t b2=s[--i]; + if(0xe0<=b2 && b2<=0xf4) { + if(b2<0xf0 ? U8_IS_VALID_LEAD3_AND_T1(b2, b1) : U8_IS_VALID_LEAD4_AND_T1(b2, b1)) { + return i; + } + } else if(U8_IS_TRAIL(b2) && i>start) { + uint8_t b3=s[--i]; + if(0xf0<=b3 && b3<=0xf4 && U8_IS_VALID_LEAD4_AND_T1(b3, b2)) { + return i; + } } } - } while(Z<=--I); - - /* return i itself to be consistent with the FWD_1 macro */ - return i; + } + return orig_i; } diff --git a/icuSources/common/util.h b/icuSources/common/util.h index e7822490..e197cab7 100644 --- a/icuSources/common/util.h +++ b/icuSources/common/util.h @@ -46,6 +46,13 @@ class U_COMMON_API ICU_Utility /* not : public UObject because all methods are s int32_t radix = 10, int32_t minDigits = 1); + /** Returns a bogus UnicodeString by value. */ + static inline UnicodeString makeBogusString() { + UnicodeString result; + result.setToBogus(); + return result; + } + /** * Return true if the character is NOT printable ASCII. * diff --git a/icuSources/common/utrie.h b/icuSources/common/utrie.h index 9c5382c5..641027a1 100644 --- a/icuSources/common/utrie.h +++ b/icuSources/common/utrie.h @@ -556,7 +556,7 @@ struct UNewTrie { * Index values at build-time are 32 bits wide for easier processing. * Bit 31 is set if the data block is used by multiple index values (from utrie_setRange()). */ - int32_t index[UTRIE_MAX_INDEX_LENGTH]; + int32_t index[UTRIE_MAX_INDEX_LENGTH+UTRIE_SURROGATE_BLOCK_COUNT]; uint32_t *data; uint32_t leadUnitValue; diff --git a/icuSources/common/utrie2.cpp b/icuSources/common/utrie2.cpp index cec7224d..8f9183ba 100644 --- a/icuSources/common/utrie2.cpp +++ b/icuSources/common/utrie2.cpp @@ -746,7 +746,7 @@ uint16_t BackwardUTrie2StringIterator::previous16() { codePointLimit=codePointStart; if(start>=codePointStart) { codePoint=U_SENTINEL; - return 0; + return trie->errorValue; } uint16_t result; UTRIE2_U16_PREV16(trie, start, codePointStart, codePoint, result); @@ -757,7 +757,7 @@ uint16_t ForwardUTrie2StringIterator::next16() { codePointStart=codePointLimit; if(codePointLimit==limit) { codePoint=U_SENTINEL; - return 0; + return trie->errorValue; } uint16_t result; UTRIE2_U16_NEXT16(trie, codePointLimit, limit, codePoint, result); diff --git a/icuSources/common/utrie2.h b/icuSources/common/utrie2.h index 8e87bf8f..8e1caa5e 100644 --- a/icuSources/common/utrie2.h +++ b/icuSources/common/utrie2.h @@ -20,6 +20,7 @@ #define __UTRIE2_H__ #include "unicode/utypes.h" +#include "unicode/utf8.h" #include "putilimp.h" #include "udataswp.h" @@ -54,6 +55,8 @@ typedef struct UTrie UTrie; * is truncated, omitting both the BMP portion and the high range. * - There is a special small index for 2-byte UTF-8, and the initial data * entries are designed for fast 1/2-byte UTF-8 lookup. + * Starting with ICU 60, C0 and C1 are not recognized as UTF-8 lead bytes any more at all, + * and the associated 2-byte indexes are unused. */ /** @@ -933,29 +936,29 @@ utrie2_internalU8PrevIndex(const UTrie2 *trie, UChar32 c, /** Internal UTF-8 next-post-increment: get the next code point's data. */ #define _UTRIE2_U8_NEXT(trie, ascii, data, src, limit, result) { \ uint8_t __lead=(uint8_t)*(src)++; \ - if(__lead<0xc0) { \ + if(U8_IS_SINGLE(__lead)) { \ (result)=(trie)->ascii[__lead]; \ } else { \ uint8_t __t1, __t2; \ - if( /* handle U+0000..U+07FF inline */ \ - __lead<0xe0 && (src)<(limit) && \ - (__t1=(uint8_t)(*(src)-0x80))<=0x3f \ - ) { \ - ++(src); \ - (result)=(trie)->data[ \ - (trie)->index[(UTRIE2_UTF8_2B_INDEX_2_OFFSET-0xc0)+__lead]+ \ - __t1]; \ - } else if( /* handle U+0000..U+CFFF inline */ \ - __lead<0xed && ((src)+1)<(limit) && \ - (__t1=(uint8_t)(*(src)-0x80))<=0x3f && (__lead>0xe0 || __t1>=0x20) && \ + if( /* handle U+0800..U+FFFF inline */ \ + 0xe0<=__lead && __lead<0xf0 && ((src)+1)<(limit) && \ + U8_IS_VALID_LEAD3_AND_T1(__lead, __t1=(uint8_t)*(src)) && \ (__t2=(uint8_t)(*((src)+1)-0x80))<= 0x3f \ ) { \ (src)+=2; \ (result)=(trie)->data[ \ ((int32_t)((trie)->index[((__lead-0xe0)<<(12-UTRIE2_SHIFT_2))+ \ - (__t1<<(6-UTRIE2_SHIFT_2))+(__t2>>UTRIE2_SHIFT_2)]) \ + ((__t1&0x3f)<<(6-UTRIE2_SHIFT_2))+(__t2>>UTRIE2_SHIFT_2)]) \ <=0xc2 && (src)<(limit) && \ + (__t1=(uint8_t)(*(src)-0x80))<=0x3f \ + ) { \ + ++(src); \ + (result)=(trie)->data[ \ + (trie)->index[(UTRIE2_UTF8_2B_INDEX_2_OFFSET-0xc0)+__lead]+ \ + __t1]; \ } else { \ int32_t __index=utrie2_internalU8NextIndex((trie), __lead, (const uint8_t *)(src), \ (const uint8_t *)(limit)); \ @@ -968,7 +971,7 @@ utrie2_internalU8PrevIndex(const UTrie2 *trie, UChar32 c, /** Internal UTF-8 pre-decrement-previous: get the previous code point's data. */ #define _UTRIE2_U8_PREV(trie, ascii, data, start, src, result) { \ uint8_t __b=(uint8_t)*--(src); \ - if(__b<0x80) { \ + if(U8_IS_SINGLE(__b)) { \ (result)=(trie)->ascii[__b]; \ } else { \ int32_t __index=utrie2_internalU8PrevIndex((trie), __b, (const uint8_t *)(start), \ @@ -980,11 +983,4 @@ utrie2_internalU8PrevIndex(const UTrie2 *trie, UChar32 c, U_CDECL_END -/** - * Work around MSVC 2003 optimization bugs. - */ -#if defined (U_HAVE_MSVC_2003_OR_EARLIER) -#pragma optimize("", off) -#endif - #endif diff --git a/icuSources/common/uts46.cpp b/icuSources/common/uts46.cpp index f2cff2d5..5a23572e 100644 --- a/icuSources/common/uts46.cpp +++ b/icuSources/common/uts46.cpp @@ -1015,8 +1015,8 @@ UTS46::checkLabelBiDi(const UChar *label, int32_t labelLength, IDNAInfo &info) c ) { info.isOkBiDi=FALSE; } - // Get the directionalities of the intervening characters. - uint32_t mask=0; + // Add the directionalities of the intervening characters. + uint32_t mask=firstMask|lastMask; while(i(uprv_strlen(label)) : length); CheckedArrayByteSink sink(dest, capacity); IDNAInfo info; reinterpret_cast(idna)->labelToASCII_UTF8(src, sink, info, *pErrorCode); @@ -1431,7 +1430,7 @@ uidna_labelToUnicodeUTF8(const UIDNA *idna, if(!checkArgs(label, length, dest, capacity, pInfo, pErrorCode)) { return 0; } - StringPiece src(label, length<0 ? uprv_strlen(label) : length); + StringPiece src(label, length<0 ? static_cast(uprv_strlen(label)) : length); CheckedArrayByteSink sink(dest, capacity); IDNAInfo info; reinterpret_cast(idna)->labelToUnicodeUTF8(src, sink, info, *pErrorCode); @@ -1447,7 +1446,7 @@ uidna_nameToASCII_UTF8(const UIDNA *idna, if(!checkArgs(name, length, dest, capacity, pInfo, pErrorCode)) { return 0; } - StringPiece src(name, length<0 ? uprv_strlen(name) : length); + StringPiece src(name, length<0 ? static_cast(uprv_strlen(name)) : length); CheckedArrayByteSink sink(dest, capacity); IDNAInfo info; reinterpret_cast(idna)->nameToASCII_UTF8(src, sink, info, *pErrorCode); @@ -1463,7 +1462,7 @@ uidna_nameToUnicodeUTF8(const UIDNA *idna, if(!checkArgs(name, length, dest, capacity, pInfo, pErrorCode)) { return 0; } - StringPiece src(name, length<0 ? uprv_strlen(name) : length); + StringPiece src(name, length<0 ? static_cast(uprv_strlen(name)) : length); CheckedArrayByteSink sink(dest, capacity); IDNAInfo info; reinterpret_cast(idna)->nameToUnicodeUTF8(src, sink, info, *pErrorCode); diff --git a/icuSources/common/utypes.cpp b/icuSources/common/utypes.cpp index 8f5791be..7531e465 100644 --- a/icuSources/common/utypes.cpp +++ b/icuSources/common/utypes.cpp @@ -125,7 +125,9 @@ _uFmtErrorName[U_FMT_PARSE_ERROR_LIMIT - U_FMT_PARSE_ERROR_START] = { "U_UNDEFINED_KEYWORD", "U_DEFAULT_KEYWORD_MISSING", "U_DECIMAL_NUMBER_SYNTAX_ERROR", - "U_FORMAT_INEXACT_ERROR" + "U_FORMAT_INEXACT_ERROR", + "U_NUMBER_ARG_OUTOFBOUNDS_ERROR", + "U_NUMBER_SKELETON_SYNTAX_ERROR", }; static const char * const diff --git a/icuSources/common/wintz.cpp b/icuSources/common/wintz.cpp index 13ed21ee..eaf41573 100644 --- a/icuSources/common/wintz.cpp +++ b/icuSources/common/wintz.cpp @@ -49,7 +49,7 @@ typedef struct /** * Various registry keys and key fragments. */ -static const char CURRENT_ZONE_REGKEY[] = "SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation\\"; +static const wchar_t CURRENT_ZONE_REGKEY[] = L"SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation\\"; static const char STANDARD_TIME_REGKEY[] = " Standard Time"; static const char TZI_REGKEY[] = "TZI"; static const char STD_REGKEY[] = "Std"; @@ -124,27 +124,39 @@ static LONG getSTDName(const char *winid, char *regStdName, int32_t length) return result; } -static LONG getTZKeyName(char* tzKeyName, int32_t length) +static LONG getTZKeyName(char* tzKeyName, int32_t tzKeyNamelength) { HKEY hkey; LONG result = FALSE; - DWORD cbData = length; + WCHAR timeZoneKeyNameData[128]; + DWORD timeZoneKeyNameLength = static_cast(sizeof(timeZoneKeyNameData)); - if(ERROR_SUCCESS == RegOpenKeyExA( + if(ERROR_SUCCESS == RegOpenKeyExW( HKEY_LOCAL_MACHINE, CURRENT_ZONE_REGKEY, 0, KEY_QUERY_VALUE, &hkey)) { - result = RegQueryValueExA( + if (ERROR_SUCCESS == RegQueryValueExW( hkey, - "TimeZoneKeyName", + L"TimeZoneKeyName", NULL, NULL, - (LPBYTE)tzKeyName, - &cbData); + (LPBYTE)timeZoneKeyNameData, + &timeZoneKeyNameLength)) + { + // Ensure null termination. + timeZoneKeyNameData[UPRV_LENGTHOF(timeZoneKeyNameData) - 1] = L'\0'; + // Convert the UTF-16 string to UTF-8. + UErrorCode status = U_ZERO_ERROR; + u_strToUTF8(tzKeyName, tzKeyNamelength, NULL, reinterpret_cast(timeZoneKeyNameData), -1, &status); + if (U_ZERO_ERROR == status) + { + result = ERROR_SUCCESS; + } + } RegCloseKey(hkey); } diff --git a/icuSources/config.guess b/icuSources/config.guess index 9afd6762..31e01efe 100644 --- a/icuSources/config.guess +++ b/icuSources/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2017 Free Software Foundation, Inc. -timestamp='2013-11-29' +timestamp='2017-11-07' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2013-11-29' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -24,12 +24,12 @@ timestamp='2013-11-29' # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # -# Originally written by Per Bothner. +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` @@ -39,7 +39,7 @@ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -149,7 +149,7 @@ Linux|GNU|GNU/*) LIBC=gnu #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac @@ -168,19 +168,29 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. + # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in + earm*) + os=netbsdelf + ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ @@ -197,6 +207,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in os=netbsd ;; esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need @@ -207,13 +224,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` @@ -223,6 +240,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; + *:MidnightBSD:*:*) + echo ${UNAME_MACHINE}-unknown-midnightbsd${UNAME_RELEASE} + exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; @@ -235,6 +259,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; + *:Redox:*:*) + echo ${UNAME_MACHINE}-unknown-redox + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -251,55 +281,46 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; + UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; + UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; + UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; + UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; + UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; + UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; + UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; + UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; + UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; @@ -359,16 +380,16 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build - SUN_ARCH="i386" + SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then - SUN_ARCH="x86_64" + SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` @@ -393,7 +414,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} @@ -461,13 +482,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); @@ -579,8 +600,9 @@ EOF else IBM_ARCH=powerpc fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi @@ -589,7 +611,7 @@ EOF *:AIX:*:*) echo rs6000-ibm-aix exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and @@ -610,20 +632,20 @@ EOF 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi @@ -662,11 +684,11 @@ EOF exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = "hppa2.0w" ] + if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build @@ -679,12 +701,12 @@ EOF # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then - HP_ARCH="hppa2.0w" + HP_ARCH=hppa2.0w else - HP_ARCH="hppa64" + HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} @@ -724,7 +746,7 @@ EOF { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) @@ -733,7 +755,7 @@ EOF *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) @@ -789,14 +811,14 @@ EOF echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) @@ -812,10 +834,11 @@ EOF UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; esac + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin @@ -826,13 +849,9 @@ EOF *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; - i*:MSYS*:*) + *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; @@ -848,27 +867,12 @@ EOF echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; @@ -878,7 +882,7 @@ EOF exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix @@ -901,7 +905,7 @@ EOF EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) @@ -932,6 +936,9 @@ EOF crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -944,6 +951,9 @@ EOF ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; + k1om:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -969,10 +979,13 @@ EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; - or1k:Linux:*:*) + mips64el:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; - or32:Linux:*:*) + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) @@ -1001,6 +1014,9 @@ EOF ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; @@ -1020,7 +1036,7 @@ EOF echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} @@ -1059,7 +1075,7 @@ EOF i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + i*86:*:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} @@ -1099,7 +1115,7 @@ EOF # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that + # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; @@ -1248,6 +1264,9 @@ EOF SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux${UNAME_RELEASE} + exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; @@ -1261,16 +1280,23 @@ EOF UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub @@ -1285,7 +1311,7 @@ EOF exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then + if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi @@ -1294,15 +1320,18 @@ EOF *:QNX:*:4*) echo i386-pc-qnx exit ;; - NEO-?:NONSTOP_KERNEL:*:*) + NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; - NSR-?:NONSTOP_KERNEL:*:*) + NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk${UNAME_RELEASE} + exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; @@ -1316,7 +1345,7 @@ EOF # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = "386"; then + if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" @@ -1358,7 +1387,7 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos @@ -1369,171 +1398,37 @@ EOF x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; esac -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif +echo "$0: unable to guess system type" >&2 -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif +case "${UNAME_MACHINE}:${UNAME_SYSTEM}" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 </dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} +NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize +the system type. Please install a C compiler and try again. EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi + ;; +esac cat >&2 < in order to provide the needed -information to handle your system. +If $0 has already been updated, send the following data and any +information you think might be pertinent to config-patches@gnu.org to +provide the necessary information to handle your system. config.guess timestamp = $timestamp @@ -1561,7 +1456,7 @@ EOF exit 1 # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/icuSources/config.sub b/icuSources/config.sub index 5e13c911..38bf2687 100644 --- a/icuSources/config.sub +++ b/icuSources/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2017 Free Software Foundation, Inc. -timestamp='2013-10-01' +timestamp='2017-11-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2013-10-01' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -25,7 +25,7 @@ timestamp='2013-10-01' # of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -33,7 +33,7 @@ timestamp='2013-10-01' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -53,12 +53,11 @@ timestamp='2013-10-01' me=`echo "$0" | sed -e 's,.*/,,'` usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -68,7 +67,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -117,8 +116,8 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` @@ -230,9 +229,6 @@ case $os in -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; -psos*) os=-psos ;; @@ -253,17 +249,18 @@ case $basic_machine in | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ - | arm | arm64 | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] | armv7s \ + | arm | arm64 | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[armsk] \ | avr | avr32 \ + | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ - | i370 | i860 | i960 | ia64 \ + | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ @@ -283,8 +280,10 @@ case $basic_machine in | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ @@ -296,14 +295,15 @@ case $basic_machine in | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ - | open8 \ - | or1k | or32 \ + | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ | pyramid \ + | riscv32 | riscv64 \ | rl78 | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ @@ -311,7 +311,8 @@ case $basic_machine in | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | we32k \ + | visium \ + | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown @@ -325,6 +326,9 @@ case $basic_machine in c6x) basic_machine=tic6x-unknown ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none @@ -368,19 +372,20 @@ case $basic_machine in | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | arm64-* | armbe-* | armle-* | armeb-* | armv*-* \ + | arm-* | arm64-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ + | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ @@ -402,8 +407,10 @@ case $basic_machine in | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ @@ -415,16 +422,19 @@ case $basic_machine in | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ + | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ | pyramid-* \ + | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ @@ -432,6 +442,8 @@ case $basic_machine in | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ + | visium-* \ + | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ @@ -508,6 +520,9 @@ case $basic_machine in basic_machine=i386-pc os=-aros ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -624,10 +639,18 @@ case $basic_machine in basic_machine=rs6000-bull os=-bosx ;; - dpx2* | dpx2*-bull) + dpx2*) basic_machine=m68k-bull os=-sysv3 ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + os=$os"spe" + ;; ebmon29k) basic_machine=a29k-amd os=-ebmon @@ -769,6 +792,9 @@ case $basic_machine in basic_machine=m68k-isi os=-sysv ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; m68knommu) basic_machine=m68k-unknown os=-linux @@ -824,6 +850,10 @@ case $basic_machine in basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -871,7 +901,7 @@ case $basic_machine in basic_machine=v70-nec os=-sysv ;; - next | m*-next ) + next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) @@ -916,6 +946,9 @@ case $basic_machine in nsr-tandem) basic_machine=nsr-tandem ;; + nsx-tandem) + basic_machine=nsx-tandem + ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf @@ -1000,7 +1033,7 @@ case $basic_machine in ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - ppcle | powerpclittle | ppc-le | powerpc-little) + ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) @@ -1010,7 +1043,7 @@ case $basic_machine in ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) + ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) @@ -1211,6 +1244,9 @@ case $basic_machine in basic_machine=a29k-wrs os=-vxworks ;; + wasm32) + basic_machine=wasm32-unknown + ;; w65*) basic_machine=w65-wdc os=-none @@ -1219,6 +1255,9 @@ case $basic_machine in basic_machine=hppa1.1-winbond os=-proelf ;; + x64) + basic_machine=x86_64-pc + ;; xbox) basic_machine=i686-pc os=-mingw32 @@ -1326,8 +1365,8 @@ esac if [ x"$os" != x"" ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. + # First match some system type aliases that might get confused + # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux @@ -1347,36 +1386,37 @@ case $os in -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; - # First accept the basic system types. + # Now accept the basic system types. # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. + # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ + | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1451,7 +1491,7 @@ case $os in -nova*) os=-rtmk-nova ;; - -ns2 ) + -ns2) os=-nextstep2 ;; -nsk*) @@ -1508,6 +1548,8 @@ case $os in ;; -nacl*) ;; + -ios) + ;; -none) ;; *) @@ -1594,9 +1636,6 @@ case $basic_machine in mips*-*) os=-elf ;; - or1k-*) - os=-elf - ;; or32-*) os=-coff ;; @@ -1606,6 +1645,9 @@ case $basic_machine in sparc-* | *-sun) os=-sunos4.1.1 ;; + pru-*) + os=-elf + ;; *-be) os=-beos ;; @@ -1651,7 +1693,7 @@ case $basic_machine in m88k-omron*) os=-luna ;; - *-next ) + *-next) os=-nextstep ;; *-sequent) @@ -1786,7 +1828,7 @@ echo $basic_machine$os exit # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/icuSources/config/dist.mk b/icuSources/config/dist.mk index f7430f65..3e6e42e5 100644 --- a/icuSources/config/dist.mk +++ b/icuSources/config/dist.mk @@ -15,11 +15,11 @@ top_builddir = . include $(top_builddir)/icudefs.mk - +DISTY_DIR=dist DISTY_TMP=dist/tmp DISTY_ICU=$(DISTY_TMP)/icu DISTY_DATA=$(DISTY_ICU)/source/data -DISTY_RMV=brkitr coll curr lang locales mappings rbnf region translit xml zone misc unit +DISTY_RMV=brkitr coll curr lang locales mappings rbnf region translit xml zone misc/*.txt misc/*.mk unit DISTY_RMDIR=$(DISTY_RMV:%=$(DISTY_DATA)/%) DISTY_IN=$(DISTY_DATA)/in DOCZIP=icu-docs.zip @@ -34,10 +34,12 @@ DISTY_FILE_TGZ=$(DISTY_FILE_DIR)/$(DISTY_PREFIX)-src-$(DISTY_VER)-r$(SVNVER).tgz DISTY_FILE_ZIP=$(DISTY_FILE_DIR)/$(DISTY_PREFIX)-src-$(DISTY_VER)-r$(SVNVER).zip DISTY_DOC_ZIP=$(DISTY_FILE_DIR)/$(DISTY_PREFIX)-docs-$(DISTY_VER)-r$(SVNVER).zip DISTY_DATA_ZIP=$(DISTY_FILE_DIR)/$(DISTY_PREFIX)-data-$(DISTY_VER)-r$(SVNVER).zip -DISTY_DAT=$(firstword $(wildcard data/out/tmp/icudt$(SO_TARGET_VERSION_MAJOR)*.dat)) +DISTY_DAT:=$(firstword $(wildcard data/out/tmp/icudt$(SO_TARGET_VERSION_MAJOR)*.dat)) DISTY_FILES_SRC=$(DISTY_FILE_TGZ) $(DISTY_FILE_ZIP) DISTY_FILES=$(DISTY_FILES_SRC) $(DISTY_DOC_ZIP) +# colon-equals because we watn to run this once! +EXCLUDES_FILE:=$(shell mktemp) $(DISTY_FILE_DIR): $(MKINSTALLDIRS) $(DISTY_FILE_DIR) @@ -47,31 +49,41 @@ $(DISTY_TMP): $(DISTY_DOC_ZIP): $(DOCZIP) $(DISTY_FILE_DIR) cp $(DOCZIP) $(DISTY_DOC_ZIP) + ln -sf $(shell basename $(DISTY_DOC_ZIP)) $(DISTY_FILE_DIR)/icu4c-docs.zip $(DISTY_DAT): echo Missing $@ /bin/false +# make sure we get the non-lgpl docs $(DOCZIP): - $(MAKE) -C . srcdir="$(srcdir)" top_srcdir="$(top_srcdir)" builddir=. $@ + -$(RMV) "$(top_builddir)"/doc + "$(MAKE)" -C . srcdir="$(srcdir)" top_srcdir="$(top_srcdir)" builddir=. $@ $(DISTY_FILE_TGZ) $(DISTY_FILE_ZIP) $(DISTY_DATA_ZIP): $(DISTY_DAT) $(DISTY_TMP) @echo "svnversion of $(SVNTOP) is as follows (if this fails, make sure svn is installed..)" svnversion $(SVNTOP) -$(RMV) $(DISTY_FILE) $(DISTY_TMP) $(MKINSTALLDIRS) $(DISTY_TMP) - echo exporting $(SVNVER) - svn export -r $(shell echo $(SVNVER) | tr -d 'a-zA-Z' ) $(SVNURL) "$(DISTY_TMP)/icu" + @echo collecting excludes to $(EXCLUDES_FILE) + (cd "$(SVNTOP)" ; svn status --no-ignore | grep '^I' | cut -c2- > "$(EXCLUDES_FILE)" ) + @echo pseudo-exporting $(SVNVER) + @#svn export -r $(shell echo $(SVNVER) | tr -d 'a-zA-Z' ) $(SVNURL) "$(DISTY_TMP)/icu" + rsync -a --exclude-from="$(EXCLUDES_FILE)" "$(SVNTOP)" "$(DISTY_TMP)/icu" ( cd $(DISTY_TMP)/icu/source ; zip -rlq $(DISTY_DATA_ZIP) data ) $(MKINSTALLDIRS) $(DISTY_IN) echo DISTY_DAT=$(DISTY_DAT) cp $(DISTY_DAT) $(DISTY_IN) - ( cd $(DISTY_TMP)/icu ; python as_is/bomlist.py > as_is/bomlist.txt || rm -f as_is/bomlist.txt ) - ( cd $(DISTY_TMP) ; zip -rlq $(DISTY_FILE_ZIP) icu ) $(RMV) $(DISTY_RMDIR) ( cd $(DISTY_TMP)/icu ; python as_is/bomlist.py > as_is/bomlist.txt || rm -f as_is/bomlist.txt ) ( cd $(DISTY_TMP) ; tar cfpz $(DISTY_FILE_TGZ) icu ) - ls -l $(DISTY_FILE) + ( cd $(DISTY_TMP) ; zip -rlq $(DISTY_FILE_ZIP) icu ) + $(RMV) $(DISTY_TMP) + ln -sf $(shell basename $(DISTY_FILE_ZIP)) $(DISTY_FILE_DIR)/icu4c-src.zip + ln -sf $(shell basename $(DISTY_FILE_TGZ)) $(DISTY_FILE_DIR)/icu4c-src.tgz + ln -sf $(shell basename $(DISTY_DATA_ZIP)) $(DISTY_FILE_DIR)/icu4c-data.zip + ls -l $(DISTY_FILE_TGZ) $(DISTY_FILE_ZIP) $(DISTY_DATA_ZIP) + dist-local: $(DISTY_FILES) diff --git a/icuSources/config/mh-mingw b/icuSources/config/mh-mingw index b8d2ee05..94e64397 100644 --- a/icuSources/config/mh-mingw +++ b/icuSources/config/mh-mingw @@ -28,6 +28,10 @@ else STATICCPPFLAGS = -DU_STATIC_IMPLEMENTATION endif +## ICU requires a minimum target of Windows 7, and MinGW does not set this by default. +## https://msdn.microsoft.com/en-us/library/aa383745.aspx +CPPFLAGS += -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 + ## Flags for position independent code SHAREDLIBCFLAGS = SHAREDLIBCXXFLAGS = diff --git a/icuSources/config/mh-mingw64 b/icuSources/config/mh-mingw64 index 188d2aa7..6d0c5575 100644 --- a/icuSources/config/mh-mingw64 +++ b/icuSources/config/mh-mingw64 @@ -28,6 +28,10 @@ else STATICCPPFLAGS = -DU_STATIC_IMPLEMENTATION endif +## ICU requires a minimum target of Windows 7, and MinGW does not set this by default. +## https://msdn.microsoft.com/en-us/library/aa383745.aspx +CPPFLAGS += -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 + ## Flags for position independent code SHAREDLIBCFLAGS = SHAREDLIBCXXFLAGS = diff --git a/icuSources/config/mh-solaris b/icuSources/config/mh-solaris index e1d4ccf9..3d7e6fe7 100644 --- a/icuSources/config/mh-solaris +++ b/icuSources/config/mh-solaris @@ -7,7 +7,7 @@ ## Flags for ICU 59+ CXXFLAGS += -std=c++11 -CFLAGS += -std=c99 +CFLAGS += -std=c11 ## Flags for position independent code SHAREDLIBCFLAGS = -KPIC diff --git a/icuSources/configure b/icuSources/configure index abcdeb9d..47301a1f 100755 --- a/icuSources/configure +++ b/icuSources/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for ICU 59.1. +# Generated by GNU Autoconf 2.69 for ICU 62.1. # # Report bugs to . # @@ -582,8 +582,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='ICU' PACKAGE_TARNAME='International Components for Unicode' -PACKAGE_VERSION='59.1' -PACKAGE_STRING='ICU 59.1' +PACKAGE_VERSION='62.1' +PACKAGE_STRING='ICU 62.1' PACKAGE_BUGREPORT='http://icu-project.org/bugs' PACKAGE_URL='http://icu-project.org' @@ -752,6 +752,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -855,6 +856,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1107,6 +1109,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1244,7 +1255,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1357,7 +1368,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures ICU 59.1 to adapt to many kinds of systems. +\`configure' configures ICU 62.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1397,6 +1408,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1423,7 +1435,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of ICU 59.1:";; + short | recursive ) echo "Configuration of ICU 62.1:";; esac cat <<\_ACEOF @@ -1559,7 +1571,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -ICU configure 59.1 +ICU configure 62.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2251,7 +2263,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by ICU $as_me 59.1, which was +It was created by ICU $as_me 62.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4342,12 +4354,12 @@ $as_echo "$ac_use_strict_options" >&6; } then case "${host}" in *-*-solaris*) - # Don't use -std=c99 on Solaris because of timezone check fails + # Don't use -std=c11 on Solaris because of timezone check fails ;; *) # Do not use -ansi. It limits us to C90, and it breaks some platforms. - # We use -std=c99 to disable the gnu99 defaults and its associated warnings - CFLAGS="$CFLAGS -std=c99" + # We use -std=c11 to disable the gnu99 defaults and its associated warnings + CFLAGS="$CFLAGS -std=c11" ;; esac @@ -5464,7 +5476,7 @@ fi $as_echo "$enabled" >&6; } # Make sure that we can use draft API in ICU. if test "$U_DEFAULT_SHOW_DRAFT" = 0; then - CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_SHOW_DRAFT_API" + CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_SHOW_DRAFT_API -DU_SHOW_INTERNAL_API" fi @@ -7093,11 +7105,23 @@ fi if test x$ac_cv_func_strtod_l = xyes then - CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=1" - U_HAVE_STRTOD_L=1 + U_HAVE_STRTOD_L=1 + ac_fn_c_check_header_mongrel "$LINENO" "xlocale.h" "ac_cv_header_xlocale_h" "$ac_includes_default" +if test "x$ac_cv_header_xlocale_h" = xyes; then : + +fi + + + if test "$ac_cv_header_xlocale_h" = yes; then + U_HAVE_XLOCALE_H=1 + CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=1 -DU_HAVE_XLOCALE_H=1" + else + U_HAVE_XLOCALE_H=0 + CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=1 -DU_HAVE_XLOCALE_H=0" + fi else - CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=0" - U_HAVE_STRTOD_L=0 + CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=0" + U_HAVE_STRTOD_L=0 fi @@ -7449,15 +7473,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; esac -# GCC >= 4.4 supports UTF16 string literals. The CFLAGS and CXXFLAGS may change in the future. +# GCC >= 4.4 supports UTF16 string literals. As of ICU 62, both C and C++ files require them. if test "$CHECK_UTF16_STRING_RESULT" = "unknown"; then if test "$GCC" = yes; then - OLD_CFLAGS="${CFLAGS}" - CFLAGS="${CFLAGS} -std=gnu99" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -static const char16_t test[] = u"This is a UTF16 literal string."; +static const unsigned short test[] = u"This is a UTF16 literal string."; int main () @@ -7474,10 +7496,7 @@ else fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "$CC_UTF16_STRING" = 1; then - UCONFIG_CFLAGS="${UCONFIG_CFLAGS} -std=gnu99" CHECK_UTF16_STRING_RESULT="C only"; - else - CFLAGS="${OLD_CFLAGS}" fi fi if test "$GXX" = yes; then @@ -8385,7 +8404,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by ICU $as_me 59.1, which was +This file was extended by ICU $as_me 62.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -8439,7 +8458,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -ICU config.status 59.1 +ICU config.status 62.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/icuSources/configure.ac b/icuSources/configure.ac index bfbf7729..7078d491 100644 --- a/icuSources/configure.ac +++ b/icuSources/configure.ac @@ -365,7 +365,7 @@ AC_ARG_ENABLE(draft, AC_MSG_RESULT($enabled) # Make sure that we can use draft API in ICU. if test "$U_DEFAULT_SHOW_DRAFT" = 0; then - CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_SHOW_DRAFT_API" + CONFIG_CPPFLAGS="$CONFIG_CPPFLAGS -DU_SHOW_DRAFT_API -DU_SHOW_INTERNAL_API" fi AC_SUBST(U_DEFAULT_SHOW_DRAFT) @@ -883,11 +883,18 @@ AC_SUBST(U_TIMEZONE) AC_CHECK_FUNC(strtod_l) if test x$ac_cv_func_strtod_l = xyes then - CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=1" - U_HAVE_STRTOD_L=1 + U_HAVE_STRTOD_L=1 + AC_CHECK_HEADER(xlocale.h) + if test "$ac_cv_header_xlocale_h" = yes; then + U_HAVE_XLOCALE_H=1 + CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=1 -DU_HAVE_XLOCALE_H=1" + else + U_HAVE_XLOCALE_H=0 + CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=1 -DU_HAVE_XLOCALE_H=0" + fi else - CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=0" - U_HAVE_STRTOD_L=0 + CONFIG_CPPFLAGS="${CONFIG_CPPFLAGS} -DU_HAVE_STRTOD_L=0" + U_HAVE_STRTOD_L=0 fi AC_SUBST(U_HAVE_STRTOD_L) @@ -1031,19 +1038,14 @@ case "${host}" in ;; esac -# GCC >= 4.4 supports UTF16 string literals. The CFLAGS and CXXFLAGS may change in the future. +# GCC >= 4.4 supports UTF16 string literals. As of ICU 62, both C and C++ files require them. if test "$CHECK_UTF16_STRING_RESULT" = "unknown"; then if test "$GCC" = yes; then - OLD_CFLAGS="${CFLAGS}" - CFLAGS="${CFLAGS} -std=gnu99" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -static const char16_t test[] = u"This is a UTF16 literal string."; +static const unsigned short test[] = u"This is a UTF16 literal string."; ]], [[]])],[CC_UTF16_STRING=1],[CC_UTF16_STRING=0]) if test "$CC_UTF16_STRING" = 1; then - UCONFIG_CFLAGS="${UCONFIG_CFLAGS} -std=gnu99" CHECK_UTF16_STRING_RESULT="C only"; - else - CFLAGS="${OLD_CFLAGS}" fi fi if test "$GXX" = yes; then diff --git a/icuSources/data/Makefile.in b/icuSources/data/Makefile.in index d36b7721..d1b748b4 100644 --- a/icuSources/data/Makefile.in +++ b/icuSources/data/Makefile.in @@ -316,27 +316,27 @@ RES_SRC_FILES = $(RES_SRC:%=$(LOCSRCDIR)/%) INSTALLED_RB_FILES = $(GENRB_SOURCE:%.txt=%) $(GENRB_SOURCE_LOCAL:%.txt=%) endif ifdef CURR_SOURCE -CURR_SRC= root.txt supplementalData.txt $(CURR_SOURCE) $(CURR_ALIAS_SOURCE) $(CURR_SOURCE_LOCAL) +CURR_SRC= root.txt supplementalData.txt $(CURR_SOURCE) $(CURR_ALIAS_SOURCE) $(CURR_SOURCE_LOCAL) $(CURR_ALIAS_SOURCE_LOCAL) CURR_SRC_FILES = $(CURR_SRC:%=$(CURRSRCDIR)/%) INSTALLED_CURR_FILES = $(CURR_SOURCE:%.txt=%) $(CURR_SOURCE_LOCAL:%.txt=%) endif ifdef LANG_SOURCE -LANG_SRC= root.txt $(LANG_SOURCE) $(LANG_ALIAS_SOURCE) $(LANG_SOURCE_LOCAL) +LANG_SRC= root.txt $(LANG_SOURCE) $(LANG_ALIAS_SOURCE) $(LANG_SOURCE_LOCAL) $(LANG_ALIAS_SOURCE_LOCAL) LANG_SRC_FILES = $(LANG_SRC:%=$(LANGSRCDIR)/%) INSTALLED_LANG_FILES = $(LANG_SOURCE:%.txt=%) $(LANG_SOURCE_LOCAL:%.txt=%) endif ifdef REGION_SOURCE -REGION_SRC= root.txt $(REGION_SOURCE) $(REGION_ALIAS_SOURCE) $(REGION_SOURCE_LOCAL) +REGION_SRC= root.txt $(REGION_SOURCE) $(REGION_ALIAS_SOURCE) $(REGION_SOURCE_LOCAL) $(REGION_ALIAS_SOURCE_LOCAL) REGION_SRC_FILES = $(REGION_SRC:%=$(REGIONSRCDIR)/%) INSTALLED_REGION_FILES = $(REGION_SOURCE:%.txt=%) $(REGION_SOURCE_LOCAL:%.txt=%) endif ifdef ZONE_SOURCE -ZONE_SRC= root.txt $(ZONE_SOURCE) $(ZONE_ALIAS_SOURCE) $(ZONE_SOURCE_LOCAL) tzdbNames.txt +ZONE_SRC= root.txt $(ZONE_SOURCE) $(ZONE_ALIAS_SOURCE) $(ZONE_SOURCE_LOCAL) $(ZONE_ALIAS_SOURCE_LOCAL) tzdbNames.txt ZONE_SRC_FILES = $(ZONE_SRC:%=$(ZONESRCDIR)/%) INSTALLED_ZONE_FILES = $(ZONE_SOURCE:%.txt=%) $(ZONE_SOURCE_LOCAL:%.txt=%) endif ifdef UNIT_SOURCE -UNIT_SRC= root.txt $(UNIT_SOURCE) $(UNIT_ALIAS_SOURCE) $(UNIT_SOURCE_LOCAL) +UNIT_SRC= root.txt $(UNIT_SOURCE) $(UNIT_ALIAS_SOURCE) $(UNIT_SOURCE_LOCAL) $(UNIT_ALIAS_SOURCE_LOCAL) UNIT_SRC_FILES = $(UNIT_SRC:%=$(UNITSRCDIR)/%) INSTALLED_UNIT_FILES = $(UNIT_SOURCE:%.txt=%) $(UNIT_SOURCE_LOCAL:%.txt=%) endif @@ -346,7 +346,7 @@ COL_SRC_FILES = $(COL_SRC:%=$(COLSRCDIR)/%) INSTALLED_COL_FILES = $(COLLATION_SOURCE:%.txt=%) $(COLLATION_SOURCE_LOCAL:%.txt=%) endif ifdef RBNF_SOURCE -RBNF_SRC= root.txt $(RBNF_SOURCE) $(RBNF_ALIAS_SOURCE) $(RBNF_SOURCE_LOCAL) +RBNF_SRC= root.txt $(RBNF_SOURCE) $(RBNF_ALIAS_SOURCE) $(RBNF_SOURCE_LOCAL) $(RBNF_ALIAS_SOURCE_LOCAL) RBNF_SRC_FILES = $(RBNF_SRC:%=$(RBNFSRCDIR)/%) INSTALLED_RBNF_FILES = $(RBNF_SOURCE:%.txt=%) $(RBNF_SOURCE_LOCAL:%.txt=%) endif @@ -366,7 +366,7 @@ MSC_SRC_FILES=$(MSC_SOURCE:%=$(MISCSRCDIR)/%) ifeq ($(ENABLE_SO_VERSION_DATA),1) ifeq ($(PKGDATA_MODE),dll) SO_VERSION_DATA = $(OUTTMPDIR)/icudata.res -$(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc +$(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc | build-dir ifeq ($(MSYS_RC_MODE),1) rc.exe -i$(srcdir)/../common -i$(top_builddir)/common -fo$@ $(CPPFLAGS) $< else @@ -594,7 +594,7 @@ $(BUILDDIR)/%.cnv: $(UCMSRCDIR)/%.ucm $(TOOLBINDIR)/makeconv$(TOOLEXEEXT) # RES FILES ### curr res -$(CURRBLDDIR)/%.res: $(CURRSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) +$(CURRBLDDIR)/%.res: $(CURRSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu $(INVOKE) $(TOOLBINDIR)/genrb --usePoolBundle $(GENRBOPTS) -i $(BUILDDIR) -s $(CURRSRCDIR) -d $(CURRBLDDIR) $(> $@; ### lang res -$(LANGBLDDIR)/%.res: $(LANGSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) +$(LANGBLDDIR)/%.res: $(LANGSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu $(INVOKE) $(TOOLBINDIR)/genrb --usePoolBundle $(GENRBOPTS) -i $(BUILDDIR) -s $(LANGSRCDIR) -d $(LANGBLDDIR) $(> $@; ### region res -$(REGIONBLDDIR)/%.res: $(REGIONSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) +$(REGIONBLDDIR)/%.res: $(REGIONSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu $(INVOKE) $(TOOLBINDIR)/genrb --usePoolBundle $(GENRBOPTS) -i $(BUILDDIR) -s $(REGIONSRCDIR) -d $(REGIONBLDDIR) $(> $@; ### zone res -$(ZONEBLDDIR)/%.res: $(ZONESRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) +$(ZONEBLDDIR)/%.res: $(ZONESRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu $(INVOKE) $(TOOLBINDIR)/genrb --usePoolBundle $(GENRBOPTS) -i $(BUILDDIR) -s $(ZONESRCDIR) -d $(ZONEBLDDIR) $(> $@; ### collation res -$(COLBLDDIR)/%.res: $(COLSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) +$(COLBLDDIR)/%.res: $(COLSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu $(INVOKE) $(TOOLBINDIR)/genrb $(GENRBOPTS) -i $(BUILDDIR) -s $(COLSRCDIR) -d $(COLBLDDIR) $(> $@; ### brk res -$(BRKBLDDIR)/%.res: $(BRKSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(BRK_FILES) $(DICT_FILES) $(DAT_FILES) +$(BRKBLDDIR)/%.res: $(BRKSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(BRK_FILES) $(DICT_FILES) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu $(INVOKE) $(TOOLBINDIR)/genrb $(GENRBOPTS) -i $(BUILDDIR) -s $(BRKSRCDIR) -d $(BRKBLDDIR) $(> $@; ### RBNF res -$(RBNFBLDDIR)/%.res: $(RBNFSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) +$(RBNFBLDDIR)/%.res: $(RBNFSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu $(INVOKE) $(TOOLBINDIR)/genrb $(GENRBOPTS) -i $(BUILDDIR) -s $(RBNFSRCDIR) -d $(RBNFBLDDIR) $(> $@; ### TRANSLIT res -$(TRANSLITBLDDIR)/%.res: $(TRANSLITSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) +$(TRANSLITBLDDIR)/%.res: $(TRANSLITSRCDIR)/%.txt $(TOOLBINDIR)/genrb$(TOOLEXEEXT) $(DAT_FILES) | $(BUILDDIR)/cnvalias.icu $(INVOKE) $(TOOLBINDIR)/genrb $(GENRBOPTS) -i $(BUILDDIR) -s $(TRANSLITSRCDIR) -d $(TRANSLITBLDDIR) $( [CM] [whatever] -# The CM needs to behave as an AL -# -$AL_FOLLOW $CM+ / ( - [$BK $CR $LF $NL $ZW {eof}] | - $SP+ $CM+ $SP | - $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. - # LB14 says OP SP* x . - # becomes OP SP* x AL - # becomes OP SP* x CM+ AL_FOLLOW - # - # Further note: the $AL in [$AL {eof}] is only to work around - # a rule compiler bug which complains about - # empty sets otherwise. - - -# LB 4, 5, 6 - -$LB4Breaks [$LB4NonBreaks-$CM]; -$LB4Breaks $CM+ $CAN_CM; -$LF $CR; - - -# LB 7 x SP -# x ZW -[$SP $ZW] [$LB4NonBreaks-$CM]; -[$SP $ZW] $CM+ $CAN_CM; - -# LB 8 ZW SP* -# TODO: to implement this, we need more than one look-ahead hard break in play at a time. -# Requires an engine enhancement. -# / $SP* $ZW - -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) -# -($ID | $Extended_Pict | $EmojiNRK) $ZWJ $CM* $CAN_CM?; - - -# LB 9,10 Combining marks. -# X $CM needs to behave like X, where X is not $SP or controls. -# $CM not covered by the above needs to behave like $AL -# Stick together any combining sequences that don't match other rules. -^$CM+ $CAN_CM; - - -# LB 11 -# -$WJ $CM* $CAN_CM; -$WJ [$LB8NonBreaks-$CM]; - - $CANT_CM $CM* $WJ; -$CAN_CM $CM* $WJ; - -# LB 12a -# [^SP BA HY] x GL -# -$GL $CM* [$LB8NonBreaks-[$CM $SP $BA $HY]]; - -# LB 12 -# GL x -# -$CANT_CM $CM* $GL; -$CAN_CM $CM* $GL; - - -# LB 13 -$CL $CM+ $CAN_CM; -$CP $CM+ $CAN_CM; -$EX $CM+ $CAN_CM; -$IS $CM+ $CAN_CM; -$SY $CM+ $CAN_CM; - -$CL [$LB8NonBreaks-$CM]; -$CP [$LB8NonBreaks-$CM]; -$EX [$LB8NonBreaks-$CM]; -$IS [$LB8NonBreaks-$CM]; -$SY [$LB8NonBreaks-$CM]; - - -# LB 14 OP SP* x -# -. $SP* $CM* $OP; -$AL_FOLLOW? $CM+ $SP+ $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP+ $CM* $OP - - -# LB 15 -$OP $SP* $CM* $QU; - -# LB 16 -$NS $SP* $CM* ($CL | $CP); - -# LB 17 -$B2 $SP* $CM* $B2; - -# LB 18 break after spaces -# Nothing explicit needed here. - - -# -# LB 19 -# -$QU $CM* $CAN_CM; # . x QU -$QU $LB18NonBreaks; - - -$CAN_CM $CM* $QU; # QU x . - $CANT_CM $CM* $QU; - -# -# LB 20 Break before and after CB. -# nothing needed here. -# - -# LB 21 -($BA | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) - -[$LB20NonBreaks-$CM] $CM* $BB; # BB x . -[^$CB] $CM* $BB; # - -# LB21a -[^$CB] $CM* ($HY | $BA) $CM* $HL; - -# LB21b (reverse) -$HL $CM* $SY; - -# LB 22 -$IN $CM* ($ALPlus | $HL); -$IN $CM* $EX; -$IN $CM* ($ID | $EB | $EM); -$IN $CM* $IN; -$IN $CM* $NU; - -# LB 23 -$NU $CM* ($ALPlus | $HL); -($ALPlus | $HL) $CM* $NU; - -# LB23a -($ID | $EB | $EM) $CM* $PR; -$PO $CM* ($ID | $EB | $EM); - -# LB 24 -($ALPlus | $HL) $CM* ($PR | $PO); -($PR | $PO) $CM* ($ALPlus | $HL); - - -# LB 25 -($CM* ($PR | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; - -# LB 26 -($H3 | $H2 | $JV | $JL) $CM* $JL; -($JT | $JV) $CM* ($H2 | $JV); -$JT $CM* ($H3 | $JT); - -# LB 27 -$IN $CM* ($H3 | $H2 | $JT | $JV | $JL); -$PO $CM* ($H3 | $H2 | $JT | $JV | $JL); - ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; - -# LB 28 -($ALPlus | $HL) $CM* ($ALPlus | $HL); - - -# LB 29 -($ALPlus | $HL) $CM* $IS; - -# LB 30 -$OP $CM* ($ALPlus | $HL | $NU); -($ALPlus | $HL | $NU) $CM* $CP; - -# LB 30a -# Pairs of Regional Indicators. -# The following two rules are nearly identical. The first matches only sequences with an odd number of adjacent RIs, -# the second with an even number. Stripping away the cruft they look like -# [^RI] RI / (RI RI)+ ^RI; -# [^RI] RI RI / (RI RI)+ ^RI; -# -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; - -# In general, adjacent RIs stay together. The hard-break rules, above, overide this, forcing in the boundaries between pairs. -$RI $CM* $RI; - -# WJ, GL, QU, etc. are classes with rules like "WJ x " which includes "WJ x RI". -$RI $CM* ([$WJ $GL $QU $BB] | (($HY | $BA)$CM* $HL)); - - -# LB 30b Do not break between an Emoji Base and an Emoji Modifier -$EM $CM* $EB; - - -## ------------------------------------------------- - -!!safe_reverse; - -# LB 9 -^$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; -^$CM+ $SP / .; - -# LB 14 -$SP+ $CM* $OP; - -# LB 15 -$SP+ $CM* $QU; - -# LB 16 -$SP+ $CM* ($CL | $CP); - -# LB 17 -$SP+ $CM* $B2; - -# LB 21 -$CM* ($HY | $BA) $CM* $HL; - -# LB 25 -($CM* ($IS | $SY))+ $CM* $NU; -($CL | $CP) $CM* ($NU | $IS | $SY); - -# LB 30 -($CM* $RI)+; - -# For dictionary-based break -$dictionary $dictionary; - -## ------------------------------------------------- - -!!safe_forward; - -# Skip forward over all character classes that are involved in -# rules containing patterns with possibly more than one char -# of context. -# -# It might be slightly more efficient to have specific rules -# instead of one generic one, but only if we could -# turn off rule chaining. We don't want to move more -# than necessary. -# -^[$CM $OP $QU $CL $CP $B2 $PR $HY $BA $SP $RI $ZWJ $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $HY $BA $RI $ZWJ $dictionary]; -$dictionary $dictionary; - +# LB 31 Break everywhere else. +# Match a single code point if no other rule applies. +.; diff --git a/icuSources/data/brkitr/rules/line_fi.txt b/icuSources/data/brkitr/rules/line_fi.txt index a08e29cf..0a0ff1d3 100644 --- a/icuSources/data/brkitr/rules/line_fi.txt +++ b/icuSources/data/brkitr/rules/line_fi.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2016 and later: Unicode, Inc. and others. +# Copyright (C) 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html # Copyright (c) 2002-2016 International Business Machines Corporation and # others. All Rights Reserved. @@ -7,13 +7,10 @@ # # Line Breaking Rules # Implement default line breaking as defined by -# Unicode Standard Annex #14 Revision 37 for Unicode 9.0 +# Unicode Standard Annex #14 Revision 40 for Unicode 11.0 # http://www.unicode.org/reports/tr14/ # tailored as noted in 2nd paragraph below. # -# Includes extensions to the handling of emoji ZWJ sequences from -# https://goo.gl/cluFCn -# # TODO: Rule LB 8 remains as it was in Unicode 5.2 # This is only because of a limitation of ICU break engine implementation, # not because the older behavior is desirable. @@ -30,6 +27,7 @@ # !!chain; +!!quoted_literals_only; $AI = [:LineBreak = Ambiguous:]; $AL = [:LineBreak = Alphabetic:]; @@ -77,10 +75,6 @@ $XX = [:LineBreak = Unknown:]; $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; -$EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 -$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; - # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # list it in the numerous rules that use CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM. @@ -104,8 +98,6 @@ $ALPlus = [$AL $AI $SG $XX [$SA-[[:Mn:][:Mc:]]]]; ## ------------------------------------------------- -!!forward; - # # CAN_CM is the set of characters that may combine with CM combining chars. # Note that Linebreak UAX 14's concept of a combining char and the rules @@ -153,9 +145,9 @@ $CAN_CM $CM* [$SP $ZW]; $LB8Breaks = [$LB4Breaks $ZW]; $LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) Emoji ZWJ sequences. +# LB 8a ZWJ x Do not break Emoji ZWJ sequences. # -$ZWJ ($ID | $Extended_Pict | $EmojiNRK); +$ZWJ [^$CM]; # LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL # $CM not covered by the above needs to behave like $AL @@ -332,270 +324,17 @@ $IS $CM* ($ALPlus | $HL); $CP $CM* ($ALPlus | $HL | $NU); # LB 30a Do not break between regional indicators. Break after pairs of them. -# Tricky interaction with LB8a: ZWJ x ID -$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; -$RI $CM* $RI $CM* $ZWJ / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM $ID $Extended_Pict $EmojiNRK] {eof}]; -$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; - -$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS {eof}]; -$RI $CM* $RI $CM* $ZWJ ($ID | $Extended_Pict | $EmojiNRK); +# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. +$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; +# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' +# because of the chain-out behavior difference. The rule must chain out only from the [set characters], +# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # LB 30b Do not break between an Emoji Base and an Emoji Modifier $EB $CM* $EM; -# -# Reverse Rules. -# -## ------------------------------------------------- - -!!reverse; - -# LB 9 Combining Marks. -# Stick together any combining sequences that don't match other rules. - -^$CM+ $CAN_CM?; - -# -# Sequences of the form (shown forwards) -# [CANT_CM] [CM] [whatever] -# The CM needs to behave as an AL -# -$AL_FOLLOW $CM+ / ( - [$BK $CR $LF $NL $ZW {eof}] | - $SP+ $CM+ $SP | - $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. - # LB14 says OP SP* x . - # becomes OP SP* x AL - # becomes OP SP* x CM+ AL_FOLLOW - # - # Further note: the $AL in [$AL {eof}] is only to work around - # a rule compiler bug which complains about - # empty sets otherwise. - - -# LB 4, 5, 6 - -$LB4Breaks [$LB4NonBreaks-$CM]; -$LB4Breaks $CM+ $CAN_CM; -$LF $CR; - - -# LB 7 x SP -# x ZW -[$SP $ZW] [$LB4NonBreaks-$CM]; -[$SP $ZW] $CM+ $CAN_CM; - -# LB 8 ZW SP* -# TODO: to implement this, we need more than one look-ahead hard break in play at a time. -# Requires an engine enhancement. -# / $SP* $ZW - -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) -# -($ID | $Extended_Pict | $EmojiNRK) $ZWJ $CM* $CAN_CM?; - - -# LB 9,10 Combining marks. -# X $CM needs to behave like X, where X is not $SP or controls. -# $CM not covered by the above needs to behave like $AL -# Stick together any combining sequences that don't match other rules. -^$CM+ $CAN_CM; - - -# LB 11 -# -$WJ $CM* $CAN_CM; -$WJ [$LB8NonBreaks-$CM]; - - $CANT_CM $CM* $WJ; -$CAN_CM $CM* $WJ; - -# LB 12a -# [^SP BA HY] x GL -# -$GL $CM* [$LB8NonBreaks-[$CM $SP $BA $HH $HY]]; - -# LB 12 -# GL x -# -$CANT_CM $CM* $GL; -$CAN_CM $CM* $GL; - - -# LB 13 -$CL $CM+ $CAN_CM; -$CP $CM+ $CAN_CM; -$EX $CM+ $CAN_CM; -$IS $CM+ $CAN_CM; -$SY $CM+ $CAN_CM; - -$CL [$LB8NonBreaks-$CM]; -$CP [$LB8NonBreaks-$CM]; -$EX [$LB8NonBreaks-$CM]; -$IS [$LB8NonBreaks-$CM]; -$SY [$LB8NonBreaks-$CM]; - - -# LB 14 OP SP* x -# -. $SP* $CM* $OP; -$AL_FOLLOW? $CM+ $SP+ $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP+ $CM* $OP - - -# LB 15 -$OP $SP* $CM* $QU; - -# LB 16 -$NS $SP* $CM* ($CL | $CP); - -# LB 17 -$B2 $SP* $CM* $B2; - -# LB 18 break after spaces -# Nothing explicit needed here. - - -# -# LB 19 -# -$QU $CM* $CAN_CM; # . x QU -$QU $LB18NonBreaks; - - -$CAN_CM $CM* $QU; # QU x . - $CANT_CM $CM* $QU; - -# -# LB 20 Break before and after CB. -# nothing needed here. -# - -# LB 20.09 added rule for Finnish tailoring -$AL ($HY | $HH) / $SP; - -# LB 21 -($BA | $HH | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) - -[$LB20NonBreaks-$CM] $CM* $BB; # BB x . -[^$CB] $CM* $BB; # - -# LB21a -[^$CB] $CM* ($HY | $BA | $HH) $CM* $HL; - -# LB21b (reverse) -$HL $CM* $SY; - -# LB 22 -$IN $CM* ($ALPlus | $HL); -$IN $CM* $EX; -$IN $CM* ($ID | $EB | $EM); -$IN $CM* $IN; -$IN $CM* $NU; - -# LB 23 -$NU $CM* ($ALPlus | $HL); -($ALPlus | $HL) $CM* $NU; - -# LB23a -($ID | $EB | $EM) $CM* $PR; -$PO $CM* ($ID | $EB | $EM); - -# LB 24 -($ALPlus | $HL) $CM* ($PR | $PO); -($PR | $PO) $CM* ($ALPlus | $HL); - - -# LB 25 -($CM* ($PR | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; - -# LB 26 -($H3 | $H2 | $JV | $JL) $CM* $JL; -($JT | $JV) $CM* ($H2 | $JV); -$JT $CM* ($H3 | $JT); - -# LB 27 -$IN $CM* ($H3 | $H2 | $JT | $JV | $JL); -$PO $CM* ($H3 | $H2 | $JT | $JV | $JL); - ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; - -# LB 28 -($ALPlus | $HL) $CM* ($ALPlus | $HL); - - -# LB 29 -($ALPlus | $HL) $CM* $IS; - -# LB 30 -$OP $CM* ($ALPlus | $HL | $NU); -($ALPlus | $HL | $NU) $CM* $CP; - -# LB 30a -# Pairs of Regional Indicators. -# The following two rules are nearly identical. The first matches only sequences with an odd number of adjacent RIs, -# the second with an even number. Stripping away the cruft they look like -# [^RI] RI / (RI RI)+ ^RI; -# [^RI] RI RI / (RI RI)+ ^RI; -# -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; - -# In general, adjacent RIs stay together. The hard-break rules, above, overide this, forcing in the boundaries between pairs. -$RI $CM* $RI; - -# WJ, GL, QU, etc. are classes with rules like "WJ x " which includes "WJ x RI". -$RI $CM* ([$WJ $GL $QU $BB] | (($HY | $BA)$CM* $HL)); - - -# LB 30b Do not break between an Emoji Base and an Emoji Modifier -$EM $CM* $EB; - - -## ------------------------------------------------- - -!!safe_reverse; - -# LB 9 -^$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; -^$CM+ $SP / .; - -# LB 14 -$SP+ $CM* $OP; - -# LB 15 -$SP+ $CM* $QU; - -# LB 16 -$SP+ $CM* ($CL | $CP); - -# LB 17 -$SP+ $CM* $B2; - -# LB 21 -$CM* ($HY | $BA | $HH) $CM* $HL; - -# LB 25 -($CM* ($IS | $SY))+ $CM* $NU; -($CL | $CP) $CM* ($NU | $IS | $SY); - -# LB 30 -($CM* $RI)+; - -# For dictionary-based break -$dictionary $dictionary; - -## ------------------------------------------------- - -!!safe_forward; - -# Skip forward over all character classes that are involved in -# rules containing patterns with possibly more than one char -# of context. -# -# It might be slightly more efficient to have specific rules -# instead of one generic one, but only if we could -# turn off rule chaining. We don't want to move more -# than necessary. -# -^[$CM $OP $QU $CL $CP $B2 $PR $HY $BA $SP $RI $ZWJ $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $HY $BA $RI $ZWJ $dictionary]; -$dictionary $dictionary; - +# LB 31 Break everywhere else. +# Match a single code point if no other rule applies. +.; diff --git a/icuSources/data/brkitr/rules/line_loose.txt b/icuSources/data/brkitr/rules/line_loose.txt index fc6754a9..1326d90f 100644 --- a/icuSources/data/brkitr/rules/line_loose.txt +++ b/icuSources/data/brkitr/rules/line_loose.txt @@ -1,5 +1,6 @@ -# Copyright (C) 2016 and later: Unicode, Inc. and others. +# Copyright (C) 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html +# # Copyright (c) 2002-2016 International Business Machines Corporation and # others. All Rights Reserved. # @@ -7,12 +8,9 @@ # # Line Breaking Rules # Implement default line breaking as defined by -# Unicode Standard Annex #14 Revision 37 for Unicode 9.0 +# Unicode Standard Annex #14 Revision 40 for Unicode 11.0 # http://www.unicode.org/reports/tr14/ # -# Includes extensions to the handling of emoji ZWJ sequences from -# https://goo.gl/cluFCn -# # tailored as noted in 2nd paragraph below. # # TODO: Rule LB 8 remains as it was in Unicode 5.2 @@ -32,6 +30,7 @@ # !!chain; +!!quoted_literals_only; $AI = [:LineBreak = Ambiguous:]; $AL = [:LineBreak = Alphabetic:]; @@ -79,10 +78,6 @@ $XX = [:LineBreak = Unknown:]; $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; -$EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 -$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; - # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # list it in the numerous rules that use CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM. @@ -106,8 +101,6 @@ $ALPlus = [$AL $AI $SG $XX [$SA-[[:Mn:][:Mc:]]]]; ## ------------------------------------------------- -!!forward; - # # CAN_CM is the set of characters that may combine with CM combining chars. # Note that Linebreak UAX 14's concept of a combining char and the rules @@ -155,9 +148,9 @@ $CAN_CM $CM* [$SP $ZW]; $LB8Breaks = [$LB4Breaks $ZW]; $LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) Emoji ZWJ sequences. +# LB 8a ZWJ x Do not break Emoji ZWJ sequences. # -$ZWJ ($ID | $Extended_Pict | $EmojiNRK); +$ZWJ [^$CM]; # LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL # $CM not covered by the above needs to behave like $AL @@ -334,270 +327,17 @@ $IS $CM* ($ALPlus | $HL); $CP $CM* ($ALPlus | $HL | $NU); # LB 30a Do not break between regional indicators. Break after pairs of them. -# Tricky interaction with LB8a: ZWJ x ID -$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; -$RI $CM* $RI $CM* $ZWJ / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM $ID $Extended_Pict $EmojiNRK] {eof}]; -$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; - -$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS {eof}]; -$RI $CM* $RI $CM* $ZWJ ($ID | $Extended_Pict | $EmojiNRK); +# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. +$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; +# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' +# because of the chain-out behavior difference. The rule must chain out only from the [set characters], +# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # LB 30b Do not break between an Emoji Base and an Emoji Modifier $EB $CM* $EM; -# -# Reverse Rules. -# -## ------------------------------------------------- - -!!reverse; - -# LB 9 Combining Marks. -# Stick together any combining sequences that don't match other rules. - -^$CM+ $CAN_CM?; - -# -# Sequences of the form (shown forwards) -# [CANT_CM] [CM] [whatever] -# The CM needs to behave as an AL -# -$AL_FOLLOW $CM+ / ( - [$BK $CR $LF $NL $ZW {eof}] | - $SP+ $CM+ $SP | - $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. - # LB14 says OP SP* x . - # becomes OP SP* x AL - # becomes OP SP* x CM+ AL_FOLLOW - # - # Further note: the $AL in [$AL {eof}] is only to work around - # a rule compiler bug which complains about - # empty sets otherwise. - - -# LB 4, 5, 6 - -$LB4Breaks [$LB4NonBreaks-$CM]; -$LB4Breaks $CM+ $CAN_CM; -$LF $CR; - - -# LB 7 x SP -# x ZW -[$SP $ZW] [$LB4NonBreaks-$CM]; -[$SP $ZW] $CM+ $CAN_CM; - -# LB 8 ZW SP* -# TODO: to implement this, we need more than one look-ahead hard break in play at a time. -# Requires an engine enhancement. -# / $SP* $ZW - -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) -# -($ID | $Extended_Pict | $EmojiNRK) $ZWJ $CM* $CAN_CM?; - - -# LB 9,10 Combining marks. -# X $CM needs to behave like X, where X is not $SP or controls. -# $CM not covered by the above needs to behave like $AL -# Stick together any combining sequences that don't match other rules. -^$CM+ $CAN_CM; - - -# LB 11 -# -$WJ $CM* $CAN_CM; -$WJ [$LB8NonBreaks-$CM]; - - $CANT_CM $CM* $WJ; -$CAN_CM $CM* $WJ; - -# LB 12a -# [^SP BA HY] x GL -# -$GL $CM* [$LB8NonBreaks-[$CM $SP $BA $HY]]; - -# LB 12 -# GL x -# -$CANT_CM $CM* $GL; -$CAN_CM $CM* $GL; - - -# LB 13 -$CL $CM+ $CAN_CM; -$CP $CM+ $CAN_CM; -$EX $CM+ $CAN_CM; -$IS $CM+ $CAN_CM; -$SY $CM+ $CAN_CM; - -$CL [$LB8NonBreaks-$CM]; -$CP [$LB8NonBreaks-$CM]; -$EX [$LB8NonBreaks-$CM]; -$IS [$LB8NonBreaks-$CM]; -$SY [$LB8NonBreaks-$CM]; - - -# LB 14 OP SP* x -# -. $SP* $CM* $OP; -$AL_FOLLOW? $CM+ $SP+ $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP+ $CM* $OP - - -# LB 15 -$OP $SP* $CM* $QU; - -# LB 16 -# Don't include $NSX here -$NS $SP* $CM* ($CL | $CP); - -# LB 17 -$B2 $SP* $CM* $B2; - -# LB 18 break after spaces -# Nothing explicit needed here. - - -# -# LB 19 -# -$QU $CM* $CAN_CM; # . x QU -$QU $LB18NonBreaks; - - -$CAN_CM $CM* $QU; # QU x . - $CANT_CM $CM* $QU; - -# -# LB 20 Break before and after CB. -# nothing needed here. -# - -# LB 21 -# Don't include $NSX here -($BA | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) - -[$LB20NonBreaks-$CM] $CM* $BB; # BB x . -[^$CB] $CM* $BB; # - -# LB21a -[^$CB] $CM* ($HY | $BA) $CM* $HL; - -# LB21b (reverse) -$HL $CM* $SY; - -# LB 22 -$IN $CM* ($ALPlus | $HL); -$IN $CM* $EX; -$IN $CM* ($ID | $EB | $EM); -# $IN $CM* $IN; # delete this rule for CSS loose -$IN $CM* $NU; - -# LB 23 -$NU $CM* ($ALPlus | $HL); -($ALPlus | $HL) $CM* $NU; - -# LB23a -($ID | $EB | $EM) $CM* $PR; -$PO $CM* ($ID | $EB | $EM); - -# LB 24 -($ALPlus | $HL) $CM* ($PR | $PO); -($PR | $PO) $CM* ($ALPlus | $HL); - - -# LB 25 -($CM* ($PR | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; - -# LB 26 -($H3 | $H2 | $JV | $JL) $CM* $JL; -($JT | $JV) $CM* ($H2 | $JV); -$JT $CM* ($H3 | $JT); - -# LB 27 -$IN $CM* ($H3 | $H2 | $JT | $JV | $JL); -$PO $CM* ($H3 | $H2 | $JT | $JV | $JL); - ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; - -# LB 28 -($ALPlus | $HL) $CM* ($ALPlus | $HL); - - -# LB 29 -($ALPlus | $HL) $CM* $IS; - -# LB 30 -$OP $CM* ($ALPlus | $HL | $NU); -($ALPlus | $HL | $NU) $CM* $CP; - -# LB 30a -# Pairs of Regional Indicators. -# The following two rules are nearly identical. The first matches only sequences with an odd number of adjacent RIs, -# the second with an even number. Stripping away the cruft they look like -# [^RI] RI / (RI RI)+ ^RI; -# [^RI] RI RI / (RI RI)+ ^RI; -# -# Line Loose tailoring: Don't include NSX here. -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; - -# In general, adjacent RIs stay together. The hard-break rules, above, overide this, forcing in the boundaries between pairs. -$RI $CM* $RI; - -# WJ, GL, QU, etc. are classes with rules like "WJ x " which includes "WJ x RI". -$RI $CM* ([$WJ $GL $QU $BB] | (($HY | $BA)$CM* $HL)); - - -# LB 30b Do not break between an Emoji Base and an Emoji Modifier -$EM $CM* $EB; - - -## ------------------------------------------------- - -!!safe_reverse; - -# LB 9 -^$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; -^$CM+ $SP / .; - -# LB 14 -$SP+ $CM* $OP; - -# LB 15 -$SP+ $CM* $QU; - -# LB 16 -$SP+ $CM* ($CL | $CP); - -# LB 17 -$SP+ $CM* $B2; - -# LB 21 -$CM* ($HY | $BA) $CM* $HL; - -# LB 25 -($CM* ($IS | $SY))+ $CM* $NU; -($CL | $CP) $CM* ($NU | $IS | $SY); - -# LB 30 -($CM* $RI)+; - -# For dictionary-based break -$dictionary $dictionary; - -## ------------------------------------------------- - -!!safe_forward; - -# Skip forward over all character classes that are involved in -# rules containing patterns with possibly more than one char -# of context. -# -# It might be slightly more efficient to have specific rules -# instead of one generic one, but only if we could -# turn off rule chaining. We don't want to move more -# than necessary. -# -^[$CM $OP $QU $CL $CP $B2 $PR $HY $BA $SP $RI $ZWJ $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $HY $BA $RI $ZWJ $dictionary]; -$dictionary $dictionary; - +# LB 31 Break everywhere else. +# Match a single code point if no other rule applies. +.; diff --git a/icuSources/data/brkitr/rules/line_loose_cj.txt b/icuSources/data/brkitr/rules/line_loose_cj.txt index 86463a01..ff949be8 100644 --- a/icuSources/data/brkitr/rules/line_loose_cj.txt +++ b/icuSources/data/brkitr/rules/line_loose_cj.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2016 and later: Unicode, Inc. and others. +# Copyright (C) 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html # Copyright (c) 2002-2016 International Business Machines Corporation and # others. All Rights Reserved. @@ -7,12 +7,9 @@ # # Line Breaking Rules # Implement default line breaking as defined by -# Unicode Standard Annex #14 Revision 37 for Unicode 9.0 +# Unicode Standard Annex #14 Revision 40 for Unicode 11.0 # http://www.unicode.org/reports/tr14/ # -# Includes extensions to the handling of emoji ZWJ sequences from -# https://goo.gl/cluFCn -# # tailored as noted in 2nd paragraph below. # # TODO: Rule LB 8 remains as it was in Unicode 5.2 @@ -39,6 +36,7 @@ # !!chain; +!!quoted_literals_only; $AI = [:LineBreak = Ambiguous:]; $AL = [:LineBreak = Alphabetic:]; @@ -90,10 +88,6 @@ $XX = [:LineBreak = Unknown:]; $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; -$EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 -$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; - # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # list it in the numerous rules that use CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM. @@ -117,8 +111,6 @@ $ALPlus = [$AL $AI $SG $XX [$SA-[[:Mn:][:Mc:]]]]; ## ------------------------------------------------- -!!forward; - # # CAN_CM is the set of characters that may combine with CM combining chars. # Note that Linebreak UAX 14's concept of a combining char and the rules @@ -166,9 +158,9 @@ $CAN_CM $CM* [$SP $ZW]; $LB8Breaks = [$LB4Breaks $ZW]; $LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) Emoji ZWJ sequences. +# LB 8a ZWJ x Do not break Emoji ZWJ sequences. # -$ZWJ ($ID | $Extended_Pict | $EmojiNRK); +$ZWJ [^$CM]; # LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL # $CM not covered by the above needs to behave like $AL @@ -349,276 +341,17 @@ $IS $CM* ($ALPlus | $HL); $CP $CM* ($ALPlus | $HL | $NU); # LB 30a Do not break between regional indicators. Break after pairs of them. -# Tricky interaction with LB8a: ZWJ x ID -$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; -$RI $CM* $RI $CM* $ZWJ / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM $ID $Extended_Pict $EmojiNRK] {eof}]; -$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; - -$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS {eof}]; -$RI $CM* $RI $CM* $ZWJ ($ID | $Extended_Pict | $EmojiNRK); +# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. +$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; +# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' +# because of the chain-out behavior difference. The rule must chain out only from the [set characters], +# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # LB 30b Do not break between an Emoji Base and an Emoji Modifier $EB $CM* $EM; -# -# Reverse Rules. -# -## ------------------------------------------------- - -!!reverse; - -# LB 9 Combining Marks. -# Stick together any combining sequences that don't match other rules. - -^$CM+ $CAN_CM?; - -# -# Sequences of the form (shown forwards) -# [CANT_CM] [CM] [whatever] -# The CM needs to behave as an AL -# -$AL_FOLLOW $CM+ / ( - [$BK $CR $LF $NL $ZW {eof}] | - $SP+ $CM+ $SP | - $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. - # LB14 says OP SP* x . - # becomes OP SP* x AL - # becomes OP SP* x CM+ AL_FOLLOW - # - # Further note: the $AL in [$AL {eof}] is only to work around - # a rule compiler bug which complains about - # empty sets otherwise. - - -# LB 4, 5, 6 - -$LB4Breaks [$LB4NonBreaks-$CM]; -$LB4Breaks $CM+ $CAN_CM; -$LF $CR; - - -# LB 7 x SP -# x ZW -[$SP $ZW] [$LB4NonBreaks-$CM]; -[$SP $ZW] $CM+ $CAN_CM; - -# LB 8 ZW SP* -# TODO: to implement this, we need more than one look-ahead hard break in play at a time. -# Requires an engine enhancement. -# / $SP* $ZW - -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) -# -($ID | $Extended_Pict | $EmojiNRK) $ZWJ $CM* $CAN_CM?; - - -# LB 9,10 Combining marks. -# X $CM needs to behave like X, where X is not $SP or controls. -# $CM not covered by the above needs to behave like $AL -# Stick together any combining sequences that don't match other rules. -^$CM+ $CAN_CM; - - -# LB 11 -# -$WJ $CM* $CAN_CM; -$WJ [$LB8NonBreaks-$CM]; - - $CANT_CM $CM* $WJ; -$CAN_CM $CM* $WJ; - -# LB 12a -# [^SP BA HY] x GL -# -$GL $CM* [$LB8NonBreaks-[$CM $SP $BA $BAX $HY]]; - -# LB 12 -# GL x -# -$CANT_CM $CM* $GL; -$CAN_CM $CM* $GL; - - -# LB 13 -# Do not include $EXX here -$CL $CM+ $CAN_CM; -$CP $CM+ $CAN_CM; -$EX $CM+ $CAN_CM; -$IS $CM+ $CAN_CM; -$SY $CM+ $CAN_CM; - -$CL [$LB8NonBreaks-$CM]; -$CP [$LB8NonBreaks-$CM]; -$EX [$LB8NonBreaks-$CM]; -$IS [$LB8NonBreaks-$CM]; -$SY [$LB8NonBreaks-$CM]; - - -# LB 14 OP SP* x -# -. $SP* $CM* $OP; -$AL_FOLLOW? $CM+ $SP+ $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP+ $CM* $OP - - -# LB 15 -$OP $SP* $CM* $QU; - -# LB 16 -# Don't include $NSX here -$NS $SP* $CM* ($CL | $CP); - -# LB 17 -$B2 $SP* $CM* $B2; - -# LB 18 break after spaces -# Nothing explicit needed here. - - -# -# LB 19 -# -$QU $CM* $CAN_CM; # . x QU -$QU $LB18NonBreaks; - - -$CAN_CM $CM* $QU; # QU x . - $CANT_CM $CM* $QU; - -# -# LB 20 Break before and after CB. -# nothing needed here. -# - -# LB 21 -# Don't include $BAX or $NSX here -($BA | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) - -[$LB20NonBreaks-$CM] $CM* $BB; # BB x . -[^$CB] $CM* $BB; # - -# LB21a -[^$CM $CB]? $CM* ($HY | $BA | $BAX) $CM* $HL; - -# LB21b (reverse) -$HL $CM* $SY; - -# LB 22 -$IN $CM* ($ALPlus | $HL); -$IN $CM* $EX; -$IN $CM* ($ID | $EB | $EM); -# $IN $CM* $IN; # delete this rule for CSS loose -$IN $CM* $NU; - -# LB 23 -# Do not include $POX here -$NU $CM* ($ALPlus | $HL); -($ALPlus | $HL) $CM* $NU; - -# LB23a -# Do not include $PRX here -($ID | $EB | $EM) $CM* $PR; -$PO $CM* ($ID | $EB | $EM); - -# LB 24 -# Do not include $PRX here -($ALPlus | $HL) $CM* ($PR | $PO | $POX); -($PR | $PO | $POX) $CM* ($ALPlus | $HL); - - -# LB 25 -# Here do not include $POX at the beginning or $PRX at the end -($CM* ($PR | $PRX | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO | $POX))?; - -# LB 26 -($H3 | $H2 | $JV | $JL) $CM* $JL; -($JT | $JV) $CM* ($H2 | $JV); -$JT $CM* ($H3 | $JT); - -# LB 27 -# Do not include $POX or $PRX here -$IN $CM* ($H3 | $H2 | $JT | $JV | $JL); -$PO $CM* ($H3 | $H2 | $JT | $JV | $JL); - ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; - -# LB 28 -($ALPlus | $HL) $CM* ($ALPlus | $HL); - - -# LB 29 -($ALPlus | $HL) $CM* $IS; - -# LB 30 -$OP $CM* ($ALPlus | $HL | $NU); -($ALPlus | $HL | $NU) $CM* $CP; - -# LB 30a -# Pairs of Regional Indicators. -# The following two rules are nearly identical. The first matches only sequences with an odd number of adjacent RIs, -# the second with an even number. Stripping away the cruft they look like -# [^RI] RI / (RI RI)+ ^RI; -# [^RI] RI RI / (RI RI)+ ^RI; -# -# Line Loose tailoring: Don't include NSX here. -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; - -# In general, adjacent RIs stay together. The hard-break rules, above, overide this, forcing in the boundaries between pairs. -$RI $CM* $RI; - -# WJ, GL, QU, etc. are classes with rules like "WJ x " which includes "WJ x RI". -$RI $CM* ([$WJ $GL $QU $BB] | (($HY | $BA)$CM* $HL)); - - -# LB 30b Do not break between an Emoji Base and an Emoji Modifier -$EM $CM* $EB; - - -## ------------------------------------------------- - -!!safe_reverse; - -# LB 9 -^$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; -^$CM+ $SP / .; - -# LB 14 -$SP+ $CM* $OP; - -# LB 15 -$SP+ $CM* $QU; - -# LB 16 -$SP+ $CM* ($CL | $CP); - -# LB 17 -$SP+ $CM* $B2; - -# LB 21 -$CM* ($HY | $BA | $BAX) $CM* $HL; - -# LB 25 -($CM* ($IS | $SY))+ $CM* $NU; -($CL | $CP) $CM* ($NU | $IS | $SY); - -# LB 30 -($CM* $RI)+; - -# For dictionary-based break -$dictionary $dictionary; - -## ------------------------------------------------- - -!!safe_forward; - -# Skip forward over all character classes that are involved in -# rules containing patterns with possibly more than one char -# of context. -# -# It might be slightly more efficient to have specific rules -# instead of one generic one, but only if we could -# turn off rule chaining. We don't want to move more -# than necessary. -# -^[$CM $OP $QU $CL $CP $B2 $PR $PRX $HY $BA $BAX $SP $RI $ZWJ $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $PRX $HY $BA $BAX $RI $ZWJ $dictionary]; -$dictionary $dictionary; - +# LB 31 Break everywhere else. +# Match a single code point if no other rule applies. +.; diff --git a/icuSources/data/brkitr/rules/line_loose_fi.txt b/icuSources/data/brkitr/rules/line_loose_fi.txt index 73aeef83..09c80078 100644 --- a/icuSources/data/brkitr/rules/line_loose_fi.txt +++ b/icuSources/data/brkitr/rules/line_loose_fi.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2016 and later: Unicode, Inc. and others. +# Copyright (C) 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html # Copyright (c) 2002-2016 International Business Machines Corporation and # others. All Rights Reserved. @@ -7,13 +7,10 @@ # # Line Breaking Rules # Implement default line breaking as defined by -# Unicode Standard Annex #14 Revision 37 for Unicode 9.0 +# Unicode Standard Annex #14 Revision 40 for Unicode 11.0 # http://www.unicode.org/reports/tr14/ # tailored as noted in 3rd paragraph below. # -# Includes extensions to the handling of emoji ZWJ sequences from -# https://goo.gl/cluFCn -# # TODO: Rule LB 8 remains as it was in Unicode 5.2 # This is only because of a limitation of ICU break engine implementation, # not because the older behavior is desirable. @@ -28,6 +25,7 @@ # !!chain; +!!quoted_literals_only; $AI = [:LineBreak = Ambiguous:]; $AL = [:LineBreak = Alphabetic:]; @@ -76,10 +74,6 @@ $XX = [:LineBreak = Unknown:]; $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; -$EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 -$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; - # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # list it in the numerous rules that use CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM. @@ -103,8 +97,6 @@ $ALPlus = [$AL $AI $SG $XX [$SA-[[:Mn:][:Mc:]]]]; ## ------------------------------------------------- -!!forward; - # # CAN_CM is the set of characters that may combine with CM combining chars. # Note that Linebreak UAX 14's concept of a combining char and the rules @@ -152,9 +144,9 @@ $CAN_CM $CM* [$SP $ZW]; $LB8Breaks = [$LB4Breaks $ZW]; $LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) Emoji ZWJ sequences. +# LB 8a ZWJ x Do not break Emoji ZWJ sequences. # -$ZWJ ($ID | $Extended_Pict | $EmojiNRK); +$ZWJ [^$CM]; # LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL # $CM not covered by the above needs to behave like $AL @@ -334,273 +326,17 @@ $IS $CM* ($ALPlus | $HL); $CP $CM* ($ALPlus | $HL | $NU); # LB 30a Do not break between regional indicators. Break after pairs of them. -# Tricky interaction with LB8a: ZWJ x ID -$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; -$RI $CM* $RI $CM* $ZWJ / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM $ID $Extended_Pict $EmojiNRK] {eof}]; -$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; - -$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS {eof}]; -$RI $CM* $RI $CM* $ZWJ ($ID | $Extended_Pict | $EmojiNRK); +# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. +$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; +# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' +# because of the chain-out behavior difference. The rule must chain out only from the [set characters], +# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # LB 30b Do not break between an Emoji Base and an Emoji Modifier $EB $CM* $EM; -# -# Reverse Rules. -# -## ------------------------------------------------- - -!!reverse; - -# LB 9 Combining Marks. -# Stick together any combining sequences that don't match other rules. - -^$CM+ $CAN_CM?; - -# -# Sequences of the form (shown forwards) -# [CANT_CM] [CM] [whatever] -# The CM needs to behave as an AL -# -$AL_FOLLOW $CM+ / ( - [$BK $CR $LF $NL $ZW {eof}] | - $SP+ $CM+ $SP | - $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. - # LB14 says OP SP* x . - # becomes OP SP* x AL - # becomes OP SP* x CM+ AL_FOLLOW - # - # Further note: the $AL in [$AL {eof}] is only to work around - # a rule compiler bug which complains about - # empty sets otherwise. - - -# LB 4, 5, 6 - -$LB4Breaks [$LB4NonBreaks-$CM]; -$LB4Breaks $CM+ $CAN_CM; -$LF $CR; - - -# LB 7 x SP -# x ZW -[$SP $ZW] [$LB4NonBreaks-$CM]; -[$SP $ZW] $CM+ $CAN_CM; - -# LB 8 ZW SP* -# TODO: to implement this, we need more than one look-ahead hard break in play at a time. -# Requires an engine enhancement. -# / $SP* $ZW - -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) -# -($ID | $Extended_Pict | $EmojiNRK) $ZWJ $CM* $CAN_CM?; - - -# LB 9,10 Combining marks. -# X $CM needs to behave like X, where X is not $SP or controls. -# $CM not covered by the above needs to behave like $AL -# Stick together any combining sequences that don't match other rules. -^$CM+ $CAN_CM; - - -# LB 11 -# -$WJ $CM* $CAN_CM; -$WJ [$LB8NonBreaks-$CM]; - - $CANT_CM $CM* $WJ; -$CAN_CM $CM* $WJ; - -# LB 12a -# [^SP BA HY] x GL -# -$GL $CM* [$LB8NonBreaks-[$CM $SP $BA $HH $HY]]; - -# LB 12 -# GL x -# -$CANT_CM $CM* $GL; -$CAN_CM $CM* $GL; - - -# LB 13 -$CL $CM+ $CAN_CM; -$CP $CM+ $CAN_CM; -$EX $CM+ $CAN_CM; -$IS $CM+ $CAN_CM; -$SY $CM+ $CAN_CM; - -$CL [$LB8NonBreaks-$CM]; -$CP [$LB8NonBreaks-$CM]; -$EX [$LB8NonBreaks-$CM]; -$IS [$LB8NonBreaks-$CM]; -$SY [$LB8NonBreaks-$CM]; - - -# LB 14 OP SP* x -# -. $SP* $CM* $OP; -$AL_FOLLOW? $CM+ $SP+ $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP+ $CM* $OP - - -# LB 15 -$OP $SP* $CM* $QU; - -# LB 16 -# Don't include $NSX here -$NS $SP* $CM* ($CL | $CP); - -# LB 17 -$B2 $SP* $CM* $B2; - -# LB 18 break after spaces -# Nothing explicit needed here. - - -# -# LB 19 -# -$QU $CM* $CAN_CM; # . x QU -$QU $LB18NonBreaks; - - -$CAN_CM $CM* $QU; # QU x . - $CANT_CM $CM* $QU; - -# -# LB 20 Break before and after CB. -# nothing needed here. -# - -# LB 20.09 added rule for Finnish tailoring -$AL ($HY | $HH) / $SP; - -# LB 21 -# Don't include $NSX here -($BA | $HH | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) - -[$LB20NonBreaks-$CM] $CM* $BB; # BB x . -[^$CB] $CM* $BB; # - -# LB21a -[^$CB] $CM* ($HY | $BA | $HH) $CM* $HL; - -# LB21b (reverse) -$HL $CM* $SY; - -# LB 22 -$IN $CM* ($ALPlus | $HL); -$IN $CM* $EX; -$IN $CM* ($ID | $EB | $EM); -# $IN $CM* $IN; # delete this rule for CSS loose -$IN $CM* $NU; - -# LB 23 -$NU $CM* ($ALPlus | $HL); -($ALPlus | $HL) $CM* $NU; - -# LB23a -($ID | $EB | $EM) $CM* $PR; -$PO $CM* ($ID | $EB | $EM); - -# LB 24 -($ALPlus | $HL) $CM* ($PR | $PO); -($PR | $PO) $CM* ($ALPlus | $HL); - - -# LB 25 -($CM* ($PR | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; - -# LB 26 -($H3 | $H2 | $JV | $JL) $CM* $JL; -($JT | $JV) $CM* ($H2 | $JV); -$JT $CM* ($H3 | $JT); - -# LB 27 -$IN $CM* ($H3 | $H2 | $JT | $JV | $JL); -$PO $CM* ($H3 | $H2 | $JT | $JV | $JL); - ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; - -# LB 28 -($ALPlus | $HL) $CM* ($ALPlus | $HL); - - -# LB 29 -($ALPlus | $HL) $CM* $IS; - -# LB 30 -$OP $CM* ($ALPlus | $HL | $NU); -($ALPlus | $HL | $NU) $CM* $CP; - -# LB 30a -# Pairs of Regional Indicators. -# The following two rules are nearly identical. The first matches only sequences with an odd number of adjacent RIs, -# the second with an even number. Stripping away the cruft they look like -# [^RI] RI / (RI RI)+ ^RI; -# [^RI] RI RI / (RI RI)+ ^RI; -# -# Line Loose tailoring: Don't include NSX here. -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; - -# In general, adjacent RIs stay together. The hard-break rules, above, overide this, forcing in the boundaries between pairs. -$RI $CM* $RI; - -# WJ, GL, QU, etc. are classes with rules like "WJ x " which includes "WJ x RI". -$RI $CM* ([$WJ $GL $QU $BB] | (($HY | $BA)$CM* $HL)); - - -# LB 30b Do not break between an Emoji Base and an Emoji Modifier -$EM $CM* $EB; - - -## ------------------------------------------------- - -!!safe_reverse; - -# LB 9 -^$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; -^$CM+ $SP / .; - -# LB 14 -$SP+ $CM* $OP; - -# LB 15 -$SP+ $CM* $QU; - -# LB 16 -$SP+ $CM* ($CL | $CP); - -# LB 17 -$SP+ $CM* $B2; - -# LB 21 -$CM* ($HY | $BA | $HH) $CM* $HL; - -# LB 25 -($CM* ($IS | $SY))+ $CM* $NU; -($CL | $CP) $CM* ($NU | $IS | $SY); - -# LB 30 -($CM* $RI)+; - -# For dictionary-based break -$dictionary $dictionary; - -## ------------------------------------------------- - -!!safe_forward; - -# Skip forward over all character classes that are involved in -# rules containing patterns with possibly more than one char -# of context. -# -# It might be slightly more efficient to have specific rules -# instead of one generic one, but only if we could -# turn off rule chaining. We don't want to move more -# than necessary. -# -^[$CM $OP $QU $CL $CP $B2 $PR $HY $BA $SP $RI $ZWJ $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $HY $BA $RI $ZWJ $dictionary]; -$dictionary $dictionary; - +# LB 31 Break everywhere else. +# Match a single code point if no other rule applies. +.; diff --git a/icuSources/data/brkitr/rules/line_normal.txt b/icuSources/data/brkitr/rules/line_normal.txt index ee65c88a..716e9d88 100644 --- a/icuSources/data/brkitr/rules/line_normal.txt +++ b/icuSources/data/brkitr/rules/line_normal.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2016 and later: Unicode, Inc. and others. +# Copyright (C) 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html # Copyright (c) 2002-2016 International Business Machines Corporation and # others. All Rights Reserved. @@ -7,12 +7,9 @@ # # Line Breaking Rules # Implement default line breaking as defined by -# Unicode Standard Annex #14 Revision 37 for Unicode 9.0 +# Unicode Standard Annex #14 Revision 40 for Unicode 11.0 # http://www.unicode.org/reports/tr14/ # -# Includes extensions to the handling of emoji ZWJ sequences from -# https://goo.gl/cluFCn -# # tailored as noted in 2nd paragraph below. # # TODO: Rule LB 8 remains as it was in Unicode 5.2 @@ -29,6 +26,7 @@ # !!chain; +!!quoted_literals_only; $AI = [:LineBreak = Ambiguous:]; $AL = [:LineBreak = Alphabetic:]; @@ -75,10 +73,6 @@ $XX = [:LineBreak = Unknown:]; $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; -$EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 -$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; - # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # list it in the numerous rules that use CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM. @@ -102,8 +96,6 @@ $ALPlus = [$AL $AI $SG $XX [$SA-[[:Mn:][:Mc:]]]]; ## ------------------------------------------------- -!!forward; - # # CAN_CM is the set of characters that may combine with CM combining chars. # Note that Linebreak UAX 14's concept of a combining char and the rules @@ -151,9 +143,9 @@ $CAN_CM $CM* [$SP $ZW]; $LB8Breaks = [$LB4Breaks $ZW]; $LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) Emoji ZWJ sequences. +# LB 8a ZWJ x Do not break Emoji ZWJ sequences. # -$ZWJ ($ID | $Extended_Pict | $EmojiNRK); +$ZWJ [^$CM]; # LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL # $CM not covered by the above needs to behave like $AL @@ -327,267 +319,17 @@ $IS $CM* ($ALPlus | $HL); $CP $CM* ($ALPlus | $HL | $NU); # LB 30a Do not break between regional indicators. Break after pairs of them. -# Tricky interaction with LB8a: ZWJ x ID -$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; -$RI $CM* $RI $CM* $ZWJ / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM $ID $Extended_Pict $EmojiNRK] {eof}]; -$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; - -$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS {eof}]; -$RI $CM* $RI $CM* $ZWJ ($ID | $Extended_Pict | $EmojiNRK); +# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. +$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; +# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' +# because of the chain-out behavior difference. The rule must chain out only from the [set characters], +# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # LB 30b Do not break between an Emoji Base and an Emoji Modifier $EB $CM* $EM; -# -# Reverse Rules. -# -## ------------------------------------------------- - -!!reverse; - -# LB 9 Combining Marks. -# Stick together any combining sequences that don't match other rules. - -^$CM+ $CAN_CM?; - -# -# Sequences of the form (shown forwards) -# [CANT_CM] [CM] [whatever] -# The CM needs to behave as an AL -# -$AL_FOLLOW $CM+ / ( - [$BK $CR $LF $NL $ZW {eof}] | - $SP+ $CM+ $SP | - $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. - # LB14 says OP SP* x . - # becomes OP SP* x AL - # becomes OP SP* x CM+ AL_FOLLOW - # - # Further note: the $AL in [$AL {eof}] is only to work around - # a rule compiler bug which complains about - # empty sets otherwise. - - -# LB 4, 5, 6 - -$LB4Breaks [$LB4NonBreaks-$CM]; -$LB4Breaks $CM+ $CAN_CM; -$LF $CR; - - -# LB 7 x SP -# x ZW -[$SP $ZW] [$LB4NonBreaks-$CM]; -[$SP $ZW] $CM+ $CAN_CM; - -# LB 8 ZW SP* -# TODO: to implement this, we need more than one look-ahead hard break in play at a time. -# Requires an engine enhancement. -# / $SP* $ZW - -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) -# -($ID | $Extended_Pict | $EmojiNRK) $ZWJ $CM* $CAN_CM?; - - -# LB 9,10 Combining marks. -# X $CM needs to behave like X, where X is not $SP or controls. -# $CM not covered by the above needs to behave like $AL -# Stick together any combining sequences that don't match other rules. -^$CM+ $CAN_CM; - - -# LB 11 -# -$WJ $CM* $CAN_CM; -$WJ [$LB8NonBreaks-$CM]; - - $CANT_CM $CM* $WJ; -$CAN_CM $CM* $WJ; - -# LB 12a -# [^SP BA HY] x GL -# -$GL $CM* [$LB8NonBreaks-[$CM $SP $BA $HY]]; - -# LB 12 -# GL x -# -$CANT_CM $CM* $GL; -$CAN_CM $CM* $GL; - - -# LB 13 -$CL $CM+ $CAN_CM; -$CP $CM+ $CAN_CM; -$EX $CM+ $CAN_CM; -$IS $CM+ $CAN_CM; -$SY $CM+ $CAN_CM; - -$CL [$LB8NonBreaks-$CM]; -$CP [$LB8NonBreaks-$CM]; -$EX [$LB8NonBreaks-$CM]; -$IS [$LB8NonBreaks-$CM]; -$SY [$LB8NonBreaks-$CM]; - - -# LB 14 OP SP* x -# -. $SP* $CM* $OP; -$AL_FOLLOW? $CM+ $SP+ $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP+ $CM* $OP - - -# LB 15 -$OP $SP* $CM* $QU; - -# LB 16 -$NS $SP* $CM* ($CL | $CP); - -# LB 17 -$B2 $SP* $CM* $B2; - -# LB 18 break after spaces -# Nothing explicit needed here. - - -# -# LB 19 -# -$QU $CM* $CAN_CM; # . x QU -$QU $LB18NonBreaks; - - -$CAN_CM $CM* $QU; # QU x . - $CANT_CM $CM* $QU; - -# -# LB 20 Break before and after CB. -# nothing needed here. -# - -# LB 21 -($BA | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) - -[$LB20NonBreaks-$CM] $CM* $BB; # BB x . -[^$CB] $CM* $BB; # - -# LB21a -[^$CB] $CM* ($HY | $BA) $CM* $HL; - -# LB21b (reverse) -$HL $CM* $SY; - -# LB 22 -$IN $CM* ($ALPlus | $HL); -$IN $CM* $EX; -$IN $CM* ($ID | $EB | $EM); -$IN $CM* $IN; -$IN $CM* $NU; - -# LB 23 -$NU $CM* ($ALPlus | $HL); -($ALPlus | $HL) $CM* $NU; - -# LB23a -($ID | $EB | $EM) $CM* $PR; -$PO $CM* ($ID | $EB | $EM); - -# LB 24 -($ALPlus | $HL) $CM* ($PR | $PO); -($PR | $PO) $CM* ($ALPlus | $HL); - - -# LB 25 -($CM* ($PR | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; - -# LB 26 -($H3 | $H2 | $JV | $JL) $CM* $JL; -($JT | $JV) $CM* ($H2 | $JV); -$JT $CM* ($H3 | $JT); - -# LB 27 -$IN $CM* ($H3 | $H2 | $JT | $JV | $JL); -$PO $CM* ($H3 | $H2 | $JT | $JV | $JL); - ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; - -# LB 28 -($ALPlus | $HL) $CM* ($ALPlus | $HL); - - -# LB 29 -($ALPlus | $HL) $CM* $IS; - -# LB 30 -$OP $CM* ($ALPlus | $HL | $NU); -($ALPlus | $HL | $NU) $CM* $CP; - -# LB 30a -# Pairs of Regional Indicators. -# The following two rules are nearly identical. The first matches only sequences with an odd number of adjacent RIs, -# the second with an even number. Stripping away the cruft they look like -# [^RI] RI / (RI RI)+ ^RI; -# [^RI] RI RI / (RI RI)+ ^RI; -# -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; - -# In general, adjacent RIs stay together. The hard-break rules, above, overide this, forcing in the boundaries between pairs. -$RI $CM* $RI; - -# WJ, GL, QU, etc. are classes with rules like "WJ x " which includes "WJ x RI". -$RI $CM* ([$WJ $GL $QU $BB] | (($HY | $BA)$CM* $HL)); - - -# LB 30b Do not break between an Emoji Base and an Emoji Modifier -$EM $CM* $EB; - - -## ------------------------------------------------- - -!!safe_reverse; - -# LB 9 -^$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; -^$CM+ $SP / .; - -# LB 14 -$SP+ $CM* $OP; - -# LB 15 -$SP+ $CM* $QU; - -# LB 16 -$SP+ $CM* ($CL | $CP); - -# LB 17 -$SP+ $CM* $B2; - -# LB 21 -$CM* ($HY | $BA) $CM* $HL; - -# LB 25 -($CM* ($IS | $SY))+ $CM* $NU; -($CL | $CP) $CM* ($NU | $IS | $SY); - -# LB 30 -($CM* $RI)+; - -# For dictionary-based break -$dictionary $dictionary; - -## ------------------------------------------------- - -!!safe_forward; - -# Skip forward over all character classes that are involved in -# rules containing patterns with possibly more than one char -# of context. -# -# It might be slightly more efficient to have specific rules -# instead of one generic one, but only if we could -# turn off rule chaining. We don't want to move more -# than necessary. -# -^[$CM $OP $QU $CL $CP $B2 $PR $HY $BA $SP $RI $ZWJ $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $HY $BA $RI $ZWJ $dictionary]; -$dictionary $dictionary; - +# LB 31 Break everywhere else. +# Match a single code point if no other rule applies. +.; diff --git a/icuSources/data/brkitr/rules/line_normal_cj.txt b/icuSources/data/brkitr/rules/line_normal_cj.txt index 376f8a1b..a3d27463 100644 --- a/icuSources/data/brkitr/rules/line_normal_cj.txt +++ b/icuSources/data/brkitr/rules/line_normal_cj.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2016 and later: Unicode, Inc. and others. +# Copyright (C) 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html # Copyright (c) 2002-2016 International Business Machines Corporation and # others. All Rights Reserved. @@ -7,12 +7,9 @@ # # Line Breaking Rules # Implement default line breaking as defined by -# Unicode Standard Annex #14 Revision 37 for Unicode 9.0 +# Unicode Standard Annex #14 Revision 40 for Unicode 11.0 # http://www.unicode.org/reports/tr14/ # -# Includes extensions to the handling of emoji ZWJ sequences from -# https://goo.gl/cluFCn -# # tailored as noted in 2nd paragraph below. # # TODO: Rule LB 8 remains as it was in Unicode 5.2 @@ -30,6 +27,7 @@ # !!chain; +!!quoted_literals_only; $AI = [:LineBreak = Ambiguous:]; $AL = [:LineBreak = Alphabetic:]; @@ -78,10 +76,6 @@ $XX = [:LineBreak = Unknown:]; $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; -$EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 -$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; - # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # list it in the numerous rules that use CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM. @@ -105,8 +99,6 @@ $ALPlus = [$AL $AI $SG $XX [$SA-[[:Mn:][:Mc:]]]]; ## ------------------------------------------------- -!!forward; - # # CAN_CM is the set of characters that may combine with CM combining chars. # Note that Linebreak UAX 14's concept of a combining char and the rules @@ -154,9 +146,9 @@ $CAN_CM $CM* [$SP $ZW]; $LB8Breaks = [$LB4Breaks $ZW]; $LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) Emoji ZWJ sequences. +# LB 8a ZWJ x Do not break Emoji ZWJ sequences. # -$ZWJ ($ID | $Extended_Pict | $EmojiNRK); +$ZWJ [^$CM]; # LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL # $CM not covered by the above needs to behave like $AL @@ -333,269 +325,17 @@ $IS $CM* ($ALPlus | $HL); $CP $CM* ($ALPlus | $HL | $NU); # LB 30a Do not break between regional indicators. Break after pairs of them. -# Tricky interaction with LB8a: ZWJ x ID -$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; -$RI $CM* $RI $CM* $ZWJ / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM $ID $Extended_Pict $EmojiNRK] {eof}]; -$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; - -$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS {eof}]; -$RI $CM* $RI $CM* $ZWJ ($ID | $Extended_Pict | $EmojiNRK); +# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. +$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; +# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' +# because of the chain-out behavior difference. The rule must chain out only from the [set characters], +# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # LB 30b Do not break between an Emoji Base and an Emoji Modifier $EB $CM* $EM; -# -# Reverse Rules. -# -## ------------------------------------------------- - -!!reverse; - -# LB 9 Combining Marks. -# Stick together any combining sequences that don't match other rules. - -^$CM+ $CAN_CM?; - -# -# Sequences of the form (shown forwards) -# [CANT_CM] [CM] [whatever] -# The CM needs to behave as an AL -# -$AL_FOLLOW $CM+ / ( - [$BK $CR $LF $NL $ZW {eof}] | - $SP+ $CM+ $SP | - $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. - # LB14 says OP SP* x . - # becomes OP SP* x AL - # becomes OP SP* x CM+ AL_FOLLOW - # - # Further note: the $AL in [$AL {eof}] is only to work around - # a rule compiler bug which complains about - # empty sets otherwise. - - -# LB 4, 5, 6 - -$LB4Breaks [$LB4NonBreaks-$CM]; -$LB4Breaks $CM+ $CAN_CM; -$LF $CR; - - -# LB 7 x SP -# x ZW -[$SP $ZW] [$LB4NonBreaks-$CM]; -[$SP $ZW] $CM+ $CAN_CM; - -# LB 8 ZW SP* -# TODO: to implement this, we need more than one look-ahead hard break in play at a time. -# Requires an engine enhancement. -# / $SP* $ZW - -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) -# -($ID | $Extended_Pict | $EmojiNRK) $ZWJ $CM* $CAN_CM?; - - -# LB 9,10 Combining marks. -# X $CM needs to behave like X, where X is not $SP or controls. -# $CM not covered by the above needs to behave like $AL -# Stick together any combining sequences that don't match other rules. -^$CM+ $CAN_CM; - - -# LB 11 -# -$WJ $CM* $CAN_CM; -$WJ [$LB8NonBreaks-$CM]; - - $CANT_CM $CM* $WJ; -$CAN_CM $CM* $WJ; - -# LB 12a -# [^SP BA HY] x GL -# -$GL $CM* [$LB8NonBreaks-[$CM $SP $BA $BAX $HY]]; - -# LB 12 -# GL x -# -$CANT_CM $CM* $GL; -$CAN_CM $CM* $GL; - - -# LB 13 -$CL $CM+ $CAN_CM; -$CP $CM+ $CAN_CM; -$EX $CM+ $CAN_CM; -$IS $CM+ $CAN_CM; -$SY $CM+ $CAN_CM; - -$CL [$LB8NonBreaks-$CM]; -$CP [$LB8NonBreaks-$CM]; -$EX [$LB8NonBreaks-$CM]; -$IS [$LB8NonBreaks-$CM]; -$SY [$LB8NonBreaks-$CM]; - - -# LB 14 OP SP* x -# -. $SP* $CM* $OP; -$AL_FOLLOW? $CM+ $SP+ $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP+ $CM* $OP - - -# LB 15 -$OP $SP* $CM* $QU; - -# LB 16 -# Don't include $NSX here -$NS $SP* $CM* ($CL | $CP); - -# LB 17 -$B2 $SP* $CM* $B2; - -# LB 18 break after spaces -# Nothing explicit needed here. - - -# -# LB 19 -# -$QU $CM* $CAN_CM; # . x QU -$QU $LB18NonBreaks; - - -$CAN_CM $CM* $QU; # QU x . - $CANT_CM $CM* $QU; - -# -# LB 20 Break before and after CB. -# nothing needed here. -# - -# LB 21 -# Don't include $BAX or $NSX here -($BA | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) - -[$LB20NonBreaks-$CM] $CM* $BB; # BB x . -[^$CB] $CM* $BB; # - -# LB21a Don't break after Hebrew + Hyphen. -([^$CB] $CM*)? ($HY | $BA | $BAX) $CM* $HL; - -# LB21b (reverse) -$HL $CM* $SY; - -# LB 22 -$IN $CM* ($ALPlus | $HL); -$IN $CM* $EX; -$IN $CM* ($ID | $EB | $EM); -$IN $CM* $IN; -$IN $CM* $NU; - -# LB 23 -$NU $CM* ($ALPlus | $HL); -($ALPlus | $HL) $CM* $NU; - -# LB23a -($ID | $EB | $EM) $CM* $PR; -$PO $CM* ($ID | $EB | $EM); - -# LB 24 -($ALPlus | $HL) $CM* ($PR | $PO); -($PR | $PO) $CM* ($ALPlus | $HL); - - -# LB 25 -($CM* ($PR | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; - -# LB 26 -($H3 | $H2 | $JV | $JL) $CM* $JL; -($JT | $JV) $CM* ($H2 | $JV); -$JT $CM* ($H3 | $JT); - -# LB 27 -$IN $CM* ($H3 | $H2 | $JT | $JV | $JL); -$PO $CM* ($H3 | $H2 | $JT | $JV | $JL); - ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; - -# LB 28 -($ALPlus | $HL) $CM* ($ALPlus | $HL); - - -# LB 29 -($ALPlus | $HL) $CM* $IS; - -# LB 30 -$OP $CM* ($ALPlus | $HL | $NU); -($ALPlus | $HL | $NU) $CM* $CP; - -# LB 30a -# Pairs of Regional Indicators. -# The following two rules are nearly identical. The first matches only sequences with an odd number of adjacent RIs, -# the second with an even number. Stripping away the cruft they look like -# [^RI] RI / (RI RI)+ ^RI; -# [^RI] RI RI / (RI RI)+ ^RI; -# -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; - -# In general, adjacent RIs stay together. The hard-break rules, above, overide this, forcing in the boundaries between pairs. -$RI $CM* $RI; - -# WJ, GL, QU, etc. are classes with rules like "WJ x " which includes "WJ x RI". -$RI $CM* ([$WJ $GL $QU $BB] | (($HY | $BA)$CM* $HL)); - - -# LB 30b Do not break between an Emoji Base and an Emoji Modifier -$EM $CM* $EB; - - -## ------------------------------------------------- - -!!safe_reverse; - -# LB 9 -^$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; -^$CM+ $SP / .; - -# LB 14 -$SP+ $CM* $OP; - -# LB 15 -$SP+ $CM* $QU; - -# LB 16 -$SP+ $CM* ($CL | $CP); - -# LB 17 -$SP+ $CM* $B2; - -# LB 21 -$CM* ($HY | $BA | $BAX) $CM* $HL; - -# LB 25 -($CM* ($IS | $SY))+ $CM* $NU; -($CL | $CP) $CM* ($NU | $IS | $SY); - -# LB 30 -($CM* $RI)+; - -# For dictionary-based break -$dictionary $dictionary; - -## ------------------------------------------------- - -!!safe_forward; - -# Skip forward over all character classes that are involved in -# rules containing patterns with possibly more than one char -# of context. -# -# It might be slightly more efficient to have specific rules -# instead of one generic one, but only if we could -# turn off rule chaining. We don't want to move more -# than necessary. -# -^[$CM $OP $QU $CL $CP $B2 $PR $HY $BA $BAX $SP $RI $ZWJ $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $HY $BA $BAX $RI $ZWJ $dictionary]; -$dictionary $dictionary; - +# LB 31 Break everywhere else. +# Match a single code point if no other rule applies. +.; diff --git a/icuSources/data/brkitr/rules/line_normal_fi.txt b/icuSources/data/brkitr/rules/line_normal_fi.txt index e6f3bd6e..5189dbb2 100644 --- a/icuSources/data/brkitr/rules/line_normal_fi.txt +++ b/icuSources/data/brkitr/rules/line_normal_fi.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2016 and later: Unicode, Inc. and others. +# Copyright (C) 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html # Copyright (c) 2002-2016 International Business Machines Corporation and # others. All Rights Reserved. @@ -7,13 +7,10 @@ # # Line Breaking Rules # Implement default line breaking as defined by -# Unicode Standard Annex #14 Revision 37 for Unicode 9.0 +# Unicode Standard Annex #14 Revision 40 for Unicode 11.0 # http://www.unicode.org/reports/tr14/ # tailored as noted in 3rd paragraph below. # -# Includes extensions to the handling of emoji ZWJ sequences from -# https://goo.gl/cluFCn -# # TODO: Rule LB 8 remains as it was in Unicode 5.2 # This is only because of a limitation of ICU break engine implementation, # not because the older behavior is desirable. @@ -28,6 +25,7 @@ # !!chain; +!!quoted_literals_only; $AI = [:LineBreak = Ambiguous:]; $AL = [:LineBreak = Alphabetic:]; @@ -75,10 +73,6 @@ $XX = [:LineBreak = Unknown:]; $ZW = [:LineBreak = ZWSpace:]; $ZWJ = [:LineBreak = ZWJ:]; -$EmojiNRK = [[\p{Emoji}] - [$RI \u002a\u00230-9©®™〰〽]]; -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 -$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; - # By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly # list it in the numerous rules that use CM. # By LB1, SA characters with general categor of Mn or Mc also resolve to CM. @@ -102,8 +96,6 @@ $ALPlus = [$AL $AI $SG $XX [$SA-[[:Mn:][:Mc:]]]]; ## ------------------------------------------------- -!!forward; - # # CAN_CM is the set of characters that may combine with CM combining chars. # Note that Linebreak UAX 14's concept of a combining char and the rules @@ -151,9 +143,9 @@ $CAN_CM $CM* [$SP $ZW]; $LB8Breaks = [$LB4Breaks $ZW]; $LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]]; -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) Emoji ZWJ sequences. +# LB 8a ZWJ x Do not break Emoji ZWJ sequences. # -$ZWJ ($ID | $Extended_Pict | $EmojiNRK); +$ZWJ [^$CM]; # LB 9 Combining marks. X $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL # $CM not covered by the above needs to behave like $AL @@ -330,270 +322,17 @@ $IS $CM* ($ALPlus | $HL); $CP $CM* ($ALPlus | $HL | $NU); # LB 30a Do not break between regional indicators. Break after pairs of them. -# Tricky interaction with LB8a: ZWJ x ID -$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; -$RI $CM* $RI $CM* $ZWJ / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM $ID $Extended_Pict $EmojiNRK] {eof}]; -$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM] {eof}]; - -$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS {eof}]; -$RI $CM* $RI $CM* $ZWJ ($ID | $Extended_Pict | $EmojiNRK); +# Tricky interaction with LB8a: ZWJ x . together with ZWJ acting like a CM. +$RI $CM* $RI / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]]; +$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}]; +# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?' +# because of the chain-out behavior difference. The rule must chain out only from the [set characters], +# not from the preceding $RI or $CM, which it would be able to do if the set were optional. # LB 30b Do not break between an Emoji Base and an Emoji Modifier $EB $CM* $EM; -# -# Reverse Rules. -# -## ------------------------------------------------- - -!!reverse; - -# LB 9 Combining Marks. -# Stick together any combining sequences that don't match other rules. - -^$CM+ $CAN_CM?; - -# -# Sequences of the form (shown forwards) -# [CANT_CM] [CM] [whatever] -# The CM needs to behave as an AL -# -$AL_FOLLOW $CM+ / ( - [$BK $CR $LF $NL $ZW {eof}] | - $SP+ $CM+ $SP | - $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}])); # if LB 14 will match, need to surpress this break. - # LB14 says OP SP* x . - # becomes OP SP* x AL - # becomes OP SP* x CM+ AL_FOLLOW - # - # Further note: the $AL in [$AL {eof}] is only to work around - # a rule compiler bug which complains about - # empty sets otherwise. - - -# LB 4, 5, 6 - -$LB4Breaks [$LB4NonBreaks-$CM]; -$LB4Breaks $CM+ $CAN_CM; -$LF $CR; - - -# LB 7 x SP -# x ZW -[$SP $ZW] [$LB4NonBreaks-$CM]; -[$SP $ZW] $CM+ $CAN_CM; - -# LB 8 ZW SP* -# TODO: to implement this, we need more than one look-ahead hard break in play at a time. -# Requires an engine enhancement. -# / $SP* $ZW - -# LB 8a ZWJ x (ID | Extended_Pict | EmojiNRK) -# -($ID | $Extended_Pict | $EmojiNRK) $ZWJ $CM* $CAN_CM?; - - -# LB 9,10 Combining marks. -# X $CM needs to behave like X, where X is not $SP or controls. -# $CM not covered by the above needs to behave like $AL -# Stick together any combining sequences that don't match other rules. -^$CM+ $CAN_CM; - - -# LB 11 -# -$WJ $CM* $CAN_CM; -$WJ [$LB8NonBreaks-$CM]; - - $CANT_CM $CM* $WJ; -$CAN_CM $CM* $WJ; - -# LB 12a -# [^SP BA HY] x GL -# -$GL $CM* [$LB8NonBreaks-[$CM $SP $BA $HH $HY]]; - -# LB 12 -# GL x -# -$CANT_CM $CM* $GL; -$CAN_CM $CM* $GL; - - -# LB 13 -$CL $CM+ $CAN_CM; -$CP $CM+ $CAN_CM; -$EX $CM+ $CAN_CM; -$IS $CM+ $CAN_CM; -$SY $CM+ $CAN_CM; - -$CL [$LB8NonBreaks-$CM]; -$CP [$LB8NonBreaks-$CM]; -$EX [$LB8NonBreaks-$CM]; -$IS [$LB8NonBreaks-$CM]; -$SY [$LB8NonBreaks-$CM]; - - -# LB 14 OP SP* x -# -. $SP* $CM* $OP; -$AL_FOLLOW? $CM+ $SP+ $CM* $OP; # by LB 10, behaves like $AL_FOLLOW? $AL $SP+ $CM* $OP - - -# LB 15 -$OP $SP* $CM* $QU; - -# LB 16 -$NS $SP* $CM* ($CL | $CP); - -# LB 17 -$B2 $SP* $CM* $B2; - -# LB 18 break after spaces -# Nothing explicit needed here. - - -# -# LB 19 -# -$QU $CM* $CAN_CM; # . x QU -$QU $LB18NonBreaks; - - -$CAN_CM $CM* $QU; # QU x . - $CANT_CM $CM* $QU; - -# -# LB 20 Break before and after CB. -# nothing needed here. -# - -# LB 20.09 added rule for Finnish tailoring -$AL ($HY | $HH) / $SP; - -# LB 21 -($BA | $HH | $HY | $NS) $CM* [$LB20NonBreaks-$CM]; # . x (BA | HY | NS) - -[$LB20NonBreaks-$CM] $CM* $BB; # BB x . -[^$CB] $CM* $BB; # - -# LB21a -[^$CB] $CM* ($HY | $BA | $HH) $CM* $HL; - -# LB21b (reverse) -$HL $CM* $SY; - -# LB 22 -$IN $CM* ($ALPlus | $HL); -$IN $CM* $EX; -$IN $CM* ($ID | $EB | $EM); -$IN $CM* $IN; -$IN $CM* $NU; - -# LB 23 -$NU $CM* ($ALPlus | $HL); -($ALPlus | $HL) $CM* $NU; - -# LB23a -($ID | $EB | $EM) $CM* $PR; -$PO $CM* ($ID | $EB | $EM); - -# LB 24 -($ALPlus | $HL) $CM* ($PR | $PO); -($PR | $PO) $CM* ($ALPlus | $HL); - - -# LB 25 -($CM* ($PR | $PO))? ($CM* ($CL | $CP))? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP | $HY))? ($CM* ($PR | $PO))?; - -# LB 26 -($H3 | $H2 | $JV | $JL) $CM* $JL; -($JT | $JV) $CM* ($H2 | $JV); -$JT $CM* ($H3 | $JT); - -# LB 27 -$IN $CM* ($H3 | $H2 | $JT | $JV | $JL); -$PO $CM* ($H3 | $H2 | $JT | $JV | $JL); - ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR; - -# LB 28 -($ALPlus | $HL) $CM* ($ALPlus | $HL); - - -# LB 29 -($ALPlus | $HL) $CM* $IS; - -# LB 30 -$OP $CM* ($ALPlus | $HL | $NU); -($ALPlus | $HL | $NU) $CM* $CP; - -# LB 30a -# Pairs of Regional Indicators. -# The following two rules are nearly identical. The first matches only sequences with an odd number of adjacent RIs, -# the second with an even number. Stripping away the cruft they look like -# [^RI] RI / (RI RI)+ ^RI; -# [^RI] RI RI / (RI RI)+ ^RI; -# -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; -[{bof} $NS $HY $BA $QU $CL $CP $EX $IS $SY $WJ $GL $ZW $SP $BK $CR $LF $NL $ZWJ] $CM* $RI $CM* $RI / ($CM* $RI $CM* $RI)+ $CM* [{eof}[^$RI $CM]]; - -# In general, adjacent RIs stay together. The hard-break rules, above, overide this, forcing in the boundaries between pairs. -$RI $CM* $RI; - -# WJ, GL, QU, etc. are classes with rules like "WJ x " which includes "WJ x RI". -$RI $CM* ([$WJ $GL $QU $BB] | (($HY | $BA)$CM* $HL)); - - -# LB 30b Do not break between an Emoji Base and an Emoji Modifier -$EM $CM* $EB; - - -## ------------------------------------------------- - -!!safe_reverse; - -# LB 9 -^$CM+ [^$CM $BK $CR $LF $NL $ZW $SP]; -^$CM+ $SP / .; - -# LB 14 -$SP+ $CM* $OP; - -# LB 15 -$SP+ $CM* $QU; - -# LB 16 -$SP+ $CM* ($CL | $CP); - -# LB 17 -$SP+ $CM* $B2; - -# LB 21 -$CM* ($HY | $BA | $HH) $CM* $HL; - -# LB 25 -($CM* ($IS | $SY))+ $CM* $NU; -($CL | $CP) $CM* ($NU | $IS | $SY); - -# LB 30 -($CM* $RI)+; - -# For dictionary-based break -$dictionary $dictionary; - -## ------------------------------------------------- - -!!safe_forward; - -# Skip forward over all character classes that are involved in -# rules containing patterns with possibly more than one char -# of context. -# -# It might be slightly more efficient to have specific rules -# instead of one generic one, but only if we could -# turn off rule chaining. We don't want to move more -# than necessary. -# -^[$CM $OP $QU $CL $CP $B2 $PR $HY $BA $SP $RI $ZWJ $dictionary]+ [^$CM $OP $QU $CL $CP $B2 $PR $HY $BA $RI $ZWJ $dictionary]; -$dictionary $dictionary; - +# LB 31 Break everywhere else. +# Match a single code point if no other rule applies. +.; diff --git a/icuSources/data/brkitr/rules/sent.txt b/icuSources/data/brkitr/rules/sent.txt index 49970ee3..41fd3fcf 100644 --- a/icuSources/data/brkitr/rules/sent.txt +++ b/icuSources/data/brkitr/rules/sent.txt @@ -1,6 +1,5 @@ -# -# Copyright (C) 2016 and later: Unicode, Inc. and others. -# License & terms of use: http://www.unicode.org/copyright.html#License +# Copyright (C) 2016 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html # # Copyright (C) 2002-2015, International Business Machines Corporation and others. # All Rights Reserved. @@ -12,6 +11,7 @@ # These rules are based on UAX #29 Revision 26 for Unicode Version 8.0 # +!!quoted_literals_only; # # Character categories as defined in TR 29 @@ -50,7 +50,6 @@ $CloseEx = $Close ($Extend | $Format)*; ## ------------------------------------------------- !!chain; -!!forward; # Rule 3 - break after separators. Keep CR/LF together. # @@ -82,41 +81,3 @@ $ATermEx $CloseEx* $SpEx* $NotLettersEx* $Lower; #Rule 12 [[^$STerm $ATerm $Close $Sp $Sep $LF $CR $Format $Extend]{bof}] ($Extend | $Format | $Close | $Sp)* .; [[^$STerm $ATerm $Close $Sp $Sep $LF $CR $Format $Extend]{bof}] ($Extend | $Format | $Close | $Sp)* ([$Sep $LF $CR {eof}] | $CR $LF){100}; - -## ------------------------------------------------- - -!!reverse; - -$SpEx_R = ($Extend | $Format)* $Sp; -$ATermEx_R = ($Extend | $Format)* $ATerm; -$STermEx_R = ($Extend | $Format)* $STerm; -$CloseEx_R = ($Extend | $Format)* $Close; - -# -# Reverse rules. -# For now, use the old style inexact reverse rules, which are easier -# to write, but less efficient. -# TODO: exact reverse rules. It appears that exact reverse rules -# may require improving support for look-ahead breaks in the -# builder. Needs more investigation. -# - -[{bof}] (.? | $LF $CR) [^$Sep $CR $LF]* [$Sep $CR $LF {eof}] ($SpEx_R* $CloseEx_R* ($STermEx_R | $ATermEx_R))*; -#.*; - -# Explanation for this rule: -# -# It needs to back over -# The $Sep at which we probably begin -# All of the non $Sep chars leading to the preceding $Sep -# The preceding $Sep, which will be the second one that the rule matches. -# Any immediately preceding STerm or ATerm sequences. We need to see these -# to get the correct rule status when moving forwards again. -# -# [{bof}] inhibit rule chaining. Without this, rule would loop on itself and match -# the entire string. -# -# (.? | $LF $CR) Match one $Sep instance. Use .? rather than $Sep because position might be -# at the beginning of the string at this point, and we don't want to fail. -# Can only use {eof} once, and it is used later. -# diff --git a/icuSources/data/brkitr/rules/sent_el.txt b/icuSources/data/brkitr/rules/sent_el.txt index 7a0c9840..07969825 100644 --- a/icuSources/data/brkitr/rules/sent_el.txt +++ b/icuSources/data/brkitr/rules/sent_el.txt @@ -1,6 +1,6 @@ +# Copyright (C) 2016 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html # -# Copyright (C) 2016 and later: Unicode, Inc. and others. -# License & terms of use: http://www.unicode.org/copyright.html#License # # Copyright (C) 2002-2015, International Business Machines Corporation and others. # All Rights Reserved. @@ -12,6 +12,7 @@ # These rules are based on UAX #29 Revision 26 for Unicode Version 8.0 # +!!quoted_literals_only; # # Character categories as defined in TR 29 @@ -50,7 +51,6 @@ $CloseEx = $Close ($Extend | $Format)*; ## ------------------------------------------------- !!chain; -!!forward; # Rule 3 - break after separators. Keep CR/LF together. # @@ -82,41 +82,3 @@ $ATermEx $CloseEx* $SpEx* $NotLettersEx* $Lower; #Rule 12 [[^$STerm $ATerm $Close $Sp $Sep $LF $CR $Format $Extend]{bof}] ($Extend | $Format | $Close | $Sp)* .; [[^$STerm $ATerm $Close $Sp $Sep $LF $CR $Format $Extend]{bof}] ($Extend | $Format | $Close | $Sp)* ([$Sep $LF $CR {eof}] | $CR $LF){100}; - -## ------------------------------------------------- - -!!reverse; - -$SpEx_R = ($Extend | $Format)* $Sp; -$ATermEx_R = ($Extend | $Format)* $ATerm; -$STermEx_R = ($Extend | $Format)* $STerm; -$CloseEx_R = ($Extend | $Format)* $Close; - -# -# Reverse rules. -# For now, use the old style inexact reverse rules, which are easier -# to write, but less efficient. -# TODO: exact reverse rules. It appears that exact reverse rules -# may require improving support for look-ahead breaks in the -# builder. Needs more investigation. -# - -[{bof}] (.? | $LF $CR) [^$Sep $CR $LF]* [$Sep $CR $LF {eof}] ($SpEx_R* $CloseEx_R* ($STermEx_R | $ATermEx_R))*; -#.*; - -# Explanation for this rule: -# -# It needs to back over -# The $Sep at which we probably begin -# All of the non $Sep chars leading to the preceding $Sep -# The preceding $Sep, which will be the second one that the rule matches. -# Any immediately preceding STerm or ATerm sequences. We need to see these -# to get the correct rule status when moving forwards again. -# -# [{bof}] inhibit rule chaining. Without this, rule would loop on itself and match -# the entire string. -# -# (.? | $LF $CR) Match one $Sep instance. Use .? rather than $Sep because position might be -# at the beginning of the string at this point, and we don't want to fail. -# Can only use {eof} once, and it is used later. -# diff --git a/icuSources/data/brkitr/rules/title.txt b/icuSources/data/brkitr/rules/title.txt index a21cb496..3be2d309 100644 --- a/icuSources/data/brkitr/rules/title.txt +++ b/icuSources/data/brkitr/rules/title.txt @@ -1,5 +1,5 @@ # Copyright (C) 2016 and later: Unicode, Inc. and others. -# License & terms of use: http://www.unicode.org/copyright.html#License +# License & terms of use: http://www.unicode.org/copyright.html # # Copyright (c) 2002-2015, International Business Machines Corporation and # others. All Rights Reserved. @@ -7,13 +7,12 @@ # Title Casing Break Rules # +!!quoted_literals_only; $CaseIgnorable = [[:Mn:][:Me:][:Cf:][:Lm:][:Sk:] \u0027 \u00AD \u2019]; $Cased = [[:Upper_Case:][:Lower_Case:][:Lt:] - $CaseIgnorable]; $NotCased = [[^ $Cased] - $CaseIgnorable]; -!!forward; - # If the iterator begins on a CaseIgnorable, advance it past it/them. # This can occur at the start-of-text, or after application of the # safe-reverse rule. @@ -25,32 +24,3 @@ $NotCased = [[^ $Cased] - $CaseIgnorable]; # the uncased characters following the word. $Cased ($Cased | $CaseIgnorable)* ($NotCased | $CaseIgnorable)*; - - -# Reverse Rules -!!reverse; - -# Normal Rule, will work nearly universally, so long as there is a -# start-of-word preceding the current iteration position. - -($NotCased | $CaseIgnorable)* ($Cased | $CaseIgnorable)* $Cased; - -# Short rule, will be effective only when moving to the start of text, -# with no word (cased character) preceding the current iteration position. - -($NotCased | $CaseIgnorable)*; - -!!safe_reverse; - -# Safe Reverse: the exact forward rule must not start in the middle -# of a word, so the safe reverse skips over any Cased characters, -# leaving it just before the start of a word. - -($Cased | $CaseIgnorable)*; - -!!safe_forward; - -# Safe Forward, nothing needs to be done, the exact Reverse rules will -# always find valid boundaries from any starting position. -# Still, some rule is needed, so '.', a one character movement. -.; diff --git a/icuSources/data/brkitr/rules/word.txt b/icuSources/data/brkitr/rules/word.txt index f88ddb52..7df97f80 100644 --- a/icuSources/data/brkitr/rules/word.txt +++ b/icuSources/data/brkitr/rules/word.txt @@ -1,7 +1,7 @@ -# +# # Copyright (C) 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html -# Copyright (C) 2002-2016, International Business Machines Corporation +# Copyright (C) 2002-2016, International Business Machines Corporation # and others. All Rights Reserved. # # file: word.txt @@ -22,6 +22,7 @@ ############################################################################## !!chain; +!!quoted_literals_only; # @@ -45,13 +46,8 @@ $MidLetter = [\p{Word_Break = MidLetter} - [\:]]; $MidNum = [\p{Word_Break = MidNum}]; $Numeric = [\p{Word_Break = Numeric}]; $ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; -$E_Base = [[\p{Word_Break = EB}] \U0001F46A-\U0001F46D\U0001F46F\U0001F91D\U0001F93C]; -$E_Modifier = [\p{Word_Break = EM}]; - -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 -$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; -$EBG = [\p{Word_Break = EBG}]; -$EmojiNRK = [[\p{Emoji}] - [\p{Word_Break = Regional_Indicator}\u002a\u00230-9©®™〰〽]]; +$WSegSpace = [\p{Word_Break = WSegSpace}]; +$Extended_Pict = [:ExtPict:]; $Han = [:Han:]; $Hiragana = [:Hiragana:]; @@ -96,17 +92,17 @@ $IdeographicEx = $Ideographic ($Extend | $Format | $ZWJ)*; ## ------------------------------------------------- -!!forward; - - # Rule 3 - CR x LF # $CR $LF; # Rule 3c ZWJ x (Extended_Pict | EmojiNRK). Precedes WB4, so no intervening Extend chars allowed. # -$ZWJ ($Extended_Pict | $EmojiNRK); +$ZWJ $Extended_Pict; +# Rule 3d - Keep horizontal whitespace together. +# +$WSegSpace $WSegSpace; # Rule 4 - ignore Format and Extend characters, except when they appear at the beginning # of a region of Text. The rule here comes into play when the start of text @@ -123,8 +119,6 @@ $KatakanaEx {400}; # note: these status values override those from rule 5 $HiraganaEx {400}; # by virtue of being numerically larger. $IdeographicEx {400}; # -$E_Base ($Extend | $Format | $ZWJ)*; -$E_Modifier ($Extend | $Format | $ZWJ)*; $Extended_Pict ($Extend | $Format | $ZWJ)*; # @@ -177,11 +171,6 @@ $ExtendNumLetEx $Hebrew_Letter {200}; # (13b) $ExtendNumLetEx $NumericEx {100}; # (13b) $ExtendNumLetEx $KatakanaEx {400}; # (13b) -# rule 14 -# Do not break within emoji modifier sequences - -($E_Base | $EBG) ($Format | $Extend | $ZWJ)* $E_Modifier; - # rules 15 - 17 # Pairs of Regional Indicators stay together. # With rule chaining disabled by ^, this rule will match exactly two of them. @@ -193,137 +182,6 @@ $ExtendNumLetEx $KatakanaEx {400}; # (13b) $HangulSyllable $HangulSyllable {200}; $KanaKanji $KanaKanji {400}; # different rule status if both kana and kanji found - -## ------------------------------------------------- - -!!reverse; - -$BackHebrew_LetterEx = ($Format | $Extend | $ZWJ)* $Hebrew_Letter; -$BackALetterEx = ($Format | $Extend | $ZWJ)* $ALetterPlus; -$BackSingle_QuoteEx = ($Format | $Extend | $ZWJ)* $Single_Quote; -$BackDouble_QuoteEx = ($Format | $Extend | $ZWJ)* $Double_Quote; -$BackMidNumLetEx = ($Format | $Extend | $ZWJ)* $MidNumLet; -$BackNumericEx = ($Format | $Extend | $ZWJ)* $Numeric; -$BackMidNumEx = ($Format | $Extend | $ZWJ)* $MidNum; -$BackMidLetterEx = ($Format | $Extend | $ZWJ)* $MidLetter; -$BackKatakanaEx = ($Format | $Extend | $ZWJ)* $Katakana; -$BackHiraganaEx = ($Format | $Extend | $ZWJ)* $Hiragana; -$BackExtendNumLetEx = ($Format | $Extend | $ZWJ)* $ExtendNumLet; -$BackRegional_IndicatorEx = ($Format | $Extend | $ZWJ)* $Regional_Indicator; - -# rule 3 -$LF $CR; - -# Rule 3c ZWJ x (Extended_Pict | EmojiNRK). Precedes WB4, so no intervening Extend chars allowed. -# -($Extended_Pict | $EmojiNRK) $ZWJ; - -# rule 4 -($Format | $Extend | $ZWJ)* [^$CR $LF $Newline]?; - -# rule 5 - -($BackALetterEx | $BackHebrew_LetterEx) ($BackALetterEx | $BackHebrew_LetterEx); - -# rule 6 and 7 - -($BackALetterEx | $BackHebrew_LetterEx) ($BackMidLetterEx | $BackMidNumLetEx | $BackSingle_QuoteEx) ($BackALetterEx | $BackHebrew_LetterEx); - -# rule 7a -$BackSingle_QuoteEx $BackHebrew_LetterEx; - -# Rule 7b and 7c -$BackHebrew_LetterEx $BackDouble_QuoteEx $BackHebrew_LetterEx; - -# rule 8 - -$BackNumericEx $BackNumericEx; - -# rule 9 - -$BackNumericEx ($BackALetterEx | $BackHebrew_LetterEx); - -# rule 10 - -($BackALetterEx | $BackHebrew_LetterEx) $BackNumericEx; - -# rule 11 and 12 - -$BackNumericEx ($BackMidNumEx | $BackMidNumLetEx | $BackSingle_QuoteEx) $BackNumericEx; - -# rule 13 - -$BackKatakanaEx $BackKatakanaEx; - -# rules 13 a/b -# -$BackExtendNumLetEx ($BackALetterEx | $BackHebrew_LetterEx | $BackNumericEx | $BackKatakanaEx | $BackExtendNumLetEx); -($BackALetterEx | $BackHebrew_LetterEx | $BackNumericEx | $BackKatakanaEx) $BackExtendNumLetEx; - -# special handling for CJK characters: chain for later dictionary segmentation -$HangulSyllable $HangulSyllable; -$KanaKanji $KanaKanji; #different rule status if both kanji and kana found - -# rule 14 - -$E_Modifier ($Format | $Extend | $ZWJ)* ($E_Base | $EBG); - -# rule 15 - 17 -# Pairs of Regional Indicators stay together. - -^$BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* - ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}]; -^$BackRegional_IndicatorEx $BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* - ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}]; - -($Extended_Pict | $EmojiNRK) $ZWJ $BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* - ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}]; -($Extended_Pict | $EmojiNRK) $ZWJ $BackRegional_IndicatorEx $BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* - ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}]; - - - -## ------------------------------------------------- - -!!safe_reverse; - -# rule 3 -($Extend | $Format | $ZWJ)+ .?; - -# rule 6 -($MidLetter | $MidNumLet | $Single_Quote) ($BackALetterEx | $BackHebrew_LetterEx); - -# rule 7b -$Double_Quote $BackHebrew_LetterEx; - - -# rule 11 -($MidNum | $MidNumLet | $Single_Quote) $BackNumericEx; - -# rule 13c -$BackRegional_IndicatorEx*; - -# For dictionary-based break -$dictionary $dictionary; - -## ------------------------------------------------- - -!!safe_forward; - -# rule 4 -($Extend | $Format | $ZWJ)+ .?; - -# rule 6 -($MidLetterEx | $MidNumLetEx | $Single_QuoteEx) ($ALetterEx | $Hebrew_LetterEx); - -# rule 7b -$Double_QuoteEx $Hebrew_LetterEx; - -# rule 11 -($MidNumEx | $MidNumLetEx | $Single_QuoteEx) $NumericEx; - -# rule 13c -$Regional_IndicatorEx*; - -# For dictionary-based break -$dictionary $dictionary; +# Rule 999 +# Match a single code point if no other rule applies. +.; diff --git a/icuSources/data/brkitr/rules/word_POSIX.txt b/icuSources/data/brkitr/rules/word_POSIX.txt index 7a82cc9b..79126931 100644 --- a/icuSources/data/brkitr/rules/word_POSIX.txt +++ b/icuSources/data/brkitr/rules/word_POSIX.txt @@ -1,7 +1,7 @@ -# +# # Copyright (C) 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html -# Copyright (C) 2002-2016, International Business Machines Corporation +# Copyright (C) 2002-2016, International Business Machines Corporation # and others. All Rights Reserved. # # file: word_POSIX.txt @@ -22,6 +22,7 @@ ############################################################################## !!chain; +!!quoted_literals_only; # @@ -45,13 +46,8 @@ $MidLetter = [\p{Word_Break = MidLetter} - [\:]]; $MidNum = [\p{Word_Break = MidNum} [.]]; $Numeric = [\p{Word_Break = Numeric}]; $ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; -$E_Base = [[\p{Word_Break = EB}] \U0001F46A-\U0001F46D\U0001F46F\U0001F91D\U0001F93C]; -$E_Modifier = [\p{Word_Break = EM}]; - -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 -$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; -$EBG = [\p{Word_Break = EBG}]; -$EmojiNRK = [[\p{Emoji}] - [\p{Word_Break = Regional_Indicator}\u002a\u00230-9©®™〰〽]]; +$WSegSpace = [\p{Word_Break = WSegSpace}]; +$Extended_Pict = [:ExtPict:]; $Han = [:Han:]; $Hiragana = [:Hiragana:]; @@ -62,7 +58,7 @@ $Hiragana = [:Hiragana:]; # 5.0 or later as the definition of Complex_Context was corrected to include all # characters requiring dictionary break. -$Control = [\p{Grapheme_Cluster_Break = Control}]; +$Control = [\p{Grapheme_Cluster_Break = Control}]; $HangulSyllable = [\uac00-\ud7a3]; $ComplexContext = [:LineBreak = Complex_Context:]; $KanaKanji = [$Han $Hiragana $Katakana]; @@ -74,7 +70,7 @@ $ALetterPlus = [$ALetter-$dictionaryCJK [$ComplexContext-$Extend-$Control]]; # -# Rules 4 Ignore Format and Extend characters, +# Rules 4 Ignore Format and Extend characters, # except when they appear at the beginning of a region of text. # # TODO: check if handling of katakana in dictionary makes rules incorrect/void @@ -96,17 +92,17 @@ $IdeographicEx = $Ideographic ($Extend | $Format | $ZWJ)*; ## ------------------------------------------------- -!!forward; - - # Rule 3 - CR x LF # $CR $LF; # Rule 3c ZWJ x (Extended_Pict | EmojiNRK). Precedes WB4, so no intervening Extend chars allowed. # -$ZWJ ($Extended_Pict | $EmojiNRK); +$ZWJ $Extended_Pict; +# Rule 3d - Keep horizontal whitespace together. +# +$WSegSpace $WSegSpace; # Rule 4 - ignore Format and Extend characters, except when they appear at the beginning # of a region of Text. The rule here comes into play when the start of text @@ -123,8 +119,6 @@ $KatakanaEx {400}; # note: these status values override those from rule 5 $HiraganaEx {400}; # by virtue of being numerically larger. $IdeographicEx {400}; # -$E_Base ($Extend | $Format | $ZWJ)*; -$E_Modifier ($Extend | $Format | $ZWJ)*; $Extended_Pict ($Extend | $Format | $ZWJ)*; # @@ -154,7 +148,7 @@ $NumericEx $NumericEx {100}; $NumericEx ($ALetterEx | $Hebrew_LetterEx) {200}; -# rule 11 and 12 +# rule 11 and 12 $NumericEx ($MidNumEx | $MidNumLetEx | $Single_QuoteEx) $NumericEx {100}; @@ -177,11 +171,6 @@ $ExtendNumLetEx $Hebrew_Letter {200}; # (13b) $ExtendNumLetEx $NumericEx {100}; # (13b) $ExtendNumLetEx $KatakanaEx {400}; # (13b) -# rule 14 -# Do not break within emoji modifier sequences - -($E_Base | $EBG) ($Format | $Extend | $ZWJ)* $E_Modifier; - # rules 15 - 17 # Pairs of Regional Indicators stay together. # With rule chaining disabled by ^, this rule will match exactly two of them. @@ -191,139 +180,8 @@ $ExtendNumLetEx $KatakanaEx {400}; # (13b) # special handling for CJK characters: chain for later dictionary segmentation $HangulSyllable $HangulSyllable {200}; -$KanaKanji $KanaKanji {400}; # different rule status if both kana and kanji found - - -## ------------------------------------------------- - -!!reverse; - -$BackHebrew_LetterEx = ($Format | $Extend | $ZWJ)* $Hebrew_Letter; -$BackALetterEx = ($Format | $Extend | $ZWJ)* $ALetterPlus; -$BackSingle_QuoteEx = ($Format | $Extend | $ZWJ)* $Single_Quote; -$BackDouble_QuoteEx = ($Format | $Extend | $ZWJ)* $Double_Quote; -$BackMidNumLetEx = ($Format | $Extend | $ZWJ)* $MidNumLet; -$BackNumericEx = ($Format | $Extend | $ZWJ)* $Numeric; -$BackMidNumEx = ($Format | $Extend | $ZWJ)* $MidNum; -$BackMidLetterEx = ($Format | $Extend | $ZWJ)* $MidLetter; -$BackKatakanaEx = ($Format | $Extend | $ZWJ)* $Katakana; -$BackHiraganaEx = ($Format | $Extend | $ZWJ)* $Hiragana; -$BackExtendNumLetEx = ($Format | $Extend | $ZWJ)* $ExtendNumLet; -$BackRegional_IndicatorEx = ($Format | $Extend | $ZWJ)* $Regional_Indicator; - -# rule 3 -$LF $CR; - -# Rule 3c ZWJ x (Extended_Pict | EmojiNRK). Precedes WB4, so no intervening Extend chars allowed. -# -($Extended_Pict | $EmojiNRK) $ZWJ; - -# rule 4 -($Format | $Extend | $ZWJ)* [^$CR $LF $Newline]?; - -# rule 5 - -($BackALetterEx | $BackHebrew_LetterEx) ($BackALetterEx | $BackHebrew_LetterEx); - -# rule 6 and 7 - -($BackALetterEx | $BackHebrew_LetterEx) ($BackMidLetterEx | $BackMidNumLetEx | $BackSingle_QuoteEx) ($BackALetterEx | $BackHebrew_LetterEx); - -# rule 7a -$BackSingle_QuoteEx $BackHebrew_LetterEx; - -# Rule 7b and 7c -$BackHebrew_LetterEx $BackDouble_QuoteEx $BackHebrew_LetterEx; - -# rule 8 - -$BackNumericEx $BackNumericEx; - -# rule 9 - -$BackNumericEx ($BackALetterEx | $BackHebrew_LetterEx); - -# rule 10 - -($BackALetterEx | $BackHebrew_LetterEx) $BackNumericEx; - -# rule 11 and 12 - -$BackNumericEx ($BackMidNumEx | $BackMidNumLetEx | $BackSingle_QuoteEx) $BackNumericEx; - -# rule 13 - -$BackKatakanaEx $BackKatakanaEx; - -# rules 13 a/b -# -$BackExtendNumLetEx ($BackALetterEx | $BackHebrew_LetterEx | $BackNumericEx | $BackKatakanaEx | $BackExtendNumLetEx); -($BackALetterEx | $BackHebrew_LetterEx | $BackNumericEx | $BackKatakanaEx) $BackExtendNumLetEx; - -# special handling for CJK characters: chain for later dictionary segmentation -$HangulSyllable $HangulSyllable; -$KanaKanji $KanaKanji; #different rule status if both kanji and kana found - -# rule 14 - -$E_Modifier ($Format | $Extend | $ZWJ)* ($E_Base | $EBG); - -# rule 15 - 17 -# Pairs of Regional Indicators stay together. - -^$BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* - ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}]; -^$BackRegional_IndicatorEx $BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* - ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}]; - -($Extended_Pict | $EmojiNRK) $ZWJ $BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* - ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}]; -($Extended_Pict | $EmojiNRK) $ZWJ $BackRegional_IndicatorEx $BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* - ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}]; - - - -## ------------------------------------------------- - -!!safe_reverse; - -# rule 3 -($Extend | $Format | $ZWJ)+ .?; - -# rule 6 -($MidLetter | $MidNumLet | $Single_Quote) ($BackALetterEx | $BackHebrew_LetterEx); - -# rule 7b -$Double_Quote $BackHebrew_LetterEx; - - -# rule 11 -($MidNum | $MidNumLet | $Single_Quote) $BackNumericEx; - -# rule 13c -$BackRegional_IndicatorEx*; - -# For dictionary-based break -$dictionary $dictionary; - -## ------------------------------------------------- - -!!safe_forward; - -# rule 4 -($Extend | $Format | $ZWJ)+ .?; - -# rule 6 -($MidLetterEx | $MidNumLetEx | $Single_QuoteEx) ($ALetterEx | $Hebrew_LetterEx); - -# rule 7b -$Double_QuoteEx $Hebrew_LetterEx; - -# rule 11 -($MidNumEx | $MidNumLetEx | $Single_QuoteEx) $NumericEx; - -# rule 13c -$Regional_IndicatorEx*; +$KanaKanji $KanaKanji {400}; # different rule status if both kana and kanji found -# For dictionary-based break -$dictionary $dictionary; +# Rule 999 +# Match a single code point if no other rule applies. +.; diff --git a/icuSources/data/brkitr/rules/word_fi_sv.txt b/icuSources/data/brkitr/rules/word_fi_sv.txt index e4fb26a3..4cfa8e09 100644 --- a/icuSources/data/brkitr/rules/word_fi_sv.txt +++ b/icuSources/data/brkitr/rules/word_fi_sv.txt @@ -1,7 +1,7 @@ # # Copyright (C) 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html -# Copyright (C) 2002-2016, International Business Machines Corporation +# Copyright (C) 2002-2016, International Business Machines Corporation # and others. All Rights Reserved. # # file: word_fi_sv.txt @@ -10,6 +10,7 @@ # See Unicode Standard Annex #29. # These rules are based on UAX #29 Revision 29 for Unicode Version 9.0 # with additions for Emoji Sequences from https://goo.gl/cluFCn +# Plus additional characters introduces with Emoji 5, http://www.unicode.org/reports/tr51/proposed.html # # Note: Updates to word.txt will usually need to be merged into # word_POSIX.txt also. @@ -21,6 +22,7 @@ ############################################################################## !!chain; +!!quoted_literals_only; # @@ -44,13 +46,8 @@ $MidLetter = [\p{Word_Break = MidLetter}]; $MidNum = [\p{Word_Break = MidNum}]; $Numeric = [\p{Word_Break = Numeric}]; $ExtendNumLet = [\p{Word_Break = ExtendNumLet}]; -$E_Base = [[\p{Word_Break = EB}] \U0001F46A-\U0001F46D\U0001F46F\U0001F91D\U0001F93C]; -$E_Modifier = [\p{Word_Break = EM}]; - -# Data for Extended Pictographic scraped from CLDR common/properties/ExtendedPictographic.txt, r13267 -$Extended_Pict = [\U0001F774-\U0001F77F\U00002700-\U00002701\U00002703-\U00002704\U0000270E\U00002710-\U00002711\U00002765-\U00002767\U0001F030-\U0001F093\U0001F094-\U0001F09F\U0001F10D-\U0001F10F\U0001F12F\U0001F16C-\U0001F16F\U0001F1AD-\U0001F1E5\U0001F260-\U0001F265\U0001F203-\U0001F20F\U0001F23C-\U0001F23F\U0001F249-\U0001F24F\U0001F252-\U0001F25F\U0001F266-\U0001F2FF\U0001F7D5-\U0001F7FF\U0001F000-\U0001F003\U0001F005-\U0001F02B\U0001F02C-\U0001F02F\U0001F322-\U0001F323\U0001F394-\U0001F395\U0001F398\U0001F39C-\U0001F39D\U0001F3F1-\U0001F3F2\U0001F3F6\U0001F4FE\U0001F53E-\U0001F548\U0001F54F\U0001F568-\U0001F56E\U0001F571-\U0001F572\U0001F57B-\U0001F586\U0001F588-\U0001F589\U0001F58E-\U0001F58F\U0001F591-\U0001F594\U0001F597-\U0001F5A3\U0001F5A6-\U0001F5A7\U0001F5A9-\U0001F5B0\U0001F5B3-\U0001F5BB\U0001F5BD-\U0001F5C1\U0001F5C5-\U0001F5D0\U0001F5D4-\U0001F5DB\U0001F5DF-\U0001F5E0\U0001F5E2\U0001F5E4-\U0001F5E7\U0001F5E9-\U0001F5EE\U0001F5F0-\U0001F5F2\U0001F5F4-\U0001F5F9\U00002605\U00002607-\U0000260D\U0000260F-\U00002610\U00002612\U00002616-\U00002617\U00002619-\U0000261C\U0000261E-\U0000261F\U00002621\U00002624-\U00002625\U00002627-\U00002629\U0000262B-\U0000262D\U00002630-\U00002637\U0000263B-\U00002647\U00002654-\U0000265F\U00002661-\U00002662\U00002664\U00002667\U00002669-\U0000267A\U0000267C-\U0000267E\U00002680-\U00002691\U00002695\U00002698\U0000269A\U0000269D-\U0000269F\U000026A2-\U000026A9\U000026AC-\U000026AF\U000026B2-\U000026BC\U000026BF-\U000026C3\U000026C6-\U000026C7\U000026C9-\U000026CD\U000026D0\U000026D2\U000026D5-\U000026E8\U000026EB-\U000026EF\U000026F6\U000026FB-\U000026FC\U000026FE-\U000026FF\U00002388\U0001FA00-\U0001FFFD\U0001F0A0-\U0001F0AE\U0001F0B1-\U0001F0BF\U0001F0C1-\U0001F0CF\U0001F0D1-\U0001F0F5\U0001F0AF-\U0001F0B0\U0001F0C0\U0001F0D0\U0001F0F6-\U0001F0FF\U0001F80C-\U0001F80F\U0001F848-\U0001F84F\U0001F85A-\U0001F85F\U0001F888-\U0001F88F\U0001F8AE-\U0001F8FF\U0001F900-\U0001F90B\U0001F91F\U0001F928-\U0001F92F\U0001F931-\U0001F932\U0001F94C\U0001F95F-\U0001F96B\U0001F992-\U0001F997\U0001F9D0-\U0001F9E6\U0001F90C-\U0001F90F\U0001F93F\U0001F94D-\U0001F94F\U0001F96C-\U0001F97F\U0001F998-\U0001F9BF\U0001F9C1-\U0001F9CF\U0001F9E7-\U0001F9FF\U0001F6C6-\U0001F6CA\U0001F6D3-\U0001F6D4\U0001F6E6-\U0001F6E8\U0001F6EA\U0001F6F1-\U0001F6F2\U0001F6F7-\U0001F6F8\U0001F6D5-\U0001F6DF\U0001F6ED-\U0001F6EF\U0001F6F9-\U0001F6FF]; -$EBG = [\p{Word_Break = EBG}]; -$EmojiNRK = [[\p{Emoji}] - [\p{Word_Break = Regional_Indicator}\u002a\u00230-9©®™〰〽]]; +$WSegSpace = [\p{Word_Break = WSegSpace}]; +$Extended_Pict = [:ExtPict:]; $Han = [:Han:]; $Hiragana = [:Hiragana:]; @@ -95,17 +92,17 @@ $IdeographicEx = $Ideographic ($Extend | $Format | $ZWJ)*; ## ------------------------------------------------- -!!forward; - - # Rule 3 - CR x LF # $CR $LF; # Rule 3c ZWJ x (Extended_Pict | EmojiNRK). Precedes WB4, so no intervening Extend chars allowed. # -$ZWJ ($Extended_Pict | $EmojiNRK); +$ZWJ $Extended_Pict; +# Rule 3d - Keep horizontal whitespace together. +# +$WSegSpace $WSegSpace; # Rule 4 - ignore Format and Extend characters, except when they appear at the beginning # of a region of Text. The rule here comes into play when the start of text @@ -122,8 +119,6 @@ $KatakanaEx {400}; # note: these status values override those from rule 5 $HiraganaEx {400}; # by virtue of being numerically larger. $IdeographicEx {400}; # -$E_Base ($Extend | $Format | $ZWJ)*; -$E_Modifier ($Extend | $Format | $ZWJ)*; $Extended_Pict ($Extend | $Format | $ZWJ)*; # @@ -176,11 +171,6 @@ $ExtendNumLetEx $Hebrew_Letter {200}; # (13b) $ExtendNumLetEx $NumericEx {100}; # (13b) $ExtendNumLetEx $KatakanaEx {400}; # (13b) -# rule 14 -# Do not break within emoji modifier sequences - -($E_Base | $EBG) ($Format | $Extend | $ZWJ)* $E_Modifier; - # rules 15 - 17 # Pairs of Regional Indicators stay together. # With rule chaining disabled by ^, this rule will match exactly two of them. @@ -192,137 +182,6 @@ $ExtendNumLetEx $KatakanaEx {400}; # (13b) $HangulSyllable $HangulSyllable {200}; $KanaKanji $KanaKanji {400}; # different rule status if both kana and kanji found - -## ------------------------------------------------- - -!!reverse; - -$BackHebrew_LetterEx = ($Format | $Extend | $ZWJ)* $Hebrew_Letter; -$BackALetterEx = ($Format | $Extend | $ZWJ)* $ALetterPlus; -$BackSingle_QuoteEx = ($Format | $Extend | $ZWJ)* $Single_Quote; -$BackDouble_QuoteEx = ($Format | $Extend | $ZWJ)* $Double_Quote; -$BackMidNumLetEx = ($Format | $Extend | $ZWJ)* $MidNumLet; -$BackNumericEx = ($Format | $Extend | $ZWJ)* $Numeric; -$BackMidNumEx = ($Format | $Extend | $ZWJ)* $MidNum; -$BackMidLetterEx = ($Format | $Extend | $ZWJ)* $MidLetter; -$BackKatakanaEx = ($Format | $Extend | $ZWJ)* $Katakana; -$BackHiraganaEx = ($Format | $Extend | $ZWJ)* $Hiragana; -$BackExtendNumLetEx = ($Format | $Extend | $ZWJ)* $ExtendNumLet; -$BackRegional_IndicatorEx = ($Format | $Extend | $ZWJ)* $Regional_Indicator; - -# rule 3 -$LF $CR; - -# Rule 3c ZWJ x (Extended_Pict | EmojiNRK). Precedes WB4, so no intervening Extend chars allowed. -# -($Extended_Pict | $EmojiNRK) $ZWJ; - -# rule 4 -($Format | $Extend | $ZWJ)* [^$CR $LF $Newline]?; - -# rule 5 - -($BackALetterEx | $BackHebrew_LetterEx) ($BackALetterEx | $BackHebrew_LetterEx); - -# rule 6 and 7 - -($BackALetterEx | $BackHebrew_LetterEx) ($BackMidLetterEx | $BackMidNumLetEx | $BackSingle_QuoteEx) ($BackALetterEx | $BackHebrew_LetterEx); - -# rule 7a -$BackSingle_QuoteEx $BackHebrew_LetterEx; - -# Rule 7b and 7c -$BackHebrew_LetterEx $BackDouble_QuoteEx $BackHebrew_LetterEx; - -# rule 8 - -$BackNumericEx $BackNumericEx; - -# rule 9 - -$BackNumericEx ($BackALetterEx | $BackHebrew_LetterEx); - -# rule 10 - -($BackALetterEx | $BackHebrew_LetterEx) $BackNumericEx; - -# rule 11 and 12 - -$BackNumericEx ($BackMidNumEx | $BackMidNumLetEx | $BackSingle_QuoteEx) $BackNumericEx; - -# rule 13 - -$BackKatakanaEx $BackKatakanaEx; - -# rules 13 a/b -# -$BackExtendNumLetEx ($BackALetterEx | $BackHebrew_LetterEx | $BackNumericEx | $BackKatakanaEx | $BackExtendNumLetEx); -($BackALetterEx | $BackHebrew_LetterEx | $BackNumericEx | $BackKatakanaEx) $BackExtendNumLetEx; - -# special handling for CJK characters: chain for later dictionary segmentation -$HangulSyllable $HangulSyllable; -$KanaKanji $KanaKanji; #different rule status if both kanji and kana found - -# rule 14 - -$E_Modifier ($Format | $Extend | $ZWJ)* ($E_Base | $EBG); - -# rule 15 - 17 -# Pairs of Regional Indicators stay together. - -^$BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* - ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}]; -^$BackRegional_IndicatorEx $BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* - ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}]; - -($Extended_Pict | $EmojiNRK) $ZWJ $BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* - ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}]; -($Extended_Pict | $EmojiNRK) $ZWJ $BackRegional_IndicatorEx $BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* - ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}]; - - - -## ------------------------------------------------- - -!!safe_reverse; - -# rule 3 -($Extend | $Format | $ZWJ)+ .?; - -# rule 6 -($MidLetter | $MidNumLet | $Single_Quote) ($BackALetterEx | $BackHebrew_LetterEx); - -# rule 7b -$Double_Quote $BackHebrew_LetterEx; - - -# rule 11 -($MidNum | $MidNumLet | $Single_Quote) $BackNumericEx; - -# rule 13c -$BackRegional_IndicatorEx*; - -# For dictionary-based break -$dictionary $dictionary; - -## ------------------------------------------------- - -!!safe_forward; - -# rule 4 -($Extend | $Format | $ZWJ)+ .?; - -# rule 6 -($MidLetterEx | $MidNumLetEx | $Single_QuoteEx) ($ALetterEx | $Hebrew_LetterEx); - -# rule 7b -$Double_QuoteEx $Hebrew_LetterEx; - -# rule 11 -($MidNumEx | $MidNumLetEx | $Single_QuoteEx) $NumericEx; - -# rule 13c -$Regional_IndicatorEx*; - -# For dictionary-based break -$dictionary $dictionary; +# Rule 999 +# Match a single code point if no other rule applies. +.; diff --git a/icuSources/data/brkitr/zh_Hant.txt b/icuSources/data/brkitr/zh_Hant.txt index 5bbee01e..d8a6df30 100644 --- a/icuSources/data/brkitr/zh_Hant.txt +++ b/icuSources/data/brkitr/zh_Hant.txt @@ -1,7 +1,7 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License zh_Hant{ - Version{"2.1.19.14"} + Version{"2.1.36.98"} boundaries{ line:process(dependency){"line.brk"} line_loose:process(dependency){"line_loose_cj.brk"} diff --git a/icuSources/data/build.xml b/icuSources/data/build.xml index f9e44a9c..efe0d3ce 100644 --- a/icuSources/data/build.xml +++ b/icuSources/data/build.xml @@ -332,6 +332,7 @@ + diff --git a/icuSources/data/cldr-icu-readme.txt b/icuSources/data/cldr-icu-readme.txt index 2e17b65e..2f5ea6e9 100644 --- a/icuSources/data/cldr-icu-readme.txt +++ b/icuSources/data/cldr-icu-readme.txt @@ -42,6 +42,18 @@ # #---- # +# IP address whitelisting +# +# Parts of the build process (notably building the new ICU data filescin step 4) +# require http: access to files in the CLDR repository; for example, processing +# the files in icu4c/source/data/xml/ may require access to +# http://www.unicode.org/repos/cldr/trunk/common/dtd/ldml.dtd +# +# The IP address of the system requesting such access be whitelisted with Unicode, +# otherwise there may be timeout failures; contact Rick McGowan. +# +#---- +# # There are several environment variables that need to be defined. # # a) Java- and ant-related variables @@ -78,7 +90,7 @@ # files are used in addition to the CLDR files as inputs to the CLDR data build # process for ICU): # -# icu/trunk/source/data/icu-config.xml - Update to add or remove +# icu4c/source/data/icu-config.xml - Update to add or remove # CLDR locales for inclusion in ICU. Update to prefer # alt forms for certain paths, or to exclude certain paths; note # that items can only have draft or alt attributes. @@ -89,11 +101,11 @@ # should also be included in , per PMC policy decision # 2012-05-02 (see http://bugs.icu-project.org/trac/ticket/9298). # -# icu/trunk/source/data/build.xml - If you are adding or removing break +# icu4c/source/data/build.xml - If you are adding or removing break # iterators, you need to update under # to clean the correct set of files. # -# icu/trunk/source/data/xml/ - If you are adding a new locale, break +# icu4c/source/data/xml/ - If you are adding a new locale, break # iterator, collation tailoring, or rule-based number formatter, # you may need to add a corresponding xml file in (respectively) # the main/, brkitr/, collation/, or rbnf/ subdirectory here. @@ -158,6 +170,11 @@ make check 2>&1 | tee /tmp/icu4c-oldData-makeCheck.txt # necessary CLDR tools including LDML2ICUConverter, ConvertTransforms, etc. # This process will take several minutes. # Keep a log so you can investigate anything that looks suspicious. +# +# If you see timeout errors when building the rbnf data, for example, then the +# system you are building on likely does not have its IP address whitelisted with +# Unicode for access to the CLDR repository, see note on "IP address whitelisting" +# near the top of this file. cd $ICU4C_DIR/source/data ant clean diff --git a/icuSources/data/coll/af.txt b/icuSources/data/coll/af.txt index ea3f5411..d88fc47e 100644 --- a/icuSources/data/coll/af.txt +++ b/icuSources/data/coll/af.txt @@ -5,7 +5,7 @@ af{ collations{ standard{ Sequence{"&N<<<ʼn"} - Version{"31.0.1"} + Version{"33.1"} } } } diff --git a/icuSources/data/coll/am.txt b/icuSources/data/coll/am.txt index 5ff8b4ac..d5905d31 100644 --- a/icuSources/data/coll/am.txt +++ b/icuSources/data/coll/am.txt @@ -5,7 +5,7 @@ am{ collations{ standard{ Sequence{"[reorder Ethi]"} - Version{"31.0.1"} + Version{"33.1"} } } } diff --git a/icuSources/data/coll/ar.txt b/icuSources/data/coll/ar.txt index 3d43327d..9788beae 100644 --- a/icuSources/data/coll/ar.txt +++ b/icuSources/data/coll/ar.txt @@ -9,7 +9,7 @@ ar{ "&ت<<ة<<<ﺔ<<<ﺓ" "&ي<<ى<<<ﯨ<<<ﯩ<<<ﻰ<<<ﻯ<<<ﲐ<<<ﱝ" } - Version{"31.0.1"} + Version{"33.1"} } standard{ Sequence{ @@ -397,7 +397,7 @@ ar{ "‎&ۓ‎=ﮰ‎=ﮱ" "‎&ۀ‎=ﮤ‎=ﮥ" } - Version{"31.0.1"} + Version{"33.1"} } } } diff --git a/icuSources/data/coll/as.txt b/icuSources/data/coll/as.txt index 0521a943..cfb0e82d 100644 --- a/icuSources/data/coll/as.txt +++ b/icuSources/data/coll/as.txt @@ -11,7 +11,7 @@ as{ "&[before 1]ত<ৎ=ত্\u200D" "&হ<ক্ষ" } - Version{"31.0.1"} + Version{"33.1"} } } } diff --git a/icuSources/data/coll/az.txt b/icuSources/data/coll/az.txt index 88bc12ae..210faee7 100644 --- a/icuSources/data/coll/az.txt +++ b/icuSources/data/coll/az.txt @@ -9,7 +9,7 @@ az{ "[import az-u-co-standard]" "[reorder others]" } - Version{"31.0.1"} + Version{"33.1"} } standard{ Sequence{ @@ -26,7 +26,7 @@ az{ "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 delta 7808 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 MP^{MG9TIi$5As*3=l}o! diff --git a/icuSources/data/curr/ps.txt b/icuSources/data/curr/ps.txt index 69cc9f49..ae4b18bd 100644 --- a/icuSources/data/curr/ps.txt +++ b/icuSources/data/curr/ps.txt @@ -2,16 +2,1379 @@ // License & terms of use: http://www.unicode.org/copyright.html#License ps{ Currencies{ + AED{ + "AED", + "AED", + } + AFA{ + "AFA", + "افغانۍ (1927–2002)", + } AFN{ "؋", "افغانۍ", } + ALL{ + "ALL", + "ALL", + } + AMD{ + "AMD", + "AMD", + } + ANG{ + "ANG", + "ANG", + } + AOA{ + "AOA", + "AOA", + } + ARS{ + "ARS", + "ARS", + } + AUD{ + "A$", + "AUD", + } + AWG{ + "AWG", + "AWG", + } + AZN{ + "AZN", + "AZN", + } + BAM{ + "BAM", + "BAM", + } + BBD{ + "BBD", + "BBD", + } + BDT{ + "BDT", + "BDT", + } + BGN{ + "BGN", + "BGN", + } + BHD{ + "BHD", + "BHD", + } + BIF{ + "BIF", + "BIF", + } + BMD{ + "BMD", + "BMD", + } + BND{ + "BND", + "BND", + } + BOB{ + "BOB", + "BOB", + } + BRL{ + "R$", + "BRL", + } + BSD{ + "BSD", + "BSD", + } + BTN{ + "BTN", + "BTN", + } + BWP{ + "BWP", + "BWP", + } + BYN{ + "BYN", + "BYN", + } + BZD{ + "BZD", + "BZD", + } + CAD{ + "CA$", + "CAD", + } + CDF{ + "CDF", + "CDF", + } + CHF{ + "CHF", + "CHF", + } + CLP{ + "CLP", + "CLP", + } + CNH{ + "CNH", + "CNH", + } + CNY{ + "CN¥", + "CNY", + } + COP{ + "COP", + "COP", + } + CRC{ + "CRC", + "CRC", + } + CUC{ + "CUC", + "CUC", + } + CUP{ + "CUP", + "CUP", + } + CVE{ + "CVE", + "CVE", + } + CZK{ + "CZK", + "CZK", + } + DJF{ + "DJF", + "DJF", + } + DKK{ + "DKK", + "DKK", + } + DOP{ + "DOP", + "DOP", + } + DZD{ + "DZD", + "DZD", + } + EGP{ + "EGP", + "EGP", + } + ERN{ + "ERN", + "ERN", + } + ETB{ + "ETB", + "ETB", + } + EUR{ + "€", + "EUR", + } + FJD{ + "FJD", + "FJD", + } + FKP{ + "FKP", + "FKP", + } + GBP{ + "£", + "GBP", + } + GEL{ + "GEL", + "GEL", + } + GHS{ + "GHS", + "GHS", + } + GIP{ + "GIP", + "GIP", + } + GMD{ + "GMD", + "GMD", + } + GNF{ + "GNF", + "GNF", + } + GTQ{ + "GTQ", + "GTQ", + } + GYD{ + "GYD", + "GYD", + } + HKD{ + "HK$", + "HKD", + } + HNL{ + "HNL", + "HNL", + } + HRK{ + "HRK", + "HRK", + } + HTG{ + "HTG", + "HTG", + } + HUF{ + "HUF", + "HUF", + } + IDR{ + "IDR", + "IDR", + } + ILS{ + "₪", + "ILS", + } + INR{ + "₹", + "INR", + } + IQD{ + "IQD", + "IQD", + } + IRR{ + "IRR", + "IRR", + } + ISK{ + "ISK", + "ISK", + } + JMD{ + "JMD", + "JMD", + } + JOD{ + "JOD", + "JOD", + } + JPY{ + "JP¥", + "JPY", + } + KES{ + "KES", + "KES", + } + KGS{ + "KGS", + "KGS", + } + KHR{ + "KHR", + "KHR", + } + KMF{ + "KMF", + "KMF", + } + KPW{ + "KPW", + "KPW", + } + KRW{ + "₩", + "KRW", + } + KWD{ + "KWD", + "KWD", + } + KYD{ + "KYD", + "KYD", + } + KZT{ + "KZT", + "KZT", + } + LAK{ + "LAK", + "LAK", + } + LBP{ + "LBP", + "LBP", + } + LKR{ + "LKR", + "LKR", + } + LRD{ + "LRD", + "LRD", + } + LYD{ + "LYD", + "LYD", + } + MAD{ + "MAD", + "MAD", + } + MDL{ + "MDL", + "MDL", + } + MGA{ + "MGA", + "MGA", + } + MKD{ + "MKD", + "MKD", + } + MMK{ + "MMK", + "MMK", + } + MNT{ + "MNT", + "MNT", + } + MOP{ + "MOP", + "MOP", + } + MRO{ + "MRO", + "MRO", + } + MRU{ + "MRU", + "MRU", + } + MUR{ + "MUR", + "MUR", + } + MVR{ + "MVR", + "MVR", + } + MWK{ + "MWK", + "MWK", + } + MXN{ + "MX$", + "MXN", + } + MYR{ + "MYR", + "MYR", + } + MZN{ + "MZN", + "MZN", + } + NAD{ + "NAD", + "NAD", + } + NGN{ + "NGN", + "NGN", + } + NIO{ + "NIO", + "NIO", + } + NOK{ + "NOK", + "NOK", + } + NPR{ + "NPR", + "نيپالي روپيه", + } + NZD{ + "NZ$", + "NZD", + } + OMR{ + "OMR", + "OMR", + } + PAB{ + "PAB", + "PAB", + } + PEN{ + "PEN", + "PEN", + } + PGK{ + "PGK", + "PGK", + } + PHP{ + "PHP", + "PHP", + } + PKR{ + "PKR", + "پاکستانۍ کلداره", + } + PLN{ + "PLN", + "PLN", + } + PYG{ + "PYG", + "PYG", + } + QAR{ + "QAR", + "QAR", + } + RON{ + "RON", + "RON", + } + RSD{ + "RSD", + "RSD", + } + RUB{ + "RUB", + "RUB", + } + RWF{ + "RWF", + "RWF", + } + SAR{ + "SAR", + "SAR", + } + SBD{ + "SBD", + "SBD", + } + SCR{ + "SCR", + "SCR", + } + SDG{ + "SDG", + "SDG", + } + SEK{ + "SEK", + "SEK", + } + SGD{ + "SGD", + "SGD", + } + SHP{ + "SHP", + "SHP", + } + SLL{ + "SLL", + "SLL", + } + SOS{ + "SOS", + "SOS", + } + SRD{ + "SRD", + "SRD", + } + SSP{ + "SSP", + "SSP", + } + STD{ + "STD", + "STD", + } + STN{ + "STN", + "STN", + } + SYP{ + "SYP", + "SYP", + } + SZL{ + "SZL", + "SZL", + } + THB{ + "THB", + "THB", + } + TJS{ + "TJS", + "TJS", + } + TMT{ + "TMT", + "TMT", + } + TND{ + "TND", + "TND", + } + TOP{ + "TOP", + "TOP", + } + TRY{ + "TRY", + "TRY", + } + TTD{ + "TTD", + "TTD", + } + TWD{ + "NT$", + "TWD", + } + TZS{ + "TZS", + "TZS", + } + UAH{ + "UAH", + "UAH", + } + UGX{ + "UGX", + "UGX", + } + USD{ + "US$", + "USD", + } + UYU{ + "UYU", + "UYU", + } + UZS{ + "UZS", + "UZS", + } + VEF{ + "VEF", + "VEF", + } + VND{ + "₫", + "VND", + } + VUV{ + "VUV", + "VUV", + } + WST{ + "WST", + "WST", + } + XAF{ + "FCFA", + "XAF", + } + XCD{ + "EC$", + "XCD", + } + XOF{ + "CFA", + "XOF", + } + XPF{ + "CFPF", + "XPF", + } + XXX{ + "XXX", + "نامعلوم د اسعارو له", + } + YER{ + "YER", + "YER", + } + ZAR{ + "ZAR", + "ZAR", + } + ZMW{ + "ZMW", + "ZMW", + } + } + Currencies%narrow{ + AOA{"Kz"} + ARS{"$"} + AUD{"$"} + BAM{"KM"} + BBD{"$"} + BDT{"৳"} + BMD{"$"} + BND{"$"} + BOB{"Bs"} + BRL{"R$"} + BSD{"$"} + BWP{"P"} + BYN{"р."} + BZD{"$"} + CAD{"$"} + CLP{"$"} + CNY{"¥"} + COP{"$"} + CRC{"₡"} + CUC{"$"} + CUP{"$"} + CZK{"Kč"} + DKK{"kr"} + DOP{"$"} + EGP{"E£"} + EUR{"€"} + FJD{"$"} + FKP{"£"} + GBP{"£"} + GEL{"₾"} + GIP{"£"} + GNF{"FG"} + GTQ{"Q"} + GYD{"$"} + HKD{"$"} + HNL{"L"} + HRK{"kn"} + HUF{"Ft"} + IDR{"Rp"} + ILS{"₪"} + INR{"₹"} + ISK{"kr"} + JMD{"$"} + JPY{"¥"} + KHR{"៛"} + KMF{"CF"} + KPW{"₩"} + KRW{"₩"} + KYD{"$"} + KZT{"₸"} + LAK{"₭"} + LBP{"L£"} + LKR{"Rs"} + LRD{"$"} + MGA{"Ar"} + MMK{"K"} + MNT{"₮"} + MUR{"Rs"} + MXN{"$"} + MYR{"RM"} + NAD{"$"} + NGN{"₦"} + NIO{"C$"} + NOK{"kr"} + NPR{"Rs"} + NZD{"$"} + PHP{"₱"} + PKR{"Rs"} + PLN{"zł"} + PYG{"₲"} + RON{"lei"} + RUB{"₽"} + RWF{"RF"} + SBD{"$"} + SEK{"kr"} + SGD{"$"} + SHP{"£"} + SRD{"$"} + SSP{"£"} + STN{"Db"} + SYP{"£"} + THB{"฿"} + TOP{"T$"} + TRY{"₺"} + TTD{"$"} + TWD{"$"} + UAH{"₴"} + USD{"$"} + UYU{"$"} + VEF{"Bs"} + VND{"₫"} + XCD{"$"} + ZAR{"R"} + ZMW{"ZK"} + } + Currencies%variant{ + TRY{"TL"} } CurrencyPlurals{ + AED{ + one{"AED"} + other{"AED"} + } + AFA{ + one{"افغانۍ (1927–2002)"} + other{"افغانۍ (1927–2002)"} + } AFN{ one{"افغانۍ"} other{"افغانۍ"} } + ALL{ + one{"ALL"} + other{"ALL"} + } + AMD{ + one{"AMD"} + other{"AMD"} + } + ANG{ + one{"ANG"} + other{"ANG"} + } + AOA{ + one{"AOA"} + other{"AOA"} + } + ARS{ + one{"ARS"} + other{"ARS"} + } + AUD{ + one{"AUD"} + other{"AUD"} + } + AWG{ + one{"AWG"} + other{"AWG"} + } + AZN{ + one{"AZN"} + other{"AZN"} + } + BAM{ + one{"BAM"} + other{"BAM"} + } + BBD{ + one{"BBD"} + other{"BBD"} + } + BDT{ + one{"BDT"} + other{"BDT"} + } + BGN{ + one{"BGN"} + other{"BGN"} + } + BHD{ + one{"BHD"} + other{"BHD"} + } + BIF{ + one{"BIF"} + other{"BIF"} + } + BMD{ + one{"BMD"} + other{"BMD"} + } + BND{ + one{"BND"} + other{"BND"} + } + BOB{ + one{"BOB"} + other{"BOB"} + } + BRL{ + one{"BRL"} + other{"BRL"} + } + BSD{ + one{"BSD"} + other{"BSD"} + } + BTN{ + one{"BTN"} + other{"BTN"} + } + BWP{ + one{"BWP"} + other{"BWP"} + } + BYN{ + one{"BYN"} + other{"BYN"} + } + BZD{ + one{"BZD"} + other{"BZD"} + } + CAD{ + one{"CAD"} + other{"CAD"} + } + CDF{ + one{"CDF"} + other{"CDF"} + } + CHF{ + one{"CHF"} + other{"CHF"} + } + CLP{ + one{"CLP"} + other{"CLP"} + } + CNH{ + one{"CNH"} + other{"CNH"} + } + CNY{ + one{"CNY"} + other{"CNY"} + } + COP{ + one{"COP"} + other{"COP"} + } + CRC{ + one{"CRC"} + other{"CRC"} + } + CUC{ + one{"CUC"} + other{"CUC"} + } + CUP{ + one{"CUP"} + other{"CUP"} + } + CVE{ + one{"CVE"} + other{"CVE"} + } + CZK{ + one{"CZK"} + other{"CZK"} + } + DJF{ + one{"DJF"} + other{"DJF"} + } + DKK{ + one{"DKK"} + other{"DKK"} + } + DOP{ + one{"DOP"} + other{"DOP"} + } + DZD{ + one{"DZD"} + other{"DZD"} + } + EGP{ + one{"EGP"} + other{"EGP"} + } + ERN{ + one{"ERN"} + other{"ERN"} + } + ETB{ + one{"ETB"} + other{"ETB"} + } + EUR{ + one{"EUR"} + other{"EUR"} + } + FJD{ + one{"FJD"} + other{"FJD"} + } + FKP{ + one{"FKP"} + other{"FKP"} + } + GBP{ + one{"GBP"} + other{"GBP"} + } + GEL{ + one{"GEL"} + other{"GEL"} + } + GHS{ + one{"GHS"} + other{"GHS"} + } + GIP{ + one{"GIP"} + other{"GIP"} + } + GMD{ + one{"GMD"} + other{"GMD"} + } + GNF{ + one{"GNF"} + other{"GNF"} + } + GTQ{ + one{"GTQ"} + other{"GTQ"} + } + GYD{ + one{"GYD"} + other{"GYD"} + } + HKD{ + one{"HKD"} + other{"HKD"} + } + HNL{ + one{"HNL"} + other{"HNL"} + } + HRK{ + one{"HRK"} + other{"HRK"} + } + HTG{ + one{"HTG"} + other{"HTG"} + } + HUF{ + one{"HUF"} + other{"HUF"} + } + IDR{ + one{"IDR"} + other{"IDR"} + } + ILS{ + one{"ILS"} + other{"ILS"} + } + INR{ + one{"INR"} + other{"INR"} + } + IQD{ + one{"IQD"} + other{"IQD"} + } + IRR{ + one{"IRR"} + other{"IRR"} + } + ISK{ + one{"ISK"} + other{"ISK"} + } + JMD{ + one{"JMD"} + other{"JMD"} + } + JOD{ + one{"JOD"} + other{"JOD"} + } + JPY{ + one{"JPY"} + other{"JPY"} + } + KES{ + one{"KES"} + other{"KES"} + } + KGS{ + one{"KGS"} + other{"KGS"} + } + KHR{ + one{"KHR"} + other{"KHR"} + } + KMF{ + one{"KMF"} + other{"KMF"} + } + KPW{ + one{"KPW"} + other{"KPW"} + } + KRW{ + one{"KRW"} + other{"KRW"} + } + KWD{ + one{"KWD"} + other{"KWD"} + } + KYD{ + one{"KYD"} + other{"KYD"} + } + KZT{ + one{"KZT"} + other{"KZT"} + } + LAK{ + one{"LAK"} + other{"LAK"} + } + LBP{ + one{"LBP"} + other{"LBP"} + } + LKR{ + one{"LKR"} + other{"LKR"} + } + LRD{ + one{"LRD"} + other{"LRD"} + } + LYD{ + one{"LYD"} + other{"LYD"} + } + MAD{ + one{"MAD"} + other{"MAD"} + } + MDL{ + one{"MDL"} + other{"MDL"} + } + MGA{ + one{"MGA"} + other{"MGA"} + } + MKD{ + one{"MKD"} + other{"MKD"} + } + MMK{ + one{"MMK"} + other{"MMK"} + } + MNT{ + one{"MNT"} + other{"MNT"} + } + MOP{ + one{"MOP"} + other{"MOP"} + } + MRO{ + one{"MRO"} + other{"MRO"} + } + MRU{ + one{"MRU"} + other{"MRU"} + } + MUR{ + one{"MUR"} + other{"MUR"} + } + MVR{ + one{"MVR"} + other{"MVR"} + } + MWK{ + one{"MWK"} + other{"MWK"} + } + MXN{ + one{"MXN"} + other{"MXN"} + } + MYR{ + one{"MYR"} + other{"MYR"} + } + MZN{ + one{"MZN"} + other{"MZN"} + } + NAD{ + one{"NAD"} + other{"NAD"} + } + NGN{ + one{"NGN"} + other{"NGN"} + } + NIO{ + one{"NIO"} + other{"NIO"} + } + NOK{ + one{"NOK"} + other{"NOK"} + } + NPR{ + one{"نيپالي روپيه"} + other{"نيپالي روپۍ"} + } + NZD{ + one{"NZD"} + other{"NZD"} + } + OMR{ + one{"OMR"} + other{"OMR"} + } + PAB{ + one{"PAB"} + other{"PAB"} + } + PEN{ + one{"PEN"} + other{"PEN"} + } + PGK{ + one{"PGK"} + other{"PGK"} + } + PHP{ + one{"PHP"} + other{"PHP"} + } + PKR{ + one{"پاکستانۍ کلداره"} + other{"پاکستانۍ کلدارې"} + } + PLN{ + one{"PLN"} + other{"PLN"} + } + PYG{ + one{"PYG"} + other{"PYG"} + } + QAR{ + one{"QAR"} + other{"QAR"} + } + RON{ + one{"RON"} + other{"RON"} + } + RSD{ + one{"RSD"} + other{"RSD"} + } + RUB{ + one{"RUB"} + other{"RUB"} + } + RWF{ + one{"RWF"} + other{"RWF"} + } + SAR{ + one{"SAR"} + other{"SAR"} + } + SBD{ + one{"SBD"} + other{"SBD"} + } + SCR{ + one{"SCR"} + other{"SCR"} + } + SDG{ + one{"SDG"} + other{"SDG"} + } + SEK{ + one{"SEK"} + other{"SEK"} + } + SGD{ + one{"SGD"} + other{"SGD"} + } + SHP{ + one{"SHP"} + other{"SHP"} + } + SLL{ + one{"SLL"} + other{"SLL"} + } + SOS{ + one{"SOS"} + other{"SOS"} + } + SRD{ + one{"SRD"} + other{"SRD"} + } + SSP{ + one{"SSP"} + other{"SSP"} + } + STD{ + one{"STD"} + other{"STD"} + } + STN{ + one{"STN"} + other{"STN"} + } + SYP{ + one{"SYP"} + other{"SYP"} + } + SZL{ + one{"SZL"} + other{"SZL"} + } + THB{ + one{"THB"} + other{"THB"} + } + TJS{ + one{"TJS"} + other{"TJS"} + } + TMT{ + one{"TMT"} + other{"TMT"} + } + TND{ + one{"TND"} + other{"TND"} + } + TOP{ + one{"TOP"} + other{"TOP"} + } + TRY{ + one{"TRY"} + other{"TRY"} + } + TTD{ + one{"TTD"} + other{"TTD"} + } + TWD{ + one{"TWD"} + other{"TWD"} + } + TZS{ + one{"TZS"} + other{"TZS"} + } + UAH{ + one{"UAH"} + other{"UAH"} + } + UGX{ + one{"UGX"} + other{"UGX"} + } + USD{ + one{"USD"} + other{"USD"} + } + UYU{ + one{"UYU"} + other{"UYU"} + } + UZS{ + one{"UZS"} + other{"UZS"} + } + VEF{ + one{"VEF"} + other{"VEF"} + } + VND{ + one{"VND"} + other{"VND"} + } + VUV{ + one{"VUV"} + other{"VUV"} + } + WST{ + one{"WST"} + other{"WST"} + } + XAF{ + one{"XAF"} + other{"XAF"} + } + XCD{ + one{"XCD"} + other{"XCD"} + } + XOF{ + one{"XOF"} + other{"XOF"} + } + XPF{ + one{"XPF"} + other{"XPF"} + } + XXX{ + one{"د اسعارو د نامعلومو واحد"} + other{"نامعلوم د اسعارو له"} + } + YER{ + one{"YER"} + other{"YER"} + } + ZAR{ + one{"ZAR"} + other{"ZAR"} + } + ZMW{ + one{"ZMW"} + other{"ZMW"} + } } - Version{"2.1.31.33"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/pt.txt b/icuSources/data/curr/pt.txt index bc565ff3..4a0b45dc 100644 --- a/icuSources/data/curr/pt.txt +++ b/icuSources/data/curr/pt.txt @@ -96,7 +96,7 @@ pt{ } BAM{ "BAM", - "Marco bósnio-herzegovino conversível", + "Marco conversível da Bósnia e Herzegovina", } BAN{ "BAN", @@ -262,6 +262,10 @@ pt{ "CLP", "Peso chileno", } + CNH{ + "CNH", + "Yuan (offshore)", + } CNX{ "CNX", "Dólar do Banco Popular da China", @@ -320,7 +324,7 @@ pt{ } DJF{ "DJF", - "Franco djibutiense", + "Franco djiboutiano", } DKK{ "DKK", @@ -392,7 +396,7 @@ pt{ } GBP{ "£", - "Libra britânica", + "Libra esterlina", } GEK{ "GEK", @@ -436,7 +440,7 @@ pt{ } GTQ{ "GTQ", - "Quetzal guatemalense", + "Quetzal guatemalteco", } GWE{ "GWE", @@ -472,7 +476,7 @@ pt{ } HUF{ "HUF", - "Forint húngaro", + "Florim húngaro", } IDR{ "IDR", @@ -544,7 +548,7 @@ pt{ } KMF{ "KMF", - "Franco comorense", + "Franco comoriano", } KPW{ "KPW", @@ -568,7 +572,7 @@ pt{ } KYD{ "KYD", - "Dólar das Ilhas Caiman", + "Dólar das Ilhas Cayman", } KZT{ "KZT", @@ -628,7 +632,7 @@ pt{ } MAD{ "MAD", - "Dirrã marroquino", + "Dirham marroquino", } MAF{ "MAF", @@ -680,6 +684,10 @@ pt{ } MRO{ "MRO", + "Ouguiya mauritana (1973–2017)", + } + MRU{ + "MRU", "Ouguiya mauritana", } MTL{ @@ -700,7 +708,7 @@ pt{ } MWK{ "MWK", - "Kwacha malawiana", + "Kwacha malauiana", } MXN{ "MX$", @@ -768,7 +776,7 @@ pt{ } PAB{ "PAB", - "Balboa panamenha", + "Balboa panamenho", } PEI{ "PEI", @@ -908,6 +916,10 @@ pt{ } STD{ "STD", + "Dobra de São Tomé e Príncipe (1977–2017)", + } + STN{ + "STN", "Dobra de São Tomé e Príncipe", } SUR{ @@ -1263,7 +1275,7 @@ pt{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1377,8 +1389,8 @@ pt{ other{"Dinares da Bósnia Herzegovina"} } BAM{ - one{"Marco bósnio-herzegovino conversível"} - other{"Marco bósnio-herzegovino conversível"} + one{"Marco conversível da Bósnia e Herzegovina"} + other{"Marcos conversíveis da Bósnia e Herzegovina"} } BAN{ one{"Novo dinar da Bósnia-Herzegovina"} @@ -1544,6 +1556,10 @@ pt{ one{"Peso chileno"} other{"Pesos chilenos"} } + CNH{ + one{"Yuan (offshore)"} + other{"Yuans (offshore)"} + } CNX{ one{"Dólar do Banco Popular da China"} other{"Dólares do Banco Popular da China"} @@ -1601,8 +1617,8 @@ pt{ other{"Marcos alemães"} } DJF{ - one{"Franco djibutiense"} - other{"Francos djibutienses"} + one{"Franco djiboutiano"} + other{"Francos djiboutianos"} } DKK{ one{"Coroa dinamarquesa"} @@ -1673,8 +1689,8 @@ pt{ other{"Francos franceses"} } GBP{ - one{"Libra britânica"} - other{"Libras britânicas"} + one{"Libra esterlina"} + other{"Libras esterlinas"} } GEK{ one{"Kupon larit da Geórgia"} @@ -1717,8 +1733,8 @@ pt{ other{"Dracmas gregos"} } GTQ{ - one{"Quetzal guatemalense"} - other{"Quetzais guatemalenses"} + one{"Quetzal guatemalteco"} + other{"Quetzais guatemaltecos"} } GWE{ one{"Escudo da Guiné Portuguesa"} @@ -1753,8 +1769,8 @@ pt{ other{"Gourdes haitianos"} } HUF{ - one{"Forint húngaro"} - other{"Forints húngaros"} + one{"Florim húngaro"} + other{"Florins húngaros"} } IDR{ one{"Rupia indonésia"} @@ -1825,8 +1841,8 @@ pt{ other{"Rieles cambojanos"} } KMF{ - one{"Franco comorense"} - other{"Francos comorenses"} + one{"Franco comoriano"} + other{"Francos comorianos"} } KPW{ one{"Won norte-coreano"} @@ -1849,8 +1865,8 @@ pt{ other{"Dinares kuwaitianos"} } KYD{ - one{"Dólar das Ilhas Caiman"} - other{"Dólares das Ilhas Caiman"} + one{"Dólar das Ilhas Cayman"} + other{"Dólares das Ilhas Cayman"} } KZT{ one{"Tenge cazaque"} @@ -1909,8 +1925,8 @@ pt{ other{"Dinares líbios"} } MAD{ - one{"Dirrã marroquino"} - other{"Dirrãs marroquinos"} + one{"Dirham marroquino"} + other{"Dirhams marroquinos"} } MAF{ one{"Franco marroquino"} @@ -1961,6 +1977,10 @@ pt{ other{"Patacas macaenses"} } MRO{ + one{"Ouguiya mauritana (1973–2017)"} + other{"Ouguiyas mauritanas (1973–2017)"} + } + MRU{ one{"Ouguiya mauritana"} other{"Ouguiyas mauritanas"} } @@ -1981,8 +2001,8 @@ pt{ other{"Rupias maldivas"} } MWK{ - one{"Kwacha malawiana"} - other{"Kwachas malawianas"} + one{"Kwacha malauiana"} + other{"Kwachas malauianas"} } MXN{ one{"Peso mexicano"} @@ -2010,7 +2030,7 @@ pt{ } MZN{ one{"Metical moçambicano"} - other{"Meticales moçambicanos"} + other{"Meticais moçambicanos"} } NAD{ one{"Dólar namibiano"} @@ -2049,8 +2069,8 @@ pt{ other{"Riales omanenses"} } PAB{ - one{"Balboa panamenha"} - other{"Balboas panamenhas"} + one{"Balboa panamenho"} + other{"Balboas panamenhos"} } PEI{ one{"Inti peruano"} @@ -2189,6 +2209,10 @@ pt{ other{"Libras sul-sudanesas"} } STD{ + one{"Dobra de São Tomé e Príncipe (1977–2017)"} + other{"Dobras de São Tomé e Príncipe (1977–2017)"} + } + STN{ one{"Dobra de São Tomé e Príncipe"} other{"Dobras de São Tomé e Príncipe"} } @@ -2469,5 +2493,5 @@ pt{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.32.59"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/pt_AO.txt b/icuSources/data/curr/pt_AO.txt index e24ea135..8fc61636 100644 --- a/icuSources/data/curr/pt_AO.txt +++ b/icuSources/data/curr/pt_AO.txt @@ -8,5 +8,5 @@ pt_AO{ "Kwanza angolano", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/pt_CH.txt b/icuSources/data/curr/pt_CH.txt index 90d6a1ee..acd87d80 100644 --- a/icuSources/data/curr/pt_CH.txt +++ b/icuSources/data/curr/pt_CH.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_CH{ %%Parent{"pt_PT"} - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/pt_CV.txt b/icuSources/data/curr/pt_CV.txt index b27927f9..686b662a 100644 --- a/icuSources/data/curr/pt_CV.txt +++ b/icuSources/data/curr/pt_CV.txt @@ -5,7 +5,7 @@ pt_CV{ Currencies{ CVE{ "​", - "Escudo cabo-verdiano", + "escudo cabo-verdiano", { "#,##0.00 ¤", "$", @@ -17,5 +17,5 @@ pt_CV{ "Escudo português", } } - Version{"2.1.31.33"} + Version{"2.1.39.12"} } diff --git a/icuSources/data/curr/pt_GQ.txt b/icuSources/data/curr/pt_GQ.txt index 793e0604..8a8947f6 100644 --- a/icuSources/data/curr/pt_GQ.txt +++ b/icuSources/data/curr/pt_GQ.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_GQ{ %%Parent{"pt_PT"} - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/pt_GW.txt b/icuSources/data/curr/pt_GW.txt index e137e518..f1315738 100644 --- a/icuSources/data/curr/pt_GW.txt +++ b/icuSources/data/curr/pt_GW.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_GW{ %%Parent{"pt_PT"} - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/pt_LU.txt b/icuSources/data/curr/pt_LU.txt index 0000ae65..e14278a4 100644 --- a/icuSources/data/curr/pt_LU.txt +++ b/icuSources/data/curr/pt_LU.txt @@ -8,5 +8,5 @@ pt_LU{ "Franco luxemburguês", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/pt_MO.txt b/icuSources/data/curr/pt_MO.txt index 34abbb28..1cbed298 100644 --- a/icuSources/data/curr/pt_MO.txt +++ b/icuSources/data/curr/pt_MO.txt @@ -8,5 +8,5 @@ pt_MO{ "Pataca de Macau", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/pt_MZ.txt b/icuSources/data/curr/pt_MZ.txt index 5695fc46..5f4783bc 100644 --- a/icuSources/data/curr/pt_MZ.txt +++ b/icuSources/data/curr/pt_MZ.txt @@ -8,5 +8,5 @@ pt_MZ{ "Metical de Moçambique", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/pt_PT.txt b/icuSources/data/curr/pt_PT.txt index 3492093a..5e7ecc48 100644 --- a/icuSources/data/curr/pt_PT.txt +++ b/icuSources/data/curr/pt_PT.txt @@ -14,13 +14,21 @@ pt_PT{ "AFN", "Afegani do Afeganistão", } + ALL{ + "ALL", + "lek albanês", + } AMD{ "AMD", "Dram arménio", } + ARS{ + "ARS", + "peso argentino", + } AWG{ "AWG", - "Florim de Aruba", + "florim de Aruba", } AZN{ "AZN", @@ -32,7 +40,11 @@ pt_PT{ } BAM{ "BAM", - "Marco bósnio-herzegóvino conversível", + "marco bósnio-herzegóvino conversível", + } + BBD{ + "BBD", + "dólar barbadense", } BDT{ "BDT", @@ -42,17 +54,33 @@ pt_PT{ "BEC", "Franco belga (convertível)", } + BGN{ + "BGN", + "lev búlgaro", + } BHD{ "BHD", "Dinar baremita", } + BMD{ + "BMD", + "dólar bermudense", + } BND{ "BND", "Dólar bruneíno", } + BOB{ + "BOB", + "boliviano", + } + BRL{ + "R$", + "real brasileiro", + } BSD{ "BSD", - "Dólar das Bahamas", + "dólar das Bahamas", } BTN{ "BTN", @@ -66,17 +94,53 @@ pt_PT{ "BYB", "Rublo novo bielorusso (1994–1999)", } + BYN{ + "BYN", + "rublo bielorrusso", + } BZD{ "BZD", - "Dólar belizense", + "dólar belizense", } CAD{ "CA$", - "Dólar canadiano", + "dólar canadiano", + } + CHF{ + "CHF", + "franco suíço", + } + CLP{ + "CLP", + "peso chileno", + } + CNH{ + "CNH", + "yuan offshore", + } + CNY{ + "CN¥", + "yuan", + } + COP{ + "COP", + "peso colombiano", } CRC{ "CRC", - "Colon costa-riquenho", + "colon costa-riquenho", + } + CUC{ + "CUC", + "peso cubano conversível", + } + CUP{ + "CUP", + "peso cubano", + } + CVE{ + "CVE", + "escudo cabo-verdiano", } CYP{ "CYP", @@ -84,32 +148,52 @@ pt_PT{ } CZK{ "CZK", - "Coroa checa", + "coroa checa", } DJF{ "DJF", "Franco jibutiano", } + DKK{ + "DKK", + "coroa dinamarquesa", + } + DZD{ + "DZD", + "dinar argelino", + } ECV{ "ECV", "Unidad de Valor Constante (UVC) do Equador", } + EGP{ + "EGP", + "libra egípcia", + } + EUR{ + "€", + "euro", + } FJD{ "FJD", "Dólar de Fiji", } FKP{ "FKP", - "Libra das Ilhas Falkland", + "libra das Ilhas Falkland", } GBP{ "£", - "Libra esterlina britânica", + "libra esterlina britânica", } GHS{ "GHS", "Cedi de Gana", } + GIP{ + "GIP", + "libra de Gibraltar", + } GMD{ "GMD", "Dalasi da Gâmbia", @@ -120,24 +204,32 @@ pt_PT{ } GTQ{ "GTQ", - "Quetzal da Guatemala", + "quetzal da Guatemala", } GYD{ "GYD", - "Dólar da Guiana", + "dólar da Guiana", } HNL{ "HNL", - "Lempira das Honduras", + "lempira das Honduras", + } + HRK{ + "HRK", + "kuna croata", + } + HUF{ + "HUF", + "forint húngaro", + } + ISK{ + "ISK", + "coroa islandesa", } KGS{ "KGS", "Som do Quirguistão", } - KMF{ - "KMF", - "Franco comoriano", - } KYD{ "KYD", "Dólar das Ilhas Caimão", @@ -162,13 +254,17 @@ pt_PT{ "LVL", "Lats da Letónia", } + LYD{ + "LYD", + "dinar líbio", + } MAD{ "MAD", - "Dirham marroquino", + "dirham marroquino", } MDL{ "MDL", - "Leu moldavo", + "leu moldavo", } MGA{ "MGA", @@ -176,7 +272,7 @@ pt_PT{ } MKD{ "MKD", - "Dinar macedónio", + "dinar macedónio", } MMK{ "MMK", @@ -192,6 +288,10 @@ pt_PT{ } MRO{ "MRO", + "Ouguiya da Mauritânia (1973–2017)", + } + MRU{ + "MRU", "Ouguiya da Mauritânia", } MVR{ @@ -202,6 +302,10 @@ pt_PT{ "MWK", "Kwacha do Malawi", } + MXN{ + "MX$", + "peso mexicano", + } MXP{ "MXP", "Peso Plata mexicano (1861–1992)", @@ -224,7 +328,11 @@ pt_PT{ } NIO{ "NIO", - "Córdoba nicaraguano", + "córdoba nicaraguano", + } + NOK{ + "NOK", + "coroa norueguesa", } OMR{ "OMR", @@ -232,7 +340,11 @@ pt_PT{ } PAB{ "PAB", - "Balboa do Panamá", + "balboa do Panamá", + } + PEN{ + "PEN", + "sol peruano", } PGK{ "PGK", @@ -240,7 +352,7 @@ pt_PT{ } PLN{ "PLN", - "Zloti polaco", + "zloti polaco", } PTE{ "​", @@ -251,14 +363,38 @@ pt_PT{ ",", } } + PYG{ + "PYG", + "guarani paraguaio", + } QAR{ "QAR", "Rial do Catar", } + RON{ + "RON", + "leu romeno", + } + RSD{ + "RSD", + "dinar sérvio", + } + RUB{ + "RUB", + "rublo russo", + } SAR{ "SAR", "Rial saudita", } + SDG{ + "SDG", + "libra sudanesa", + } + SEK{ + "SEK", + "coroa sueca", + } SGD{ "SGD", "Dólar de Singapura", @@ -269,7 +405,11 @@ pt_PT{ } SRD{ "SRD", - "Dólar do Suriname", + "dólar do Suriname", + } + STN{ + "STN", + "São Tomé & Príncipe Dobra (2018)", } SZL{ "SZL", @@ -289,7 +429,7 @@ pt_PT{ } TND{ "TND", - "Dinar tunisino", + "dinar tunisino", } TOP{ "TOP", @@ -301,16 +441,24 @@ pt_PT{ } UAH{ "UAH", - "Hryvnia da Ucrânia", + "hryvnia ucraniano", } USD{ "US$", - "Dólar dos Estados Unidos", + "dólar dos Estados Unidos", + } + UYU{ + "UYU", + "peso uruguaio", } UZS{ "UZS", "Som do Uzbequistão", } + VEF{ + "VEF", + "bolívar", + } VUV{ "VUV", "Vatu de Vanuatu", @@ -325,7 +473,11 @@ pt_PT{ } XOF{ "CFA", - "Franco CFA (BCEAO)", + "franco CFA (BCEAO)", + } + XXX{ + "XXX", + "moeda desconhecida", } ZMK{ "ZMK", @@ -341,37 +493,65 @@ pt_PT{ one{"Afegani do Afeganistão"} other{"Afeganis do Afeganistão"} } + ALL{ + one{"lek albanês"} + other{"leks albaneses"} + } AMD{ one{"Dram arménio"} other{"Drams arménios"} } + ARS{ + one{"peso argentino"} + other{"pesos argentinos"} + } AWG{ - one{"Florim de Aruba"} - other{"Florins de Aruba"} + one{"florim de Aruba"} + other{"florins de Aruba"} } AZN{ one{"Manat do Azerbaijão"} other{"Manats do Azerbaijão"} } BAM{ - one{"Marco bósnio-herzegóvino conversível"} - other{"Marcos bósnio-herzegóvinos conversíveis"} + one{"marco bósnio-herzegóvino conversível"} + other{"marcos bósnio-herzegóvinos conversíveis"} + } + BBD{ + one{"dólar barbadense"} + other{"dólares barbadenses"} } BDT{ one{"Taka de Bangladesh"} other{"Takas de Bangladesh"} } + BGN{ + one{"lev búlgaro"} + other{"levs búlgaros"} + } BHD{ one{"Dinar baremita"} other{"Dinares baremitas"} } + BMD{ + one{"dólar bermudense"} + other{"dólares bermudense"} + } BND{ one{"Dólar bruneíno"} other{"Dólares bruneínos"} } + BOB{ + one{"boliviano"} + other{"bolivianos"} + } + BRL{ + one{"real brasileiro"} + other{"reais brasileiros"} + } BSD{ - one{"Dólar das Bahamas"} - other{"Dólares das Bahamas"} + one{"dólar das Bahamas"} + other{"dólares das Bahamas"} } BTN{ one{"Ngultrum do Butão"} @@ -381,42 +561,98 @@ pt_PT{ one{"Pula de Botswana"} other{"Pulas de Botswana"} } + BYN{ + one{"rublo bielorrusso"} + other{"rublos bielorrussos"} + } BZD{ - one{"Dólar belizense"} - other{"Dólares belizenses"} + one{"dólar belizense"} + other{"dólares belizense"} } CAD{ - one{"Dólar canadiano"} - other{"Dólares canadianos"} + one{"dólar canadiano"} + other{"dólares canadianos"} + } + CHF{ + one{"franco suíço"} + other{"francos suíços"} + } + CLP{ + one{"peso chileno"} + other{"pesos chilenos"} + } + CNH{ + one{"yuan offshore"} + other{"yuans offshore"} + } + CNY{ + one{"yuan"} + other{"yuans"} + } + COP{ + one{"peso colombiano"} + other{"pesos colombianos"} } CRC{ - one{"Colon costa-riquenho"} - other{"Colons costa-riquenhos"} + one{"colon costa-riquenho"} + other{"colons costa-riquenho"} + } + CUC{ + one{"peso cubano conversível"} + other{"pesos cubanos conversíveis"} + } + CUP{ + one{"peso cubano"} + other{"pesos cubanos"} + } + CVE{ + one{"escudo cabo-verdiano"} + other{"escudos cabo-verdianos"} } CZK{ - one{"Coroa checa"} - other{"Coroas checas"} + one{"coroa checa"} + other{"coroas checas"} } DJF{ one{"Franco jibutiano"} other{"Francos jibutianos"} } + DKK{ + one{"coroa dinamarquesa"} + other{"coroas dinamarquesas"} + } + DZD{ + one{"dinar argelino"} + other{"dinares argelinos"} + } + EGP{ + one{"libra egípcia"} + other{"libras egípcias"} + } + EUR{ + one{"euro"} + other{"euros"} + } FJD{ one{"Dólar de Fiji"} other{"Dólares de Fiji"} } FKP{ - one{"Libra das Ilhas Falkland"} - other{"Libras das Ilhas Falkland"} + one{"libra das Ilhas Falkland"} + other{"libras das Ilhas Falkland"} } GBP{ - one{"Libra esterlina britânica"} - other{"Libras esterlinas britânicas"} + one{"libra esterlina britânica"} + other{"libras esterlinas britânicas"} } GHS{ one{"Cedi de Gana"} other{"Cedis de Gana"} } + GIP{ + one{"libra de Gibraltar"} + other{"libras de Gibraltar"} + } GMD{ one{"Dalasi da Gâmbia"} other{"Dalasis da Gâmbia"} @@ -426,16 +662,24 @@ pt_PT{ other{"Francos guineenses"} } GTQ{ - one{"Quetzal da Guatemala"} - other{"Quetzales da Guatemala"} + one{"quetzal da Guatemala"} + other{"quetzales da Guatemala"} } GYD{ - one{"Dólar da Guiana"} - other{"Dólares da Guiana"} + one{"dólar da Guiana"} + other{"dólares da Guiana"} } HNL{ - one{"Lempira das Honduras"} - other{"Lempiras das Honduras"} + one{"lempira das Honduras"} + other{"lempiras das Honduras"} + } + HRK{ + one{"kuna croata"} + other{"kunas croatas"} + } + HUF{ + one{"forint húngaro"} + other{"forints húngaros"} } ILS{ one{"Sheqel novo israelita"} @@ -445,14 +689,14 @@ pt_PT{ one{"Rial iraniano"} other{"Riais iranianos"} } + ISK{ + one{"coroa islandesa"} + other{"coroas islandesas"} + } KGS{ one{"Som do Quirguistão"} other{"Sons do Quirguistão"} } - KMF{ - one{"Franco comoriano"} - other{"Francos comorianos"} - } KYD{ one{"Dólar das Ilhas Caimão"} other{"Dólares das Ilhas Caimão"} @@ -477,21 +721,25 @@ pt_PT{ one{"Lats da Letónia"} other{"Lats da Letónia"} } + LYD{ + one{"dinar líbio"} + other{"dinares líbios"} + } MAD{ - one{"Dirham marroquino"} - other{"Dirhams marroquinos"} + one{"dirham marroquino"} + other{"dirhams marroquinos"} } MDL{ - one{"Leu moldavo"} - other{"Lei moldavos"} + one{"leu moldavo"} + other{"leus moldavos"} } MGA{ one{"Ariari de Madagáscar"} other{"Ariaris de Madagáscar"} } MKD{ - one{"Dinar macedónio"} - other{"Dinares macedónios"} + one{"dinar macedónio"} + other{"dinares macedónios"} } MMK{ one{"Kyat de Mianmar"} @@ -506,6 +754,10 @@ pt_PT{ other{"Patacas de Macau"} } MRO{ + one{"Ouguiya da Mauritânia (1973–2017)"} + other{"Ouguiyas da Mauritânia (1973–2017)"} + } + MRU{ one{"Ouguiya da Mauritânia"} other{"Ouguiyas da Mauritânia"} } @@ -517,6 +769,10 @@ pt_PT{ one{"Kwacha do Malawi"} other{"Kwachas do Malawi"} } + MXN{ + one{"peso mexicano"} + other{"pesos mexicanos"} + } MZN{ one{"Metical de Moçambique"} other{"Meticales de Moçambique"} @@ -530,20 +786,24 @@ pt_PT{ other{"Córdobas nicaraguano (1988–1991)"} } NIO{ - one{"Córdoba nicaraguano"} - other{"Córdoba nicaraguano"} + one{"córdoba nicaraguano"} + other{"córdobas nicaraguanos"} + } + NOK{ + one{"coroa norueguesa"} + other{"coroas norueguesas"} } OMR{ one{"Rial de Omã"} other{"Riais de Omã"} } PAB{ - one{"Balboa do Panamá"} - other{"Balboas do Panamá"} + one{"balboa do Panamá"} + other{"balboas do Panamá"} } PEN{ - one{"Sol peruano"} - other{"Soles peruanos"} + one{"sol peruano"} + other{"sóis peruanos"} } PES{ one{"Sol peruano (1863–1965)"} @@ -554,21 +814,41 @@ pt_PT{ other{"Kinas da Papua-Nova Guiné"} } PLN{ - one{"Zloti polaco"} - other{"Zlotis polacos"} + one{"zloti polaco"} + other{"zlotis polacos"} + } + PYG{ + one{"guarani paraguaio"} + other{"guaranis paraguaios"} } QAR{ one{"Rial do Catar"} other{"Riais do Catar"} } RON{ - one{"Leu romeno"} - other{"Lei romenos"} + one{"leu romeno"} + other{"leus romenos"} + } + RSD{ + one{"dinar sérvio"} + other{"dinares sérvios"} + } + RUB{ + one{"rublo russo"} + other{"rublos russos"} } SAR{ one{"Rial saudita"} other{"Riais sauditas"} } + SDG{ + one{"libra sudanesa"} + other{"libras sudanesas"} + } + SEK{ + one{"coroa sueca"} + other{"coroas suecas"} + } SGD{ one{"Dólar de Singapura"} other{"Dólares de Singapura"} @@ -578,8 +858,12 @@ pt_PT{ other{"Xelins somalis"} } SRD{ - one{"Dólar do Suriname"} - other{"Dólares do Suriname"} + one{"dólar do Suriname"} + other{"dólares do Suriname"} + } + STN{ + one{"São Tomé & Príncipe dobra (2018)"} + other{"São Tomé & Príncipe dobras (2018)"} } SZL{ one{"Lilangeni da Suazilândia"} @@ -598,8 +882,8 @@ pt_PT{ other{"Manats do Turquemenistão"} } TND{ - one{"Dinar tunisino"} - other{"Dinares tunisinos"} + one{"dinar tunisino"} + other{"dinares tunisinos"} } TOP{ one{"Paʻanga de Tonga"} @@ -610,17 +894,25 @@ pt_PT{ other{"Dólares de Trindade e Tobago"} } UAH{ - one{"Hryvnia da Ucrânia"} - other{"Hryvnias da Ucrânia"} + one{"hryvnia ucraniano"} + other{"hryvnias ucranianos"} } USD{ - one{"Dólar dos Estados Unidos"} - other{"Dólares dos Estados Unidos"} + one{"dólar dos Estados Unidos"} + other{"dólares dos Estados Unidos"} + } + UYU{ + one{"peso uruguaio"} + other{"pesos uruguaios"} } UZS{ one{"Som do Uzbequistão"} other{"Sons do Uzbequistão"} } + VEF{ + one{"bolívar"} + other{"bolívares"} + } VUV{ one{"Vatu de Vanuatu"} other{"Vatus de Vanuatu"} @@ -634,8 +926,8 @@ pt_PT{ other{"Dólares das Caraíbas Orientais"} } XOF{ - one{"Franco CFA (BCEAO)"} - other{"Francos CFA (BCEAO)"} + one{"franco CFA (BCEAO)"} + other{"francos CFA (BCEAO)"} } YER{ one{"Rial iemenita"} @@ -646,5 +938,5 @@ pt_PT{ other{"Kwachas zambianos (1968–2012)"} } } - Version{"2.1.31.86"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/pt_ST.txt b/icuSources/data/curr/pt_ST.txt index 7a19ac0f..2b13aea6 100644 --- a/icuSources/data/curr/pt_ST.txt +++ b/icuSources/data/curr/pt_ST.txt @@ -3,10 +3,10 @@ pt_ST{ %%Parent{"pt_PT"} Currencies{ - STD{ + STN{ "Db", - "Dobra de São Tomé e Príncipe", + "São Tomé & Príncipe Dobra (2018)", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/pt_TL.txt b/icuSources/data/curr/pt_TL.txt index 786b6020..0f0ddb9f 100644 --- a/icuSources/data/curr/pt_TL.txt +++ b/icuSources/data/curr/pt_TL.txt @@ -2,5 +2,5 @@ // License & terms of use: http://www.unicode.org/copyright.html#License pt_TL{ %%Parent{"pt_PT"} - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/qu.txt b/icuSources/data/curr/qu.txt index b5ab6a5e..92d9b202 100644 --- a/icuSources/data/curr/qu.txt +++ b/icuSources/data/curr/qu.txt @@ -10,5 +10,5 @@ qu{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.38.72"} } diff --git a/icuSources/data/curr/qu_BO.txt b/icuSources/data/curr/qu_BO.txt index 605e9986..b81ef65a 100644 --- a/icuSources/data/curr/qu_BO.txt +++ b/icuSources/data/curr/qu_BO.txt @@ -11,5 +11,5 @@ qu_BO{ "PEN", } } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/qu_EC.txt b/icuSources/data/curr/qu_EC.txt index e38e5e81..af121880 100644 --- a/icuSources/data/curr/qu_EC.txt +++ b/icuSources/data/curr/qu_EC.txt @@ -11,5 +11,5 @@ qu_EC{ "USD", } } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/resfiles.mk b/icuSources/data/curr/resfiles.mk index 48d59b8a..1afa781a 100644 --- a/icuSources/data/curr/resfiles.mk +++ b/icuSources/data/curr/resfiles.mk @@ -1,6 +1,6 @@ # © 2016 and later: Unicode, Inc. and others. # License & terms of use: http://www.unicode.org/copyright.html#License -CURR_CLDR_VERSION = 32 +CURR_CLDR_VERSION = 33.1 # A list of txt's to build # Note: # @@ -50,84 +50,85 @@ CURR_ALIAS_SOURCE = $(CURR_SYNTHETIC_ALIAS) # Ordinary resources CURR_SOURCE = af.txt af_NA.txt agq.txt ak.txt\ am.txt ar.txt ar_AE.txt ar_DJ.txt ar_ER.txt\ - ar_LB.txt ar_SO.txt ar_SS.txt as.txt asa.txt\ - ast.txt az.txt az_Cyrl.txt az_Latn.txt bas.txt\ - be.txt bem.txt bez.txt bg.txt bm.txt\ - bn.txt bo.txt bo_IN.txt br.txt brx.txt\ - bs.txt bs_Cyrl.txt bs_Latn.txt ca.txt ca_FR.txt\ - ce.txt cgg.txt chr.txt ckb.txt cs.txt\ - cy.txt da.txt dav.txt de.txt de_CH.txt\ - de_LI.txt de_LU.txt dje.txt dsb.txt dua.txt\ - dyo.txt dz.txt ebu.txt ee.txt el.txt\ - en.txt en_001.txt en_150.txt en_AG.txt en_AI.txt\ - en_AT.txt en_AU.txt en_BB.txt en_BE.txt en_BI.txt\ - en_BM.txt en_BS.txt en_BW.txt en_BZ.txt en_CA.txt\ - en_CC.txt en_CH.txt en_CK.txt en_CM.txt en_CX.txt\ - en_CY.txt en_DE.txt en_DG.txt en_DK.txt en_DM.txt\ - en_ER.txt en_FI.txt en_FJ.txt en_FK.txt en_FM.txt\ - en_GB.txt en_GD.txt en_GG.txt en_GH.txt en_GI.txt\ - en_GM.txt en_GY.txt en_HK.txt en_IE.txt en_IL.txt\ - en_IM.txt en_IN.txt en_IO.txt en_JE.txt en_JM.txt\ - en_KE.txt en_KI.txt en_KN.txt en_KY.txt en_LC.txt\ - en_LR.txt en_LS.txt en_MG.txt en_MO.txt en_MS.txt\ - en_MT.txt en_MU.txt en_MW.txt en_MY.txt en_NA.txt\ - en_NF.txt en_NG.txt en_NL.txt en_NR.txt en_NU.txt\ - en_NZ.txt en_PG.txt en_PH.txt en_PK.txt en_PN.txt\ - en_PW.txt en_RW.txt en_SB.txt en_SC.txt en_SD.txt\ - en_SE.txt en_SG.txt en_SH.txt en_SI.txt en_SL.txt\ - en_SS.txt en_SX.txt en_SZ.txt en_TC.txt en_TK.txt\ - en_TO.txt en_TT.txt en_TV.txt en_TZ.txt en_UG.txt\ - en_VC.txt en_VG.txt en_VU.txt en_WS.txt en_ZA.txt\ - en_ZM.txt en_ZW.txt eo.txt es.txt es_419.txt\ - es_AR.txt es_BO.txt es_BR.txt es_BZ.txt es_CL.txt\ - es_CO.txt es_CR.txt es_CU.txt es_DO.txt es_EC.txt\ - es_GQ.txt es_GT.txt es_HN.txt es_MX.txt es_NI.txt\ - es_PA.txt es_PE.txt es_PH.txt es_PR.txt es_PY.txt\ - es_SV.txt es_US.txt es_UY.txt es_VE.txt et.txt\ - eu.txt ewo.txt fa.txt fa_AF.txt ff.txt\ - ff_GN.txt ff_MR.txt fi.txt fil.txt fo.txt\ - fo_DK.txt fr.txt fr_BI.txt fr_CA.txt fr_CD.txt\ - fr_DJ.txt fr_DZ.txt fr_GN.txt fr_HT.txt fr_KM.txt\ - fr_LU.txt fr_MG.txt fr_MR.txt fr_MU.txt fr_RW.txt\ - fr_SC.txt fr_SY.txt fr_TN.txt fr_VU.txt fur.txt\ - fy.txt ga.txt gd.txt gl.txt gsw.txt\ - gu.txt guz.txt gv.txt ha.txt ha_GH.txt\ - haw.txt he.txt hi.txt hr.txt hr_BA.txt\ - hsb.txt hu.txt hy.txt id.txt ig.txt\ - ii.txt is.txt it.txt ja.txt jgo.txt\ - jmc.txt ka.txt kab.txt kam.txt kde.txt\ - kea.txt khq.txt ki.txt kk.txt kkj.txt\ - kl.txt kln.txt km.txt kn.txt ko.txt\ - kok.txt ks.txt ksb.txt ksf.txt ksh.txt\ - kw.txt ky.txt lag.txt lb.txt lg.txt\ - lkt.txt ln.txt ln_AO.txt lo.txt lrc.txt\ - lt.txt lu.txt luo.txt luy.txt lv.txt\ - mas.txt mas_TZ.txt mer.txt mfe.txt mg.txt\ - mgh.txt mgo.txt mk.txt ml.txt mn.txt\ - mr.txt ms.txt ms_BN.txt ms_SG.txt mt.txt\ - mua.txt my.txt mzn.txt naq.txt nb.txt\ - nd.txt nds.txt ne.txt nl.txt nl_AW.txt\ - nl_BQ.txt nl_CW.txt nl_SR.txt nl_SX.txt nmg.txt\ - nn.txt nnh.txt nus.txt nyn.txt om.txt\ - om_KE.txt or.txt os.txt os_RU.txt pa.txt\ - pa_Arab.txt pa_Guru.txt pl.txt ps.txt pt.txt\ - pt_AO.txt pt_CH.txt pt_CV.txt pt_GQ.txt pt_GW.txt\ - pt_LU.txt pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt\ - pt_TL.txt qu.txt qu_BO.txt qu_EC.txt rm.txt\ - rn.txt ro.txt ro_MD.txt rof.txt ru.txt\ - ru_BY.txt ru_KG.txt ru_KZ.txt ru_MD.txt rw.txt\ - rwk.txt sah.txt saq.txt sbp.txt se.txt\ - se_SE.txt seh.txt ses.txt sg.txt shi.txt\ - shi_Latn.txt shi_Tfng.txt si.txt sk.txt sl.txt\ - smn.txt sn.txt so.txt so_DJ.txt so_ET.txt\ - so_KE.txt sq.txt sq_MK.txt sr.txt sr_Cyrl.txt\ - sr_Latn.txt sv.txt sw.txt sw_CD.txt sw_UG.txt\ - ta.txt ta_LK.txt ta_MY.txt ta_SG.txt te.txt\ - teo.txt teo_KE.txt th.txt ti.txt ti_ER.txt\ - to.txt tr.txt twq.txt tzm.txt ug.txt\ - uk.txt ur.txt ur_IN.txt uz.txt uz_Arab.txt\ - uz_Cyrl.txt uz_Latn.txt vai.txt vai_Latn.txt vai_Vaii.txt\ - vi.txt vun.txt wae.txt xog.txt yav.txt\ + ar_KM.txt ar_LB.txt ar_SO.txt ar_SS.txt as.txt\ + asa.txt ast.txt az.txt az_Cyrl.txt az_Latn.txt\ + bas.txt be.txt bem.txt bez.txt bg.txt\ + bm.txt bn.txt bo.txt bo_IN.txt br.txt\ + brx.txt bs.txt bs_Cyrl.txt bs_Latn.txt ca.txt\ + ca_FR.txt ccp.txt ce.txt cgg.txt chr.txt\ + ckb.txt cs.txt cy.txt da.txt dav.txt\ + de.txt de_CH.txt de_LI.txt de_LU.txt dje.txt\ + dsb.txt dua.txt dyo.txt dz.txt ebu.txt\ + ee.txt el.txt en.txt en_001.txt en_150.txt\ + en_AG.txt en_AI.txt en_AT.txt en_AU.txt en_BB.txt\ + en_BE.txt en_BI.txt en_BM.txt en_BS.txt en_BW.txt\ + en_BZ.txt en_CA.txt en_CC.txt en_CH.txt en_CK.txt\ + en_CM.txt en_CX.txt en_CY.txt en_DE.txt en_DG.txt\ + en_DK.txt en_DM.txt en_ER.txt en_FI.txt en_FJ.txt\ + en_FK.txt en_FM.txt en_GB.txt en_GD.txt en_GG.txt\ + en_GH.txt en_GI.txt en_GM.txt en_GY.txt en_HK.txt\ + en_IE.txt en_IL.txt en_IM.txt en_IN.txt en_IO.txt\ + en_JE.txt en_JM.txt en_KE.txt en_KI.txt en_KN.txt\ + en_KY.txt en_LC.txt en_LR.txt en_LS.txt en_MG.txt\ + en_MO.txt en_MS.txt en_MT.txt en_MU.txt en_MW.txt\ + en_MY.txt en_NA.txt en_NF.txt en_NG.txt en_NL.txt\ + en_NR.txt en_NU.txt en_NZ.txt en_PG.txt en_PH.txt\ + en_PK.txt en_PN.txt en_PW.txt en_RW.txt en_SB.txt\ + en_SC.txt en_SD.txt en_SE.txt en_SG.txt en_SH.txt\ + en_SI.txt en_SL.txt en_SS.txt en_SX.txt en_SZ.txt\ + en_TC.txt en_TK.txt en_TO.txt en_TT.txt en_TV.txt\ + en_TZ.txt en_UG.txt en_VC.txt en_VG.txt en_VU.txt\ + en_WS.txt en_ZA.txt en_ZM.txt en_ZW.txt eo.txt\ + es.txt es_419.txt es_AR.txt es_BO.txt es_BR.txt\ + es_BZ.txt es_CL.txt es_CO.txt es_CR.txt es_CU.txt\ + es_DO.txt es_EC.txt es_GQ.txt es_GT.txt es_HN.txt\ + es_MX.txt es_NI.txt es_PA.txt es_PE.txt es_PH.txt\ + es_PR.txt es_PY.txt es_SV.txt es_US.txt es_UY.txt\ + es_VE.txt et.txt eu.txt ewo.txt fa.txt\ + fa_AF.txt ff.txt ff_GN.txt ff_MR.txt fi.txt\ + fil.txt fo.txt fo_DK.txt fr.txt fr_BI.txt\ + fr_CA.txt fr_CD.txt fr_DJ.txt fr_DZ.txt fr_GN.txt\ + fr_HT.txt fr_KM.txt fr_LU.txt fr_MG.txt fr_MR.txt\ + fr_MU.txt fr_RW.txt fr_SC.txt fr_SY.txt fr_TN.txt\ + fr_VU.txt fur.txt fy.txt ga.txt gd.txt\ + gl.txt gsw.txt gu.txt guz.txt gv.txt\ + ha.txt ha_GH.txt haw.txt he.txt hi.txt\ + hr.txt hr_BA.txt hsb.txt hu.txt hy.txt\ + id.txt ig.txt ii.txt is.txt it.txt\ + ja.txt jgo.txt jmc.txt ka.txt kab.txt\ + kam.txt kde.txt kea.txt khq.txt ki.txt\ + kk.txt kkj.txt kl.txt kln.txt km.txt\ + kn.txt ko.txt kok.txt ks.txt ksb.txt\ + ksf.txt ksh.txt kw.txt ky.txt lag.txt\ + lb.txt lg.txt lkt.txt ln.txt ln_AO.txt\ + lo.txt lrc.txt lt.txt lu.txt luo.txt\ + luy.txt lv.txt mas.txt mas_TZ.txt mer.txt\ + mfe.txt mg.txt mgh.txt mgo.txt mk.txt\ + ml.txt mn.txt mr.txt ms.txt ms_BN.txt\ + ms_SG.txt mt.txt mua.txt my.txt mzn.txt\ + naq.txt nb.txt nd.txt nds.txt ne.txt\ + nl.txt nl_AW.txt nl_BQ.txt nl_CW.txt nl_SR.txt\ + nl_SX.txt nmg.txt nn.txt nnh.txt nus.txt\ + nyn.txt om.txt om_KE.txt or.txt os.txt\ + os_RU.txt pa.txt pa_Arab.txt pa_Guru.txt pl.txt\ + ps.txt pt.txt pt_AO.txt pt_CH.txt pt_CV.txt\ + pt_GQ.txt pt_GW.txt pt_LU.txt pt_MO.txt pt_MZ.txt\ + pt_PT.txt pt_ST.txt pt_TL.txt qu.txt qu_BO.txt\ + qu_EC.txt rm.txt rn.txt ro.txt ro_MD.txt\ + rof.txt ru.txt ru_BY.txt ru_KG.txt ru_KZ.txt\ + ru_MD.txt rw.txt rwk.txt sah.txt saq.txt\ + sbp.txt se.txt se_SE.txt seh.txt ses.txt\ + sg.txt shi.txt shi_Latn.txt shi_Tfng.txt si.txt\ + sk.txt sl.txt smn.txt sn.txt so.txt\ + so_DJ.txt so_ET.txt so_KE.txt sq.txt sq_MK.txt\ + sr.txt sr_Cyrl.txt sr_Latn.txt sv.txt sw.txt\ + sw_CD.txt sw_UG.txt ta.txt ta_LK.txt ta_MY.txt\ + ta_SG.txt te.txt teo.txt teo_KE.txt tg.txt\ + th.txt ti.txt ti_ER.txt to.txt tr.txt\ + tt.txt twq.txt tzm.txt ug.txt uk.txt\ + ur.txt ur_IN.txt uz.txt uz_Arab.txt uz_Cyrl.txt\ + uz_Latn.txt vai.txt vai_Latn.txt vai_Vaii.txt vi.txt\ + vun.txt wae.txt wo.txt xog.txt yav.txt\ yi.txt yo.txt yo_BJ.txt yue.txt yue_Hans.txt\ yue_Hant.txt zgh.txt zh.txt zh_Hans.txt zh_Hans_HK.txt\ zh_Hans_MO.txt zh_Hans_SG.txt zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt\ diff --git a/icuSources/data/curr/reslocal.mk b/icuSources/data/curr/reslocal.mk index bd479b96..badffa2f 100644 --- a/icuSources/data/curr/reslocal.mk +++ b/icuSources/data/curr/reslocal.mk @@ -4,7 +4,7 @@ # CURR_SOURCE_LOCAL = iu.txt ms_Arab.txt ms_Arab_BN.txt\ - tg.txt tk.txt\ + tk.txt\ en_AD.txt en_AL.txt en_BA.txt en_BD.txt en_BG.txt\ en_BR.txt en_CN.txt en_CZ.txt en_EE.txt en_ES.txt en_FR.txt\ en_GR.txt en_HR.txt en_HU.txt en_ID.txt en_IS.txt\ @@ -19,3 +19,5 @@ CURR_SOURCE_LOCAL = iu.txt ms_Arab.txt ms_Arab_BN.txt\ es_SX.txt es_TC.txt es_TT.txt es_VC.txt es_VG.txt\ es_VI.txt\ pt_FR.txt + +CURR_ALIAS_SOURCE_LOCAL = wuu.txt diff --git a/icuSources/data/curr/rm.txt b/icuSources/data/curr/rm.txt index ec83e014..93fedc65 100644 --- a/icuSources/data/curr/rm.txt +++ b/icuSources/data/curr/rm.txt @@ -672,6 +672,10 @@ rm{ } MRO{ "MRO", + "ouguiya da la Mauretania (1973–2017)", + } + MRU{ + "MRU", "ouguiya da la Mauretania", } MTL{ @@ -900,6 +904,10 @@ rm{ } STD{ "STD", + "dobra da São Tomé e Principe (1977–2017)", + } + STN{ + "STN", "dobra da São Tomé e Principe", } SUR{ @@ -1265,5 +1273,5 @@ rm{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.31.86"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/rn.txt b/icuSources/data/curr/rn.txt index 60c44a98..4d9e6990 100644 --- a/icuSources/data/curr/rn.txt +++ b/icuSources/data/curr/rn.txt @@ -124,6 +124,10 @@ rn{ } MRO{ "MRO", + "Ugwiya ryo muri Moritaniya (1973–2017)", + } + MRU{ + "MRU", "Ugwiya ryo muri Moritaniya", } MUR{ @@ -176,6 +180,10 @@ rn{ } STD{ "STD", + "Idobura ryo muri Sawotome na Perensipe (1977–2017)", + } + STN{ + "STN", "Idobura ryo muri Sawotome na Perensipe", } SZL{ @@ -215,5 +223,5 @@ rn{ "Idolari ryo muri Zimbabwe", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/ro.txt b/icuSources/data/curr/ro.txt index fc08f727..09431c28 100644 --- a/icuSources/data/curr/ro.txt +++ b/icuSources/data/curr/ro.txt @@ -174,6 +174,10 @@ ro{ "CLP", "peso chilian", } + CNH{ + "CNH", + "yuan chinezesc (offshore)", + } CNY{ "CNY", "yuan chinezesc", @@ -528,6 +532,10 @@ ro{ } MRO{ "MRO", + "ouguiya mauritană (1973–2017)", + } + MRU{ + "MRU", "ouguiya mauritană", } MTL{ @@ -740,6 +748,10 @@ ro{ } STD{ "STD", + "dobra Sao Tome și Principe (1977–2017)", + } + STN{ + "STN", "dobra Sao Tome și Principe", } SUR{ @@ -1071,7 +1083,7 @@ ro{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1168,9 +1180,9 @@ ro{ other{"mărci convertibile din Bosnia și Herțegovina"} } BBD{ - few{"dolari Barbados"} - one{"dolar Barbados"} - other{"dolari Barbados"} + few{"dolari din Barbados"} + one{"dolar din Barbados"} + other{"dolari din Barbados"} } BDT{ few{"taka din Bangladesh"} @@ -1282,6 +1294,11 @@ ro{ one{"peso chilian"} other{"pesos chilieni"} } + CNH{ + few{"yuani chinezești (offshore)"} + one{"yuan chinezesc (offshore)"} + other{"yuani chinezești (offshore)"} + } CNY{ few{"yuani chinezești"} one{"yuan chinezesc"} @@ -1698,6 +1715,11 @@ ro{ other{"pataca din Macao"} } MRO{ + few{"ouguiya mauritane (1973–2017)"} + one{"ouguiya mauritană (1973–2017)"} + other{"ouguiya mauritane (1973–2017)"} + } + MRU{ few{"ouguiya mauritane"} one{"ouguiya mauritană"} other{"ouguiya mauritane"} @@ -1943,6 +1965,11 @@ ro{ other{"lire din Sudanul de Sud"} } STD{ + few{"dobre Sao Tome și Principe (1977–2017)"} + one{"dobra Sao Tome și Principe (1977–2017)"} + other{"dobre Sao Tome și Principe (1977–2017)"} + } + STN{ few{"dobre Sao Tome și Principe"} one{"dobra Sao Tome și Principe"} other{"dobre Sao Tome și Principe"} @@ -2188,5 +2215,5 @@ ro{ one{"{0} {1}"} other{"{0} de {1}"} } - Version{"2.1.32.60"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/ro_MD.txt b/icuSources/data/curr/ro_MD.txt index f0030b50..b3f99a3e 100644 --- a/icuSources/data/curr/ro_MD.txt +++ b/icuSources/data/curr/ro_MD.txt @@ -7,5 +7,5 @@ ro_MD{ "leu moldovenesc", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/rof.txt b/icuSources/data/curr/rof.txt index c8f10b7b..30d6821d 100644 --- a/icuSources/data/curr/rof.txt +++ b/icuSources/data/curr/rof.txt @@ -124,6 +124,10 @@ rof{ } MRO{ "MRO", + "heleri sa Moritania (1973–2017)", + } + MRU{ + "MRU", "heleri sa Moritania", } MUR{ @@ -176,6 +180,10 @@ rof{ } STD{ "STD", + "heleri sa Sao Tome na Principe (1977–2017)", + } + STN{ + "STN", "heleri sa Sao Tome na Principe", } SZL{ @@ -223,5 +231,5 @@ rof{ "heleri sa Zimbabwe", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/root.txt b/icuSources/data/curr/root.txt index 70e71246..09efe33b 100644 --- a/icuSources/data/curr/root.txt +++ b/icuSources/data/curr/root.txt @@ -85,6 +85,10 @@ root{ "CFPF", "XPF", } + XXX{ + "¤", + "XXX", + } } Currencies%narrow{ AOA{"Kz"} @@ -170,7 +174,7 @@ root{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -192,7 +196,7 @@ root{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.32.59"} + Version{"2.1.41.58"} currencySpacing{ afterCurrency{ currencyMatch{"[:^S:]"} diff --git a/icuSources/data/curr/ru.txt b/icuSources/data/curr/ru.txt index eefe470a..7e706b1a 100644 --- a/icuSources/data/curr/ru.txt +++ b/icuSources/data/curr/ru.txt @@ -8,7 +8,7 @@ ru{ } AED{ "AED", - "Дирхам ОАЭ", + "дирхам ОАЭ", } AFA{ "AFA", @@ -16,23 +16,23 @@ ru{ } AFN{ "AFN", - "Афгани", + "афгани", } ALL{ "ALL", - "Албанский лек", + "албанский лек", } AMD{ "AMD", - "Армянский драм", + "армянский драм", } ANG{ "ANG", - "Нидерландский антильский гульден", + "нидерландский антильский гульден", } AOA{ "AOA", - "Ангольская кванза", + "ангольская кванза", } AOK{ "AOK", @@ -56,7 +56,7 @@ ru{ } ARS{ "ARS", - "Аргентинское песо", + "аргентинское песо", } ATS{ "ATS", @@ -64,11 +64,11 @@ ru{ } AUD{ "A$", - "Австралийский доллар", + "австралийский доллар", } AWG{ "AWG", - "Арубанский флорин", + "арубанский флорин", } AZM{ "AZM", @@ -76,7 +76,7 @@ ru{ } AZN{ "AZN", - "Азербайджанский манат", + "азербайджанский манат", } BAD{ "BAD", @@ -84,15 +84,15 @@ ru{ } BAM{ "BAM", - "Конвертируемая марка Боснии и Герцеговины", + "конвертируемая марка Боснии и Герцеговины", } BBD{ "BBD", - "Барбадосский доллар", + "барбадосский доллар", } BDT{ "BDT", - "Бангладешская така", + "бангладешская така", } BEC{ "BEC", @@ -112,27 +112,27 @@ ru{ } BGN{ "BGN", - "Болгарский лев", + "болгарский лев", } BHD{ "BHD", - "Бахрейнский динар", + "бахрейнский динар", } BIF{ "BIF", - "Бурундийский франк", + "бурундийский франк", } BMD{ "BMD", - "Бермудский доллар", + "бермудский доллар", } BND{ "BND", - "Брунейский доллар", + "брунейский доллар", } BOB{ "BOB", - "Боливийский боливиано", + "боливийский боливиано", } BOP{ "BOP", @@ -156,7 +156,7 @@ ru{ } BRL{ "R$", - "Бразильский реал", + "бразильский реал", } BRN{ "BRN", @@ -168,11 +168,11 @@ ru{ } BSD{ "BSD", - "Багамский доллар", + "багамский доллар", } BTN{ "BTN", - "Бутанский нгултрум", + "бутанский нгултрум", } BUK{ "BUK", @@ -180,7 +180,7 @@ ru{ } BWP{ "BWP", - "Ботсванская пула", + "ботсванская пула", } BYB{ "BYB", @@ -188,7 +188,7 @@ ru{ } BYN{ "BYN", - "Белорусский рубль", + "белорусский рубль", } BYR{ "BYR", @@ -196,15 +196,15 @@ ru{ } BZD{ "BZD", - "Белизский доллар", + "белизский доллар", } CAD{ "CA$", - "Канадский доллар", + "канадский доллар", } CDF{ "CDF", - "Конголезский франк", + "конголезский франк", } CHE{ "CHE", @@ -212,7 +212,7 @@ ru{ } CHF{ "CHF", - "Швейцарский франк", + "швейцарский франк", } CHW{ "CHW", @@ -224,15 +224,19 @@ ru{ } CLP{ "CLP", - "Чилийское песо", + "чилийское песо", + } + CNH{ + "CNH", + "китайский офшорный юань", } CNY{ "CN¥", - "Китайский юань", + "китайский юань", } COP{ "COP", - "Колумбийское песо", + "колумбийское песо", } COU{ "COU", @@ -240,7 +244,7 @@ ru{ } CRC{ "CRC", - "Костариканский колон", + "костариканский колон", } CSD{ "CSD", @@ -252,15 +256,15 @@ ru{ } CUC{ "CUC", - "Кубинское конвертируемое песо", + "кубинское конвертируемое песо", } CUP{ "CUP", - "Кубинское песо", + "кубинское песо", } CVE{ "CVE", - "Эскудо Кабо-Верде", + "эскудо Кабо-Верде", } CYP{ "CYP", @@ -268,7 +272,7 @@ ru{ } CZK{ "CZK", - "Чешская крона", + "чешская крона", } DDM{ "DDM", @@ -280,19 +284,19 @@ ru{ } DJF{ "DJF", - "Франк Джибути", + "франк Джибути", } DKK{ "DKK", - "Датская крона", + "датская крона", } DOP{ "DOP", - "Доминиканское песо", + "доминиканское песо", } DZD{ "DZD", - "Алжирский динар", + "алжирский динар", } ECS{ "ECS", @@ -308,11 +312,11 @@ ru{ } EGP{ "EGP", - "Египетский фунт", + "египетский фунт", } ERN{ "ERN", - "Накфа", + "эритрейская накфа", } ESA{ "ESA", @@ -328,11 +332,11 @@ ru{ } ETB{ "ETB", - "Эфиопский быр", + "эфиопский быр", } EUR{ "€", - "Евро", + "евро", } FIM{ "FIM", @@ -340,11 +344,11 @@ ru{ } FJD{ "FJD", - "Доллар Фиджи", + "доллар Фиджи", } FKP{ "FKP", - "Фунт Фолклендских островов", + "фунт Фолклендских островов", } FRF{ "FRF", @@ -352,7 +356,7 @@ ru{ } GBP{ "£", - "Британский фунт стерлингов", + "британский фунт стерлингов", } GEK{ "GEK", @@ -360,7 +364,7 @@ ru{ } GEL{ "GEL", - "Грузинский лари", + "грузинский лари", } GHC{ "GHC", @@ -368,19 +372,19 @@ ru{ } GHS{ "GHS", - "Ганский седи", + "ганский седи", } GIP{ "GIP", - "Гибралтарский фунт", + "гибралтарский фунт", } GMD{ "GMD", - "Гамбийский даласи", + "гамбийский даласи", } GNF{ "GNF", - "Гвинейский франк", + "гвинейский франк", } GNS{ "GNS", @@ -396,7 +400,7 @@ ru{ } GTQ{ "GTQ", - "Гватемальский кетсаль", + "гватемальский кетсаль", } GWE{ "GWE", @@ -408,15 +412,15 @@ ru{ } GYD{ "GYD", - "Гайанский доллар", + "гайанский доллар", } HKD{ "HK$", - "Гонконгский доллар", + "гонконгский доллар", } HNL{ "HNL", - "Гондурасская лемпира", + "гондурасская лемпира", } HRD{ "HRD", @@ -424,19 +428,19 @@ ru{ } HRK{ "HRK", - "Хорватская куна", + "хорватская куна", } HTG{ "HTG", - "Гаитянский гурд", + "гаитянский гурд", } HUF{ "HUF", - "Венгерский форинт", + "венгерский форинт", } IDR{ "IDR", - "Индонезийская рупия", + "индонезийская рупия", } IEP{ "IEP", @@ -448,23 +452,23 @@ ru{ } ILS{ "₪", - "Новый израильский шекель", + "новый израильский шекель", } INR{ "₹", - "Индийская рупия", + "индийская рупия", } IQD{ "IQD", - "Иракский динар", + "иракский динар", } IRR{ "IRR", - "Иранский риал", + "иранский риал", } ISK{ "ISK", - "Исландская крона", + "исландская крона", } ITL{ "ITL", @@ -472,67 +476,67 @@ ru{ } JMD{ "JMD", - "Ямайский доллар", + "ямайский доллар", } JOD{ "JOD", - "Иорданский динар", + "иорданский динар", } JPY{ "¥", - "Японская иена", + "японская иена", } KES{ "KES", - "Кенийский шиллинг", + "кенийский шиллинг", } KGS{ "KGS", - "Киргизский сом", + "киргизский сом", } KHR{ "KHR", - "Камбоджийский риель", + "камбоджийский риель", } KMF{ "KMF", - "Франк Коморских Островов", + "франк Коморских островов", } KPW{ "KPW", - "Северокорейская вона", + "северокорейская вона", } KRW{ "₩", - "Южнокорейская вона", + "южнокорейская вона", } KWD{ "KWD", - "Кувейтский динар", + "кувейтский динар", } KYD{ "KYD", - "Доллар Каймановых островов", + "доллар Каймановых островов", } KZT{ "KZT", - "Казахский тенге", + "казахский тенге", } LAK{ "LAK", - "Лаосский кип", + "лаосский кип", } LBP{ "LBP", - "Ливанский фунт", + "ливанский фунт", } LKR{ "LKR", - "Шри-ланкийская рупия", + "шри-ланкийская рупия", } LRD{ "LRD", - "Либерийский доллар", + "либерийский доллар", } LSL{ "LSL", @@ -568,11 +572,11 @@ ru{ } LYD{ "LYD", - "Ливийский динар", + "ливийский динар", } MAD{ "MAD", - "Марокканский дирхам", + "марокканский дирхам", } MAF{ "MAF", @@ -580,11 +584,11 @@ ru{ } MDL{ "MDL", - "Молдавский лей", + "молдавский лей", } MGA{ "MGA", - "Малагасийский ариари", + "малагасийский ариари", } MGF{ "MGF", @@ -592,7 +596,7 @@ ru{ } MKD{ "MKD", - "Македонский денар", + "македонский денар", } MLF{ "MLF", @@ -600,19 +604,23 @@ ru{ } MMK{ "MMK", - "Мьянманский кьят", + "мьянманский кьят", } MNT{ "MNT", - "Монгольский тугрик", + "монгольский тугрик", } MOP{ "MOP", - "Патака Макао", + "патака Макао", } MRO{ "MRO", - "Мавританская угия", + "мавританская угия (1973–2017)", + } + MRU{ + "MRU", + "мавританская угия", } MTL{ "MTL", @@ -624,19 +632,19 @@ ru{ } MUR{ "MUR", - "Маврикийская рупия", + "маврикийская рупия", } MVR{ "MVR", - "Мальдивская руфия", + "мальдивская руфия", } MWK{ "MWK", - "Малавийская квача", + "малавийская квача", } MXN{ "MX$", - "Мексиканское песо", + "мексиканское песо", } MXP{ "MXP", @@ -648,7 +656,7 @@ ru{ } MYR{ "MYR", - "Малайзийский ринггит", + "малайзийский ринггит", } MZE{ "MZE", @@ -660,15 +668,15 @@ ru{ } MZN{ "MZN", - "Мозамбикский метикал", + "мозамбикский метикал", } NAD{ "NAD", - "Доллар Намибии", + "доллар Намибии", } NGN{ "NGN", - "Нигерийская найра", + "нигерийская найра", } NIC{ "NIC", @@ -676,7 +684,7 @@ ru{ } NIO{ "NIO", - "Никарагуанская кордоба", + "никарагуанская кордоба", } NLG{ "NLG", @@ -684,23 +692,23 @@ ru{ } NOK{ "NOK", - "Норвежская крона", + "норвежская крона", } NPR{ "NPR", - "Непальская рупия", + "непальская рупия", } NZD{ "NZ$", - "Новозеландский доллар", + "новозеландский доллар", } OMR{ "OMR", - "Оманский риал", + "оманский риал", } PAB{ "PAB", - "Панамское бальбоа", + "панамский бальбоа", } PEI{ "PEI", @@ -708,7 +716,7 @@ ru{ } PEN{ "PEN", - "Перуанский соль", + "перуанский соль", } PES{ "PES", @@ -716,19 +724,19 @@ ru{ } PGK{ "PGK", - "Кина Папуа – Новой Гвинеи", + "кина Папуа – Новой Гвинеи", } PHP{ "PHP", - "Филиппинское песо", + "филиппинское песо", } PKR{ "PKR", - "Пакистанская рупия", + "пакистанская рупия", } PLN{ "PLN", - "Польский злотый", + "польский злотый", } PLZ{ "PLZ", @@ -740,11 +748,11 @@ ru{ } PYG{ "PYG", - "Парагвайский гуарани", + "парагвайский гуарани", } QAR{ "QAR", - "Катарский риал", + "катарский риал", } RHD{ "RHD", @@ -756,15 +764,15 @@ ru{ } RON{ "RON", - "Румынский лей", + "румынский лей", } RSD{ "RSD", - "Сербский динар", + "сербский динар", } RUB{ "₽", - "Российский рубль", + "российский рубль", } RUR{ "р.", @@ -772,19 +780,19 @@ ru{ } RWF{ "RWF", - "Франк Руанды", + "франк Руанды", } SAR{ "SAR", - "Саудовский риял", + "саудовский риял", } SBD{ "SBD", - "Доллар Соломоновых Островов", + "доллар Соломоновых островов", } SCR{ "SCR", - "Сейшельская рупия", + "сейшельская рупия", } SDD{ "SDD", @@ -792,7 +800,7 @@ ru{ } SDG{ "SDG", - "Суданский фунт", + "суданский фунт", } SDP{ "SDP", @@ -800,15 +808,15 @@ ru{ } SEK{ "SEK", - "Шведская крона", + "шведская крона", } SGD{ "SGD", - "Сингапурский доллар", + "сингапурский доллар", } SHP{ "SHP", - "Фунт острова Святой Елены", + "фунт острова Святой Елены", } SIT{ "SIT", @@ -820,15 +828,15 @@ ru{ } SLL{ "SLL", - "Леоне", + "леоне", } SOS{ "SOS", - "Сомалийский шиллинг", + "сомалийский шиллинг", } SRD{ "SRD", - "Суринамский доллар", + "суринамский доллар", } SRG{ "SRG", @@ -836,11 +844,15 @@ ru{ } SSP{ "SSP", - "Южносуданский фунт", + "южносуданский фунт", } STD{ "STD", - "Добра Сан-Томе и Принсипи", + "добра Сан-Томе и Принсипи (1977–2017)", + } + STN{ + "STN", + "добра Сан-Томе и Принсипи", } SUR{ "SUR", @@ -852,15 +864,15 @@ ru{ } SYP{ "SYP", - "Сирийский фунт", + "сирийский фунт", } SZL{ "SZL", - "Свазилендский лилангени", + "свазилендский лилангени", } THB{ "฿", - "Таиландский бат", + "таиландский бат", } TJR{ "TJR", @@ -868,7 +880,7 @@ ru{ } TJS{ "TJS", - "Таджикский сомони", + "таджикский сомони", } TMM{ "TMM", @@ -876,15 +888,15 @@ ru{ } TMT{ "ТМТ", - "Новый туркменский манат", + "новый туркменский манат", } TND{ "TND", - "Тунисский динар", + "тунисский динар", } TOP{ "TOP", - "Тонганская паанга", + "тонганская паанга", } TPE{ "TPE", @@ -896,23 +908,23 @@ ru{ } TRY{ "TRY", - "Турецкая лира", + "турецкая лира", } TTD{ "TTD", - "Доллар Тринидада и Тобаго", + "доллар Тринидада и Тобаго", } TWD{ "NT$", - "Новый тайваньский доллар", + "новый тайваньский доллар", } TZS{ "TZS", - "Танзанийский шиллинг", + "танзанийский шиллинг", } UAH{ "₴", - "Украинская гривна", + "украинская гривна", } UAK{ "UAK", @@ -924,11 +936,11 @@ ru{ } UGX{ "UGX", - "Угандийский шиллинг", + "угандийский шиллинг", } USD{ "$", - "Доллар США", + "доллар США", } USN{ "USN", @@ -948,11 +960,11 @@ ru{ } UYU{ "UYU", - "Уругвайское песо", + "уругвайское песо", } UZS{ "UZS", - "Узбекский сум", + "узбекский сум", } VEB{ "VEB", @@ -960,23 +972,23 @@ ru{ } VEF{ "VEF", - "Венесуэльский боливар", + "венесуэльский боливар", } VND{ "₫", - "Вьетнамский донг", + "вьетнамский донг", } VUV{ "VUV", - "Вату Вануату", + "вату Вануату", } WST{ "WST", - "Самоанская тала", + "самоанская тала", } XAF{ "FCFA", - "Франк КФА ВЕАС", + "франк КФА BEAC", } XAG{ "XAG", @@ -1004,7 +1016,7 @@ ru{ } XCD{ "EC$", - "Восточно-карибский доллар", + "восточно-карибский доллар", } XDR{ "XDR", @@ -1024,7 +1036,7 @@ ru{ } XOF{ "CFA", - "Франк КФА ВСЕАО", + "франк КФА ВСЕАО", } XPD{ "XPD", @@ -1032,7 +1044,7 @@ ru{ } XPF{ "CFPF", - "Французский тихоокеанский франк", + "французский тихоокеанский франк", } XPT{ "XPT", @@ -1048,7 +1060,7 @@ ru{ } XXX{ "XXXX", - "Неизвестная валюта", + "неизвестная валюта", } YDD{ "YDD", @@ -1056,7 +1068,7 @@ ru{ } YER{ "YER", - "Йеменский риал", + "йеменский риал", } YUD{ "YUD", @@ -1076,7 +1088,7 @@ ru{ } ZAR{ "ZAR", - "Южноафриканский рэнд", + "южноафриканский рэнд", } ZMK{ "ZMK", @@ -1084,7 +1096,7 @@ ru{ } ZMW{ "ZMW", - "Замбийская квача", + "замбийская квача", } ZRN{ "ZRN", @@ -1183,7 +1195,7 @@ ru{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1403,6 +1415,12 @@ ru{ one{"чилийское песо"} other{"чилийского песо"} } + CNH{ + few{"китайских офшорных юаня"} + many{"китайских офшорных юаней"} + one{"китайский офшорный юань"} + other{"китайского офшорного юаня"} + } CNY{ few{"китайских юаня"} many{"китайских юаней"} @@ -1656,10 +1674,10 @@ ru{ other{"камбоджийского риеля"} } KMF{ - few{"франка Коморских Островов"} - many{"франков Коморских Островов"} - one{"франк Коморских Островов"} - other{"франка Коморских Островов"} + few{"франка Коморских островов"} + many{"франков Коморских островов"} + one{"франк Коморских островов"} + other{"франка Коморских островов"} } KPW{ few{"северокорейские воны"} @@ -1776,6 +1794,12 @@ ru{ other{"патаки Макао"} } MRO{ + few{"мавританские угии (1973–2017)"} + many{"мавританских угий (1973–2017)"} + one{"мавританская угия (1973–2017)"} + other{"мавританской угии (1973–2017)"} + } + MRU{ few{"мавританские угии"} many{"мавританских угий"} one{"мавританская угия"} @@ -1862,7 +1886,7 @@ ru{ PAB{ few{"панамских бальбоа"} many{"панамских бальбоа"} - one{"панамское бальбоа"} + one{"панамский бальбоа"} other{"панамского бальбоа"} } PEN{ @@ -1944,10 +1968,10 @@ ru{ other{"саудовского рияла"} } SBD{ - few{"доллара Соломоновых Островов"} - many{"долларов Соломоновых Островов"} - one{"доллар Соломоновых Островов"} - other{"доллара Соломоновых Островов"} + few{"доллара Соломоновых островов"} + many{"долларов Соломоновых островов"} + one{"доллар Соломоновых островов"} + other{"доллара Соломоновых островов"} } SCR{ few{"сейшельские рупии"} @@ -2004,6 +2028,12 @@ ru{ other{"южносуданского фунта"} } STD{ + few{"добры Сан-Томе и Принсипи (1977–2017)"} + many{"добр Сан-Томе и Принсипи (1977–2017)"} + one{"добра Сан-Томе и Принсипи (1977–2017)"} + other{"добры Сан-Томе и Принсипи (1977–2017)"} + } + STN{ few{"добры Сан-Томе и Принсипи"} many{"добр Сан-Томе и Принсипи"} one{"добра Сан-Томе и Принсипи"} @@ -2196,5 +2226,5 @@ ru{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.32.59"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/ru_BY.txt b/icuSources/data/curr/ru_BY.txt index 511e94f2..dadea276 100644 --- a/icuSources/data/curr/ru_BY.txt +++ b/icuSources/data/curr/ru_BY.txt @@ -4,7 +4,7 @@ ru_BY{ Currencies{ BYN{ "Br", - "Белорусский рубль", + "белорусский рубль", } RUR{ "RUR", @@ -14,5 +14,5 @@ ru_BY{ Currencies%narrow{ BYN{"Br"} } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/ru_KG.txt b/icuSources/data/curr/ru_KG.txt index 55b1d0b2..3be535da 100644 --- a/icuSources/data/curr/ru_KG.txt +++ b/icuSources/data/curr/ru_KG.txt @@ -4,8 +4,8 @@ ru_KG{ Currencies{ KGS{ "сом", - "Киргизский сом", + "киргизский сом", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/ru_KZ.txt b/icuSources/data/curr/ru_KZ.txt index 1af4732c..c88b16ee 100644 --- a/icuSources/data/curr/ru_KZ.txt +++ b/icuSources/data/curr/ru_KZ.txt @@ -4,8 +4,8 @@ ru_KZ{ Currencies{ KZT{ "₸", - "Казахский тенге", + "казахский тенге", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/ru_MD.txt b/icuSources/data/curr/ru_MD.txt index 2427b14f..a2c2a0aa 100644 --- a/icuSources/data/curr/ru_MD.txt +++ b/icuSources/data/curr/ru_MD.txt @@ -4,8 +4,8 @@ ru_MD{ Currencies{ MDL{ "L", - "Молдавский лей", + "молдавский лей", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/rw.txt b/icuSources/data/curr/rw.txt index ed634368..0c635261 100644 --- a/icuSources/data/curr/rw.txt +++ b/icuSources/data/curr/rw.txt @@ -10,5 +10,5 @@ rw{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.38.72"} } diff --git a/icuSources/data/curr/rwk.txt b/icuSources/data/curr/rwk.txt index 88e1be65..edf9c87b 100644 --- a/icuSources/data/curr/rwk.txt +++ b/icuSources/data/curr/rwk.txt @@ -124,6 +124,10 @@ rwk{ } MRO{ "MRO", + "Ugwiya ya Moritania (1973–2017)", + } + MRU{ + "MRU", "Ugwiya ya Moritania", } MUR{ @@ -180,6 +184,10 @@ rwk{ } STD{ "STD", + "Dobra ya Sao Tome na Principe (1977–2017)", + } + STN{ + "STN", "Dobra ya Sao Tome na Principe", } SZL{ @@ -227,5 +235,5 @@ rwk{ "Dola ya Zimbabwe", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/sah.txt b/icuSources/data/curr/sah.txt index 3544ed6d..39a95538 100644 --- a/icuSources/data/curr/sah.txt +++ b/icuSources/data/curr/sah.txt @@ -25,5 +25,5 @@ sah{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/saq.txt b/icuSources/data/curr/saq.txt index 4f934ab4..f249e7d2 100644 --- a/icuSources/data/curr/saq.txt +++ b/icuSources/data/curr/saq.txt @@ -124,6 +124,10 @@ saq{ } MRO{ "MRO", + "Njilingi eel Moritania (1973–2017)", + } + MRU{ + "MRU", "Njilingi eel Moritania", } MUR{ @@ -176,6 +180,10 @@ saq{ } STD{ "STD", + "Njilingi eel Sao Tome na Principe (1977–2017)", + } + STN{ + "STN", "Njilingi eel Sao Tome na Principe", } SZL{ @@ -223,5 +231,5 @@ saq{ "Dola eel Zimbabwe", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/sbp.txt b/icuSources/data/curr/sbp.txt index 653378d8..6e53c3d2 100644 --- a/icuSources/data/curr/sbp.txt +++ b/icuSources/data/curr/sbp.txt @@ -124,6 +124,10 @@ sbp{ } MRO{ "MRO", + "Ihela ya Molitaniya (1973–2017)", + } + MRU{ + "MRU", "Ihela ya Molitaniya", } MUR{ @@ -176,6 +180,10 @@ sbp{ } STD{ "STD", + "Ihela ya Sao Tome ni Pilinsipe (1977–2017)", + } + STN{ + "STN", "Ihela ya Sao Tome ni Pilinsipe", } SZL{ @@ -223,5 +231,5 @@ sbp{ "Ihela ya Simbabwe", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/se.txt b/icuSources/data/curr/se.txt index 04e7785a..23746b15 100644 --- a/icuSources/data/curr/se.txt +++ b/icuSources/data/curr/se.txt @@ -73,5 +73,5 @@ se{ other{"{0} {1}"} two{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/se_SE.txt b/icuSources/data/curr/se_SE.txt index 0631b57e..e72b8e3f 100644 --- a/icuSources/data/curr/se_SE.txt +++ b/icuSources/data/curr/se_SE.txt @@ -11,5 +11,5 @@ se_SE{ "ruoŧŧa kruvdno", } } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/seh.txt b/icuSources/data/curr/seh.txt index ea06cd2b..af5e3d1d 100644 --- a/icuSources/data/curr/seh.txt +++ b/icuSources/data/curr/seh.txt @@ -124,6 +124,10 @@ seh{ } MRO{ "MRO", + "Ouguiya da Mauritânia (1973–2017)", + } + MRU{ + "MRU", "Ouguiya da Mauritânia", } MUR{ @@ -184,6 +188,10 @@ seh{ } STD{ "STD", + "Dobra de São Tomé e Príncipe (1977–2017)", + } + STN{ + "STN", "Dobra de São Tomé e Príncipe", } SZL{ @@ -231,5 +239,5 @@ seh{ "Dólar do Zimbábue", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/ses.txt b/icuSources/data/curr/ses.txt index 29fdfc00..a9b17f2e 100644 --- a/icuSources/data/curr/ses.txt +++ b/icuSources/data/curr/ses.txt @@ -124,6 +124,10 @@ ses{ } MRO{ "MRO", + "Mooritaani Ugiya (1973–2017)", + } + MRU{ + "MRU", "Mooritaani Ugiya", } MUR{ @@ -180,6 +184,10 @@ ses{ } STD{ "STD", + "Sao Tome nda Prinsipe Dobra (1977–2017)", + } + STN{ + "STN", "Sao Tome nda Prinsipe Dobra", } SZL{ @@ -227,5 +235,5 @@ ses{ "Zimbabwe Dollar", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/sg.txt b/icuSources/data/curr/sg.txt index ca5a3f5f..e72a49e9 100644 --- a/icuSources/data/curr/sg.txt +++ b/icuSources/data/curr/sg.txt @@ -124,6 +124,10 @@ sg{ } MRO{ "MRO", + "ugîya tî Moritanïi (1973–2017)", + } + MRU{ + "MRU", "ugîya tî Moritanïi", } MUR{ @@ -176,6 +180,10 @@ sg{ } STD{ "STD", + "dôbra tî Sâô Tomë na Prinsîpe (1977–2017)", + } + STN{ + "STN", "dôbra tî Sâô Tomë na Prinsîpe", } SZL{ @@ -223,5 +231,5 @@ sg{ "dolära tî Zimbäbwe", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/shi.txt b/icuSources/data/curr/shi.txt index ff71866b..c1d829e9 100644 --- a/icuSources/data/curr/shi.txt +++ b/icuSources/data/curr/shi.txt @@ -124,6 +124,10 @@ shi{ } MRO{ "MRO", + "ⵓⵇⵉⵢⵢⴰ ⵏ ⵎⵓⵕⵉⵟⴰⵏⵢⴰ (1973–2017)", + } + MRU{ + "MRU", "ⵓⵇⵉⵢⵢⴰ ⵏ ⵎⵓⵕⵉⵟⴰⵏⵢⴰ", } MUR{ @@ -180,6 +184,10 @@ shi{ } STD{ "STD", + "ⴰⴷⵓⴱⵔⴰ ⵏ ⵙⴰⵏⵟⵓⵎⵉ (1977–2017)", + } + STN{ + "STN", "ⴰⴷⵓⴱⵔⴰ ⵏ ⵙⴰⵏⵟⵓⵎⵉ", } SZL{ @@ -227,5 +235,5 @@ shi{ "ⴰⴷⵓⵍⴰⵔ ⵏ ⵣⵉⵎⴱⴰⴱⵡⵉ", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/shi_Latn.txt b/icuSources/data/curr/shi_Latn.txt index 41c57c7d..cf410746 100644 --- a/icuSources/data/curr/shi_Latn.txt +++ b/icuSources/data/curr/shi_Latn.txt @@ -125,6 +125,10 @@ shi_Latn{ } MRO{ "MRO", + "uqiyya n muṛiṭanya (1973–2017)", + } + MRU{ + "MRU", "uqiyya n muṛiṭanya", } MUR{ @@ -181,6 +185,10 @@ shi_Latn{ } STD{ "STD", + "adubra n sanṭumi (1977–2017)", + } + STN{ + "STN", "adubra n sanṭumi", } SZL{ @@ -228,5 +236,5 @@ shi_Latn{ "adular n zimbabwi", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/shi_Tfng.txt b/icuSources/data/curr/shi_Tfng.txt index ba03fa36..aaf5c7b3 100644 --- a/icuSources/data/curr/shi_Tfng.txt +++ b/icuSources/data/curr/shi_Tfng.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License shi_Tfng{ - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/si.txt b/icuSources/data/curr/si.txt index ddfa3c8a..4d15c5ca 100644 --- a/icuSources/data/curr/si.txt +++ b/icuSources/data/curr/si.txt @@ -122,6 +122,10 @@ si{ "CLP", "චිලි පැසෝ", } + CNH{ + "CNH", + "චීන යුආන් (එතෙර)", + } CNY{ "CN¥", "චීන යුආන්", @@ -372,6 +376,10 @@ si{ } MRO{ "MRO", + "මුරුසි ඔයිගුයියා (1973–2017)", + } + MRU{ + "MRU", "මුරුසි ඔයිගුයියා", } MUR{ @@ -520,6 +528,10 @@ si{ } STD{ "STD", + "සාඕ තෝම් සහ ප්‍රින්සිප් දොබ්‍රා (1977–2017)", + } + STN{ + "STN", "සාඕ තෝම් සහ ප්‍රින්සිප් දොබ්‍රා", } SYP{ @@ -718,7 +730,7 @@ si{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -860,6 +872,10 @@ si{ one{"චිලි පැසෝ"} other{"චිලි පැසෝ"} } + CNH{ + one{"චීන යුආන් (එතෙර)"} + other{"චීන යුආන් (එතෙර)"} + } CNY{ one{"චීන යුආන්"} other{"චීන යුආන්"} @@ -1105,6 +1121,10 @@ si{ other{"මැකනීස් පටකා"} } MRO{ + one{"මුරුසි ඔයිගුයියා (1973–2017)"} + other{"මුරුසි ඔයිගුයියා (1973–2017)"} + } + MRU{ one{"මුරුසි ඔයිගුයියා"} other{"මුරුසි ඔයිගුයියා"} } @@ -1253,6 +1273,10 @@ si{ other{"දකුණු සුඩාන පවුම්"} } STD{ + one{"සාඕ තෝම් සහ ප්‍රින්සිප් දොබ්‍රා (1977–2017)"} + other{"සාඕ තෝම් සහ ප්‍රින්සිප් දොබ්‍රා (1977–2017)"} + } + STN{ one{"සාඕ තෝම් සහ ප්‍රින්සිප් දොබ්‍රා"} other{"සාඕ තෝම් සහ ප්‍රින්සිප් දොබ්‍රා"} } @@ -1373,5 +1397,5 @@ si{ one{"{1}{0}"} other{"{1}{0}"} } - Version{"2.1.33.28"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/sk.txt b/icuSources/data/curr/sk.txt index e87fcabf..87ee33fd 100644 --- a/icuSources/data/curr/sk.txt +++ b/icuSources/data/curr/sk.txt @@ -4,16 +4,24 @@ sk{ Currencies{ ADP{ "ADP", - "andorská peseta", + "andorrská peseta", } AED{ "AED", "SAE dirham", } + AFA{ + "AFA", + "afganský afgání (1927 – 2002)", + } AFN{ "AFN", "afganský afgání", } + ALK{ + "ALK", + "albánsky lek (1946 – 1965)", + } ALL{ "ALL", "albánsky lek", @@ -32,20 +40,28 @@ sk{ } AOK{ "AOK", - "angolská kwanza (1977–1990)", + "angolská kwanza (1977 – 1990)", } AON{ "AON", - "Angolská nová kwanza (1990–2000)", + "angolská nová kwanza (1990 – 2000)", } AOR{ "AOR", - "angolská kwanza reajustado (1995–1999)", + "angolská upravená kwanza (1995 – 1999)", } ARA{ "ARA", "argentínsky austral", } + ARL{ + "ARL", + "argentínske peso ley (1970 – 1983)", + } + ARM{ + "ARM", + "argentínske peso (1881 – 1970)", + } ARP{ "ARP", "argentínske peso (1983 – 1985)", @@ -76,11 +92,15 @@ sk{ } BAD{ "BAD", - "bosniansko-hercegovinský dinár (1992–1994)", + "bosniansko-hercegovinský dinár (1992 – 1994)", } BAM{ "BAM", - "konvertibilná marka", + "bosniansko-hercegovinská konvertibilná marka", + } + BAN{ + "BAN", + "bosniansko-hercegovinský nový dinár (1994 – 1997)", } BBD{ "BBD", @@ -106,10 +126,18 @@ sk{ "BGL", "bulharský tvrdý lev", } + BGM{ + "BGM", + "bulharský socialistický lev", + } BGN{ "BGN", "bulharský lev", } + BGO{ + "BGO", + "bulharský lev (1879 – 1952)", + } BHD{ "BHD", "bahrajnský dinár", @@ -130,6 +158,10 @@ sk{ "BOB", "bolívijské boliviano", } + BOL{ + "BOL", + "bolívijské boliviano (1863 – 1963)", + } BOP{ "BOP", "bolívijské peso", @@ -140,7 +172,7 @@ sk{ } BRB{ "BRB", - "brazílske cruzeiro novo (1967–1986)", + "brazílske nové cruzeiro (1967 – 1986)", } BRC{ "BRC", @@ -156,12 +188,16 @@ sk{ } BRN{ "BRN", - "Brazílske Cruzado Novo", + "brazílske nové cruzado (1989 – 1990)", } BRR{ "BRR", "Brazílske cruzeiro", } + BRZ{ + "BRZ", + "brazílske cruzeiro (1942 – 1967)", + } BSD{ "BSD", "bahamský dolár", @@ -172,7 +208,7 @@ sk{ } BUK{ "BUK", - "Burmese Kyat", + "barmský kyat", } BWP{ "BWP", @@ -180,7 +216,7 @@ sk{ } BYB{ "BYB", - "Bieloruský nový rubeľ (1994–1999)", + "bieloruský rubeľ (1994 – 1999)", } BYN{ "BYN", @@ -202,18 +238,38 @@ sk{ "CDF", "konžský frank", } + CHE{ + "CHE", + "švajčiarske WIR euro", + } CHF{ "CHF", "švajčiarsky frank", } + CHW{ + "CHW", + "švajčiarsky WIR frank", + } + CLE{ + "CLE", + "čilské escudo", + } CLF{ "CLF", - "Čílske Unidades de Fomento", + "čilská účtovná jednotka (UF)", } CLP{ "CLP", "čilské peso", } + CNH{ + "CNH", + "čínsky jüan (pobrežný)", + } + CNX{ + "CNX", + "čínsky dolár ČĽB", + } CNY{ "CNY", "čínsky jüan", @@ -222,13 +278,21 @@ sk{ "COP", "kolumbijské peso", } + COU{ + "COU", + "kolumbijská jednotka reálnej hodnoty", + } CRC{ "CRC", "kostarický colón", } + CSD{ + "CSD", + "srbský dinár (2002 – 2006)", + } CSK{ "CSK", - "Československá koruna", + "československá koruna", } CUC{ "CUC", @@ -244,7 +308,7 @@ sk{ } CYP{ "CYP", - "Cypruská libra", + "cyperská libra", } CZK{ "CZK", @@ -252,11 +316,11 @@ sk{ } DDM{ "DDM", - "Východonemecká marka", + "východonemecká marka", } DEM{ "DEM", - "Nemecká marka", + "nemecká marka", } DJF{ "DJF", @@ -276,15 +340,15 @@ sk{ } ECS{ "ECS", - "Ekuadorský sucre", + "ekvádorský sucre", } ECV{ "ECV", - "Ekuadorský Unidad de Valor Constante (UVC)", + "ekvádorská jednotka konštantnej hodnoty", } EEK{ "EEK", - "Estónska kroon", + "estónska koruna", } EGP{ "EGP", @@ -294,9 +358,17 @@ sk{ "ERN", "eritrejská nakfa", } + ESA{ + "ESA", + "španielska peseta (účet A)", + } + ESB{ + "ESB", + "španielska peseta (konvertibilný účet)", + } ESP{ "ESP", - "Španielská peseta", + "španielska peseta", } ETB{ "ETB", @@ -308,7 +380,7 @@ sk{ } FIM{ "FIM", - "Finská marka", + "fínska marka", } FJD{ "FJD", @@ -320,7 +392,7 @@ sk{ } FRF{ "FRF", - "Francúzsky frank", + "francúzsky frank", } GBP{ "GBP", @@ -328,7 +400,7 @@ sk{ } GEK{ "GEK", - "Gruzínsky Kupon Larit", + "gruzínske kupónové lari", } GEL{ "GEL", @@ -336,7 +408,7 @@ sk{ } GHC{ "GHC", - "Ghanský cedi (1979–2007)", + "ghanské cedi (1979 – 2007)", } GHS{ "GHS", @@ -356,15 +428,15 @@ sk{ } GNS{ "GNS", - "Guinejský syli", + "guinejské syli", } GQE{ "GQE", - "Rovníková Guinea Ekwele Guineana", + "rovníkovoguinejský ekwele", } GRD{ "GRD", - "Grécka drachma", + "grécka drachma", } GTQ{ "GTQ", @@ -372,11 +444,11 @@ sk{ } GWE{ "GWE", - "Portugalská Guinea eskudo", + "portugalsko-guinejské escudo", } GWP{ "GWP", - "Guinejsko-bissauské peso", + "guinejsko-bissauské peso", } GYD{ "GYD", @@ -392,7 +464,7 @@ sk{ } HRD{ "HRD", - "Chorvátsky dinár", + "chorvátsky dinár", } HRK{ "HRK", @@ -412,11 +484,15 @@ sk{ } IEP{ "IEP", - "Írska libra", + "írska libra", } ILP{ "ILP", - "Izraelská libra", + "izraelská libra", + } + ILR{ + "ILR", + "izraelský šekel (1980 – 1985)", } ILS{ "NIS", @@ -434,13 +510,17 @@ sk{ "IRR", "iránsky rial", } + ISJ{ + "ISJ", + "islandská koruna (1918 – 1981)", + } ISK{ "ISK", "islandská koruna", } ITL{ "ITL", - "Talianská lira", + "talianska líra", } JMD{ "JMD", @@ -474,6 +554,14 @@ sk{ "KPW", "severokórejský won", } + KRH{ + "KRH", + "juhokórejský hwan (1953 – 1962)", + } + KRO{ + "KRO", + "juhokórejský won (1945 – 1953)", + } KRW{ "KRW", "juhokórejský won", @@ -508,7 +596,7 @@ sk{ } LSL{ "LSL", - "Lesothský loti", + "lesothský loti", } LTL{ "LTL", @@ -516,19 +604,27 @@ sk{ } LTT{ "LTT", - "Litevský talonas", + "litovský talonas", + } + LUC{ + "LUC", + "luxemburský frank (konvertibilný)", } LUF{ "LUF", - "Luxemburský frank", + "luxemburský frank", + } + LUL{ + "LUL", + "luxemburský frank (finančný)", } LVL{ "LVL", - "Lotyšský lat", + "lotyšský lat", } LVR{ "LVR", - "Lotyšský rubeľ", + "lotyšský rubeľ", } LYD{ "LYD", @@ -540,7 +636,15 @@ sk{ } MAF{ "MAF", - "Marocký frank", + "marocký frank", + } + MCF{ + "MCF", + "monacký frank", + } + MDC{ + "MDC", + "moldavský kupón", } MDL{ "MDL", @@ -552,15 +656,19 @@ sk{ } MGF{ "MGF", - "Madagaskarský frank", + "madagaskarský frank", } MKD{ "MKD", "macedónsky denár", } + MKN{ + "MKN", + "macedónsky denár (1992 – 1993)", + } MLF{ "MLF", - "Malský frank", + "malijský frank", } MMK{ "MMK", @@ -576,20 +684,28 @@ sk{ } MRO{ "MRO", + "mauritánska ukija (1973–2017)", + } + MRU{ + "MRU", "mauritánska ukija", } MTL{ "MTL", - "Maltská lira", + "maltská líra", } MTP{ "MTP", - "Maltská libra", + "maltská libra", } MUR{ "MUR", "maurícijská rupia", } + MVP{ + "MVP", + "maldivská rupia (1947 – 1981)", + } MVR{ "MVR", "maldivská rupia", @@ -604,11 +720,11 @@ sk{ } MXP{ "MXP", - "Mexické striborné peso (1861–1992)", + "mexické strieborné peso (1861 – 1992)", } MXV{ "MXV", - "Mexické Unidad de Inversion (UDI)", + "mexická investičná jednotka", } MYR{ "MYR", @@ -616,11 +732,11 @@ sk{ } MZE{ "MZE", - "Mozambické escudo", + "mozambické escudo", } MZM{ "MZM", - "Mozambický metical (1980–2006)", + "mozambický metical (1980 – 2006)", } MZN{ "MZN", @@ -636,7 +752,7 @@ sk{ } NIC{ "NIC", - "Nikaragujská Cordoba (1988–1991)", + "nikaragujská córdoba (1988 – 1991)", } NIO{ "NIO", @@ -644,7 +760,7 @@ sk{ } NLG{ "NLG", - "Nizozemský guilder", + "holandský gulden", } NOK{ "NOK", @@ -668,7 +784,7 @@ sk{ } PEI{ "PEI", - "Peruvský inti", + "peruánsky inti", } PEN{ "PEN", @@ -676,7 +792,7 @@ sk{ } PES{ "PES", - "peruánsky sol (1863–1965)", + "peruánsky sol (1863 – 1965)", } PGK{ "PGK", @@ -696,11 +812,11 @@ sk{ } PLZ{ "PLZ", - "Polský zloty (1950–1995)", + "poľský zlotý (1950 – 1995)", } PTE{ "PTE", - "Portugalské eskudo", + "portugalské escudo", } PYG{ "PYG", @@ -710,9 +826,13 @@ sk{ "QAR", "katarský rial", } + RHD{ + "RHD", + "rodézsky dolár", + } ROL{ "ROL", - "Rumunský leu (1952–2006)", + "rumunský lei (1952 – 2006)", } RON{ "RON", @@ -728,7 +848,7 @@ sk{ } RUR{ "RUR", - "Ruský rubeľ (1991–1998)", + "ruský rubeľ (1991 – 1998)", } RWF{ "RWF", @@ -748,7 +868,7 @@ sk{ } SDD{ "SDD", - "Sudánsky dinár", + "sudánsky dinár (1992 – 2007)", } SDG{ "SDG", @@ -756,7 +876,7 @@ sk{ } SDP{ "SDP", - "Sudánska libra (1957–1998)", + "sudánska libra (1957 – 1998)", } SEK{ "SEK", @@ -772,11 +892,11 @@ sk{ } SIT{ "SIT", - "Slovinský Tolar", + "slovinský toliar", } SKK{ "SKK", - "Slovenská koruna", + "slovenská koruna", } SLL{ "SLL", @@ -792,7 +912,7 @@ sk{ } SRG{ "SRG", - "Surinamský guilder", + "surinamský zlatý", } SSP{ "SSP", @@ -800,15 +920,19 @@ sk{ } STD{ "STD", + "svätotomášska dobra (1977–2017)", + } + STN{ + "STN", "svätotomášska dobra", } SUR{ "SUR", - "Sovietsky rubeľ", + "sovietsky rubeľ", } SVC{ "SVC", - "Salvádorský colón", + "salvádorský colón", } SYP{ "SYP", @@ -824,7 +948,7 @@ sk{ } TJR{ "TJR", - "Tadžický rubeľ", + "tadžický rubeľ", } TJS{ "TJS", @@ -832,7 +956,7 @@ sk{ } TMM{ "TMM", - "Turkménsky manat (1993–2009)", + "turkménsky manat (1993 – 2009)", } TMT{ "TMT", @@ -848,11 +972,11 @@ sk{ } TPE{ "TPE", - "Timorské eskudo", + "timorské escudo", } TRL{ "TRL", - "Turecká lira (1922–2005)", + "turecká líra (1922 – 2005)", } TRY{ "TRY", @@ -876,11 +1000,11 @@ sk{ } UAK{ "UAK", - "Ukrainský karbovanetz", + "ukrajinský karbovanec", } UGS{ "UGS", - "Ugandan šiling (1966–1987)", + "ugandský šiling (1966 – 1987)", } UGX{ "UGX", @@ -892,15 +1016,19 @@ sk{ } USN{ "USN", - "US dolár (Next day)", + "americký dolár (ďalší deň)", } USS{ "USS", - "US dolár (Same day)", + "americký dolár (rovnaký deň)", + } + UYI{ + "UYI", + "uruguajské peso (v indexovaných jednotkách)", } UYP{ "UYP", - "Uruguajské peso (1975–1993)", + "uruguajské peso (1975 – 1993)", } UYU{ "UYU", @@ -912,7 +1040,7 @@ sk{ } VEB{ "VEB", - "Venezuelský bolívar (1871–2008)", + "venezuelský bolívar (1871 – 2008)", } VEF{ "VEF", @@ -922,6 +1050,10 @@ sk{ "VND", "vietnamský dong", } + VNN{ + "VNN", + "vietnamský dong (1978 – 1985)", + } VUV{ "VUV", "vanuatské vatu", @@ -934,9 +1066,29 @@ sk{ "FCFA", "stredoafrický frank", } + XAG{ + "XAG", + "striebro", + } XAU{ "XAU", - "Zlato", + "zlato", + } + XBA{ + "XBA", + "európska zmiešaná jednotka", + } + XBB{ + "XBB", + "európska peňažná jednotka", + } + XBC{ + "XBC", + "európska jednotka účtu 9 (XBC)", + } + XBD{ + "XBD", + "európska jednotka účtu 17 (XBC)", } XCD{ "EC$", @@ -944,31 +1096,59 @@ sk{ } XDR{ "XDR", - "Špeciálne práva čerpania", + "SDR", + } + XEU{ + "XEU", + "európska menová jednotka", } XFO{ "XFO", - "Francúzsky zlatý frank", + "francúzsky zlatý frank", } XFU{ "XFU", - "Francúzsky UIC-frank", + "francúzsky UIC frank", } XOF{ "CFA", "západoafrický frank", } + XPD{ + "XPD", + "paládium", + } XPF{ "CFPF", "CFP frank", } + XPT{ + "XPT", + "platina", + } + XRE{ + "XRE", + "fondy RINET", + } + XSU{ + "XSU", + "sucre", + } + XTS{ + "XTS", + "kód testovacej meny", + } + XUA{ + "XUA", + "jednotka účtu ADB", + } XXX{ "XXX", "neznáma mena", } YDD{ "YDD", - "Jemenský dinár", + "jemenský dinár", } YER{ "YER", @@ -980,15 +1160,19 @@ sk{ } YUM{ "YUM", - "Juhoslávsky Noviy dinár", + "juhoslovanský nový dinár (1994 – 2002)", } YUN{ "YUN", - "Juhoslávsky dinár", + "juhoslovanský konvertibilný dinár (1990 – 1992)", + } + YUR{ + "YUR", + "juhoslovanský reformovaný dinár (1992 – 1993)", } ZAL{ "ZAL", - "Juhoafrický rand (financial)", + "juhoafrický rand (finančný)", } ZAR{ "ZAR", @@ -996,7 +1180,7 @@ sk{ } ZMK{ "ZMK", - "Zambijská kwacha (1968–2012)", + "zambijská kwacha (1968 – 2012)", } ZMW{ "ZMW", @@ -1004,23 +1188,23 @@ sk{ } ZRN{ "ZRN", - "Zairský nový zaire", + "zairský nový zaire (1993 – 1998)", } ZRZ{ "ZRZ", - "Zairský Zaire", + "zairský zaire (1971 – 1993)", } ZWD{ "ZWD", - "Zimbabwiansky dolár (1980–2008)", + "zimbabwiansky dolár (1980 – 2008)", } ZWL{ "ZWL", - "Zimbabwiansky dolár (2009)", + "zimbabwiansky dolár (2009)", } ZWR{ "ZWR", - "Zimbabwiansky dolár (2008)", + "zimbabwiansky dolár (2008)", } } Currencies%narrow{ @@ -1049,6 +1233,7 @@ sk{ DKK{"kr"} DOP{"$"} EGP{"E£"} + ESP{"₧"} EUR{"€"} FJD{"$"} FKP{"£"} @@ -1078,6 +1263,8 @@ sk{ LBP{"L£"} LKR{"Rs"} LRD{"$"} + LTL{"Lt"} + LVL{"Ls"} MGA{"Ar"} MMK{"K"} MNT{"₮"} @@ -1096,6 +1283,7 @@ sk{ PYG{"₲"} RON{"lei"} RUB{"₽"} + RUR{"р."} RWF{"RF"} SBD{"$"} SEK{"kr"} @@ -1103,7 +1291,7 @@ sk{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1125,18 +1313,36 @@ sk{ TRY{"TL"} } CurrencyPlurals{ + ADP{ + few{"andorrské pesety"} + many{"andorrskej pesety"} + one{"andorrská peseta"} + other{"andorrských pesiet"} + } AED{ few{"SAE dirhamy"} many{"SAE dirhamu"} one{"SAE dirham"} other{"SAE dirhamov"} } + AFA{ + few{"afganské afgání (1927 – 2002)"} + many{"afganského afgání (1927 – 2002)"} + one{"afganský afgání (1927 – 2002)"} + other{"afganských afgání (1927 – 2002)"} + } AFN{ few{"afganské afgání"} many{"afganského afgání"} one{"afganský afgání"} other{"afganských afgání"} } + ALK{ + few{"albánske leky (1946 – 1965)"} + many{"albánskeho leku (1946 – 1965)"} + one{"albánsky lek (1946 – 1965)"} + other{"albánskych lekov (1946 – 1965)"} + } ALL{ few{"albánske leky"} many{"albánskeho leku"} @@ -1161,12 +1367,60 @@ sk{ one{"angolská kwanza"} other{"angolských kwánz"} } + AOK{ + few{"angolské kwanzy (1977 – 1990)"} + many{"angolskej kwanzy (1977 – 1990)"} + one{"angolská kwanza (1977 – 1990)"} + other{"angolských kwánz (1977 – 1990)"} + } + AON{ + few{"angolské nové kwanzy (1990 – 2000)"} + many{"angolskej novej kwanzy (1990 – 2000)"} + one{"angolská nová kwanza (1990 – 2000)"} + other{"angolských nových kwánz (1990 – 2000)"} + } + AOR{ + few{"angolské upravené kwanzy (1995 – 1999)"} + many{"angolskej upravenej kwanzy (1995 – 1999)"} + one{"angolská upravená kwanza (1995 – 1999)"} + other{"angolských upravených kwánz (1995 – 1999)"} + } + ARA{ + few{"argentínske australy"} + many{"argentínskeho australu"} + one{"argentínsky austral"} + other{"argentínskych australov"} + } + ARL{ + few{"argentínske pesos ley (1970 – 1983)"} + many{"argentínskeho pesa ley (1970 – 1983)"} + one{"argentínske peso ley (1970 – 1983)"} + other{"argentínskych pesos ley (1970 – 1983)"} + } + ARM{ + few{"argentínske pesos (1881 – 1970)"} + many{"argentínskeho pesa (1881 – 1970)"} + one{"argentínske peso (1881 – 1970)"} + other{"argentínskych pesos (1881 – 1970)"} + } + ARP{ + few{"argentínske pesos (1983 – 1985)"} + many{"argentínskeho pesa (1983 – 1985)"} + one{"argentínske peso (1983 – 1985)"} + other{"argentínskych pesos (1983 – 1985)"} + } ARS{ few{"argentínske pesos"} many{"argentínskeho pesa"} one{"argentínske peso"} other{"argentínskych pesos"} } + ATS{ + few{"rakúske šilingy"} + many{"rakúskeho šilingu"} + one{"rakúsky šiling"} + other{"rakúskych šilingov"} + } AUD{ few{"austrálske doláre"} many{"austrálskeho dolára"} @@ -1191,11 +1445,23 @@ sk{ one{"azerbajdžanský manat"} other{"azerbajdžanských manatov"} } + BAD{ + few{"bosniansko-hercegovinské dináre (1992 – 1994)"} + many{"bosniansko-hercegovinského dinára (1992 – 1994)"} + one{"bosniansko-hercegovinský dinár (1992 – 1994)"} + other{"bosniansko-hercegovinských dinárov (1992 – 1994)"} + } BAM{ - few{"konvertibilné marky"} - many{"konvertibilnej marky"} - one{"konvertibilná marka"} - other{"konvertibilných mariek"} + few{"bosniansko-hercegovinské konvertibilné marky"} + many{"bosniansko-hercegovinskej konvertibilnej marky"} + one{"bosniansko-hercegovinská konvertibilná marka"} + other{"bosniansko-hercegovinských konvertibilných mariek"} + } + BAN{ + few{"bosniansko-hercegovinské nové dináre (1994 – 1997)"} + many{"bosniansko-hercegovinského nového dinára (1994 – 1997)"} + one{"bosniansko-hercegovinský nový dinár (1994 – 1997)"} + other{"bosniansko-hercegovinské nové dináre (1994 – 1997)"} } BBD{ few{"barbadoské doláre"} @@ -1209,12 +1475,48 @@ sk{ one{"bangladéšska taka"} other{"bangladéšskych ták"} } + BEC{ + few{"belgické franky (konvertibilné)"} + many{"belgického franku (konvertibilného)"} + one{"belgický frank (konvertibilný)"} + other{"belgických frankov (konvertibilných)"} + } + BEF{ + few{"belgické franky"} + many{"belgického franku"} + one{"belgický frank"} + other{"belgických frankov"} + } + BEL{ + few{"belgické franky (finančné)"} + many{"belgického franku (finančného)"} + one{"belgický frank (finančný)"} + other{"belgických frankov (finančných)"} + } + BGL{ + few{"bulharské tvrdé leva"} + many{"bulharského tvrdého leva"} + one{"bulharský tvrdý lev"} + other{"bulharských tvrdých leva"} + } + BGM{ + few{"bulharské socialistické leva"} + many{"bulharského socialistického leva"} + one{"bulharský socialistický lev"} + other{"bulharských socialistických leva"} + } BGN{ few{"bulharské leva"} many{"bulharského leva"} one{"bulharský lev"} other{"bulharských leva"} } + BGO{ + few{"bulharské leva (1879 – 1952)"} + many{"bulharského leva (1879 – 1952)"} + one{"bulharský lev (1879 – 1952)"} + other{"bulharských leva (1879 – 1952)"} + } BHD{ few{"bahrajnské dináre"} many{"bahrajnského dinára"} @@ -1245,12 +1547,66 @@ sk{ one{"bolívijské boliviano"} other{"bolívijských bolivian"} } + BOL{ + few{"bolívijské boliviana (1863 – 1963)"} + many{"bolívijského boliviana (1863 – 1963)"} + one{"bolívijské boliviano (1863 – 1963)"} + other{"bolívijských bolivian (1863 – 1963)"} + } + BOP{ + few{"bolívijské pesos"} + many{"bolívijského pesa"} + one{"bolívijské peso"} + other{"bolívijských pesos"} + } + BOV{ + few{"bolívijské mvdoly"} + many{"bolívijského mvdolu"} + one{"bolívijský mvdol"} + other{"bolívijských mvdolov"} + } + BRB{ + few{"brazílske nové cruzeirá (1967 – 1986)"} + many{"brazílskeho nového cruzeira (1967 – 1986)"} + one{"brazílske nové cruzeiro (1967 – 1986)"} + other{"brazílskych nových cruzeir (1967 – 1986)"} + } + BRC{ + few{"brazílske cruzadá (1986 – 1989)"} + many{"brazílskeho cruzada (1986 – 1989)"} + one{"brazílske cruzado (1986 – 1989)"} + other{"brazílskych cruzad (1986 – 1989)"} + } + BRE{ + few{"brazílske cruzeirá (1990 – 1993)"} + many{"brazílskeho cruzeira (1990 – 1993)"} + one{"brazílske cruzeiro (1990 – 1993)"} + other{"brazílskych cruzeir (1990 – 1993)"} + } BRL{ few{"brazílske realy"} many{"brazílskeho realu"} one{"brazílsky real"} other{"brazílskych realov"} } + BRN{ + few{"brazílske nové cruzadá (1989 – 1990)"} + many{"brazílskeho nového cruzada (1989 – 1990)"} + one{"brazílske nové cruzado (1989 – 1990)"} + other{"brazílskych nových cruzad (1989 – 1990)"} + } + BRR{ + few{"brazílske cruzeirá (1993 – 1994)"} + many{"brazílskeho cruzeira (1993 – 1994)"} + one{"brazílske cruzeiro (1993 – 1994)"} + other{"brazílskych cruzeir (1993 – 1994)"} + } + BRZ{ + few{"brazílske cruzeirá (1942 – 1967)"} + many{"brazílskeho cruzeira (1942 – 1967)"} + one{"brazílske cruzeiro (1942 – 1967)"} + other{"brazílskych cruzeir (1942 – 1967)"} + } BSD{ few{"bahamské doláre"} many{"bahamského dolára"} @@ -1263,6 +1619,12 @@ sk{ one{"bhutánsky ngultrum"} other{"bhutánskych ngultrumov"} } + BUK{ + few{"barmské kyaty"} + many{"barmského kyatu"} + one{"barmský kyat"} + other{"barmských kyatov"} + } BWP{ few{"botswanské puly"} many{"botswanskej puly"} @@ -1270,10 +1632,10 @@ sk{ other{"botswanských púl"} } BYB{ - few{"bieloruské nové ruble (1994–1999)"} - many{"bieloruského nového rubľa (1994–1999)"} - one{"bieloruský nový rubeľ (1994–1999)"} - other{"bieloruských nových rubľov (1994–1999)"} + few{"bieloruské ruble (1994 – 1999)"} + many{"bieloruského rubľa (1994 – 1999)"} + one{"bieloruský rubeľ (1994 – 1999)"} + other{"bieloruských rubľov (1994 – 1999)"} } BYN{ few{"bieloruské ruble"} @@ -1305,18 +1667,54 @@ sk{ one{"konžský frank"} other{"konžských frankov"} } + CHE{ + few{"švajčiarske WIR eurá"} + many{"švajčiarskeho WIR eura"} + one{"švajčiarske WIR euro"} + other{"švajčiarskych WIR eur"} + } CHF{ few{"švajčiarske franky"} many{"švajčiarskeho franku"} one{"švajčiarsky frank"} other{"švajčiarskych frankov"} } + CHW{ + few{"švajčiarske WIR franky"} + many{"švajčiarskeho WIR franku"} + one{"švajčiarsky WIR frank"} + other{"švajčiarskych WIR frankov"} + } + CLE{ + few{"čilské escudá"} + many{"čilského escuda"} + one{"čilské escudo"} + other{"čilských escúd"} + } + CLF{ + few{"čilské účtovné jednotky (UF)"} + many{"čilskej účtovnej jednotky (UF)"} + one{"čilská účtovná jednotka (UF)"} + other{"čilských účtovných jednotiek (UF)"} + } CLP{ few{"čilské pesos"} many{"čilského pesa"} one{"čilské peso"} other{"čilských pesos"} } + CNH{ + few{"čínske jüany (pobrežné)"} + many{"čínskeho jüana (pobrežného)"} + one{"čínsky jüan (pobrežný)"} + other{"čínskych jüanov (pobrežných)"} + } + CNX{ + few{"čínske doláre ČĽB"} + many{"čínskeho dolára ČĽB"} + one{"čínsky dolár ČĽB"} + other{"čínskych dolárov ČĽB"} + } CNY{ few{"čínske jüany"} many{"čínskeho jüana"} @@ -1329,12 +1727,30 @@ sk{ one{"kolumbijské peso"} other{"kolumbijských pesos"} } + COU{ + few{"kolumbijské jednotky reálnej hodnoty"} + many{"kolumbijskej jednotky reálnej hodnoty"} + one{"kolumbijská jednotka reálnej hodnoty"} + other{"kolumbijských jednotiek reálnej hodnoty"} + } CRC{ few{"kostarické colóny"} many{"kostarického colóna"} one{"kostarický colón"} other{"kostarických colónov"} } + CSD{ + few{"srbské dináre (2002 – 2006)"} + many{"srbského dinára (2002 – 2006)"} + one{"srbský dinár (2002 – 2006)"} + other{"srbských dinárov (2002 – 2006)"} + } + CSK{ + few{"československé koruny"} + many{"československej koruny"} + one{"československá koruna"} + other{"československých korún"} + } CUC{ few{"kubánske konvertibilné pesos"} many{"kubánskeho konvertibilného pesa"} @@ -1353,12 +1769,30 @@ sk{ one{"kapverdské escudo"} other{"kapverdských escúd"} } + CYP{ + few{"cyperské libry"} + many{"cyperskej libry"} + one{"cyperská libra"} + other{"cyperských libier"} + } CZK{ few{"české koruny"} many{"českej koruny"} one{"česká koruna"} other{"českých korún"} } + DDM{ + few{"východonemecké marky"} + many{"východonemeckej marky"} + one{"východonemecká marka"} + other{"východonemeckých mariek"} + } + DEM{ + few{"nemecké marky"} + many{"nemeckej marky"} + one{"nemecká marka"} + other{"nemeckých mariek"} + } DJF{ few{"džibutské franky"} many{"džibutského franku"} @@ -1383,11 +1817,23 @@ sk{ one{"alžírsky dinár"} other{"alžírskych dinárov"} } + ECS{ + few{"ekvádorské sucre"} + many{"ekvádorského sucre"} + one{"ekvádorský sucre"} + other{"ekvádorských sucre"} + } + ECV{ + few{"ekvádorské jednotky konštantnej hodnoty"} + many{"ekvádorskej jednotky konštantnej hodnoty"} + one{"ekvádorská jednotka konštantnej hodnoty"} + other{"ekvádorských jednotiek konštantnej hodnoty"} + } EEK{ - few{"estónske kroony"} - many{"estónskej kroony"} - one{"estónska kroon"} - other{"estónskych kroon"} + few{"estónske koruny"} + many{"estónskej koruny"} + one{"estónska koruna"} + other{"estónskych korún"} } EGP{ few{"egyptské libry"} @@ -1401,6 +1847,24 @@ sk{ one{"eritrejská nakfa"} other{"eritrejských nakief"} } + ESA{ + few{"španielske pesety (účet A)"} + many{"španielskej pesety (účet A)"} + one{"španielska peseta (účet A)"} + other{"španielskych pesiet (účet A)"} + } + ESB{ + few{"španielske pesety (konvertibilný účet)"} + many{"španielskej pesety (konvertibilný účet)"} + one{"španielska peseta (konvertibilný účet)"} + other{"španielskych pesiet (konvertibilný účet)"} + } + ESP{ + few{"španielske pesety"} + many{"španielskej pesety"} + one{"španielska peseta"} + other{"španielskych pesiet"} + } ETB{ few{"etiópske birry"} many{"etiópskeho birru"} @@ -1413,6 +1877,12 @@ sk{ one{"euro"} other{"eur"} } + FIM{ + few{"fínske marky"} + many{"fínskej marky"} + one{"fínska marka"} + other{"fínskych mariek"} + } FJD{ few{"fidžijské doláre"} many{"fidžijského dolára"} @@ -1425,12 +1895,24 @@ sk{ one{"falklandská libra"} other{"falklandských libier"} } + FRF{ + few{"francúzske franky"} + many{"francúzskeho franku"} + one{"francúzsky frank"} + other{"francúzskych frankov"} + } GBP{ few{"britské libry"} many{"britskej libry"} one{"britská libra"} other{"britských libier"} } + GEK{ + few{"gruzínske kupónové lari"} + many{"gruzínskeho kupónového lari"} + one{"gruzínske kupónové lari"} + other{"gruzínskych kupónových lari"} + } GEL{ few{"gruzínske lari"} many{"gruzínskeho lari"} @@ -1438,10 +1920,10 @@ sk{ other{"gruzínskych lari"} } GHC{ - few{"ghanské cedi (1979–2007)"} - many{"ghanského cedi (1979–2007)"} - one{"ghanský cedi (1979–2007)"} - other{"ghanských cedi (1979–2007)"} + few{"ghanské cedi (1979 – 2007)"} + many{"ghanského cedi (1979 – 2007)"} + one{"ghanské cedi (1979 – 2007)"} + other{"ghanských cedi (1979 – 2007)"} } GHS{ few{"ghanské cedi"} @@ -1467,17 +1949,41 @@ sk{ one{"guinejský frank"} other{"guinejských frankov"} } + GNS{ + few{"guinejské syli"} + many{"guinejského syli"} + one{"guinejské syli"} + other{"guinejských syli"} + } + GQE{ + few{"rovníkovoguinejské ekwele"} + many{"rovníkovoguinejského ekwele"} + one{"rovníkovoguinejský ekwele"} + other{"rovníkovoguinejských ekwele"} + } + GRD{ + few{"grécke drachmy"} + many{"gréckej drachmy"} + one{"grécka drachma"} + other{"gréckych drachiem"} + } GTQ{ few{"guatemalské quetzaly"} many{"guatemalského quetzala"} one{"guatemalský quetzal"} other{"guatemalských quetzalov"} } + GWE{ + few{"portugalsko-guinejské escudá"} + many{"portugalsko-guinejského escuda"} + one{"portugalsko-guinejské escudo"} + other{"portugalsko-guinejských escúd"} + } GWP{ - few{"Guinea-Bissau pesos"} - many{"Guinea-Bissau pesa"} - one{"Guinea-Bissau peso"} - other{"Guinea-Bissau pesos"} + few{"guinejsko-bissauské pesos"} + many{"guinejsko-bissauského pesa"} + one{"guinejsko-bissauské peso"} + other{"guinejsko-bissauských pesos"} } GYD{ few{"guyanské doláre"} @@ -1497,6 +2003,12 @@ sk{ one{"honduraská lempira"} other{"honduraských lempír"} } + HRD{ + few{"chorvátske dináre"} + many{"chorvátskeho dinára"} + one{"chorvátsky dinár"} + other{"chorvátskych dinárov"} + } HRK{ few{"chorvátske kuny"} many{"chorvátskej kuny"} @@ -1521,6 +2033,24 @@ sk{ one{"indonézska rupia"} other{"indonézskych rupií"} } + IEP{ + few{"írske libry"} + many{"írskej libry"} + one{"írska libra"} + other{"írskych libier"} + } + ILP{ + few{"izraelské libry"} + many{"izraelskej libry"} + one{"izraelská libra"} + other{"izraelských libier"} + } + ILR{ + few{"izraelské šekely (1980 – 1985)"} + many{"izraelského šekela (1980 – 1985)"} + one{"izraelský šekel (1980 – 1985)"} + other{"izraelských šekelov (1980 – 1985)"} + } ILS{ few{"izraelské šekely"} many{"izraelského šekela"} @@ -1545,12 +2075,24 @@ sk{ one{"iránsky rial"} other{"iránskych rialov"} } + ISJ{ + few{"islandské koruny (1918 – 1981)"} + many{"islandskej koruny (1918 – 1981)"} + one{"islandská koruna (1918 – 1981)"} + other{"islandských korún (1918 – 1981)"} + } ISK{ few{"islandské koruny"} many{"islandskej koruny"} one{"islandská koruna"} other{"islandských korún"} } + ITL{ + few{"talianske líry"} + many{"talianskej líry"} + one{"talianska líra"} + other{"talianskych lír"} + } JMD{ few{"jamajské doláre"} many{"jamajského dolára"} @@ -1599,6 +2141,18 @@ sk{ one{"severokórejský won"} other{"severokórejských wonov"} } + KRH{ + few{"juhokórejské hwany (1953 – 1962)"} + many{"juhokórejského hwanu (1953 – 1962)"} + one{"juhokórejský hwan (1953 – 1962)"} + other{"juhokórejských hwanov (1953 – 1962)"} + } + KRO{ + few{"juhokórejské wony (1945 – 1953)"} + many{"juhokórejského wonu (1945 – 1953)"} + one{"juhokórejský won (1945 – 1953)"} + other{"juhokórejských wonov (1945 – 1953)"} + } KRW{ few{"juhokórejské wony"} many{"juhokórejského wonu"} @@ -1647,18 +2201,54 @@ sk{ one{"libérijský dolár"} other{"libérijských dolárov"} } + LSL{ + few{"lesothské loti"} + many{"lesothského loti"} + one{"lesothský loti"} + other{"lesothských loti"} + } LTL{ few{"litovské lity"} many{"litovského litu"} one{"litovský litas"} other{"litovských litov"} } + LTT{ + few{"litovské talony"} + many{"litovského talonu"} + one{"litovský talonas"} + other{"litovských talonov"} + } + LUC{ + few{"luxemburské franky (konvertibilné)"} + many{"luxemburského franku (konvertibilného)"} + one{"luxemburský frank (konvertibilný)"} + other{"luxemburských frankov (konvertibilných)"} + } + LUF{ + few{"luxemburské franky"} + many{"luxemburského franku"} + one{"luxemburský frank"} + other{"luxemburských frankov"} + } + LUL{ + few{"luxemburské franky (finančné)"} + many{"luxemburského franku (finančného)"} + one{"luxemburský frank (finančný)"} + other{"luxemburských frankov (finančných)"} + } LVL{ few{"lotyšské laty"} many{"lotyšského latu"} one{"lotyšský lat"} other{"lotyšských latov"} } + LVR{ + few{"lotyšské ruble"} + many{"lotyšského rubľa"} + one{"lotyšský rubeľ"} + other{"lotyšských rubľov"} + } LYD{ few{"líbyjské dináre"} many{"líbyjského dinára"} @@ -1671,6 +2261,24 @@ sk{ one{"marocký dirham"} other{"marockých dirhamov"} } + MAF{ + few{"marocké franky"} + many{"marockého franku"} + one{"marocký frank"} + other{"marockých frankov"} + } + MCF{ + few{"monacké franky"} + many{"monackého franku"} + one{"monacký frank"} + other{"monackých frankov"} + } + MDC{ + few{"moldavské kupóny"} + many{"moldavského kupónu"} + one{"moldavský kupón"} + other{"moldavských kupónov"} + } MDL{ few{"moldavské lei"} many{"moldavského lei"} @@ -1683,12 +2291,30 @@ sk{ one{"malgašský ariary"} other{"malgašských ariary"} } + MGF{ + few{"madagaskarské franky"} + many{"madagaskarského franku"} + one{"madagaskarský frank"} + other{"madagaskarských frankov"} + } MKD{ few{"macedónske denáre"} many{"macedónskeho denára"} one{"macedónsky denár"} other{"macedónskych denárov"} } + MKN{ + few{"macedónske denáre (1992 – 1993)"} + many{"macedónskeho denára (1992 – 1993)"} + one{"macedónsky denár (1992 – 1993)"} + other{"macedónskych denárov (1992 – 1993)"} + } + MLF{ + few{"malijské franky"} + many{"malijského franku"} + one{"malijský frank"} + other{"malijské franky"} + } MMK{ few{"mjanmarské kyaty"} many{"mjanmarského kyatu"} @@ -1708,17 +2334,41 @@ sk{ other{"macajských patác"} } MRO{ + few{"mauritánske ukije (1973–2017)"} + many{"mauritánskej ukije (1973–2017)"} + one{"mauritánska ukija (1973–2017)"} + other{"mauritánskych ukijí (1973–2017)"} + } + MRU{ few{"mauritánske ukije"} many{"mauritánskej ukije"} one{"mauritánska ukija"} other{"mauritánskych ukijí"} } + MTL{ + few{"maltské líry"} + many{"maltskej líry"} + one{"maltská líra"} + other{"maltských lír"} + } + MTP{ + few{"maltské libry"} + many{"maltskej libry"} + one{"maltská libra"} + other{"maltských libier"} + } MUR{ few{"maurícijské rupie"} many{"maurícijskej rupie"} one{"maurícijská rupia"} other{"maurícijských rupií"} } + MVP{ + few{"maldivské rupie (1947 – 1981)"} + many{"maldivskej rupie (1947 – 1981)"} + one{"maldivská rupia (1947 – 1981)"} + other{"maldivských rupií (1947 – 1981)"} + } MVR{ few{"maldivské rupie"} many{"maldivskej rupie"} @@ -1737,6 +2387,18 @@ sk{ one{"mexické peso"} other{"mexických pesos"} } + MXP{ + few{"mexické strieborné pesos (1861 – 1992)"} + many{"mexického strieborného pesa (1861 – 1992)"} + one{"mexické strieborné peso (1861 – 1992)"} + other{"mexických strieborných pesos (1861 – 1992)"} + } + MXV{ + few{"mexické investičné jednotky"} + many{"mexickej investičnej jednotky"} + one{"mexická investičná jednotka"} + other{"mexických investičných jednotiek"} + } MYR{ few{"malajzijské ringgity"} many{"malajzijského ringgitu"} @@ -1744,10 +2406,10 @@ sk{ other{"malajzijských ringgitov"} } MZE{ - few{"mozabické escudá"} - many{"mozabického escuda"} - one{"mozabické escudo"} - other{"mozabických escúd"} + few{"mozambické escudá"} + many{"mozambického escuda"} + one{"mozambické escudo"} + other{"mozambických escúd"} } MZM{ few{"mozambické meticaly (1980–2006)"} @@ -1785,6 +2447,12 @@ sk{ one{"nikaragujská córdoba"} other{"nikaragujských córdob"} } + NLG{ + few{"holandské guldeny"} + many{"holandského guldena"} + one{"holandský gulden"} + other{"holandských guldenov"} + } NOK{ few{"nórske koruny"} many{"nórskej koruny"} @@ -1815,6 +2483,12 @@ sk{ one{"panamská balboa"} other{"panamských balboí"} } + PEI{ + few{"peruánske inti"} + many{"peruánskeho inti"} + one{"peruánsky inti"} + other{"peruánskych inti"} + } PEN{ few{"peruánske soly"} many{"peruánskeho sola"} @@ -1852,10 +2526,16 @@ sk{ other{"poľských zlotých"} } PLZ{ - few{"poľské zloté (1950–1995)"} - many{"poľského zlotého (1950–1995)"} - one{"poľský zlotý (1950–1995)"} - other{"poľských zlotých (1950–1995)"} + few{"poľské zloté (1950 – 1995)"} + many{"poľského zlotého (1950 – 1995)"} + one{"poľský zlotý (1950 – 1995)"} + other{"poľských zlotých (1950 – 1995)"} + } + PTE{ + few{"portugalské escudá"} + many{"portugalského escuda"} + one{"portugalské escudo"} + other{"portugalských escúd"} } PYG{ few{"paraguajské guaraní"} @@ -1869,11 +2549,17 @@ sk{ one{"katarský rial"} other{"katarských rialov"} } + RHD{ + few{"rodézske doláre"} + many{"rodézskeho dolára"} + one{"rodézsky dolár"} + other{"rodézskych dolárov"} + } ROL{ - few{"rumunské leu (1952–2006)"} - many{"rumunského leu (1952–2006)"} - one{"rumunský leu (1952–2006)"} - other{"rumunských leu (1952–2006)"} + few{"rumunské lei (1952 – 2006)"} + many{"rumunského lei (1952 – 2006)"} + one{"rumunský lei (1952 – 2006)"} + other{"rumunských lei (1952 – 2006)"} } RON{ few{"rumunské lei"} @@ -1893,6 +2579,12 @@ sk{ one{"ruský rubeľ"} other{"ruských rubľov"} } + RUR{ + few{"ruské ruble (1991 – 1998)"} + many{"ruského rubľa (1991 – 1998)"} + one{"ruský rubeľ (1991 – 1998)"} + other{"ruských rubľov (1991 – 1998)"} + } RWF{ few{"rwandské franky"} many{"rwandského franku"} @@ -1917,6 +2609,12 @@ sk{ one{"seychelská rupia"} other{"seychelských rupií"} } + SDD{ + few{"sudánske dináre (1992 – 2007)"} + many{"sudánskeho dinára (1992 – 2007)"} + one{"sudánsky dinár (1992 – 2007)"} + other{"sudánskych dinárov (1992 – 2007)"} + } SDG{ few{"sudánske libry"} many{"sudánskej libry"} @@ -1924,10 +2622,10 @@ sk{ other{"sudánskych libier"} } SDP{ - few{"sudánske libry (1957–1998)"} - many{"sudánskej libry (1957–1998)"} - one{"sudánska libra (1957–1998)"} - other{"sudánskych libier (1957–1998)"} + few{"sudánske libry (1957 – 1998)"} + many{"sudánskej libry (1957 – 1998)"} + one{"sudánska libra (1957 – 1998)"} + other{"sudánskych libier (1957 – 1998)"} } SEK{ few{"švédske koruny"} @@ -1947,6 +2645,18 @@ sk{ one{"svätohelenská libra"} other{"svätohelenských libier"} } + SIT{ + few{"slovinské toliare"} + many{"slovinského toliara"} + one{"slovinský toliar"} + other{"slovinských toliarov"} + } + SKK{ + few{"slovenské koruny"} + many{"slovenskej koruny"} + one{"slovenská koruna"} + other{"slovenských korún"} + } SLL{ few{"sierraleonské leone"} many{"sierraleonského leone"} @@ -1965,6 +2675,12 @@ sk{ one{"surinamský dolár"} other{"surinamských dolárov"} } + SRG{ + few{"surinamské zlaté"} + many{"surinamského zlatého"} + one{"surinamský zlatý"} + other{"surinamských zlatých"} + } SSP{ few{"juhosudánske libry"} many{"juhosudánskej libry"} @@ -1972,11 +2688,23 @@ sk{ other{"juhosudánskych libier"} } STD{ + few{"svätotomášske dobry (1977–2017)"} + many{"svätotomášskej dobry (1977–2017)"} + one{"svätotomášska dobra (1977–2017)"} + other{"svätotomášskych dobier (1977–2017)"} + } + STN{ few{"svätotomášske dobry"} many{"svätotomášskej dobry"} one{"svätotomášska dobra"} other{"svätotomášskych dobier"} } + SUR{ + few{"sovietske ruble"} + many{"sovietskeho rubľa"} + one{"sovietsky rubeľ"} + other{"sovietskych rubľov"} + } SVC{ few{"salvádorské colóny"} many{"salvádorského colóna"} @@ -2001,6 +2729,12 @@ sk{ one{"thajský baht"} other{"thajských bahtov"} } + TJR{ + few{"tadžické ruble"} + many{"tadžického rubľa"} + one{"tadžický rubeľ"} + other{"tadžických rubľov"} + } TJS{ few{"tadžické somoni"} many{"tadžického somoni"} @@ -2008,10 +2742,10 @@ sk{ other{"tadžických somoni"} } TMM{ - few{"turkménske manaty (1993–2009)"} - many{"turkménskeho manatu (1993–2009)"} - one{"turkménsky manat (1993–2009)"} - other{"turkménskych manatov (1993–2009)"} + few{"turkménske manaty (1993 – 2009)"} + many{"turkménskeho manatu (1993 – 2009)"} + one{"turkménsky manat (1993 – 2009)"} + other{"turkménskych manatov (1993 – 2009)"} } TMT{ few{"turkménske manaty"} @@ -2031,11 +2765,17 @@ sk{ one{"tongská pa’anga"} other{"tongských pa’anga"} } + TPE{ + few{"timorské escudá"} + many{"timorského escuda"} + one{"timorské escudo"} + other{"timorských escúd"} + } TRL{ - few{"turecké líry (1922–2005)"} - many{"tureckej líry (1922–2005)"} - one{"turecká líra (1922–2005)"} - other{"tureckých lír (1922–2005)"} + few{"turecké líry (1922 – 2005)"} + many{"tureckej líry (1922 – 2005)"} + one{"turecká líra (1922 – 2005)"} + other{"tureckých lír (1922 – 2005)"} } TRY{ few{"turecké líry"} @@ -2067,6 +2807,18 @@ sk{ one{"ukrajinská hrivna"} other{"ukrajinských hrivien"} } + UAK{ + few{"ukrajinské karbovance"} + many{"ukrajinského karbovanca"} + one{"ukrajinský karbovanec"} + other{"ukrajinských karbovancov"} + } + UGS{ + few{"ugandské šilingy (1966 – 1987)"} + many{"ugandského šilingu (1966 – 1987)"} + one{"ugandský šiling (1966 – 1987)"} + other{"ugandských šilingov (1966 – 1987)"} + } UGX{ few{"ugandské šilingy"} many{"ugandského šilingu"} @@ -2079,6 +2831,30 @@ sk{ one{"americký dolár"} other{"amerických dolárov"} } + USN{ + few{"americké doláre (ďalší deň)"} + many{"amerického dolára (ďalší deň)"} + one{"americký dolár (ďalší deň)"} + other{"amerických dolárov (ďalší deň)"} + } + USS{ + few{"americké doláre (rovnaký deň)"} + many{"amerického dolára (rovnaký deň)"} + one{"americký dolár (rovnaký deň)"} + other{"amerických dolárov (rovnaký deň)"} + } + UYI{ + few{"uruguajské pesos (v indexovaných jednotkách)"} + many{"uruguajského pesa (v indexovaných jednotkách)"} + one{"uruguajské peso (v indexovaných jednotkách)"} + other{"uruguajských pesos (v indexovaných jednotkách)"} + } + UYP{ + few{"uruguajské pesos (1975 – 1993)"} + many{"uruguajského pesa (1975 – 1993)"} + one{"uruguajské peso (1975 – 1993)"} + other{"uruguajských pesos (1975 – 1993)"} + } UYU{ few{"uruguajské pesos"} many{"uruguajského pesa"} @@ -2091,6 +2867,12 @@ sk{ one{"uzbecký sum"} other{"uzbeckých sumov"} } + VEB{ + few{"venezuelské bolívary (1871 – 2008)"} + many{"venezuelského bolívaru (1871 – 2008)"} + one{"venezuelský bolívar (1871 – 2008)"} + other{"venezuelských bolívarov (1871 – 2008)"} + } VEF{ few{"venezuelské bolívary"} many{"venezuelského bolívaru"} @@ -2103,6 +2885,12 @@ sk{ one{"vietnamský dong"} other{"vietnamských dongov"} } + VNN{ + few{"vietnamské dongy (1978 – 1985)"} + many{"vietnamského dongu (1978 – 1985)"} + one{"vietnamský dong (1978 – 1985)"} + other{"vietnamských dongov (1978 – 1985)"} + } VUV{ few{"vanuatské vatu"} many{"vanuatského vatu"} @@ -2121,36 +2909,168 @@ sk{ one{"stredoafrický frank"} other{"stredoafrických frankov"} } + XAG{ + few{"trójske unce striebra"} + many{"trójskej unce striebra"} + one{"trójska unca striebra"} + other{"trójskych uncí striebra"} + } + XAU{ + few{"trójske unce zlata"} + many{"trójskej unce zlata"} + one{"trójska unca zlata"} + other{"trójskych uncí zlata"} + } + XBA{ + few{"európske zmiešané jednotky"} + many{"európskej zmiešanej jednotky"} + one{"európska zmiešaná jednotka"} + other{"európskych zmiešaných jednotiek"} + } + XBB{ + few{"európske peňažné jednotky"} + many{"európskej peňažnek jednotky"} + one{"európska peňažná jednotka"} + other{"európskych peňažných jednotiek"} + } + XBC{ + few{"európske jednotky účtu 9 (XBC)"} + many{"európskej jednotky účtu 9 (XBC)"} + one{"európska jednotka účtu 9 (XBC)"} + other{"európskych jednotiek účtu 9 (XBC)"} + } + XBD{ + few{"európske jednotky účtu 17 (XBC)"} + many{"európskej jednotky účtu 17 (XBC)"} + one{"európska jednotka účtu 17 (XBC)"} + other{"európskych jednotiek účtu 17 (XBC)"} + } XCD{ few{"východokaribské doláre"} many{"východokaribského dolára"} one{"východokaribský dolár"} other{"východokaribských dolárov"} } + XDR{ + few{"SDR"} + many{"SDR"} + one{"SDR"} + other{"SDR"} + } + XEU{ + few{"európske menové jednotky"} + many{"európskej menovej jednotky"} + one{"európska menová jednotka"} + other{"európskych menových jednotiek"} + } + XFO{ + few{"francúzske zlaté franky"} + many{"francúzskeho zlatého franku"} + one{"francúzsky zlatý frank"} + other{"francúzskych zlatých frankov"} + } + XFU{ + few{"francúzske UIC franky"} + many{"francúzskeho UIC franku"} + one{"francúzsky UIC frank"} + other{"francúzskych UIC frankov"} + } XOF{ few{"západoafrické franky"} many{"západoafrického franku"} one{"západoafrický frank"} other{"západoafrických frankov"} } + XPD{ + few{"trójske unce paládia"} + many{"trójskej unce paládia"} + one{"trójska unca paládia"} + other{"trójskych uncí paládia"} + } XPF{ few{"CFP franky"} many{"CFP franku"} one{"CFP frank"} other{"CFP frankov"} } + XPT{ + few{"trójske unce platiny"} + many{"trójskej unce platiny"} + one{"trójska unca platiny"} + other{"trójskej unce platiny"} + } + XRE{ + few{"jednotky fondov RINET"} + many{"jednotky fondov RINET"} + one{"jednotka fondov RINET"} + other{"jednotiek fondov RINET"} + } + XSU{ + few{"sucre"} + many{"sucre"} + one{"sucre"} + other{"sucre"} + } + XTS{ + few{"jednotky testovacej meny"} + many{"jednotky testovacej meny"} + one{"jednotka testovacej meny"} + other{"jednotiek testovacej meny"} + } + XUA{ + few{"jednotky účtu ADB"} + many{"jednotky účtu ADB"} + one{"jednotka účtu ADB"} + other{"jednotiek účtu ADB"} + } XXX{ few{"(neznáma mena)"} many{"(neznáma mena)"} one{"(neznáma mena)"} other{"(neznáma mena)"} } + YDD{ + few{"jemenské dináre"} + many{"jemenského dinára"} + one{"jemenský dinár"} + other{"jemenských dinárov"} + } YER{ few{"jemenské rialy"} many{"jemenského rialu"} one{"jemenský rial"} other{"jemenských rialov"} } + YUD{ + few{"juhoslovanské dináre (1966 – 1990)"} + many{"juhoslovanského dinára (1966 – 1990)"} + one{"juhoslovanský dinár (1966 – 1990)"} + other{"juhoslovanských dinárov (1966 – 1990)"} + } + YUM{ + few{"juhoslovanské nové dináre (1994 – 2002)"} + many{"juhoslovanského nového dinára (1994 – 2002)"} + one{"juhoslovanský nový dinár (1994 – 2002)"} + other{"juhoslovanských nových dinárov (1994 – 2002)"} + } + YUN{ + few{"juhoslovanské konvertibilné dináre (1990 – 1992)"} + many{"juhoslovanského konvertibilného dinára (1990 – 1992)"} + one{"juhoslovanský konvertibilný dinár (1990 – 1992)"} + other{"juhoslovanských konvertibilných dinárov (1990 – 1992)"} + } + YUR{ + few{"juhoslovanské reformované dináre (1992 – 1993)"} + many{"juhoslovanského reformovaného dinára (1992 – 1993)"} + one{"juhoslovanský reformovaný dinár (1992 – 1993)"} + other{"juhoslovanských reformovaných dinárov (1992 – 1993)"} + } + ZAL{ + few{"juhoafrické randy (finančné)"} + many{"juhoafrického randu (finančného)"} + one{"juhoafrický rand (finančný)"} + other{"juhoafrických randov (finančných)"} + } ZAR{ few{"juhoafrické randy"} many{"juhoafrického randu"} @@ -2158,10 +3078,10 @@ sk{ other{"juhoafrických randov"} } ZMK{ - few{"zambijské kwachy (1968–2012)"} - many{"zambijskej kwachy (1968–2012)"} - one{"zambijská kwacha (1968–2012)"} - other{"zambijských kwách (1968–2012)"} + few{"zambijské kwachy (1968 – 2012)"} + many{"zambijskej kwachy (1968 – 2012)"} + one{"zambijská kwacha (1968 – 2012)"} + other{"zambijských kwách (1968 – 2012)"} } ZMW{ few{"zambijské kwachy"} @@ -2169,11 +3089,23 @@ sk{ one{"zambijská kwacha"} other{"zambijských kwách"} } + ZRN{ + few{"zairské nové zairy (1993 – 1998)"} + many{"zairského nového zairu (1993 – 1998)"} + one{"zairský nový zaire (1993 – 1998)"} + other{"zairských nových zairov (1993 – 1998)"} + } + ZRZ{ + few{"zairské zairy (1971 – 1993)"} + many{"zairského zairu (1971 – 1993)"} + one{"zairský zaire (1971 – 1993)"} + other{"zairských zairov (1971 – 1993)"} + } ZWD{ - few{"zimbabwianske doláre (1980–2008)"} - many{"zimbabwianskeho dolára (1980–2008)"} - one{"zimbabwiansky dolár (1980–2008)"} - other{"zimbabwianskych dolárov (1980–2008)"} + few{"zimbabwianske doláre (1980 – 2008)"} + many{"zimbabwianskeho dolára (1980 – 2008)"} + one{"zimbabwiansky dolár (1980 – 2008)"} + other{"zimbabwianskych dolárov (1980 – 2008)"} } ZWL{ few{"zimbabwianske doláre (2009)"} @@ -2194,5 +3126,5 @@ sk{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.32.59"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/sl.txt b/icuSources/data/curr/sl.txt index d95e69b3..5e322ad7 100644 --- a/icuSources/data/curr/sl.txt +++ b/icuSources/data/curr/sl.txt @@ -63,7 +63,7 @@ sl{ "avstrijski šiling", } AUD{ - "A$", + "AUD", "avstralski dolar", } AWG{ @@ -155,7 +155,7 @@ sl{ "stari brazilski kruzeiro (1990–1993)", } BRL{ - "R$", + "BRL", "brazilski real", } BRN{ @@ -226,6 +226,10 @@ sl{ "CLP", "čilski peso", } + CNH{ + "CNH", + "kitajski juan (offshore)", + } CNY{ "CN¥", "kitajski juan", @@ -351,7 +355,7 @@ sl{ "francoski frank", } GBP{ - "£", + "GBP", "britanski funt", } GEK{ @@ -612,6 +616,10 @@ sl{ } MRO{ "MRO", + "mavretanska uguija (1973–2017)", + } + MRU{ + "MRU", "mavretanska uguija", } MTL{ @@ -635,7 +643,7 @@ sl{ "malavijska kvača", } MXN{ - "MX$", + "MXN", "mehiški peso", } MXP{ @@ -691,7 +699,7 @@ sl{ "nepalska rupija", } NZD{ - "NZ$", + "NZD", "novozelandski dolar", } OMR{ @@ -840,6 +848,10 @@ sl{ } STD{ "STD", + "saotomejska dobra (1977–2017)", + } + STN{ + "STN", "saotomejska dobra", } SUR{ @@ -859,7 +871,7 @@ sl{ "svazijski lilangeni", } THB{ - "฿", + "THB", "tajski baht", } TJR{ @@ -903,7 +915,7 @@ sl{ "dolar Trinidada in Tobaga", } TWD{ - "NT$", + "TWD", "novi tajvanski dolar", } TZS{ @@ -999,7 +1011,7 @@ sl{ "evropska obračunska enota (XBD)", } XCD{ - "EC$", + "XCD", "vzhodnokaribski dolar", } XDR{ @@ -1166,6 +1178,7 @@ sl{ PKR{"Rs"} PLN{"zł"} PYG{"₲"} + RON{"lei"} RUB{"₽"} RWF{"RF"} SBD{"$"} @@ -1174,7 +1187,7 @@ sl{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1210,7 +1223,7 @@ sl{ ALL{ few{"albanski leki"} one{"albanski lek"} - other{"albanski lek"} + other{"albanskih lekov"} two{"albanska leka"} } AMD{ @@ -1234,7 +1247,7 @@ sl{ ARS{ few{"argentinski pesi"} one{"argentinski peso"} - other{"argentinski peso"} + other{"argentinskih pesov"} two{"argentinska pesa"} } AUD{ @@ -1246,8 +1259,8 @@ sl{ AWG{ few{"arubski florin"} one{"arubski florin"} - other{"arubski florin"} - two{"arubski florin"} + other{"arubskih florinov"} + two{"arubska florina"} } AZN{ few{"azerbajdžanski manati"} @@ -1360,7 +1373,7 @@ sl{ CDF{ few{"kongoški frank"} one{"kongoški frank"} - other{"kongoški frank"} + other{"kongoških frankov"} two{"kongoška franka"} } CHF{ @@ -1375,6 +1388,12 @@ sl{ other{"čilskih pesov"} two{"čilska pesa"} } + CNH{ + few{"kitajski juani renminbi (offshore)"} + one{"kitajski juan renminbi (offshore)"} + other{"kitajskih juanov renminbi (offshore)"} + two{"kitajska juana renminbi (offshore)"} + } CNY{ few{"kitajski juani renminbi"} one{"kitajski juan renminbi"} @@ -1486,14 +1505,14 @@ sl{ GEL{ few{"gruzijski lari"} one{"gruzijski lari"} - other{"gruzijskih larov"} - two{"gruzijska lara"} + other{"gruzijskih larijev"} + two{"gruzijska larija"} } GHS{ few{"ganski cedi"} one{"ganski cedi"} - other{"ganski cedi"} - two{"ganski cedi"} + other{"ganskih cedov"} + two{"ganska ceda"} } GIP{ few{"gibraltarski funti"} @@ -1660,8 +1679,8 @@ sl{ KZT{ few{"kazahstanski tenge"} one{"kazahstanski tenge"} - other{"kazahstanski tenge"} - two{"kazahstanski tenge"} + other{"kazahstanskih tengov"} + two{"kazahstanska tenga"} } LAK{ few{"laoški kipi"} @@ -1714,8 +1733,8 @@ sl{ MDL{ few{"moldavijski leu"} one{"moldavijski leu"} - other{"moldavijski leu"} - two{"moldavijski leu"} + other{"moldavijskih leuov"} + two{"moldavijska leua"} } MGA{ few{"malgaški ariariji"} @@ -1748,6 +1767,12 @@ sl{ two{"makavski pataki"} } MRO{ + few{"mavretanske uguije (1973–2017)"} + one{"mavretanska uguija (1973–2017)"} + other{"mavretanskih uguij (1973–2017)"} + two{"mavretanski uguiji (1973–2017)"} + } + MRU{ few{"mavretanske uguije"} one{"mavretanska uguija"} other{"mavretanskih uguij"} @@ -1876,8 +1901,8 @@ sl{ PYG{ few{"paragvajski gvarani"} one{"paragvajski gvarani"} - other{"paragvajski gvarani"} - two{"paragvajski gvarani"} + other{"paragvajskih gvaranijev"} + two{"paragvajska gvaranija"} } QAR{ few{"katarski riali"} @@ -1888,8 +1913,8 @@ sl{ RON{ few{"romunski leu"} one{"romunski leu"} - other{"romunski leu"} - two{"romunski leu"} + other{"romunskih leuov"} + two{"romunska leua"} } RSD{ few{"srbski dinarji"} @@ -1976,6 +2001,12 @@ sl{ two{"južnosudanska funta"} } STD{ + few{"saotomejske dobre (1977–2017)"} + one{"saotomejska dobra (1977–2017)"} + other{"saotomejskih dober (1977–2017)"} + two{"saotomejski dobri (1977–2017)"} + } + STN{ few{"saotomejske dobre"} one{"saotomejska dobra"} other{"saotomejskih dober"} @@ -1990,8 +2021,8 @@ sl{ SZL{ few{"svazijski lilangeni"} one{"svazijski lilangeni"} - other{"svazijski lilangeni"} - two{"svazijski lilangeni"} + other{"svazijskih lilangenijev"} + two{"svazijska lilangenija"} } THB{ few{"tajski bahti"} @@ -2002,8 +2033,8 @@ sl{ TJS{ few{"tadžikistanski somoni"} one{"tadžikistanski somoni"} - other{"tadžikistanski somoni"} - two{"tadžikistanski somoni"} + other{"tadžikistanskih somonov"} + two{"tadžikistanska somona"} } TMT{ few{"turkmenistanski novi manati"} @@ -2014,13 +2045,13 @@ sl{ TND{ few{"tunizijski dinarji"} one{"tunizijski dinar"} - other{"tunizijski dinar"} + other{"tunizijskih dinarjev"} two{"tunizijska dinarja"} } TOP{ few{"tongovske paange"} one{"tongovska paanga"} - other{"tongovska paanga"} + other{"tongovskih paang"} two{"tongovski paangi"} } TRY{ @@ -2092,8 +2123,8 @@ sl{ VUV{ few{"vanuatujski vati"} one{"vanuatujski vatu"} - other{"vanuatujskih vatov"} - two{"vanuatujska vata"} + other{"vanuatujskih vatujev"} + two{"vanuatujska vatuja"} } WST{ few{"samoanske tale"} @@ -2156,5 +2187,5 @@ sl{ other{"{0} {1}"} two{"{0} {1}"} } - Version{"2.1.32.59"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/smn.txt b/icuSources/data/curr/smn.txt index 8895a337..2d16a769 100644 --- a/icuSources/data/curr/smn.txt +++ b/icuSources/data/curr/smn.txt @@ -40,5 +40,5 @@ smn{ other{"{0} {1}"} two{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/sn.txt b/icuSources/data/curr/sn.txt index 6f3e0439..5285cd07 100644 --- a/icuSources/data/curr/sn.txt +++ b/icuSources/data/curr/sn.txt @@ -124,6 +124,10 @@ sn{ } MRO{ "MRO", + "Ugwiya ye Moritania (1973–2017)", + } + MRU{ + "MRU", "Ugwiya ye Moritania", } MUR{ @@ -180,6 +184,10 @@ sn{ } STD{ "STD", + "Dobra re Sao Tome ne Principe (1977–2017)", + } + STN{ + "STN", "Dobra re Sao Tome ne Principe", } SZL{ @@ -231,5 +239,5 @@ sn{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/so.txt b/icuSources/data/curr/so.txt index 9fcfea1e..bd2cc203 100644 --- a/icuSources/data/curr/so.txt +++ b/icuSources/data/curr/so.txt @@ -35,5 +35,5 @@ so{ "Lacag aan la qoon ama aan saxnayn", } } - Version{"2.1.33.76"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/so_DJ.txt b/icuSources/data/curr/so_DJ.txt index d9f0f0a1..dad16b00 100644 --- a/icuSources/data/curr/so_DJ.txt +++ b/icuSources/data/curr/so_DJ.txt @@ -7,5 +7,5 @@ so_DJ{ "Faran Jabbuuti", } } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/so_ET.txt b/icuSources/data/curr/so_ET.txt index ebddc854..bc45962c 100644 --- a/icuSources/data/curr/so_ET.txt +++ b/icuSources/data/curr/so_ET.txt @@ -7,5 +7,5 @@ so_ET{ "Birta Itoobbiya", } } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/so_KE.txt b/icuSources/data/curr/so_KE.txt index eabfba9a..9ad5d5f5 100644 --- a/icuSources/data/curr/so_KE.txt +++ b/icuSources/data/curr/so_KE.txt @@ -7,5 +7,5 @@ so_KE{ "KES", } } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/sq.txt b/icuSources/data/curr/sq.txt index a87abb19..63d112fa 100644 --- a/icuSources/data/curr/sq.txt +++ b/icuSources/data/curr/sq.txt @@ -40,7 +40,7 @@ sq{ } AZN{ "AZN", - "Manata e Azerbajxhanit", + "Manata azerbajxhanase", } BAM{ "BAM", @@ -122,6 +122,10 @@ sq{ "CLP", "Pesoja kiliane", } + CNH{ + "CNH", + "Juani kinez (për treg të jashtëm)", + } CNY{ "CN¥", "Juani kinez", @@ -148,7 +152,7 @@ sq{ } CZK{ "CZK", - "Koruna e Republikës Çeke", + "Koruna e Çekisë", } DJF{ "DJF", @@ -168,7 +172,7 @@ sq{ } EGP{ "EGP", - "Stërlina egjiptiane", + "Sterlina egjiptiane", } ERN{ "ERN", @@ -224,7 +228,7 @@ sq{ } HKD{ "HK$", - "Dollari i Hong Kongut", + "Dollari i Hong-Kongut", } HNL{ "HNL", @@ -348,7 +352,7 @@ sq{ } MDL{ "MDL", - "Leu moldav", + "Leuja moldave", } MGA{ "MGA", @@ -372,6 +376,10 @@ sq{ } MRO{ "MRO", + "Ugija mauritane (1973–2017)", + } + MRU{ + "MRU", "Ugija mauritane", } MUR{ @@ -436,7 +444,7 @@ sq{ } PGK{ "PGK", - "Kina e Papua-Guineas së Re", + "Kina e Guinesë së Re-Papua", } PHP{ "PHP", @@ -460,7 +468,7 @@ sq{ } RON{ "RON", - "Leu rumun", + "Leuja rumune", } RSD{ "RSD", @@ -488,7 +496,7 @@ sq{ } SDG{ "SDG", - "Stërlina sudaneze", + "Sterlina sudaneze", } SEK{ "SEK", @@ -500,7 +508,7 @@ sq{ } SHP{ "SHP", - "Stërlina e Ishullit të Shën-Helenës", + "Sterlina e Ishullit të Shën-Helenës", } SLL{ "SLL", @@ -516,10 +524,14 @@ sq{ } SSP{ "SSP", - "Stërlina e Sudanit të Jugut", + "Sterlina sudanezo-jugore", } STD{ "STD", + "Dobra e Sao-Tomes dhe Prinsipes (1977–2017)", + } + STN{ + "STN", "Dobra e Sao-Tomes dhe Prinsipes", } SYP{ @@ -677,8 +689,8 @@ sq{ other{"florinë aruban"} } AZN{ - one{"manatë azere"} - other{"manata azere"} + one{"manatë azerbajxhanase"} + other{"manata azerbajxhanase"} } BAM{ one{"markë e Bosnjë-Hercegovinës [e shkëmbyeshme]"} @@ -760,6 +772,10 @@ sq{ one{"peso kiliane"} other{"peso kiliane"} } + CNH{ + one{"juan kinez (për treg të jashtëm)"} + other{"juanë kinez (për treg të jashtëm)"} + } CNY{ one{"juan kinez"} other{"juanë kinez"} @@ -805,8 +821,8 @@ sq{ other{"dinarë algjerian"} } EGP{ - one{"stërlinë egjiptiane"} - other{"stërlina egjiptiane"} + one{"sterlinë egjiptiane"} + other{"sterlina egjiptiane"} } ERN{ one{"nakfë eritreje"} @@ -861,8 +877,8 @@ sq{ other{"dollarë guajanez"} } HKD{ - one{"dollar Hong Kongu"} - other{"dollarë Hong Kongu"} + one{"dollar hong-kongu"} + other{"dollarë hong-kongu"} } HNL{ one{"lempirë hondurase"} @@ -985,8 +1001,8 @@ sq{ other{"dirhamë maroken"} } MDL{ - one{"leu moldav"} - other{"leu moldav"} + one{"leu moldave"} + other{"leu moldave"} } MGA{ one{"arier malagez"} @@ -1009,6 +1025,10 @@ sq{ other{"pataka të Makaos"} } MRO{ + one{"ugijë mauritane (1973–2017)"} + other{"ugija mauritane (1973–2017)"} + } + MRU{ one{"ugijë mauritane"} other{"ugija mauritane"} } @@ -1073,8 +1093,8 @@ sq{ other{"sola peruane"} } PGK{ - one{"kinë e Papua-Guineas së Re"} - other{"kina të Papua-Guineas së Re"} + one{"kinë e Guinesë së Re-Papua"} + other{"kina të Guinesë së Re-Papua"} } PHP{ one{"peso filipinase"} @@ -1097,8 +1117,8 @@ sq{ other{"rialë katari"} } RON{ - one{"leu rumun"} - other{"leu rumun"} + one{"leu rumune"} + other{"leu rumune"} } RSD{ one{"dinar serb"} @@ -1125,8 +1145,8 @@ sq{ other{"rupi të Ishujve Sishelë"} } SDG{ - one{"stërlinë sudaneze"} - other{"stërlina sudaneze"} + one{"sterlinë sudaneze"} + other{"sterlina sudaneze"} } SEK{ one{"koronë suedeze"} @@ -1137,8 +1157,8 @@ sq{ other{"dollarë singapori"} } SHP{ - one{"stërlinë e Ishullit të Shën-Helenës"} - other{"stërlina të Ishullit të Shën-Helenës"} + one{"sterlinë e Ishullit të Shën-Helenës"} + other{"sterlina e Ishullit të Shën-Helenës"} } SLL{ one{"leon i Sierra-Leones"} @@ -1153,10 +1173,14 @@ sq{ other{"dollarë surinamez"} } SSP{ - one{"stërlinë e Sudanit të Jugut"} - other{"stërlina të Sudanit të Jugut"} + one{"sterlinë sudanezo-jugore"} + other{"sterlina sudanezo-jugore"} } STD{ + one{"dobër e Sao-Tomes dhe Prinsipes (1977–2017)"} + other{"dobra të Sao-Tomes dhe Prinsipes (1977–2017)"} + } + STN{ one{"dobër e Sao-Tomes dhe Prinsipes"} other{"dobra të Sao-Tomes dhe Prinsipes"} } @@ -1266,7 +1290,7 @@ sq{ } ZAR{ one{"rand afrikano-jugor"} - other{"randë afrikano-jugorë"} + other{"randë afrikano-jugor"} } ZMW{ one{"kuaçë zambiku"} @@ -1277,5 +1301,5 @@ sq{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.32.59"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/sq_MK.txt b/icuSources/data/curr/sq_MK.txt index 2c296d85..4a64b2f0 100644 --- a/icuSources/data/curr/sq_MK.txt +++ b/icuSources/data/curr/sq_MK.txt @@ -7,5 +7,5 @@ sq_MK{ "Denari maqedonas", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/sr.txt b/icuSources/data/curr/sr.txt index 1652c73a..b499df55 100644 --- a/icuSources/data/curr/sr.txt +++ b/icuSources/data/curr/sr.txt @@ -226,6 +226,10 @@ sr{ "CLP", "Чилеански пезос", } + CNH{ + "CNH", + "Кинески јуан (острвски)", + } CNY{ "CN¥", "Кинески јуан", @@ -620,6 +624,10 @@ sr{ } MRO{ "MRO", + "Мауританијска oгија (1973–2017)", + } + MRU{ + "MRU", "Мауританијска oгија", } MTL{ @@ -760,11 +768,11 @@ sr{ } ROL{ "ROL", - "Румунски леј", + "Румунски леј (1952–2006)", } RON{ "RON", - "Румунски леј (1952–2006)", + "Румунски леј", } RSD{ "RSD", @@ -848,6 +856,10 @@ sr{ } STD{ "STD", + "Саотомска добра (1977–2017)", + } + STN{ + "STN", "Саотомска добра", } SUR{ @@ -1190,6 +1202,7 @@ sr{ PKR{"Rs"} PLN{"zł"} PYG{"₲"} + RON{"lei"} RUB{"₽"} RWF{"RF"} SBD{"$"} @@ -1198,7 +1211,7 @@ sr{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1499,6 +1512,11 @@ sr{ one{"чилеански пезос"} other{"чилеанских пезоса"} } + CNH{ + few{"кинеска јуана (острвска)"} + one{"кинески јуан (острвски)"} + other{"кинеских јуана (острвских)"} + } CNY{ few{"кинеска јуана"} one{"кинески јуан"} @@ -1990,6 +2008,11 @@ sr{ other{"макаоских патака"} } MRO{ + few{"мауританијскe oгијe (1973–2017)"} + one{"мауританијска oгија (1973–2017)"} + other{"мауританијских oгијa (1973–2017)"} + } + MRU{ few{"мауританијскe oгијe"} one{"мауританијска oгија"} other{"мауританијских oгијa"} @@ -2165,15 +2188,15 @@ sr{ other{"родежанских долара"} } ROL{ - few{"румунскa леја"} - one{"румунски леј"} - other{"румунских леја"} - } - RON{ few{"румунскa леја (1952–2006)"} one{"румунски леј (1952–2006)"} other{"румунских леја (1952–2006)"} } + RON{ + few{"румунскa леја"} + one{"румунски леј"} + other{"румунских леја"} + } RSD{ few{"српска динара"} one{"српски динар"} @@ -2275,6 +2298,11 @@ sr{ other{"јужносуданских фунти"} } STD{ + few{"саотомске добре (1977–2017)"} + one{"саотомска добра (1977–2017)"} + other{"саотомских добри (1977–2017)"} + } + STN{ few{"саотомске добре"} one{"саотомска добра"} other{"саотомских добри"} @@ -2620,5 +2648,5 @@ sr{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.32.73"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/sr_Cyrl.txt b/icuSources/data/curr/sr_Cyrl.txt index cac24ec8..1d0d0a90 100644 --- a/icuSources/data/curr/sr_Cyrl.txt +++ b/icuSources/data/curr/sr_Cyrl.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License sr_Cyrl{ - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/sr_Latn.txt b/icuSources/data/curr/sr_Latn.txt index 990509fc..8ec0ad53 100644 --- a/icuSources/data/curr/sr_Latn.txt +++ b/icuSources/data/curr/sr_Latn.txt @@ -227,6 +227,10 @@ sr_Latn{ "CLP", "Čileanski pezos", } + CNH{ + "CNH", + "Kineski juan (ostrvski)", + } CNY{ "CN¥", "Kineski juan", @@ -621,6 +625,10 @@ sr_Latn{ } MRO{ "MRO", + "Mauritanijska ogija (1973–2017)", + } + MRU{ + "MRU", "Mauritanijska ogija", } MTL{ @@ -761,11 +769,11 @@ sr_Latn{ } ROL{ "ROL", - "Rumunski lej", + "Rumunski lej (1952–2006)", } RON{ "RON", - "Rumunski lej (1952–2006)", + "Rumunski lej", } RSD{ "RSD", @@ -849,6 +857,10 @@ sr_Latn{ } STD{ "STD", + "Saotomska dobra (1977–2017)", + } + STN{ + "STN", "Saotomska dobra", } SUR{ @@ -1191,6 +1203,7 @@ sr_Latn{ PKR{"Rs"} PLN{"zł"} PYG{"₲"} + RON{"lei"} RUB{"₽"} RWF{"RF"} SBD{"$"} @@ -1199,7 +1212,7 @@ sr_Latn{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1500,6 +1513,11 @@ sr_Latn{ one{"čileanski pezos"} other{"čileanskih pezosa"} } + CNH{ + few{"kineska juana (ostrvska)"} + one{"kineski juan (ostrvski)"} + other{"kineskih juana (ostrvskih)"} + } CNY{ few{"kineska juana"} one{"kineski juan"} @@ -1991,6 +2009,11 @@ sr_Latn{ other{"makaoskih pataka"} } MRO{ + few{"mauritanijske ogije (1973–2017)"} + one{"mauritanijska ogija (1973–2017)"} + other{"mauritanijskih ogija (1973–2017)"} + } + MRU{ few{"mauritanijske ogije"} one{"mauritanijska ogija"} other{"mauritanijskih ogija"} @@ -2166,15 +2189,15 @@ sr_Latn{ other{"rodežanskih dolara"} } ROL{ - few{"rumunska leja"} - one{"rumunski lej"} - other{"rumunskih leja"} - } - RON{ few{"rumunska leja (1952–2006)"} one{"rumunski lej (1952–2006)"} other{"rumunskih leja (1952–2006)"} } + RON{ + few{"rumunska leja"} + one{"rumunski lej"} + other{"rumunskih leja"} + } RSD{ few{"srpska dinara"} one{"srpski dinar"} @@ -2276,6 +2299,11 @@ sr_Latn{ other{"južnosudanskih funti"} } STD{ + few{"saotomske dobre (1977–2017)"} + one{"saotomska dobra (1977–2017)"} + other{"saotomskih dobri (1977–2017)"} + } + STN{ few{"saotomske dobre"} one{"saotomska dobra"} other{"saotomskih dobri"} @@ -2621,5 +2649,5 @@ sr_Latn{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.32.73"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/supplementalData.txt b/icuSources/data/curr/supplementalData.txt index 854c5b25..dacb151b 100644 --- a/icuSources/data/curr/supplementalData.txt +++ b/icuSources/data/curr/supplementalData.txt @@ -1064,6 +1064,13 @@ supplementalData:table(nofallback){ 320765951, } } + { + from:intvector{ + 297, + -402654208, + } + id{"CNH"} + } } CO{ { @@ -2845,12 +2852,23 @@ supplementalData:table(nofallback){ } } MR{ + { + from:intvector{ + 352, + -1358655488, + } + id{"MRU"} + } { from:intvector{ 25, -1509149696, } id{"MRO"} + to:intvector{ + 356, + 1394842623, + } } { from:intvector{ @@ -3820,12 +3838,23 @@ supplementalData:table(nofallback){ } } ST{ + { + from:intvector{ + 352, + -1358655488, + } + id{"STN"} + } { from:intvector{ 56, 2006631424, } id{"STD"} + to:intvector{ + 352, + -1358655489, + } } } SU{ @@ -4820,6 +4849,12 @@ supplementalData:table(nofallback){ 0, 0, } + DKK:intvector{ + 2, + 0, + 2, + 50, + } ESP:intvector{ 0, 0, @@ -4970,6 +5005,12 @@ supplementalData:table(nofallback){ 0, 0, } + NOK:intvector{ + 2, + 0, + 0, + 0, + } OMR:intvector{ 3, 0, @@ -5000,6 +5041,12 @@ supplementalData:table(nofallback){ 0, 0, } + SEK:intvector{ + 2, + 0, + 0, + 0, + } SLL:intvector{ 0, 0, @@ -5072,6 +5119,12 @@ supplementalData:table(nofallback){ 0, 0, } + VEF:intvector{ + 2, + 0, + 0, + 0, + } VND:intvector{ 0, 0, diff --git a/icuSources/data/curr/sv.txt b/icuSources/data/curr/sv.txt index 98427172..e950cfd8 100644 --- a/icuSources/data/curr/sv.txt +++ b/icuSources/data/curr/sv.txt @@ -262,6 +262,10 @@ sv{ "CLP", "chilensk peso", } + CNH{ + "CNH", + "CNH", + } CNX{ "CNX", "kinesisk dollar", @@ -680,6 +684,10 @@ sv{ } MRO{ "MRO", + "mauretansk ouguiya (1973–2017)", + } + MRU{ + "MRU", "mauretansk ouguiya", } MTL{ @@ -912,6 +920,10 @@ sv{ } STD{ "STD", + "saotomeansk dobra (1977–2017)", + } + STN{ + "STN", "saotomeansk dobra", } SUR{ @@ -1276,7 +1288,7 @@ sv{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1557,6 +1569,10 @@ sv{ one{"chilensk peso"} other{"chilenska pesos"} } + CNH{ + one{"CNH"} + other{"CNH"} + } CNX{ one{"kinesisk dollar"} other{"kinesiska dollar"} @@ -1974,6 +1990,10 @@ sv{ other{"makanesiska pataca"} } MRO{ + one{"mauretansk ouguiya (1973–2017)"} + other{"mauretanska ouguiya (1973–2017)"} + } + MRU{ one{"mauretansk ouguiya"} other{"mauretanska ouguiya"} } @@ -2206,6 +2226,10 @@ sv{ other{"sydsudanesiska pund"} } STD{ + one{"saotomeansk dobra (1977–2017)"} + other{"saotomeanska dobra (1977–2017)"} + } + STN{ one{"saotomeansk dobra"} other{"saotomeanska dobra"} } @@ -2494,5 +2518,5 @@ sv{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.32.59"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/sw.txt b/icuSources/data/curr/sw.txt index 94d6f053..5ddf67a5 100644 --- a/icuSources/data/curr/sw.txt +++ b/icuSources/data/curr/sw.txt @@ -28,7 +28,7 @@ sw{ } ARS{ "ARS", - "Peso ya Ajentina", + "Peso ya Argentina", } AUD{ "A$", @@ -40,11 +40,11 @@ sw{ } AZN{ "AZN", - "Manat ya Azebaijani", + "Manat ya Azerbaijan", } BAM{ "BAM", - "Mark Inayoweza Kubadilishwa ya Bosnia na Hezegovina", + "Convertible Mark ya Bosnia na Hezegovina", } BBD{ "BBD", @@ -52,7 +52,7 @@ sw{ } BDT{ "BDT", - "Taka ya Bangladeshi", + "Taka ya Bangladesh", } BGN{ "BGN", @@ -60,7 +60,7 @@ sw{ } BHD{ "BHD", - "Dinar ya Bahareni", + "Dinar ya Bahrain", } BIF{ "BIF", @@ -96,7 +96,7 @@ sw{ } BYN{ "BYN", - "Ruble ya Belarusi", + "Ruble ya Belarus", } BYR{ "BYR", @@ -108,7 +108,7 @@ sw{ } CAD{ "CA$", - "Dola ya Kanada", + "Dola ya Canada", } CDF{ "CDF", @@ -122,17 +122,21 @@ sw{ "CLP", "Peso ya Chile", } + CNH{ + "CNH", + "Yuan ya Uchina (huru)", + } CNY{ "CN¥", "Yuan ya Uchina", } COP{ "COP", - "Peso ya Kolombia", + "Peso ya Colombia", } CRC{ "CRC", - "Colon ya Kostarika", + "Colon ya Costa Rica", } CUC{ "CUC", @@ -148,23 +152,23 @@ sw{ } CZK{ "CZK", - "Koruna ya Jamhuri ya Cheki", + "CZK", } DJF{ "DJF", - "Faranga ya Jibuti", + "Faranga ya Djibouti", } DKK{ "DKK", - "Krone ya Denmaki", + "Krone ya Denmark", } DOP{ "DOP", - "Peso ya Dominika", + "Peso ya Dominica", } DZD{ "DZD", - "Dinari ya Aljeria", + "Dinar ya Algeria", } EGP{ "EGP", @@ -240,7 +244,7 @@ sw{ } HRK{ "HRK", - "Kuna ya Kroeshia", + "Kuna ya Croatia", } HTG{ "HTG", @@ -264,7 +268,7 @@ sw{ } IQD{ "IQD", - "Dinar ya Iraki", + "Dinar ya Iraq", } IRR{ "IRR", @@ -280,11 +284,11 @@ sw{ } JOD{ "JOD", - "Dinar ya Yordani", + "Dinar ya Jordan", } JPY{ "JP¥", - "Yen ya Japani", + "Yen ya Ujapani", } KES{ "Ksh", @@ -292,15 +296,15 @@ sw{ } KGS{ "KGS", - "Som ya Kyrgystani", + "Som ya Kyrgystan", } KHR{ "KHR", - "Riel ya Kambodia", + "Riel ya Cambodia", } KMF{ "KMF", - "Faranga ya Komoro", + "Faranga ya Comoros", } KPW{ "KPW", @@ -312,7 +316,7 @@ sw{ } KWD{ "KWD", - "Dinar ya Kuwaiti", + "Dinar ya Kuwait", } KYD{ "KYD", @@ -320,7 +324,7 @@ sw{ } KZT{ "KZT", - "Tenge ya Kazakistani", + "Tenge ya Kazakhstan", } LAK{ "LAK", @@ -356,7 +360,7 @@ sw{ } MAD{ "MAD", - "Dirham ya Moroko", + "Dirham ya Morocco", } MDL{ "MDL", @@ -364,15 +368,15 @@ sw{ } MGA{ "MGA", - "Ariari ya Madagaska", + "Ariari ya Madagascar", } MKD{ "MKD", - "Denar ya Masedonia", + "Denar ya Macedonia", } MMK{ "MMK", - "Kyat ya Myama", + "Kyat ya Myanmar", } MNT{ "MNT", @@ -384,15 +388,19 @@ sw{ } MRO{ "MRO", - "Ouguiya ya Moritania", + "Ouguiya ya Mauritania (1973–2017)", + } + MRU{ + "MRU", + "Ouguiya ya Mauritania", } MUR{ "MUR", - "Rupia ya Morisi", + "Rupia ya Mauritius", } MVR{ "MVR", - "Rufiyaa ya Maldivi", + "Rufiyaa ya Maldives", } MWK{ "MWK", @@ -400,7 +408,7 @@ sw{ } MXN{ "MX$", - "Peso ya Meksiko", + "Peso ya Mexico", } MYR{ "MYR", @@ -420,23 +428,23 @@ sw{ } NGN{ "NGN", - "Naira ya Nijeria", + "Naira ya Nigeria", } NIO{ "NIO", - "Cordoba ya Nikaragua", + "Cordoba ya Nicaragua", } NOK{ "NOK", - "Krone ya Norwe", + "Krone ya Norway", } NPR{ "NPR", - "Rupia ya Nepali", + "Rupia ya Nepal", } NZD{ "NZ$", - "Dola ya Nyuzilandi", + "Dola ya New Zealand", } OMR{ "OMR", @@ -460,19 +468,19 @@ sw{ } PKR{ "PKR", - "Rupia ya Pakistani", + "Rupia ya Pakistan", } PLN{ "PLN", - "Zloty ya Polandi", + "Zloty ya Poland", } PYG{ "PYG", - "Guarani ya Paragwai", + "Guarani ya Paraguay", } QAR{ "QAR", - "Rial ya Qatari", + "Rial ya Qatar", } RON{ "RON", @@ -504,7 +512,7 @@ sw{ } SDG{ "SDG", - "Pauni ya Sudani", + "Pauni ya Sudan", } SDP{ "SDP", @@ -520,7 +528,7 @@ sw{ } SHP{ "SHP", - "Pauni ya Santahelena", + "Pauni ya St. Helena", } SLL{ "SLL", @@ -536,10 +544,14 @@ sw{ } SSP{ "SSP", - "Pauni ya Sudani Kusini", + "Pauni ya Sudan Kusini", } STD{ "STD", + "Dobra ya Sao Tome na Principe (1977–2017)", + } + STN{ + "STN", "Dobra ya Sao Tome na Principe", } SYP{ @@ -556,11 +568,11 @@ sw{ } TJS{ "TJS", - "Somoni ya Tajikistani", + "Somoni ya Tajikistan", } TMT{ "TMT", - "Manat ya Turukimenistani", + "Manat ya Turkmenistan", } TND{ "TND", @@ -588,7 +600,7 @@ sw{ } UAH{ "UAH", - "Hryvnia ya Ukrania", + "Hryvnia ya Ukraine", } UGX{ "UGX", @@ -600,11 +612,11 @@ sw{ } UYU{ "UYU", - "Peso ya Urugwai", + "Peso ya Uruguay", } UZS{ "UZS", - "Som ya Uzibekistani", + "Som ya Uzbekistan", } VEF{ "VEF", @@ -628,7 +640,7 @@ sw{ } XCD{ "EC$", - "Dola ya Karibea ya Mashariki", + "Dola ya Caribbean Mashariki", } XOF{ "CFA", @@ -644,7 +656,7 @@ sw{ } YER{ "YER", - "Rial ya Yemeni", + "Rial ya Yemen", } ZAR{ "ZAR", @@ -734,6 +746,7 @@ sw{ PKR{"Rs"} PLN{"zł"} PYG{"₲"} + RON{"lei"} RUB{"₽"} RWF{"RF"} SBD{"$"} @@ -742,7 +755,7 @@ sw{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -768,72 +781,72 @@ sw{ other{"dirham za Falme za Kiarabu"} } AFN{ - one{"Afghani ya Afghanistan"} - other{"Afghani za Afghanistan"} + one{"afghani ya Afghanistan"} + other{"afghani za Afghanistan"} } ALL{ - one{"Lek ya Albania"} - other{"Lek za Albania"} + one{"lek ya Albania"} + other{"lek za Albania"} } AMD{ - one{"Dram ya Armenia"} - other{"Dram za Armenia"} + one{"dram ya Armenia"} + other{"dram za Armenia"} } ANG{ - one{"Guilder ya Antili za Kiholanzi"} - other{"Guilder ya Antili za Kiholanzi"} + one{"guilder ya Antili za Kiholanzi"} + other{"guilder za Antili za Kiholanzi"} } AOA{ one{"kwanza ya Angola"} other{"kwanza za Angola"} } ARS{ - one{"Peso ya Ajentina"} - other{"Peso za Ajentina"} + one{"Peso ya Argentina"} + other{"Peso za Argentina"} } AUD{ one{"dola ya Australia"} other{"dola za Australia"} } AWG{ - one{"Florin ya Aruba"} - other{"Florin za Aruba"} + one{"florin ya Aruba"} + other{"florin za Aruba"} } AZN{ - one{"Manat ya Azebaijani"} - other{"Manat za Azebaijani"} + one{"manat ya Azerbaijan"} + other{"manat za Azerbaijan"} } BAM{ - one{"Convertible Mark ya Bosnia na Hezegovina"} - other{"Mark Inayoweza Kubadilishwa ya Bosnia na Hezegovina"} + one{"convertible mark ya Bosnia na Hezegovina"} + other{"convertible mark za Bosnia na Hezegovina"} } BBD{ - one{"Dola ya Barbados"} - other{"Dola za Barbados"} + one{"dola ya Barbados"} + other{"dola za Barbados"} } BDT{ - one{"Taka ya Bangladeshi"} - other{"Taka za Bangladeshi"} + one{"taka ya Bangladesh"} + other{"taka za Bangladesh"} } BGN{ - one{"Lev ya Bulgaria"} - other{"Lev za Bulgaria"} + one{"lev ya Bulgaria"} + other{"lev za Bulgaria"} } BHD{ - one{"Dinar ya Bahareni"} - other{"Dinar za Bahareni"} + one{"dinar ya Bahrain"} + other{"dinar za Bahrain"} } BIF{ one{"faranga ya Burundi"} other{"faranga za Burundi"} } BMD{ - one{"Dola ya Bermuda"} - other{"Dola za Bermuda"} + one{"dola ya Bermuda"} + other{"dola za Bermuda"} } BND{ - one{"Dola ya Brunei"} - other{"Dola za Brunei"} + one{"dola ya Brunei"} + other{"dola za Brunei"} } BOB{ one{"Boliviano ya Bolivia"} @@ -844,32 +857,32 @@ sw{ other{"Real za Brazil"} } BSD{ - one{"Dola ya Bahamas"} - other{"Dola za Bahamas"} + one{"dola ya Bahamas"} + other{"dola za Bahamas"} } BTN{ - one{"Ngultrum ya Bhutan"} - other{"Ngultrum za Bhutan"} + one{"ngultrum ya Bhutan"} + other{"ngultrum za Bhutan"} } BWP{ one{"pula ya Botswana"} other{"pula za Botswana"} } BYN{ - one{"Ruble ya Belarusi"} - other{"Ruble za Belarusi"} + one{"ruble ya Belarus"} + other{"ruble za Belarus"} } BYR{ one{"Ruble ya Belarusi (2000–2016)"} other{"Ruble za Belarusi (2000–2016)"} } BZD{ - one{"Dola ya Belize"} - other{"Dola za Belize"} + one{"dola ya Belize"} + other{"dola za Belize"} } CAD{ - one{"dola ya Kanada"} - other{"dola za Kanada"} + one{"dola ya Canada"} + other{"dola za Canada"} } CDF{ one{"faranga ya Kongo"} @@ -883,17 +896,21 @@ sw{ one{"Peso ya Chile"} other{"Peso za Chile"} } + CNH{ + one{"yuan ya Uchina (huru)"} + other{"yuan ya Uchina (huru)"} + } CNY{ one{"yuan ya Uchina"} other{"yuan za Uchina"} } COP{ - one{"Peso ya Kolombia"} - other{"Peso za Kolombia"} + one{"Peso ya Colombia"} + other{"Peso za Colombia"} } CRC{ - one{"Colon ya Kostarika"} - other{"Colon za Kostarika"} + one{"colon ya Costa Rica"} + other{"colon za Costa Rica"} } CUC{ one{"Peso ya Cuba Inayoweza Kubadilishwa"} @@ -904,28 +921,28 @@ sw{ other{"Peso za Cuba"} } CVE{ - one{"Eskudo ya Cape Verde"} - other{"Eskudo za Cape Verde"} + one{"eskudo ya Cape Verde"} + other{"eskudo za Cape Verde"} } CZK{ - one{"Koruna ya Jamhuri ya Cheki"} - other{"Koruna za Jamhuri ya Cheki"} + one{"koruna ya Jamhuri ya Czech"} + other{"koruna za Jamhuri ya Czech"} } DJF{ - one{"faranga ya Jibuti"} - other{"faranga za Jibuti"} + one{"faranga ya Djibouti"} + other{"faranga za Djibouti"} } DKK{ - one{"Krone ya Denmaki"} - other{"Krone za Denmaki"} + one{"krone ya Denmark"} + other{"krone za Denmark"} } DOP{ - one{"Peso ya Dominika"} - other{"Peso za Dominika"} + one{"peso ya Dominica"} + other{"peso za Dominica"} } DZD{ - one{"dinari ya Aljeria"} - other{"dinari za Aljeria"} + one{"dinar ya Algeria"} + other{"dinar za Algeria"} } EGP{ one{"pauni ya Misri"} @@ -944,8 +961,8 @@ sw{ other{"yuro"} } FJD{ - one{"Dola ya Fiji"} - other{"Dola za Fiji"} + one{"dola ya Fiji"} + other{"dola za Fiji"} } FKP{ one{"Pauni ya Visiwa vya Falkland"} @@ -956,16 +973,16 @@ sw{ other{"pauni za Uingereza"} } GEL{ - one{"Lari ya Georgia"} - other{"Lari za Georgia"} + one{"lari ya Georgia"} + other{"lari za Georgia"} } GHS{ - one{"Cedi ya Ghana"} - other{"Cedi za Ghana"} + one{"cedi ya Ghana"} + other{"cedi za Ghana"} } GIP{ - one{"Pauni ya Gibraltar"} - other{"Pauni za Gibraltar"} + one{"pauni ya Gibraltar"} + other{"pauni za Gibraltar"} } GMD{ one{"dalasi ya Gambia"} @@ -976,116 +993,116 @@ sw{ other{"faranga za Guinea"} } GTQ{ - one{"Quetzal ya Guatemala"} - other{"Quetzal za Guatemala"} + one{"quetzal ya Guatemala"} + other{"quetzal za Guatemala"} } GYD{ one{"Dola ya Guyana"} other{"Dola za Guyana"} } HKD{ - one{"Dola ya Hong Kong"} - other{"Dola za Hong Kong"} + one{"dola ya Hong Kong"} + other{"dola za Hong Kong"} } HNL{ - one{"Lempira ya Hondurasi"} - other{"Lempira za Hondurasi"} + one{"lempira ya Hondurasi"} + other{"lempira za Hondurasi"} } HRK{ - one{"Kuna ya Kroeshia"} - other{"Kuna za Kroeshia"} + one{"kuna ya Croatia"} + other{"kuna za Croatia"} } HTG{ - one{"Gourde ya Haiti"} - other{"Gourde za Haiti"} + one{"gourde ya Haiti"} + other{"gourde za Haiti"} } HUF{ - one{"Forint ya Hungaria"} - other{"Forint za Hungaria"} + one{"forint ya Hungaria"} + other{"forint za Hungaria"} } IDR{ - one{"Rupiah ya Indonesia"} - other{"Rupiah za Indonesia"} + one{"rupiah ya Indonesia"} + other{"rupiah za Indonesia"} } ILS{ - one{"Shekeli Mpya ya Israel"} - other{"Shekeli Mpya za Israel"} + one{"shekeli mpya ya Israel"} + other{"shekeli mpya za Israel"} } INR{ one{"rupia ya India"} other{"rupia za India"} } IQD{ - one{"Dinar ya Iraki"} - other{"Dinar za Iraki"} + one{"dinar ya Iraq"} + other{"dinar za Iraq"} } IRR{ - one{"Rial ya Iran"} - other{"Rial za Iran"} + one{"rial ya Iran"} + other{"rial za Iran"} } ISK{ - one{"Krona ya Aisilandi"} - other{"Krona za Aisilandi"} + one{"krona ya Aisilandi"} + other{"krona za Aisilandi"} } JMD{ - one{"Dola ya Jamaica"} - other{"Dola za Jamaica"} + one{"dola ya Jamaica"} + other{"dola za Jamaica"} } JOD{ - one{"Dinar ya Yordani"} - other{"Dinar za Yordani"} + one{"dinar ya Jordan"} + other{"dinar za Jordan"} } JPY{ - one{"Yen ya Japani"} - other{"Yen za Japani"} + one{"yen ya Ujapani"} + other{"yen za Ujapani"} } KES{ one{"shilingi ya Kenya"} other{"shilingi za Kenya"} } KGS{ - one{"Som ya Kyrgystani"} - other{"Som za Kyrgystani"} + one{"som ya Kyrgystan"} + other{"som za Kyrgystan"} } KHR{ - one{"Riel ya Kambodia"} - other{"Riel za Kambodia"} + one{"riel ya Cambodia"} + other{"riel za Cambodia"} } KMF{ - one{"faranga ya Komoro"} - other{"faranga za Komoro"} + one{"faranga ya Comoros"} + other{"faranga za Comoros"} } KPW{ - one{"Won ya Korea Kaskazini"} - other{"Won za Korea Kaskazini"} + one{"won ya Korea Kaskazini"} + other{"won za Korea Kaskazini"} } KRW{ - one{"Won ya Korea Kusini"} - other{"Won za Korea Kusini"} + one{"won ya Korea Kusini"} + other{"won za Korea Kusini"} } KWD{ - one{"Dinar ya Kuwaiti"} - other{"Dinar za Kuwaiti"} + one{"dinar ya Kuwait"} + other{"dinar za Kuwait"} } KYD{ - one{"Dola ya Visiwa vya Cayman"} + one{"dola ya Visiwa vya Cayman"} other{"Dola ya Visiwa vya Cayman"} } KZT{ - one{"Tenge ya Kazakistani"} - other{"Tenge za Kazakistani"} + one{"tenge ya Kazakhstan"} + other{"tenge za Kazakhstan"} } LAK{ - one{"Kip ya Laosi"} - other{"Kip za Laosi"} + one{"kip ya Laosi"} + other{"kip za Laosi"} } LBP{ - one{"Pauni ya Lebanon"} - other{"Pauni za Lebanon"} + one{"pauni ya Lebanon"} + other{"pauni za Lebanon"} } LKR{ - one{"Rupia ya Sri Lanka"} - other{"Rupia za Sri Lanka"} + one{"rupia ya Sri Lanka"} + other{"rupia za Sri Lanka"} } LRD{ one{"dola ya Liberia"} @@ -1104,56 +1121,60 @@ sw{ other{"dinari za Libya"} } MAD{ - one{"dirham ya Moroko"} - other{"dirham za Moroko"} + one{"dirham ya Morocco"} + other{"dirham za Morocco"} } MDL{ - one{"Leu ya Moldova"} - other{"Leu za Moldova"} + one{"leu ya Moldova"} + other{"leu za Moldova"} } MGA{ - one{"Ariari ya Madagaska"} - other{"Ariari za Madagaska"} + one{"ariari ya Madagascar"} + other{"ariari za Madagascar"} } MKD{ - one{"Denar ya Masedonia"} - other{"Denar za Masedonia"} + one{"denar ya Macedonia"} + other{"denar za Macedonia"} } MMK{ - one{"Kyat ya Myama"} - other{"Kyat za Myama"} + one{"kyat ya Myanmar"} + other{"kyat za Myanmar"} } MNT{ - one{"Tugrik ya Mongolia"} - other{"Tugrik za Mongolia"} + one{"tugrik ya Mongolia"} + other{"tugrik za Mongolia"} } MOP{ - one{"Pataca ya Macau"} - other{"Pataca za Macau"} + one{"pataca ya Macau"} + other{"pataca za Macau"} } MRO{ - one{"Ouguiya ya Moritania"} - other{"Ouguiya za Moritania"} + one{"ouguiya ya Mauritania (1973–2017)"} + other{"ouguiya za Mauritania (1973–2017)"} + } + MRU{ + one{"ouguiya ya Mauritania"} + other{"ouguiya za Mauritania"} } MUR{ - one{"rupia ya Morisi"} - other{"rupia za Morisi"} + one{"rupia ya Mauritius"} + other{"rupia za Mauritius"} } MVR{ - one{"Rufiyaa ya Maldivi"} - other{"Rufiyaa za Maldivi"} + one{"rufiyaa ya Maldives"} + other{"rufiyaa za Maldives"} } MWK{ one{"kwacha ya Malawi"} other{"kwacha za Malawi"} } MXN{ - one{"Peso ya Meksiko"} - other{"Peso za Meksiko"} + one{"peso ya Mexico"} + other{"peso za Mexico"} } MYR{ - one{"Ringgit ya Malaysia"} - other{"Ringgit za Malaysia"} + one{"ringgit ya Malaysia"} + other{"ringgit za Malaysia"} } MZM{ one{"metikali ya Msumbiji (1980–2006)"} @@ -1168,72 +1189,72 @@ sw{ other{"dola za Namibia"} } NGN{ - one{"naira ya Nijeria"} - other{"naira za Nijeria"} + one{"naira ya Nigeria"} + other{"naira za Nigeria"} } NIO{ - one{"Cordoba ya Nikaragua"} - other{"Cordoba za Nikaragua"} + one{"cordoba ya Nicaragua"} + other{"cordoba za Nicaragua"} } NOK{ - one{"Krone ya Norwe"} - other{"Krone za Norwe"} + one{"krone ya Norway"} + other{"krone za Norway"} } NPR{ - one{"Rupia ya Nepali"} - other{"Rupia za Nepali"} + one{"rupia ya Nepal"} + other{"rupia za Nepal"} } NZD{ - one{"Dola ya Nyuzilandi"} - other{"Dola za Nyuzilandi"} + one{"dola ya New Zealand"} + other{"dola za New Zealand"} } OMR{ - one{"Rial ya Omani"} - other{"Rial za Omani"} + one{"rial ya Omani"} + other{"rial za Omani"} } PAB{ - one{"Balboa ya Panama"} - other{"Balboa za Panama"} + one{"balboa ya Panama"} + other{"balboa ya Panama"} } PEN{ one{"Sol ya Peru"} other{"Sol za Peru"} } PGK{ - one{"Kina ya Papua New Guinea"} - other{"Kina za Papua New Guinea"} + one{"kina ya Papua New Guinea"} + other{"kina za Papua New Guinea"} } PHP{ - one{"Peso ya Ufilipino"} - other{"Peso za Ufilipino"} + one{"peso ya Ufilipino"} + other{"peso za Ufilipino"} } PKR{ - one{"Rupia ya Pakistani"} - other{"Rupia za Pakistani"} + one{"rupia ya Pakistan"} + other{"rupia za Pakistan"} } PLN{ - one{"Zloty ya Polandi"} - other{"Zloty za Polandi"} + one{"zloty ya Poland"} + other{"zloty za Poland"} } PYG{ - one{"Guarani ya Paragwai"} - other{"Guarani za Paragwai"} + one{"Guarani ya Paraguay"} + other{"Guarani za Paraguay"} } QAR{ - one{"Rial ya Qatari"} - other{"Rial za Qatari"} + one{"rial ya Qatar"} + other{"rial ya Qatar"} } RON{ - one{"Leu ya Romania"} - other{"Leu za Romania"} + one{"leu ya Romania"} + other{"leu za Romania"} } RSD{ - one{"Dinar ya Serbia"} - other{"Dinar za Serbia"} + one{"dinar ya Serbia"} + other{"dinar za Serbia"} } RUB{ - one{"Ruble ya Urusi"} - other{"Ruble za Urusi"} + one{"ruble ya Urusi"} + other{"ruble za Urusi"} } RWF{ one{"faranga ya Rwanda"} @@ -1244,36 +1265,36 @@ sw{ other{"riyal za Saudia"} } SBD{ - one{"Dola ya Visiwa vya Solomon"} - other{"Dola za Visiwa vya Solomon"} + one{"dola ya Visiwa vya Solomon"} + other{"dola za Visiwa vya Solomon"} } SCR{ one{"rupia ya Ushelisheli"} other{"rupia za Ushelisheli"} } SDG{ - one{"pauni ya Sudani"} - other{"pauni za Sudani"} + one{"pauni ya Sudan"} + other{"pauni za Sudan"} } SDP{ one{"pauni ya Sudani (1957–1998)"} other{"pauni za Sudani (1957–1998)"} } SEK{ - one{"Krona ya Uswidi"} - other{"Krona za Uswidi"} + one{"krona ya Uswidi"} + other{"krona za Uswidi"} } SGD{ - one{"Dola ya Singapore"} - other{"Dola za Singapore"} + one{"dola ya Singapore"} + other{"dola za Singapore"} } SHP{ - one{"pauni ya Santahelena"} - other{"pauni za Santahelena"} + one{"pauni ya St. Helena"} + other{"pauni za St. Helena"} } SLL{ - one{"Leone"} - other{"Leone"} + one{"leone"} + other{"leone"} } SOS{ one{"shilingi ya Somalia"} @@ -1284,60 +1305,64 @@ sw{ other{"Dola za Suriname"} } SSP{ - one{"pauni ya Sudani Kusini"} - other{"pauni za Sudani Kusini"} + one{"pauni ya Sudan Kusini"} + other{"pauni za Sudan Kusini"} } STD{ + one{"dobra ya Sao Tome na Principe (1977–2017)"} + other{"dobra za Sao Tome na Principe (1977–2017)"} + } + STN{ one{"dobra ya Sao Tome na Principe"} other{"dobra za Sao Tome na Principe"} } SYP{ - one{"Pauni ya Syria"} - other{"Pauni za Syria"} + one{"pauni ya Syria"} + other{"pauni za Syria"} } SZL{ one{"lilangeni"} other{"lilangeni"} } THB{ - one{"Baht ya Tailandi"} - other{"Baht za Tailandi"} + one{"baht ya Tailandi"} + other{"baht za Tailandi"} } TJS{ - one{"Somoni ya Tajikistani"} - other{"Somoni za Tajikistani"} + one{"somoni ya Tajikistan"} + other{"somoni za Tajikistan"} } TMT{ - one{"Manat ya Turukimenistani"} - other{"Manat za Turukimenistani"} + one{"manat ya Turkmenistan"} + other{"manat za Turkmenistan"} } TND{ one{"dinari ya Tunisia"} other{"dinari za Tunisia"} } TOP{ - one{"Paʻanga ya Tonga"} - other{"Paʻanga za Tonga"} + one{"paʻanga ya Tonga"} + other{"paʻanga za Tonga"} } TRY{ - one{"Lira ya Uturuki"} - other{"Lira za Uturuki"} + one{"lira ya Uturuki"} + other{"lira za Uturuki"} } TTD{ one{"Dola ya Trinidad na Tobago"} other{"Dola za Trinidad na Tobago"} } TWD{ - one{"Dola ya Taiwan"} - other{"Dola za Taiwan"} + one{"dola ya Taiwan"} + other{"dola za Taiwan"} } TZS{ one{"shilingi ya Tanzania"} other{"shilingi za Tanzania"} } UAH{ - one{"Hryvnia ya Ukrania"} - other{"Hryvnia za Ukrania"} + one{"hryvnia ya Ukraine"} + other{"hryvnia za Ukraine"} } UGX{ one{"shilingi ya Uganda"} @@ -1348,52 +1373,52 @@ sw{ other{"dola za Marekani"} } UYU{ - one{"Peso ya Urugwai"} - other{"Peso za Urugwai"} + one{"Peso ya Uruguay"} + other{"Peso za Uruguay"} } UZS{ - one{"Som ya Uzibekistani"} - other{"Som za Uzibekistani"} + one{"som ya Uzbekistan"} + other{"som za Uzbekistan"} } VEF{ one{"Bolivar ya Venezuela"} other{"Bolivar za Venezuela"} } VND{ - one{"Dong ya Vietnam"} - other{"Dong za Vietnam"} + one{"dong ya Vietnam"} + other{"dong za Vietnam"} } VUV{ - one{"Vatu ya Vanuatu"} - other{"Vatu za Vanuatu"} + one{"vatu ya Vanuatu"} + other{"vatu za Vanuatu"} } WST{ - one{"Tala ya Samoa"} - other{"Tala za Samoa"} + one{"tala ya Samoa"} + other{"tala za Samoa"} } XAF{ one{"faranga ya Afrika ya Kati CFA"} other{"faranga za Afrika ya Kati CFA"} } XCD{ - one{"Dola ya Karibea ya Mashariki"} - other{"Dola za Karibea ya Mashariki"} + one{"Dola ya Caribbean Mashariki"} + other{"Dola za Caribbean Mashariki"} } XOF{ one{"faranga ya Afrika Magharibi CFA"} other{"faranga za Afrika Magharibi CFA"} } XPF{ - one{"Faranga ya CFP"} - other{"Faranga za CFP"} + one{"faranga ya CFP"} + other{"faranga za CFP"} } XXX{ one{"(sarafu isiyojulikana)"} other{"(sarafu isiyojulikana)"} } YER{ - one{"Rial ya Yemeni"} - other{"Rial za Yemeni"} + one{"rial ya Yemen"} + other{"rial za Yemen"} } ZAR{ one{"randi ya Afrika Kusini"} @@ -1408,5 +1433,5 @@ sw{ one{"{1} {0}"} other{"{1} {0}"} } - Version{"2.1.33.73"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/sw_CD.txt b/icuSources/data/curr/sw_CD.txt index ff79828e..a4dad881 100644 --- a/icuSources/data/curr/sw_CD.txt +++ b/icuSources/data/curr/sw_CD.txt @@ -24,6 +24,10 @@ sw_CD{ } MRO{ "MRO", + "Ugwiya ya Moritania (1973–2017)", + } + MRU{ + "MRU", "Ugwiya ya Moritania", } SCR{ @@ -39,5 +43,5 @@ sw_CD{ "Faranga CFA BCEAO", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/sw_UG.txt b/icuSources/data/curr/sw_UG.txt index 72827e0a..2eea3337 100644 --- a/icuSources/data/curr/sw_UG.txt +++ b/icuSources/data/curr/sw_UG.txt @@ -7,5 +7,5 @@ sw_UG{ "Shilingi ya Uganda", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/ta.txt b/icuSources/data/curr/ta.txt index 96fec84f..2c5ff549 100644 --- a/icuSources/data/curr/ta.txt +++ b/icuSources/data/curr/ta.txt @@ -122,6 +122,10 @@ ta{ "CLP", "சிலியன் பெசோ", } + CNH{ + "CNH", + "CNH", + } CNY{ "CN¥", "சீன யுவான்", @@ -376,6 +380,10 @@ ta{ } MRO{ "MRO", + "மொரிஷானியன் ஒகுயா (1973–2017)", + } + MRU{ + "MRU", "மொரிஷானியன் ஒகுயா", } MUR{ @@ -524,6 +532,10 @@ ta{ } STD{ "STD", + "சாவ் டோமி மற்றும் பிரின்ஸ்பி டோப்ரா (1977–2017)", + } + STN{ + "STN", "சாவ் டோமி மற்றும் பிரின்ஸ்பி டோப்ரா", } SYP{ @@ -714,6 +726,7 @@ ta{ PKR{"Rs"} PLN{"zł"} PYG{"₲"} + RON{"lei"} RUB{"₽"} RWF{"RF"} SBD{"$"} @@ -722,7 +735,7 @@ ta{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -863,6 +876,10 @@ ta{ one{"சிலியன் பெசோ"} other{"சிலியன் பெசோக்கள்"} } + CNH{ + one{"CNH"} + other{"CNH"} + } CNY{ one{"சீன யுவான்"} other{"சீன யுவான்"} @@ -1112,6 +1129,10 @@ ta{ other{"மெகனீஸ் படாகாக்கள்"} } MRO{ + one{"மொரிஷானியன் ஒகுயா (1973–2017)"} + other{"மொரிஷானியன் ஒகுயாக்கள் (1973–2017)"} + } + MRU{ one{"மொரிஷானியன் ஒகுயா"} other{"மொரிஷானியன் ஒகுயாக்கள்"} } @@ -1260,6 +1281,10 @@ ta{ other{"தெற்கு சூடானீஸ் பவுண்டுகள்"} } STD{ + one{"சாவ் டோமி மற்றும் பிரின்ஸ்பி டோப்ரா (1977–2017)"} + other{"சாவ் டோமி மற்றும் பிரின்ஸ்பி டோப்ராக்கள் (1977–2017)"} + } + STN{ one{"சாவ் டோமி மற்றும் பிரின்ஸ்பி டோப்ரா"} other{"சாவ் டோமி மற்றும் பிரின்ஸ்பி டோப்ராக்கள்"} } @@ -1380,5 +1405,5 @@ ta{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.32.4"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/ta_LK.txt b/icuSources/data/curr/ta_LK.txt index 312598f4..ec8727db 100644 --- a/icuSources/data/curr/ta_LK.txt +++ b/icuSources/data/curr/ta_LK.txt @@ -7,5 +7,5 @@ ta_LK{ "இலங்கை ரூபாய்", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/ta_MY.txt b/icuSources/data/curr/ta_MY.txt index aebb8b4f..c22755e2 100644 --- a/icuSources/data/curr/ta_MY.txt +++ b/icuSources/data/curr/ta_MY.txt @@ -11,5 +11,5 @@ ta_MY{ "சிங்கப்பூர் டாலர்", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/ta_SG.txt b/icuSources/data/curr/ta_SG.txt index 392181c1..34a4e85d 100644 --- a/icuSources/data/curr/ta_SG.txt +++ b/icuSources/data/curr/ta_SG.txt @@ -15,5 +15,5 @@ ta_SG{ "அமெரிக்க டாலர்", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/te.txt b/icuSources/data/curr/te.txt index d8c5482b..96ba6aa0 100644 --- a/icuSources/data/curr/te.txt +++ b/icuSources/data/curr/te.txt @@ -122,6 +122,10 @@ te{ "CLP", "చిలియన్ పెసో", } + CNH{ + "CNH", + "చైనీస్ యూవాన్ (ఆఫ్‌షోర్)", + } CNY{ "CN¥", "చైనా దేశ యువాన్", @@ -240,7 +244,7 @@ te{ } HUF{ "HUF", - "హంగేరియన్ ఫోరిన్ట్", + "హంగేరియన్ ఫోరింట్", } IDR{ "IDR", @@ -376,6 +380,10 @@ te{ } MRO{ "MRO", + "మౌరిటానియన్ ఒగ్యియా (1973–2017)", + } + MRU{ + "MRU", "మౌరిటానియన్ ఒగ్యియా", } MUR{ @@ -524,6 +532,10 @@ te{ } STD{ "STD", + "సావో టోమ్ మరియు ప్రిన్సిపి డోబ్రా (1977–2017)", + } + STN{ + "STN", "సావో టోమ్ మరియు ప్రిన్సిపి డోబ్రా", } SYP{ @@ -723,7 +735,7 @@ te{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -864,6 +876,10 @@ te{ one{"చిలియన్ పెసో"} other{"చిలియన్ పెసోలు"} } + CNH{ + one{"చైనీస్ యూవాన్ (ఆఫ్‌షోర్)"} + other{"చైనీస్ యూవాన్ (ఆఫ్‌షోర్)"} + } CNY{ one{"చైనా దేశ యువాన్"} other{"చైనా దేశ యువాన్"} @@ -981,8 +997,8 @@ te{ other{"హైటియన్ గ్వోర్డేలు"} } HUF{ - one{"హంగేరియన్ ఫోరిన్ట్"} - other{"హంగేరియన్ ఫోరిన్ట్‌లు"} + one{"హంగేరియన్ ఫోరింట్"} + other{"హంగేరియన్ ఫోరింట్‌లు"} } IDR{ one{"ఇండోనేషియా రూపాయి"} @@ -1113,6 +1129,10 @@ te{ other{"మకనీస్ పటాకాలు"} } MRO{ + one{"మౌరిటానియన్ ఒగ్యియా (1973–2017)"} + other{"మౌరిటానియన్ ఒగ్యియాలు (1973–2017)"} + } + MRU{ one{"మౌరిటానియన్ ఒగ్యియా"} other{"మౌరిటానియన్ ఒగ్యియాలు"} } @@ -1261,6 +1281,10 @@ te{ other{"దక్షిణ సుడానీస్ పౌండ్‌లు"} } STD{ + one{"సావో టోమ్ మరియు ప్రిన్సిపి డోబ్రా (1977–2017)"} + other{"సావో టోమ్ మరియు ప్రిన్సిపి డోబ్రాలు (1977–2017)"} + } + STN{ one{"సావో టోమ్ మరియు ప్రిన్సిపి డోబ్రా"} other{"సావో టోమ్ మరియు ప్రిన్సిపి డోబ్రాలు"} } @@ -1381,5 +1405,5 @@ te{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.31.86"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/teo.txt b/icuSources/data/curr/teo.txt index 625a78c2..d9f86c83 100644 --- a/icuSources/data/curr/teo.txt +++ b/icuSources/data/curr/teo.txt @@ -124,6 +124,10 @@ teo{ } MRO{ "MRO", + "Ango’otol lok’ Moritania (1973–2017)", + } + MRU{ + "MRU", "Ango’otol lok’ Moritania", } MUR{ @@ -176,6 +180,10 @@ teo{ } STD{ "STD", + "Ango’otol lok’ Sao Tome na Principe (1977–2017)", + } + STN{ + "STN", "Ango’otol lok’ Sao Tome na Principe", } SZL{ @@ -223,5 +231,5 @@ teo{ "Edola lok’Zimbabwe", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/teo_KE.txt b/icuSources/data/curr/teo_KE.txt index 7fc3db61..bad4446f 100644 --- a/icuSources/data/curr/teo_KE.txt +++ b/icuSources/data/curr/teo_KE.txt @@ -7,5 +7,5 @@ teo_KE{ "Ango’otol lok’ Kenya", } } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/tg.txt b/icuSources/data/curr/tg.txt index 9c28bef0..5e4526bb 100644 --- a/icuSources/data/curr/tg.txt +++ b/icuSources/data/curr/tg.txt @@ -2,13 +2,91 @@ // License & terms of use: http://www.unicode.org/copyright.html#License tg{ Currencies{ + BRL{ + "R$", + "Реали бразилиягӣ", + } + CNY{ + "CN¥", + "Иенаи хитоӣ", + } + EUR{ + "€", + "Евро", + } + GBP{ + "£", + "Фунт стерлинги британӣ", + } + INR{ + "₹", + "Рупияи ҳиндустонӣ", + } + JPY{ + "JP¥", + "Иенаи японӣ", + } + RUB{ + "RUB", + "Рубли русӣ", + } TJS{ - "сом", + "сом.", "Сомонӣ", } + USD{ + "$", + "Доллари ИМА", + } + XXX{ + "XXX", + "Асъори номаълум", + } + } + Currencies%narrow{ + BRL{"R$"} + CNY{"¥"} + EUR{"€"} + GBP{"£"} + INR{"₹"} + JPY{"¥"} + RUB{"₽"} + USD{"$"} + } + CurrencyPlurals{ + BRL{ + other{"реали бразилиягӣ"} + } + CNY{ + other{"иенаи хитоӣ"} + } + EUR{ + other{"евро"} + } + GBP{ + other{"фунт стерлинги британӣ"} + } + INR{ + other{"рупияи ҳиндустонӣ"} + } + JPY{ + other{"иенаи японӣ"} + } + RUB{ + other{"рубли русӣ"} + } + TJS{ + other{"Сомонӣ"} + } + USD{ + other{"доллари ИМА"} + } + XXX{ + other{"(асъори номаълум)"} + } } CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.27.40"} + Version{"2.1.38.71"} } diff --git a/icuSources/data/curr/th.txt b/icuSources/data/curr/th.txt index 06b6248c..dbc2685a 100644 --- a/icuSources/data/curr/th.txt +++ b/icuSources/data/curr/th.txt @@ -258,6 +258,10 @@ th{ "CLP", "เปโซชิลี", } + CNH{ + "CNH", + "หยวน", + } CNY{ "CN¥", "หยวนจีน", @@ -664,6 +668,10 @@ th{ } MRO{ "MRO", + "อูกียามอริเตเนีย (1973–2017)", + } + MRU{ + "MRU", "อูกียามอริเตเนีย", } MTL{ @@ -892,6 +900,10 @@ th{ } STD{ "STD", + "ดอบราเซาตูเมและปรินซิปี (1977–2017)", + } + STN{ + "STN", "ดอบราเซาตูเมและปรินซิปี", } SUR{ @@ -912,7 +924,7 @@ th{ } THB{ "THB", - "บาทไทย", + "บาท", } TJR{ "TJR", @@ -1205,6 +1217,7 @@ th{ FJD{"$"} FKP{"£"} GBP{"£"} + GEL{"₾"} GIP{"£"} GNF{"FG"} GTQ{"Q"} @@ -1245,6 +1258,8 @@ th{ PKR{"Rs"} PLN{"zł"} PYG{"₲"} + RON{"lei"} + RUB{"₽"} RWF{"RF"} SBD{"$"} SEK{"kr"} @@ -1252,7 +1267,7 @@ th{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1364,6 +1379,9 @@ th{ CLP{ other{"เปโซชิลี"} } + CNH{ + other{"หยวน"} + } CNY{ other{"หยวนจีน"} } @@ -1551,6 +1569,9 @@ th{ other{"ปาตากามาเก๊า"} } MRO{ + other{"อูกียามอริเตเนีย (1973–2017)"} + } + MRU{ other{"อูกียามอริเตเนีย"} } MUR{ @@ -1665,6 +1686,9 @@ th{ other{"ปอนด์ซูดานใต้"} } STD{ + other{"ดอบราเซาตูเมและปรินซิปี (1977–2017)"} + } + STN{ other{"ดอบราเซาตูเมและปรินซิปี"} } SYP{ @@ -1761,5 +1785,5 @@ th{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.32.59"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/ti.txt b/icuSources/data/curr/ti.txt index 81a052d1..ba48c446 100644 --- a/icuSources/data/curr/ti.txt +++ b/icuSources/data/curr/ti.txt @@ -43,5 +43,5 @@ ti{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.38.72"} } diff --git a/icuSources/data/curr/ti_ER.txt b/icuSources/data/curr/ti_ER.txt index dd3ec542..a473ac11 100644 --- a/icuSources/data/curr/ti_ER.txt +++ b/icuSources/data/curr/ti_ER.txt @@ -7,5 +7,5 @@ ti_ER{ "ERN", } } - Version{"2.1.31.33"} + Version{"2.1.38.73"} } diff --git a/icuSources/data/curr/tk.txt b/icuSources/data/curr/tk.txt index f785460c..d0d72a91 100644 --- a/icuSources/data/curr/tk.txt +++ b/icuSources/data/curr/tk.txt @@ -40,11 +40,11 @@ tk{ } AZN{ "AZN", - "Azerbaýjan manaty", + "Azerbaýjan manady", } BAM{ "BAM", - "Konwertirlenýän bosniýa we gersogowina markasy", + "Konwertirlenýän Bosniýa we Gersogowina markasy", } BBD{ "BBD", @@ -56,7 +56,7 @@ tk{ } BGN{ "BGN", - "Bolgar lewy", + "Bolgar lewi", } BHD{ "BHD", @@ -64,7 +64,7 @@ tk{ } BIF{ "BIF", - "Burundiý franky", + "Burundi franky", } BMD{ "BMD", @@ -96,7 +96,7 @@ tk{ } BYN{ "BYN", - "Belorus rubly", + "Belarus rubly", } BYR{ "BYR", @@ -112,7 +112,7 @@ tk{ } CDF{ "CDF", - "Kongolez franky", + "Kongo franky", } CHF{ "CHF", @@ -122,6 +122,10 @@ tk{ "CLP", "Çili pesosy", } + CNH{ + "CNH", + "CNH", + } CNY{ "CN¥", "Hytaý ýuany", @@ -164,7 +168,7 @@ tk{ } DZD{ "DZD", - "Aljir dinary", + "Alžir dinary", } EGP{ "EGP", @@ -192,11 +196,11 @@ tk{ } GBP{ "GBP", - "Iňlis funt sterlingi", + "Britan funt sterlingi", } GEL{ "GEL", - "Gruzin lari", + "Gruzin larisi", } GHS{ "GHS", @@ -208,7 +212,7 @@ tk{ } GMD{ "GMD", - "Gambiýa dalasy", + "Gambiýa dalasisi", } GNF{ "GNF", @@ -220,7 +224,7 @@ tk{ } GYD{ "GYD", - "Gaýan dollary", + "Gaýana dollary", } HKD{ "HK$", @@ -236,11 +240,11 @@ tk{ } HTG{ "HTG", - "Gaitýan gurdy", + "Gaiti gurdy", } HUF{ "HUF", - "Wenger forinty", + "Wenger forinti", } IDR{ "IDR", @@ -272,7 +276,7 @@ tk{ } JOD{ "JOD", - "Iordaniýa dinary", + "Iordan dinary", } JPY{ "JP¥", @@ -292,15 +296,15 @@ tk{ } KMF{ "KMF", - "Komor adalar franky", + "Komor adalarynyň franky", } KPW{ "KPW", - "Demirgazyk Koreýa wony", + "Demirgazyk Koreý wony", } KRW{ "₩", - "Günorta Koreýa wony", + "Günorta Koreý wony", } KWD{ "KWD", @@ -336,7 +340,7 @@ tk{ } MAD{ "MAD", - "Marokka dirhamy", + "Marokko dirhamy", } MDL{ "MDL", @@ -388,7 +392,7 @@ tk{ } MZN{ "MZN", - "Mozambik metikal", + "Mozambik metikaly", } NAD{ "NAD", @@ -428,7 +432,7 @@ tk{ } PGK{ "PGK", - "Papua — Täze Gwineýa kinasy", + "Papua - Täze Gwineýa kinasy", } PHP{ "PHP", @@ -440,11 +444,11 @@ tk{ } PLN{ "PLN", - "Polýak zloty", + "Polýak zlotysy", } PYG{ "PYG", - "Paragwaý guarani", + "Paragwaý guaranisi", } QAR{ "QAR", @@ -464,7 +468,7 @@ tk{ } RWF{ "RWF", - "Rwanda franky", + "Ruanda franky", } SAR{ "SAR", @@ -496,11 +500,11 @@ tk{ } SLL{ "SLL", - "Leon", + "Sýerra-Leone leony", } SOS{ "SOS", - "Somali şilingi", + "Somali şillingi", } SRD{ "SRD", @@ -508,7 +512,7 @@ tk{ } SSP{ "SSP", - "Günorta sudan funty", + "Günorta Sudan funty", } STD{ "STD", @@ -532,7 +536,7 @@ tk{ } TMT{ "TMT", - "Türkmen manaty", + "Türkmen manady", } TND{ "TND", @@ -556,7 +560,7 @@ tk{ } TZS{ "TZS", - "Tanzaniýa şilingi", + "Tanzaniýa şillingi", } UAH{ "UAH", @@ -564,7 +568,7 @@ tk{ } UGX{ "UGX", - "Uganda şilingi", + "Uganda şillingi", } USD{ "US$", @@ -580,7 +584,7 @@ tk{ } VEF{ "VEF", - "Wenezuela boliwary", + "Wenesuela boliwary", } VND{ "₫", @@ -612,7 +616,7 @@ tk{ } XXX{ "XXX", - "Näbelli ýa-da ýöremeýän pul birligi", + "Näbelli pul birligi", } YER{ "YER", @@ -657,6 +661,7 @@ tk{ FJD{"$"} FKP{"£"} GBP{"£"} + GEL{"₾"} GIP{"£"} GNF{"FG"} GTQ{"Q"} @@ -697,6 +702,7 @@ tk{ PKR{"Rs"} PLN{"zł"} PYG{"₲"} + RON{"lei"} RUB{"₽"} RWF{"RF"} SBD{"$"} @@ -763,8 +769,8 @@ tk{ other{"aruba florini"} } AZN{ - one{"azerbaýjan manaty"} - other{"azerbaýjan manaty"} + one{"azerbaýjan manady"} + other{"azerbaýjan manady"} } BAM{ one{"konwertirlenýän bosniýa we gersogowina markasy"} @@ -779,16 +785,16 @@ tk{ other{"bangladeş takasy"} } BGN{ - one{"bolgar lewy"} - other{"bolgar lewy"} + one{"bolgar lewi"} + other{"bolgar lewi"} } BHD{ one{"bahreýn dinary"} other{"bahreýn dinary"} } BIF{ - one{"burundiý franky"} - other{"burundiý franky"} + one{"burundi franky"} + other{"burundi franky"} } BMD{ one{"bermuda dollary"} @@ -819,8 +825,8 @@ tk{ other{"botswana pulasy"} } BYN{ - one{"belorus rubly"} - other{"belorus rubly"} + one{"belarus rubly"} + other{"belarus rubly"} } BYR{ one{"belorus rubly (2000–2016)"} @@ -835,8 +841,8 @@ tk{ other{"kanada dollary"} } CDF{ - one{"kongolez franky"} - other{"kongolez franky"} + one{"kongo franky"} + other{"kongo franky"} } CHF{ one{"şweýsar franky"} @@ -846,6 +852,10 @@ tk{ one{"çili pesosy"} other{"çili pesosy"} } + CNH{ + one{"CNH"} + other{"CNH"} + } CNY{ one{"hytaý ýuany"} other{"hytaý ýuany"} @@ -887,8 +897,8 @@ tk{ other{"dominikan pesosy"} } DZD{ - one{"aljir dinary"} - other{"aljir dinary"} + one{"alžir dinary"} + other{"alžir dinary"} } EGP{ one{"müsür funty"} @@ -915,12 +925,12 @@ tk{ other{"folklend adalarynyň funty"} } GBP{ - one{"iňlis funt sterlingi"} - other{"iňlis funt sterlingi"} + one{"britan funt sterlingi"} + other{"britan funt sterlingi"} } GEL{ - one{"gruzin lari"} - other{"gruzin lari"} + one{"gruzin larisi"} + other{"gruzin larisi"} } GHS{ one{"gano sedisi"} @@ -931,8 +941,8 @@ tk{ other{"gibraltar funty"} } GMD{ - one{"gambiýa dalasy"} - other{"gambiýa dalasy"} + one{"gambiýa dalasisi"} + other{"gambiýa dalasisi"} } GNF{ one{"gwineý franky"} @@ -943,8 +953,8 @@ tk{ other{"gwatemala ketsaly"} } GYD{ - one{"gaýan dollary"} - other{"gaýan dollary"} + one{"gaýana dollary"} + other{"gaýana dollary"} } HKD{ one{"gonkong dollary"} @@ -959,20 +969,20 @@ tk{ other{"horwat kunasy"} } HTG{ - one{"gaitýan gurdy"} - other{"gaitýan gurdy"} + one{"gaiti gurdy"} + other{"gaiti gurdy"} } HUF{ - one{"wenger forinty"} - other{"wenger forinty"} + one{"wenger forinti"} + other{"wenger forinti"} } IDR{ one{"indoneziýa rupiýasy"} other{"indoneziýa rupiýasy"} } ILS{ - one{"Täze Ysraýyl şekeli"} - other{"Täze Ysraýyl şekeli"} + one{"täze ysraýyl şekeli"} + other{"täze ysraýyl şekeli"} } INR{ one{"hindi rupiýasy"} @@ -995,8 +1005,8 @@ tk{ other{"ýamaýka dollary"} } JOD{ - one{"iordaniýa dinary"} - other{"iordaniýa dinary"} + one{"iordan dinary"} + other{"iordan dinary"} } JPY{ one{"ýapon ýeni"} @@ -1015,16 +1025,16 @@ tk{ other{"kamboja riýeli"} } KMF{ - one{"komor adalar franky"} - other{"komor adalar franky"} + one{"komor adalarynyň franky"} + other{"komor adalarynyň franky"} } KPW{ - one{"demirgazyk koreýa wony"} - other{"demirgazyk koreýa wony"} + one{"demirgazyk koreý wony"} + other{"demirgazyk koreý wony"} } KRW{ - one{"günorta koreýa wony"} - other{"günorta koreýa wony"} + one{"günorta koreý wony"} + other{"günorta koreý wony"} } KWD{ one{"kuweýt dinary"} @@ -1059,8 +1069,8 @@ tk{ other{"liwiýa dinary"} } MAD{ - one{"marokka dirhamy"} - other{"marokka dirhamy"} + one{"marokko dirhamy"} + other{"marokko dirhamy"} } MDL{ one{"moldaw leýi"} @@ -1111,8 +1121,8 @@ tk{ other{"malaýziýa ringgiti"} } MZN{ - one{"mozambik metikal"} - other{"mozambik metikal"} + one{"mozambik metikaly"} + other{"mozambik metikaly"} } NAD{ one{"namibiýa dollary"} @@ -1147,12 +1157,12 @@ tk{ other{"panama balboasy"} } PEN{ - one{"Peru soly"} - other{"Peru soly"} + one{"peru soly"} + other{"peru soly"} } PGK{ - one{"papua — täze gwineýa kinasy"} - other{"papua — täze gwineýa kinasy"} + one{"papua - täze gwineýa kinasy"} + other{"papua - täze gwineýa kinasy"} } PHP{ one{"filippin pesosy"} @@ -1163,12 +1173,12 @@ tk{ other{"päkistan rupiýasy"} } PLN{ - one{"polýak zloty"} - other{"polýak zloty"} + one{"polýak zlotysy"} + other{"polýak zlotysy"} } PYG{ - one{"paragwaý guarani"} - other{"paragwaý guarani"} + one{"paragwaý guaranisi"} + other{"paragwaý guaranisi"} } QAR{ one{"katar rialy"} @@ -1187,8 +1197,8 @@ tk{ other{"rus rubly"} } RWF{ - one{"rwanda franky"} - other{"rwanda franky"} + one{"ruanda franky"} + other{"ruanda franky"} } SAR{ one{"saud rialy"} @@ -1219,12 +1229,12 @@ tk{ other{"keramatly ýelena adasynyň funty"} } SLL{ - one{"leon"} - other{"leon"} + one{"sýerra-leone leony"} + other{"sýerra-leone leony"} } SOS{ - one{"somali şilingi"} - other{"somali şilingi"} + one{"somali şillingi"} + other{"somali şillingi"} } SRD{ one{"surinam dollary"} @@ -1255,8 +1265,8 @@ tk{ other{"täjik somonisy"} } TMT{ - one{"türkmen manaty"} - other{"türkmen manaty"} + one{"türkmen manady"} + other{"türkmen manady"} } TND{ one{"tunis dinary"} @@ -1279,16 +1289,16 @@ tk{ other{"täze taýwan dollary"} } TZS{ - one{"tanzaniýa şilingi"} - other{"tanzaniýa şilingi"} + one{"tanzaniýa şillingi"} + other{"tanzaniýa şillingi"} } UAH{ one{"ukrain griwnasy"} other{"ukrain griwnasy"} } UGX{ - one{"uganda şilingi"} - other{"uganda şilingi"} + one{"uganda şillingi"} + other{"uganda şillingi"} } USD{ one{"ABŞ dollary"} @@ -1303,8 +1313,8 @@ tk{ other{"özbek somy"} } VEF{ - one{"wenezuela boliwary"} - other{"wenezuela boliwary"} + one{"wenesuela boliwary"} + other{"wenesuela boliwary"} } VND{ one{"wýetnam dongy"} @@ -1335,8 +1345,8 @@ tk{ other{"fransuz ýuwaş umman franky"} } XXX{ - one{"näbelli ýa-da ýöremeýän pul birligi"} - other{"näbelli ýa-da ýöremeýän pul birligi"} + one{"näbelli pul birligi"} + other{"näbelli pul birligi"} } YER{ one{"ýemen rialy"} @@ -1355,5 +1365,5 @@ tk{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.31.86"} + Version{"2.1.37.1"} } diff --git a/icuSources/data/curr/to.txt b/icuSources/data/curr/to.txt index b22bbbc1..27e698c3 100644 --- a/icuSources/data/curr/to.txt +++ b/icuSources/data/curr/to.txt @@ -4,7 +4,7 @@ to{ Currencies{ AUD{ "AUD$", - "AUD", + "Australian Dollar", } BRL{ "R$", @@ -58,6 +58,9 @@ to{ GEL{"₾"} } CurrencyPlurals{ + AUD{ + other{"Australian Dollar"} + } TOP{ other{"Paʻanga fakatonga"} } @@ -71,5 +74,5 @@ to{ CurrencyUnitPatterns{ other{"{1} {0}"} } - Version{"2.1.31.74"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/tr.txt b/icuSources/data/curr/tr.txt index ca8e1fc5..0345bc63 100644 --- a/icuSources/data/curr/tr.txt +++ b/icuSources/data/curr/tr.txt @@ -220,7 +220,7 @@ tr{ } BYN{ "BYN", - "Beyaz Rusya Rublesi", + "Belarus Rublesi", } BYR{ "BYR", @@ -262,6 +262,10 @@ tr{ "CLP", "Şili Pesosu", } + CNH{ + "CNH", + "Çin Yuanı (offshore)", + } CNX{ "CNX", "Çin Halk Cumhuriyeti Merkez Bankası Doları", @@ -680,6 +684,10 @@ tr{ } MRO{ "MRO", + "Moritanya Ouguiyası (1973–2017)", + } + MRU{ + "MRU", "Moritanya Ouguiyası", } MTL{ @@ -912,6 +920,10 @@ tr{ } STD{ "STD", + "São Tomé ve Príncipe Dobrası (1977–2017)", + } + STN{ + "STN", "São Tomé ve Príncipe Dobrası", } SUR{ @@ -1282,7 +1294,7 @@ tr{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1508,8 +1520,8 @@ tr{ other{"Yeni Beyaz Rusya Rublesi (1994–1999)"} } BYN{ - one{"Beyaz Rusya rublesi"} - other{"Beyaz Rusya rublesi"} + one{"Belarus rublesi"} + other{"Belarus rublesi"} } BYR{ one{"Beyaz Rusya rublesi (2000–2016)"} @@ -1551,6 +1563,10 @@ tr{ one{"Şili pesosu"} other{"Şili pesosu"} } + CNH{ + one{"Çin yuanı (offshore)"} + other{"Çin yuanı (offshore)"} + } CNX{ one{"Çin Halk Cumhuriyeti Merkez Bankası doları"} other{"Çin Halk Cumhuriyeti Merkez Bankası doları"} @@ -1932,6 +1948,10 @@ tr{ other{"Makao patakası"} } MRO{ + one{"Moritanya ouguiyası (1973–2017)"} + other{"Moritanya ouguiyası (1973–2017)"} + } + MRU{ one{"Moritanya ouguiyası"} other{"Moritanya ouguiyası"} } @@ -2144,6 +2164,10 @@ tr{ other{"Güney Sudan lirası"} } STD{ + one{"São Tomé ve Príncipe dobrası (1977–2017)"} + other{"São Tomé ve Príncipe dobrası (1977–2017)"} + } + STN{ one{"São Tomé ve Príncipe dobrası"} other{"São Tomé ve Príncipe dobrası"} } @@ -2368,5 +2392,5 @@ tr{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.32.59"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/tt.txt b/icuSources/data/curr/tt.txt new file mode 100644 index 00000000..5f9f07e4 --- /dev/null +++ b/icuSources/data/curr/tt.txt @@ -0,0 +1,85 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html#License +tt{ + Currencies{ + BRL{ + "R$", + "Бразилия реалы", + } + CNY{ + "CN¥", + "кытай юане", + } + EUR{ + "€", + "евро", + } + GBP{ + "£", + "фунт стерлинг", + } + INR{ + "₹", + "Индия рупиясе", + } + JPY{ + "JP¥", + "япон иенасы", + } + RUB{ + "₽", + "Россия сумы", + } + USD{ + "$", + "АКШ доллары", + } + XXX{ + "XXX", + "билгесез валюта", + } + } + Currencies%narrow{ + BRL{"R$"} + CNY{"¥"} + EUR{"€"} + GBP{"£"} + INR{"₹"} + JPY{"¥"} + RUB{"₽"} + USD{"$"} + } + CurrencyPlurals{ + BRL{ + other{"Бразилия реалы"} + } + CNY{ + other{"юань"} + } + EUR{ + other{"евро"} + } + GBP{ + other{"фунт стерлинг"} + } + INR{ + other{"Индия рупиясе"} + } + JPY{ + other{"иена"} + } + RUB{ + other{"сум"} + } + USD{ + other{"АКШ доллары"} + } + XXX{ + other{"(билгесез валюта)"} + } + } + CurrencyUnitPatterns{ + other{"{0} {1}"} + } + Version{"2.1.38.72"} +} diff --git a/icuSources/data/curr/twq.txt b/icuSources/data/curr/twq.txt index 8644b249..d591061c 100644 --- a/icuSources/data/curr/twq.txt +++ b/icuSources/data/curr/twq.txt @@ -124,6 +124,10 @@ twq{ } MRO{ "MRO", + "Mooritaani Ugiya (1973–2017)", + } + MRU{ + "MRU", "Mooritaani Ugiya", } MUR{ @@ -180,6 +184,10 @@ twq{ } STD{ "STD", + "Sao Tome nda Prinsipe Dobra (1977–2017)", + } + STN{ + "STN", "Sao Tome nda Prinsipe Dobra", } SZL{ @@ -227,5 +235,5 @@ twq{ "Zimbabwe Dollar", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/tzm.txt b/icuSources/data/curr/tzm.txt index 81f1a413..2e536514 100644 --- a/icuSources/data/curr/tzm.txt +++ b/icuSources/data/curr/tzm.txt @@ -124,6 +124,10 @@ tzm{ } MRO{ "MRO", + "Uqiyya Umuritani (1973–2017)", + } + MRU{ + "MRU", "Uqiyya Umuritani", } MUR{ @@ -180,6 +184,10 @@ tzm{ } STD{ "STD", + "Dubra Usawṭumi (1977–2017)", + } + STN{ + "STN", "Dubra Usawṭumi", } SZL{ @@ -227,5 +235,5 @@ tzm{ "Ḍular Uzimbabwi", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/ug.txt b/icuSources/data/curr/ug.txt index 3d0a8a5d..fbe9f136 100644 --- a/icuSources/data/curr/ug.txt +++ b/icuSources/data/curr/ug.txt @@ -680,6 +680,10 @@ ug{ } MRO{ "MRO", + "ماۋرىتانىيە ئۇگىيەسى (1973–2017)", + } + MRU{ + "MRU", "ماۋرىتانىيە ئۇگىيەسى", } MTL{ @@ -912,6 +916,10 @@ ug{ } STD{ "STD", + "سان-تومې ۋە پىرىنسىپى دوبراسى (1977–2017)", + } + STN{ + "STN", "سان-تومې ۋە پىرىنسىپى دوبراسى", } SUR{ @@ -1873,6 +1881,10 @@ ug{ other{"ئاۋمېن پاتاكاسى"} } MRO{ + one{"ماۋرىتانىيە ئۇگىيەسى (1973–2017)"} + other{"ماۋرىتانىيە ئۇگىيەسى (1973–2017)"} + } + MRU{ one{"ماۋرىتانىيە ئۇگىيەسى"} other{"ماۋرىتانىيە ئۇگىيەسى"} } @@ -2105,6 +2117,10 @@ ug{ other{"جەنۇبىي سۇدان فوندستېرلىڭى"} } STD{ + one{"سان-تومې ۋە پىرىنسىپى دوبراسى (1977–2017)"} + other{"سان-تومې ۋە پىرىنسىپى دوبراسى (1977–2017)"} + } + STN{ one{"سان-تومې ۋە پىرىنسىپى دوبراسى"} other{"سان-تومې ۋە پىرىنسىپى دوبراسى"} } @@ -2393,5 +2409,5 @@ ug{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.31.86"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/uk.txt b/icuSources/data/curr/uk.txt index 81864727..4637afba 100644 --- a/icuSources/data/curr/uk.txt +++ b/icuSources/data/curr/uk.txt @@ -226,6 +226,10 @@ uk{ "CLP", "чилійський песо", } + CNH{ + "CNH", + "китайський офшорний юань", + } CNY{ "CNY", "китайський юань", @@ -612,6 +616,10 @@ uk{ } MRO{ "MRO", + "мавританська угія (1973–2017)", + } + MRU{ + "MRU", "мавританська угія", } MTL{ @@ -700,7 +708,7 @@ uk{ } PAB{ "PAB", - "панамська бальбоа", + "панамське бальбоа", } PEI{ "PEI", @@ -708,7 +716,7 @@ uk{ } PEN{ "PEN", - "перуанський сол", + "перуанський новий сол", } PES{ "PES", @@ -716,7 +724,7 @@ uk{ } PGK{ "PGK", - "кіна Папуа Нової Гвінеї", + "кіна Папуа-Нової Ґвінеї", } PHP{ "PHP", @@ -840,7 +848,11 @@ uk{ } STD{ "STD", - "добра Сан-Томе і Принсіпі", + "добра Сан-Томе і Прінсіпі (1977–2017)", + } + STN{ + "STN", + "добра Сан-Томе і Прінсіпі", } SUR{ "SUR", @@ -884,7 +896,7 @@ uk{ } TOP{ "TOP", - "тонганська паанга", + "тонґанська паанга", } TPE{ "TPE", @@ -900,7 +912,7 @@ uk{ } TTD{ "TTD", - "долар Тринідаду і Тобаго", + "долар Трінідаду і Тобаґо", } TWD{ "TWD", @@ -1174,6 +1186,7 @@ uk{ PKR{"Rs"} PLN{"zł"} PYG{"₲"} + RON{"lei"} RUB{"₽"} RWF{"RF"} SBD{"$"} @@ -1182,7 +1195,7 @@ uk{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1426,6 +1439,12 @@ uk{ one{"чилійський песо"} other{"чилійського песо"} } + CNH{ + few{"китайські офшорні юані"} + many{"китайських офшорних юанів"} + one{"китайський офшорний юань"} + other{"китайського офшорного юаня"} + } CNY{ few{"китайські юані"} many{"китайських юанів"} @@ -1811,6 +1830,12 @@ uk{ other{"патаки Макао"} } MRO{ + few{"мавританські угії (1973–2017)"} + many{"мавританських угій (1973–2017)"} + one{"мавританська угія (1973–2017)"} + other{"мавританської угії (1973–2017)"} + } + MRU{ few{"мавританські угії"} many{"мавританських угій"} one{"мавританська угія"} @@ -1903,14 +1928,14 @@ uk{ PAB{ few{"панамські бальбоа"} many{"панамських бальбоа"} - one{"панамська бальбоа"} + one{"панамське бальбоа"} other{"панамського бальбоа"} } PEN{ - few{"перуанські соли"} - many{"перуанських солів"} - one{"перуанський сол"} - other{"перуанського сола"} + few{"перуанські нові соли"} + many{"перуанських нових солів"} + one{"перуанський новий сол"} + other{"перуанського нового сола"} } PES{ few{"перуанські соли (1863–1965)"} @@ -1919,10 +1944,10 @@ uk{ other{"перуанського сола (1863–1965)"} } PGK{ - few{"кіни Папуа Нової Гвінеї"} - many{"кін Папуа Нової Гвінеї"} - one{"кіна Папуа Нової Гвінеї"} - other{"кіни Папуа Нової Гвінеї"} + few{"кіни Папуа-Нової Ґвінеї"} + many{"кін Папуа-Нової Ґвінеї"} + one{"кіна Папуа-Нової Ґвінеї"} + other{"кіни Папуа-Нової Ґвінеї"} } PHP{ few{"філіппінські песо"} @@ -2051,10 +2076,16 @@ uk{ other{"південносуданського фунта"} } STD{ + few{"добри Сан-Томе і Принсіпі (1977–2017)"} + many{"добр Сан-Томе і Принсіпі (1977–2017)"} + one{"добра Сан-Томе і Прінсіпі (1977–2017)"} + other{"добри Сан-Томе і Прінсіпі (1977–2017)"} + } + STN{ few{"добри Сан-Томе і Принсіпі"} many{"добр Сан-Томе і Принсіпі"} - one{"добра Сан-Томе і Принсіпі"} - other{"добри Сан-Томе і Принсіпі"} + one{"добра Сан-Томе і Прінсіпі"} + other{"добри Сан-Томе і Прінсіпі"} } SUR{ few{"радянські рублі"} @@ -2105,10 +2136,10 @@ uk{ other{"туніського динара"} } TOP{ - few{"тонганські паанги"} - many{"тонганських паанг"} - one{"тонганська паанга"} - other{"тонганської паанги"} + few{"тонґанські паанги"} + many{"тонґанських паанг"} + one{"тонґанська паанга"} + other{"тонґанської паанги"} } TRL{ few{"турецькі ліри (1922–2005)"} @@ -2125,8 +2156,8 @@ uk{ TTD{ few{"долари Тринідаду і Тобаго"} many{"доларів Тринідаду і Тобаго"} - one{"долар Тринідаду і Тобаго"} - other{"долара Тринідаду і Тобаго"} + one{"долар Трінідаду і Тобаґо"} + other{"долара Трінідаду і Тобаґо"} } TWD{ few{"нові тайванські долари"} @@ -2273,5 +2304,5 @@ uk{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.32.60"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/ur.txt b/icuSources/data/curr/ur.txt index a1fd3580..fab47351 100644 --- a/icuSources/data/curr/ur.txt +++ b/icuSources/data/curr/ur.txt @@ -122,6 +122,10 @@ ur{ "CLP", "چلّین پیسہ", } + CNH{ + "CNH", + "چینی یوآن (آف شور)", + } CNY{ "CN¥", "چینی یوآن", @@ -384,6 +388,10 @@ ur{ } MRO{ "MRO", + "موریطانیائی اوگوئیا (1973–2017)", + } + MRU{ + "MRU", "موریطانیائی اوگوئیا", } MUR{ @@ -540,6 +548,10 @@ ur{ } STD{ "STD", + "ساؤ ٹوم اور پرنسپے ڈوبرا (1977–2017)", + } + STN{ + "STN", "ساؤ ٹوم اور پرنسپے ڈوبرا", } SYP{ @@ -734,6 +746,7 @@ ur{ PKR{"Rs"} PLN{"zł"} PYG{"₲"} + RON{"lei"} RUB{"₽"} RWF{"RF"} SBD{"$"} @@ -742,7 +755,7 @@ ur{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -883,6 +896,10 @@ ur{ one{"چلّین پیسہ"} other{"چلّین پیسہ"} } + CNH{ + one{"چینی یوآن (آف شور)"} + other{"چینی یوآن (آف شور)"} + } CNY{ one{"چینی یوآن"} other{"چینی یوآن"} @@ -1132,6 +1149,10 @@ ur{ other{"میکانیز پٹاکا"} } MRO{ + one{"موریطانیائی اوگوئیا (1973–2017)"} + other{"موریطانیائی اوگوئیا (1973–2017)"} + } + MRU{ one{"موریطانیائی اوگوئیا"} other{"موریطانیائی اوگوئیا"} } @@ -1280,6 +1301,10 @@ ur{ other{"جنوبی سوڈانی پاؤنڈز"} } STD{ + one{"ساؤ ٹوم اور پرنسپے ڈوبرا (1977–2017)"} + other{"ساؤ ٹوم اور پرنسپے ڈوبرا (1977–2017)"} + } + STN{ one{"ساؤ ٹوم اور پرنسپے ڈوبرا"} other{"ساؤ ٹوم اور پرنسپے ڈوبرا"} } @@ -1400,5 +1425,5 @@ ur{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.32.59"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/ur_IN.txt b/icuSources/data/curr/ur_IN.txt index 3f45ef41..4cb93f64 100644 --- a/icuSources/data/curr/ur_IN.txt +++ b/icuSources/data/curr/ur_IN.txt @@ -77,5 +77,5 @@ ur_IN{ other{"ساموآئی ٹالا"} } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/uz.txt b/icuSources/data/curr/uz.txt index af3bbe64..a0f427ad 100644 --- a/icuSources/data/curr/uz.txt +++ b/icuSources/data/curr/uz.txt @@ -122,6 +122,10 @@ uz{ "CLP", "Chili pesosi", } + CNH{ + "CNH", + "CNH", + } CNY{ "CN¥", "Xitoy yuani", @@ -372,6 +376,10 @@ uz{ } MRO{ "MRO", + "Mavritaniya uqiyasi (1973–2017)", + } + MRU{ + "MRU", "Mavritaniya uqiyasi", } MUR{ @@ -520,6 +528,10 @@ uz{ } STD{ "STD", + "San-Tome va Prinsipi dobrasi (1977–2017)", + } + STN{ + "STN", "San-Tome va Prinsipi dobrasi", } SYP{ @@ -706,6 +718,7 @@ uz{ PKR{"Rs"} PLN{"zł"} PYG{"₲"} + RON{"lei"} RUB{"₽"} RWF{"RF"} SBD{"$"} @@ -714,7 +727,7 @@ uz{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -855,6 +868,10 @@ uz{ one{"Chili pesosi"} other{"Chili pesosi"} } + CNH{ + one{"CNH"} + other{"CNH"} + } CNY{ one{"Xitoy yuani"} other{"Xitoy yuani"} @@ -1104,6 +1121,10 @@ uz{ other{"Makao patakasi"} } MRO{ + one{"Mavritaniya uqiyasi (1973–2017)"} + other{"Mavritaniya uqiyasi (1973–2017)"} + } + MRU{ one{"Mavritaniya uqiyasi"} other{"Mavritaniya uqiyasi"} } @@ -1252,6 +1273,10 @@ uz{ other{"Janubiy Sudan funti"} } STD{ + one{"San-Tome va Prinsipi dobrasi (1977–2017)"} + other{"San-Tome va Prinsipi dobrasi (1977–2017)"} + } + STN{ one{"San-Tome va Prinsipi dobrasi"} other{"San-Tome va Prinsipi dobrasi"} } @@ -1372,5 +1397,5 @@ uz{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.32.60"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/uz_Arab.txt b/icuSources/data/curr/uz_Arab.txt index 549a9d8f..f76774e0 100644 --- a/icuSources/data/curr/uz_Arab.txt +++ b/icuSources/data/curr/uz_Arab.txt @@ -8,5 +8,5 @@ uz_Arab{ "افغانی", } } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/uz_Cyrl.txt b/icuSources/data/curr/uz_Cyrl.txt index cd5bc527..bc073a33 100644 --- a/icuSources/data/curr/uz_Cyrl.txt +++ b/icuSources/data/curr/uz_Cyrl.txt @@ -414,5 +414,5 @@ uz_Cyrl{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.31.86"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/uz_Latn.txt b/icuSources/data/curr/uz_Latn.txt index 36553dac..66698d61 100644 --- a/icuSources/data/curr/uz_Latn.txt +++ b/icuSources/data/curr/uz_Latn.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License uz_Latn{ - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/vai.txt b/icuSources/data/curr/vai.txt index 8b9588f6..296c5f65 100644 --- a/icuSources/data/curr/vai.txt +++ b/icuSources/data/curr/vai.txt @@ -124,6 +124,10 @@ vai{ } MRO{ "MRO", + "ꗞꔸꕚꕇꕰ ꖳꕅꕩ (1973–2017)", + } + MRU{ + "MRU", "ꗞꔸꕚꕇꕰ ꖳꕅꕩ", } MUR{ @@ -176,6 +180,10 @@ vai{ } STD{ "STD", + "ꕢꕴ ꕿꔈ ꗪ ꕉ ꕗꕴ ꖁꖜꕟ (1977–2017)", + } + STN{ + "STN", "ꕢꕴ ꕿꔈ ꗪ ꕉ ꕗꕴ ꖁꖜꕟ", } SZL{ @@ -215,5 +223,10 @@ vai{ "ꔽꕓꖜꔃ ꕜꕞ", } } - Version{"2.1.31.33"} + CurrencyPlurals{ + SCR{ + other{"ꔖꗼꔷ ꖩꔪ"} + } + } + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/vai_Latn.txt b/icuSources/data/curr/vai_Latn.txt index 634b8577..8c68b3ed 100644 --- a/icuSources/data/curr/vai_Latn.txt +++ b/icuSources/data/curr/vai_Latn.txt @@ -125,6 +125,10 @@ vai_Latn{ } MRO{ "MRO", + "Mɔretani Yugiya (1973–2017)", + } + MRU{ + "MRU", "Mɔretani Yugiya", } MUR{ @@ -173,6 +177,10 @@ vai_Latn{ } STD{ "STD", + "Sawo Tombe ɓɛ a Gbawo Dobura (1977–2017)", + } + STN{ + "STN", "Sawo Tombe ɓɛ a Gbawo Dobura", } SZL{ @@ -220,5 +228,5 @@ vai_Latn{ "Zimbhabhuwe Dala", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/vai_Vaii.txt b/icuSources/data/curr/vai_Vaii.txt index 487dfa96..6ef45173 100644 --- a/icuSources/data/curr/vai_Vaii.txt +++ b/icuSources/data/curr/vai_Vaii.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License vai_Vaii{ - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/vi.txt b/icuSources/data/curr/vi.txt index d5a20b2a..ad6dd70f 100644 --- a/icuSources/data/curr/vi.txt +++ b/icuSources/data/curr/vi.txt @@ -28,7 +28,7 @@ vi{ } ANG{ "ANG", - "Guilder Tây Ấn Hà Lan", + "Guilder Antille Hà Lan", } AOA{ "AOA", @@ -258,6 +258,10 @@ vi{ "CLP", "Peso Chile", } + CNH{ + "CNH", + "Nhân dân tệ (hải ngoại)", + } CNY{ "CN¥", "Nhân dân tệ", @@ -664,6 +668,10 @@ vi{ } MRO{ "MRO", + "Ouguiya Mauritania (1973–2017)", + } + MRU{ + "MRU", "Ouguiya Mauritania", } MTL{ @@ -892,6 +900,10 @@ vi{ } STD{ "STD", + "Dobra São Tomé và Príncipe (1977–2017)", + } + STN{ + "STN", "Dobra São Tomé và Príncipe", } SUR{ @@ -1238,6 +1250,7 @@ vi{ PKR{"Rs"} PLN{"zł"} PYG{"₲"} + RON{"lei"} RUB{"₽"} RWF{"RF"} SBD{"$"} @@ -1246,7 +1259,7 @@ vi{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1280,7 +1293,7 @@ vi{ other{"Dram Armenia"} } ANG{ - other{"Guilder Tây Ấn Hà Lan"} + other{"Guilder Antille Hà Lan"} } AOA{ other{"Kwanza Angola"} @@ -1357,6 +1370,9 @@ vi{ CLP{ other{"Peso Chile"} } + CNH{ + other{"Nhân dân tệ (hải ngoại)"} + } CNY{ other{"Nhân dân tệ"} } @@ -1544,6 +1560,9 @@ vi{ other{"Pataca Ma Cao"} } MRO{ + other{"Ouguiya Mauritania (1973–2017)"} + } + MRU{ other{"Ouguiya Mauritania"} } MUR{ @@ -1655,6 +1674,9 @@ vi{ other{"Bảng Nam Sudan"} } STD{ + other{"Dobra São Tomé và Príncipe (1977–2017)"} + } + STN{ other{"Dobra São Tomé và Príncipe"} } SYP{ @@ -1748,5 +1770,5 @@ vi{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.32.59"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/vun.txt b/icuSources/data/curr/vun.txt index 7cc1d616..202f4f84 100644 --- a/icuSources/data/curr/vun.txt +++ b/icuSources/data/curr/vun.txt @@ -124,6 +124,10 @@ vun{ } MRO{ "MRO", + "Ugwiya ya Moritania (1973–2017)", + } + MRU{ + "MRU", "Ugwiya ya Moritania", } MUR{ @@ -180,6 +184,10 @@ vun{ } STD{ "STD", + "Dobra ya Sao Tome na Principe (1977–2017)", + } + STN{ + "STN", "Dobra ya Sao Tome na Principe", } SZL{ @@ -227,5 +235,5 @@ vun{ "Dola ya Zimbabwe", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/wae.txt b/icuSources/data/curr/wae.txt index 2774104b..0313a76e 100644 --- a/icuSources/data/curr/wae.txt +++ b/icuSources/data/curr/wae.txt @@ -81,5 +81,5 @@ wae{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/wo.txt b/icuSources/data/curr/wo.txt new file mode 100644 index 00000000..103b44ed --- /dev/null +++ b/icuSources/data/curr/wo.txt @@ -0,0 +1,92 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html#License +wo{ + Currencies{ + BRL{ + "R$", + "Real bu Bresil", + } + CNY{ + "CN¥", + "Yuan bu Siin", + } + EUR{ + "€", + "Euro", + } + GBP{ + "£", + "Pound bu Grànd Brëtaañ", + } + INR{ + "₹", + "Rupee bu End", + } + JPY{ + "JP¥", + "Yen bu Sapoŋ", + } + RUB{ + "RUB", + "Ruble bi Rsis", + } + USD{ + "$", + "Dolaaru US", + } + XOF{ + "CFA", + "Franc CFA bu Afrik Sowwu-jant", + } + XXX{ + "XXX", + "Xaalis buñ Xamul", + } + } + Currencies%narrow{ + BRL{"R$"} + CNY{"¥"} + EUR{"€"} + GBP{"£"} + INR{"₹"} + JPY{"¥"} + RUB{"₽"} + USD{"$"} + } + CurrencyPlurals{ + BRL{ + other{"Real yu Bresil"} + } + CNY{ + other{"Yuan yu Siin"} + } + EUR{ + other{"euro"} + } + GBP{ + other{"Pound yu Grànd Brëtaañ"} + } + INR{ + other{"Rupee yu End"} + } + JPY{ + other{"Yen yu Sapoŋ"} + } + RUB{ + other{"Ruble yu Risi"} + } + USD{ + other{"Dolaari US"} + } + XOF{ + other{"Franc CFA yu Afrik Sowwu-jant"} + } + XXX{ + other{"(xaalis buñ xamul)"} + } + } + CurrencyUnitPatterns{ + other{"{0} {1}"} + } + Version{"2.1.38.71"} +} diff --git a/icuSources/data/curr/wuu.txt b/icuSources/data/curr/wuu.txt new file mode 100644 index 00000000..987eee8a --- /dev/null +++ b/icuSources/data/curr/wuu.txt @@ -0,0 +1,5 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html#License +wuu{ + "%%ALIAS"{"zh"} +} diff --git a/icuSources/data/curr/xog.txt b/icuSources/data/curr/xog.txt index cd2635d7..36983198 100644 --- a/icuSources/data/curr/xog.txt +++ b/icuSources/data/curr/xog.txt @@ -124,6 +124,10 @@ xog{ } MRO{ "MRO", + "Wugwiya ey’eMawritenya (1973–2017)", + } + MRU{ + "MRU", "Wugwiya ey’eMawritenya", } MUR{ @@ -176,6 +180,10 @@ xog{ } STD{ "STD", + "Dobura ey’eSantome ne Purincipe (1977–2017)", + } + STN{ + "STN", "Dobura ey’eSantome ne Purincipe", } SZL{ @@ -223,5 +231,5 @@ xog{ "Doola ey’eZimbabwe", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/yav.txt b/icuSources/data/curr/yav.txt index 1774f8fc..c53acd91 100644 --- a/icuSources/data/curr/yav.txt +++ b/icuSources/data/curr/yav.txt @@ -95,5 +95,5 @@ yav{ "́faláŋɛ u kɔmɔ́ɔl", } } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/yi.txt b/icuSources/data/curr/yi.txt index 5fe010d6..63cf8019 100644 --- a/icuSources/data/curr/yi.txt +++ b/icuSources/data/curr/yi.txt @@ -105,5 +105,5 @@ yi{ other{"אומבאַוואוסטע וואַלוטע"} } } - Version{"2.1.31.33"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/yo.txt b/icuSources/data/curr/yo.txt index 8f82b2fd..9e3995e9 100644 --- a/icuSources/data/curr/yo.txt +++ b/icuSources/data/curr/yo.txt @@ -124,6 +124,10 @@ yo{ } MRO{ "MRO", + "Ouguiya ti Orílẹ́ède Maritania (1973–2017)", + } + MRU{ + "MRU", "Ouguiya ti Orílẹ́ède Maritania", } MUR{ @@ -180,6 +184,10 @@ yo{ } STD{ "STD", + "Dobira ti Orílẹ́ède Sao tome Ati Pirisipe (1977–2017)", + } + STN{ + "STN", "Dobira ti Orílẹ́ède Sao tome Ati Pirisipe", } SZL{ @@ -230,5 +238,5 @@ yo{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/yo_BJ.txt b/icuSources/data/curr/yo_BJ.txt index 44161d1e..f50111cd 100644 --- a/icuSources/data/curr/yo_BJ.txt +++ b/icuSources/data/curr/yo_BJ.txt @@ -120,6 +120,10 @@ yo_BJ{ } MRO{ "MRO", + "Ouguiya ti Orílɛ́ède Maritania (1973–2017)", + } + MRU{ + "MRU", "Ouguiya ti Orílɛ́ède Maritania", } MUR{ @@ -172,6 +176,10 @@ yo_BJ{ } STD{ "STD", + "Dobira ti Orílɛ́ède Sao tome Ati Pirisipe (1977–2017)", + } + STN{ + "STN", "Dobira ti Orílɛ́ède Sao tome Ati Pirisipe", } TND{ @@ -215,5 +223,5 @@ yo_BJ{ "Dɔla ti Orílɛ́ède Siibabuwe", } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/yue.txt b/icuSources/data/curr/yue.txt index ffdf1518..547427cf 100644 --- a/icuSources/data/curr/yue.txt +++ b/icuSources/data/curr/yue.txt @@ -262,6 +262,10 @@ yue{ "CLP", "智利披索", } + CNH{ + "CNH", + "人民幣 (離岸)", + } CNX{ "CNX", "CNX", @@ -680,6 +684,10 @@ yue{ } MRO{ "MRO", + "茅利塔尼亞烏吉亞 (1973–2017)", + } + MRU{ + "MRU", "茅利塔尼亞烏吉亞", } MTL{ @@ -912,6 +920,10 @@ yue{ } STD{ "STD", + "聖多美島和普林西比島多布拉 (1977–2017)", + } + STN{ + "STN", "聖多美島和普林西比島多布拉", } SUR{ @@ -1277,7 +1289,7 @@ yue{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1493,6 +1505,9 @@ yue{ CLP{ other{"智利披索"} } + CNH{ + other{"人民幣 (離岸)"} + } CNY{ other{"人民幣"} } @@ -1803,6 +1818,9 @@ yue{ other{"澳門元"} } MRO{ + other{"茅利塔尼亞烏吉亞 (1973–2017)"} + } + MRU{ other{"茅利塔尼亞烏吉亞"} } MTL{ @@ -1977,6 +1995,9 @@ yue{ other{"南蘇丹鎊"} } STD{ + other{"聖多美島和普林西比島多布拉 (1977–2017)"} + } + STN{ other{"聖多美島和普林西比島多布拉"} } SUR{ @@ -2193,5 +2214,5 @@ yue{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.34.23"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/yue_Hans.txt b/icuSources/data/curr/yue_Hans.txt index 4f2f4a37..41e30cde 100644 --- a/icuSources/data/curr/yue_Hans.txt +++ b/icuSources/data/curr/yue_Hans.txt @@ -263,6 +263,10 @@ yue_Hans{ "CLP", "智利披索", } + CNH{ + "CNH", + "人民币 (离岸)", + } CNX{ "CNX", "CNX", @@ -681,6 +685,10 @@ yue_Hans{ } MRO{ "MRO", + "茅利塔尼亚乌吉亚 (1973–2017)", + } + MRU{ + "MRU", "茅利塔尼亚乌吉亚", } MTL{ @@ -913,6 +921,10 @@ yue_Hans{ } STD{ "STD", + "圣多美岛和普林西比岛多布拉 (1977–2017)", + } + STN{ + "STN", "圣多美岛和普林西比岛多布拉", } SUR{ @@ -1278,7 +1290,7 @@ yue_Hans{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1494,6 +1506,9 @@ yue_Hans{ CLP{ other{"智利披索"} } + CNH{ + other{"人民币 (离岸)"} + } CNY{ other{"人民币"} } @@ -1804,6 +1819,9 @@ yue_Hans{ other{"澳门元"} } MRO{ + other{"茅利塔尼亚乌吉亚 (1973–2017)"} + } + MRU{ other{"茅利塔尼亚乌吉亚"} } MTL{ @@ -1978,6 +1996,9 @@ yue_Hans{ other{"南苏丹镑"} } STD{ + other{"圣多美岛和普林西比岛多布拉 (1977–2017)"} + } + STN{ other{"圣多美岛和普林西比岛多布拉"} } SUR{ @@ -2194,5 +2215,5 @@ yue_Hans{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.0"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/yue_Hant.txt b/icuSources/data/curr/yue_Hant.txt index 39376c31..a263f97f 100644 --- a/icuSources/data/curr/yue_Hant.txt +++ b/icuSources/data/curr/yue_Hant.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License yue_Hant{ - Version{"2.0"} + Version{"2.1.38.69"} } diff --git a/icuSources/data/curr/zgh.txt b/icuSources/data/curr/zgh.txt index 9a4dbf3d..7c640e4f 100644 --- a/icuSources/data/curr/zgh.txt +++ b/icuSources/data/curr/zgh.txt @@ -120,6 +120,10 @@ zgh{ } MRO{ "MRO", + "ⵓⵇⵉⵢⵢⴰ ⵏ ⵎⵓⵕⵉⵟⴰⵏⵢⴰ (1973–2017)", + } + MRU{ + "MRU", "ⵓⵇⵉⵢⵢⴰ ⵏ ⵎⵓⵕⵉⵟⴰⵏⵢⴰ", } MUR{ @@ -176,6 +180,10 @@ zgh{ } STD{ "STD", + "ⴰⴷⵓⴱⵔⴰ ⵏ ⵙⴰⵏⵟⵓⵎⵉ (1977–2017)", + } + STN{ + "STN", "ⴰⴷⵓⴱⵔⴰ ⵏ ⵙⴰⵏⵟⵓⵎⵉ", } SZL{ @@ -234,5 +242,5 @@ zgh{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/zh.txt b/icuSources/data/curr/zh.txt index dfed7d36..f2575303 100644 --- a/icuSources/data/curr/zh.txt +++ b/icuSources/data/curr/zh.txt @@ -262,6 +262,10 @@ zh{ "CLP", "智利比索", } + CNH{ + "CNH", + "人民币(离岸)", + } CNY{ "¥", "人民币", @@ -676,6 +680,10 @@ zh{ } MRO{ "MRO", + "毛里塔尼亚乌吉亚 (1973–2017)", + } + MRU{ + "MRU", "毛里塔尼亚乌吉亚", } MTL{ @@ -908,6 +916,10 @@ zh{ } STD{ "STD", + "圣多美和普林西比多布拉 (1977–2017)", + } + STN{ + "STN", "圣多美和普林西比多布拉", } SUR{ @@ -1255,7 +1267,7 @@ zh{ PKR{"Rs"} PLN{"zł"} PYG{"₲"} - RON{"L"} + RON{"lei"} RUB{"₽"} RUR{"р."} RWF{"RF"} @@ -1265,7 +1277,7 @@ zh{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1341,7 +1353,7 @@ zh{ other{"澳大利亚元"} } AWG{ - other{"阿鲁巴基尔德元"} + other{"阿鲁巴弗罗林"} } AZM{ other{"阿塞拜疆马纳特 (1993–2006)"} @@ -1475,6 +1487,9 @@ zh{ CLP{ other{"智利比索"} } + CNH{ + other{"人民币(离岸)"} + } CNY{ other{"人民币"} } @@ -1779,6 +1794,9 @@ zh{ other{"澳门元"} } MRO{ + other{"毛里塔尼亚乌吉亚 (1973–2017)"} + } + MRU{ other{"毛里塔尼亚乌吉亚"} } MTL{ @@ -1953,6 +1971,9 @@ zh{ other{"南苏丹镑"} } STD{ + other{"圣多美和普林西比多布拉 (1977–2017)"} + } + STN{ other{"圣多美和普林西比多布拉"} } SUR{ @@ -2118,5 +2139,5 @@ zh{ CurrencyUnitPatterns{ other{"{0}{1}"} } - Version{"2.1.33.94"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/zh_Hans.txt b/icuSources/data/curr/zh_Hans.txt index e2e6871e..a37beace 100644 --- a/icuSources/data/curr/zh_Hans.txt +++ b/icuSources/data/curr/zh_Hans.txt @@ -1,5 +1,5 @@ // © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License zh_Hans{ - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/zh_Hans_HK.txt b/icuSources/data/curr/zh_Hans_HK.txt index 74da7ada..ba57dd0b 100644 --- a/icuSources/data/curr/zh_Hans_HK.txt +++ b/icuSources/data/curr/zh_Hans_HK.txt @@ -16,9 +16,6 @@ zh_Hans_HK{ } } CurrencyPlurals{ - AWG{ - other{"阿鲁巴弗罗林"} - } KYD{ other{"开曼群岛元"} } @@ -29,5 +26,5 @@ zh_Hans_HK{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/zh_Hans_MO.txt b/icuSources/data/curr/zh_Hans_MO.txt index 52d1666a..94b89fab 100644 --- a/icuSources/data/curr/zh_Hans_MO.txt +++ b/icuSources/data/curr/zh_Hans_MO.txt @@ -19,9 +19,6 @@ zh_Hans_MO{ ANG{ other{"荷兰安的列斯盾"} } - AWG{ - other{"阿鲁巴弗罗林"} - } NIO{ other{"尼加拉瓜科多巴"} } @@ -29,5 +26,5 @@ zh_Hans_MO{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/zh_Hans_SG.txt b/icuSources/data/curr/zh_Hans_SG.txt index 764434c2..56082caa 100644 --- a/icuSources/data/curr/zh_Hans_SG.txt +++ b/icuSources/data/curr/zh_Hans_SG.txt @@ -19,9 +19,6 @@ zh_Hans_SG{ ANG{ other{"荷兰安的列斯盾"} } - AWG{ - other{"阿鲁巴弗罗林"} - } NIO{ other{"尼加拉瓜科多巴"} } @@ -29,5 +26,5 @@ zh_Hans_SG{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/zh_Hant.txt b/icuSources/data/curr/zh_Hant.txt index 0cce49ec..8660f9cb 100644 --- a/icuSources/data/curr/zh_Hant.txt +++ b/icuSources/data/curr/zh_Hant.txt @@ -263,6 +263,10 @@ zh_Hant{ "CLP", "智利披索", } + CNH{ + "CNH", + "人民幣(離岸)", + } CNX{ "CNX", "CNX", @@ -549,7 +553,7 @@ zh_Hant{ } KPW{ "KPW", - "北韓圓", + "北韓元", } KRH{ "KRH", @@ -561,7 +565,7 @@ zh_Hant{ } KRW{ "₩", - "韓圓", + "韓元", } KWD{ "KWD", @@ -573,7 +577,7 @@ zh_Hant{ } KZT{ "KZT", - "卡扎克斯坦坦吉", + "哈薩克堅戈", } LAK{ "LAK", @@ -681,6 +685,10 @@ zh_Hant{ } MRO{ "MRO", + "茅利塔尼亞烏吉亞 (1973–2017)", + } + MRU{ + "MRU", "茅利塔尼亞烏吉亞", } MTL{ @@ -913,6 +921,10 @@ zh_Hant{ } STD{ "STD", + "聖多美島和普林西比島多布拉 (1977–2017)", + } + STN{ + "STN", "聖多美島和普林西比島多布拉", } SUR{ @@ -1227,6 +1239,7 @@ zh_Hant{ FJD{"$"} FKP{"£"} GBP{"£"} + GEL{"₾"} GIP{"£"} GNF{"FG"} GTQ{"Q"} @@ -1277,7 +1290,7 @@ zh_Hant{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -1704,7 +1717,7 @@ zh_Hant{ other{"科摩羅法郎"} } KPW{ - other{"北韓圓"} + other{"北韓元"} } KRH{ other{"南韓圜"} @@ -1713,7 +1726,7 @@ zh_Hant{ other{"南韓圓"} } KRW{ - other{"韓圓"} + other{"韓元"} } KWD{ other{"科威特第納爾"} @@ -1722,7 +1735,7 @@ zh_Hant{ other{"開曼群島元"} } KZT{ - other{"卡扎克斯坦坦吉"} + other{"哈薩克堅戈"} } LAK{ other{"寮國基普"} @@ -1803,6 +1816,9 @@ zh_Hant{ other{"澳門元"} } MRO{ + other{"茅利塔尼亞烏吉亞 (1973–2017)"} + } + MRU{ other{"茅利塔尼亞烏吉亞"} } MTL{ @@ -1977,6 +1993,9 @@ zh_Hant{ other{"南蘇丹鎊"} } STD{ + other{"聖多美島和普林西比島多布拉 (1977–2017)"} + } + STN{ other{"聖多美島和普林西比島多布拉"} } SUR{ @@ -2193,5 +2212,5 @@ zh_Hant{ CurrencyUnitPatterns{ other{"{0} {1}"} } - Version{"2.1.33.94"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/curr/zh_Hant_HK.txt b/icuSources/data/curr/zh_Hant_HK.txt index a094df07..9088a692 100644 --- a/icuSources/data/curr/zh_Hant_HK.txt +++ b/icuSources/data/curr/zh_Hant_HK.txt @@ -34,6 +34,10 @@ zh_Hant_HK{ "BIF", "布隆迪法郎", } + BMD{ + "BMD", + "百慕達元", + } BWP{ "BWP", "博茨瓦納普拉", @@ -108,7 +112,7 @@ zh_Hant_HK{ } KRW{ "₩", - "韓圓", + "韓元", } KZT{ "KZT", @@ -128,6 +132,10 @@ zh_Hant_HK{ } MRO{ "MRO", + "毛里塔尼亞烏吉亞 (1973–2017)", + } + MRU{ + "MRU", "毛里塔尼亞烏吉亞", } MUR{ @@ -200,6 +208,10 @@ zh_Hant_HK{ } STD{ "STD", + "聖多美和普林西比多布拉 (1977–2017)", + } + STN{ + "STN", "聖多美和普林西比多布拉", } SYP{ @@ -277,6 +289,9 @@ zh_Hant_HK{ BIF{ other{"布隆迪法郎"} } + BMD{ + other{"百慕達元"} + } BWP{ other{"博茨瓦納普拉"} } @@ -295,9 +310,6 @@ zh_Hant_HK{ DJF{ other{"吉布提法郎"} } - DKK{ - other{"丹麥克羅納"} - } DOP{ other{"多米尼加披索"} } @@ -350,6 +362,9 @@ zh_Hant_HK{ other{"摩爾多瓦列伊"} } MRO{ + other{"毛里塔尼亞烏吉亞 (1973–2017)"} + } + MRU{ other{"毛里塔尼亞烏吉亞"} } MUR{ @@ -364,9 +379,6 @@ zh_Hant_HK{ NGN{ other{"尼日利亞奈拉"} } - NOK{ - other{"挪威克羅納"} - } NZD{ other{"紐西蘭元"} } @@ -394,9 +406,6 @@ zh_Hant_HK{ SCR{ other{"塞舌爾盧比"} } - SEK{ - other{"瑞典克羅納"} - } SGD{ other{"新加坡元"} } @@ -410,6 +419,9 @@ zh_Hant_HK{ other{"蘇里南元"} } STD{ + other{"聖多美和普林西比多布拉 (1977–2017)"} + } + STN{ other{"聖多美和普林西比多布拉"} } SYP{ @@ -449,5 +461,5 @@ zh_Hant_HK{ other{"贊比亞克瓦查"} } } - Version{"2.1.31.33"} + Version{"2.1.39.11"} } diff --git a/icuSources/data/curr/zh_Hant_MO.txt b/icuSources/data/curr/zh_Hant_MO.txt index bb9d00fd..c0e9b1b5 100644 --- a/icuSources/data/curr/zh_Hant_MO.txt +++ b/icuSources/data/curr/zh_Hant_MO.txt @@ -8,5 +8,5 @@ zh_Hant_MO{ "澳門元", } } - Version{"2.1.31.33"} + Version{"2.1.38.39"} } diff --git a/icuSources/data/curr/zu.txt b/icuSources/data/curr/zu.txt index 8347ad58..ce7cccfd 100644 --- a/icuSources/data/curr/zu.txt +++ b/icuSources/data/curr/zu.txt @@ -122,6 +122,10 @@ zu{ "CLP", "i-Chilean Peso", } + CNH{ + "CNH", + "CNH", + } CNY{ "CN¥", "i-Chinese Yuan", @@ -376,6 +380,10 @@ zu{ } MRO{ "MRO", + "i-Mauritanian Ouguiya (1973–2017)", + } + MRU{ + "MRU", "i-Mauritanian Ouguiya", } MUR{ @@ -524,6 +532,10 @@ zu{ } STD{ "STD", + "i-São Tomé kanye ne-Príncipe Dobra (1977–2017)", + } + STN{ + "STN", "i-São Tomé kanye ne-Príncipe Dobra", } SYP{ @@ -722,7 +734,7 @@ zu{ SHP{"£"} SRD{"$"} SSP{"£"} - STD{"Db"} + STN{"Db"} SYP{"£"} THB{"฿"} TOP{"T$"} @@ -863,6 +875,10 @@ zu{ one{"i-Chilean Peso"} other{"i-Chilean Peso"} } + CNH{ + one{"CNH"} + other{"CNH"} + } CNY{ one{"i-Chinese Yuan"} other{"i-Chinese Yuan"} @@ -1104,6 +1120,10 @@ zu{ other{"i-Macanese Pataca"} } MRO{ + one{"i-Mauritanian Ouguiya (1973–2017)"} + other{"i-Mauritanian Ouguiya (1973–2017)"} + } + MRU{ one{"i-Mauritanian Ouguiya"} other{"i-Mauritanian Ouguiya"} } @@ -1252,6 +1272,10 @@ zu{ other{"i-South Sudanese Pound"} } STD{ + one{"i-São Tomé kanye ne-Príncipe Dobra (1977–2017)"} + other{"i-São Tomé kanye ne-Príncipe Dobra (1977–2017)"} + } + STN{ one{"i-São Tomé kanye ne-Príncipe Dobra"} other{"i-São Tomé kanye ne-Príncipe Dobra"} } @@ -1372,5 +1396,5 @@ zu{ one{"{0} {1}"} other{"{0} {1}"} } - Version{"2.1.31.74"} + Version{"2.1.41.97"} } diff --git a/icuSources/data/icu-coll-deprecates.xml b/icuSources/data/icu-coll-deprecates.xml index d418fa70..ccf978a6 100644 --- a/icuSources/data/icu-coll-deprecates.xml +++ b/icuSources/data/icu-coll-deprecates.xml @@ -27,6 +27,9 @@ + + + diff --git a/icuSources/data/icu-config.xml b/icuSources/data/icu-config.xml index 48a2420e..3651f8bf 100644 --- a/icuSources/data/icu-config.xml +++ b/icuSources/data/icu-config.xml @@ -95,6 +95,9 @@ + + + @@ -686,6 +689,8 @@ + + @@ -698,6 +703,8 @@ + + @@ -730,6 +737,8 @@ + + @@ -740,7 +749,10 @@ - + + + + diff --git a/icuSources/data/icu-locale-deprecates.xml b/icuSources/data/icu-locale-deprecates.xml index fb55e582..5ed82ede 100644 --- a/icuSources/data/icu-locale-deprecates.xml +++ b/icuSources/data/icu-locale-deprecates.xml @@ -46,6 +46,8 @@ + + diff --git a/icuSources/data/icu4j-readme.txt b/icuSources/data/icu4j-readme.txt index dd766a41..bb432f17 100644 --- a/icuSources/data/icu4j-readme.txt +++ b/icuSources/data/icu4j-readme.txt @@ -19,10 +19,11 @@ In the following, 1. Download and build ICU4C. For more instructions on downloading and building ICU4C, see the ICU4C readme at: - http://source.icu-project.org/repos/icu/icu/trunk/readme.html#HowToBuild - (Windows: build as x86, Release otherwise you will have to set 'CFG' differently below.) + http://source.icu-project.org/repos/icu/trunk/icu4c/readme.html#HowToBuild + (Windows: build as 'x86, Release' otherwise you will have to set 'CFG' differently below.) - *NOTE* You should do a full rebuild after any data changes. + *NOTE* You should do a full rebuild after any data changes. + 1a. If you didn't download from Subversion, you will also need the "icu4c-*-data.zip" file. Unpack this file and replace the icu/source/data directory's contents with the contents of the data directory from the zip file. diff --git a/icuSources/data/in/base_in/nfc.nrm b/icuSources/data/in/base_in/nfc.nrm index 76168750f2347be654d19b08aaec47b2ca8d3be4..c421baf0c8de2c963fd4f5542327bfcc2fd7606e 100644 GIT binary patch literal 35784 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 Wp9S3BURTDyOlI-<#`YX1aQ_d>68k^^ literal 35260 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 Q{^@@`cJl#7juW{51MkcgfdBvi diff --git a/icuSources/data/in/base_in/nfkc.nrm b/icuSources/data/in/base_in/nfkc.nrm index 8f6802b9c81066a91d1f72f8e342b4eba2f7dfbd..6fa226ee31f7d7ed3ad5ecfebb7f19872d09cd90 100644 GIT binary patch literal 54660 zcmeFa2Y8f4_cwfR$!0g%6w-Tx^u8s%ZcXoP(?c4)hawWC^P4m0oH^&r+;g|t-QdA|<7>l^e{3de zP+t)ToGEQ0%Y+>(WA7meAUuA#KzRP~ZW;lF~CC7o|!SUmSaw0j295v@G`wBaQ zQ@|{ zlkY@*fcqu)3~irfU!?W7+#hLum-|R3Z=p5M$jpd%?_%VD+QZ1#DAXv@DA7o5lttx* z6w4`A8zq<#TNN`+}dIfYTH)w^85g!0fyc~4IJtJs;)Jzo%D6unhu;xxy44y zjn)`#0KXNq3$%~QiH9Rbr@((>^sUj4M)!;!8?ksio;lBs=f?Blh43PH2|N`qi&w;} z%MJ#KK^;r1vD`S_IN!Le6J1B!f7Y(19_uLfdZG70I?XG(dW^1~Wau%Ca&wFq z8GmT}vGHc(oyG@@j}e*iCF2{$w~g-`KQZR=h5WN@8@>y_8$SpfDH47hU%}7d7x2sZ zb^Jd3A^cJN3H&$tv-k`6%lNBxR{v~F|F!<_4E%Qn{yPKzoq_+(!2caHu#vx=-YNI$ z?w5yj^;i5eZSJ5K`8Uw|k^eK5?KgVZMt7F|2cIo45|H^arAW9f+;X!Dvr4lnvud*% zvjJxRZT)v9{{ONHdeFCv;bvpZwy-CG{$2UMv@V3Cmq!N1=|FiPm-;94(2mL`^`$z}*zn{gE zCSSMlb-4}yBA++^*5-B_i!=OtCXY>6ro@}T)Drc6x?kWxCC(JJkvze7GYv8ow~?J? z$I_PEG`*cP$FzjD@983y>9h~qL_W)|Y1ilZ@eDBf9rit5Xr=ew+H(MGe`^<`Rrexp z2>QJ8!Wb{=^;hz-|I*v*rqfO5n!acHfv*4Bzwq;^>F1{VO?R7qW%{-0Wz)}0Z<+pV z`Vi;YHdCV63e9%Y&89n{X))yq&4qSCmQWz?;n%{;!dt?h zg%5=-LY|qqnVp%NnU7hBS;PzW5C1dK&$2h8u$ccdh0E|6A&qUxyf<2u*m%R?pITzbyeV;AiBw=^C4`&@`Bj-5h zF2@hM#0qXXw+Hu4?olp_InBM#wKNJd8f7%WXtB`>qvJ;ZXU5!FRE>XoX*t^64YCHx z_4OaIynss6M57osk(Dz#c`Qf;-@?aI06X zCRjZ(VKHx5O}Bc-if!s(8eqy|?iwwydf#e=mBe(d6^Xpj>NBe}(_L28roBw>8x1kt zZ*|n_RnwDJ=d3PU-LRU49zR;$wR&jvp6NzhPgu+oqbF8uYrgeyQ*&z;V`J@P?O}b( z^ogmjb+EO_I?6i1T49}Lonu{OU2fgox(94njFr$s*w1>1^()q6ttVMewSL=ruJwD? z%d9`LUT6KO^>*t$)`zUWvOZ01zp=h*earf`^{>{Cte;sM*_ha{m}UMS`FF9gw{f-U zik6>Eh>g@H)+WhDWwYLYGo6(Tn>-thO_fcZO)s16R1zYL6ArK$YBS1aJo>Ph*KOXi znQb%QX0go&HfgvHthV{YW~B5UP-`ad{^Rvx; zn?Gz=w#K$XTPs@!TQ}QowgI+bwh^{*wldok+b?LW_DArawcZtO6u!8}SHkbxX&GKe zTVAzIwO93i|D*mV{m=Pd_P^nuWm{ldYFlmFVB5!bknM2Wv9@p6&a!>ac7^RHw%cv@ z+p?JBw%^#^u>INgciX3Eu^6@;-_G35#*S?!G;_7{wF|YA+Qr)a=zrJ$p?{K{%8uA% z*yY)k+SS?hwHs_V!fuS+1iLrvrrW(^x4`awyA^h8?KawdX1B|3zui&0lXmCqF5BI( z`_b;M-9x)4c5HjTy}7-Oy_3C%y^lTd6=W}>wSFviW*%k%W)ia)dxd?LeTjX7S&CVA z`#$zV>|beTr?>A|bDx`)jutO&Kk;V;a0B=Oo{#(=DoCZPAtE&(=NF^IM+HLfP_ETV_3- z)v6&ftp@$rExPhV-xHouF4y0vKl=2?`n&a45lgGnY6#C_T6xkw`b?X}(Pt;0okr24 z)~Ykq&t++0#eP4?UD^UQYJmzy21KW4v7C*OCC|i>VKI^t-lK&o-lGG1u*Xz({`q zv6yn>2ec;qpY|*VV+R&fO|$9&>|;FKc&zaRV>5?Yx=iQlY8JCV$F0`Y>rii`{1%G4 zfP0OP8=o`2Xl(6po62yH(A6yFzK-MawK?)p3n}mD;EpW3K`h3SA4qG$hdV?%#2Z@L zUVnu)dDz8iXm#Xl(-u9qot}Yuss3zjJ!iFc+n*goKbsc27Kaw67MB*c7LOLMmToOR zD1I#gEkP|TCIl4LA_5XGSo`4q-z}}9&~kAt2`xz-vT$DJ}T=NN?^ zar}susFs)(t#4V2qJ>;x$yKp6x|Sz%@Yh9U$Zc@Ih=4Hx6FVHSXvZXeVkbwotycwK z35yhdYjna93%!J7qi?gAm(5KZBgK$m+n6uQlXXC{(4+QhuSacuMAw$IxxQ?K|Ad`> zo?7#H-s|5V%Z`2YUR#d?8JSk9uSu(8zn5!k&(D{&)#uV#-MS)(R(qsKO^SAG+pX3delFSt{Ni>}7GwUTW6zFlE8V)&XQb7?5imXAoqz=a?+2_1SR1gh z!`af&$BWzM@XkD!Ly7KsP~lkXsE^;)M{AGI0(K$x{(l{xczyXJf0V{K*(Msv|F27D z`I8>!0xk#Kpq_qg|cDAxe&r#?#(~wWchu2oT4L2gyy@fUZKw0+(s|kBxXp3*KbRLQ!?-(o zB%T-W4#=QlepQmQQG1TGwQJA+yXbl!k00r|e_Lzs;V;{}Fd$G)ri z*B#gKe{kH$|HW|&|AFIn{-1Q6?c%eXp7;AAiFr%wYTU~=b~?y6b2`dD&bM}QbUMv< zcY68pb{0YZEY>=z&aCvZzdHl;cKZ57&lLaE51uYNy*BIPkXkze>|M6B9vAIV(H|kA zYg_ca+aEXmswRE)7M;}-0$&e&6IY<=fwKbV1uh6&9JnlSMd0edb%7fLw?MuFx`kWG+7 zkmDoQAdjHrN8UmHLBT=cLDHb8Abx-YWJD52C7orYl_dwgSoilDWl%~`W>9X>XhhKHpm9MHgC++}4Vn=&J7`|e!k{HV%Y#-1tqEEm zv?*vy(2k(pL3@J^1!?DAdsOtOecw3!Y&Fi6S(x8{T8?AK;vhZG$iAZX4YQk5fK!-L zgj2ke+$q&5+o{;8#;J!>Kc^v1uQ-i$YId6HG}CFW(|b-IIIVN~%xSOFQKyqm=bSD( zedlz~>9Nx@C$6)Jv!%10vx~Erv!8Q_v(!1(Imub&oZ+13TXWq^QX?+oxgBC==_!Q8RrYmSDkM;-**1h`H^#rGuOq$#mdFS z#m6PgCB{YJlI2q3QsdI-(${6M%W#)hUACL;H*0p8?lRZqJ(p!JAGsVi`^M}Om+db5 zU5>ka<8s60w#%s;6OT$j0in+ziuD`iHc75i`bu)3Z zbhC5&GAN~5zZPzo{c7go=H(XPCUHw}OL5C{D|c&f8{qbe+XT0_+~&Hy@3z|QQ@34i zhuu!QU3UB4jWIVdzw7qU?TH)P-NfC--Ob(4UF06;u5!)bzc-|POB`#JY--EX@;bZ0zFJZwDNJp4RF9&sKjj~tH@k4ld^ zk6s>wJVtpmdrbFu*JGK-T8}LrUw9n#IPLL`$2E`dJZ^jZ>hZ{<#Y3Mvsr}3o%!|zH z%m79Uw`vDj~M+TyCkLkn|D7s~+4C`*-Pfn~MjAj@LU8qeOIO`c;sCwoq? ze8+O8=R(g9J=c3~^W5jT!tztgW1iqX*Swfxo6-OJxg z>=o~&_R58f+XcIYsOv%fz3jRKby0N5>r&mNUzbr`-stj9m(^YNb~)MQYL}n8Jn3R$ zWoMOBJesvmR8RIAUL9aHwwm~#?)9$MO0TV6hrG^v{owW3i`&(_ zt83TbuJK(nyH<4V+jV%?@m*(hUD9=Z*WF!DbiLN~cGrhpjk?)(^X?|?rtDVOt-4#U zZX>!)?l!O6%5Gb`9qM+v+vRR|x;^b?=I!bo>>cl|_RjP!^e*?V_r|WeRe$ec-lM%= z^M1Yhb?=iw=YmcKT@1PrG{bwY_Y&w6tX6q%@Sa}1)q8IB=iWaDJqlt6@AE$5eaicN zn(GDc>)tKG+ens`csZbFg}#&++P^K8oNpXbXcYf;Ijf3+bgVZJ)fWsXx7j)Q!Qt zg9kn*)qe^*B6tjRlY*xjEM|jy*U-{?S`z$W@S5kOdM%6D&_Sp7-)hm3+YuZ^ujIRf z_XQsc{xbMP@R{KA!Iy%s2Hy<+A^3Lij^K&@@T zs36Y(<>>0wf#<5<4CJA88+Yvj)EhBJnvjZ+nvnVsGT%Ky28Q?tHHC}_84azrOsDtk zs35N49hAt&g-i~a5i&nyX~?RO4I$e?_JkY>ITdmteujXN0Jrl+diuqEL^Z^3d*~y+VhCCI!3_IyN*eASLMgKyD{T zX>zDOBT}EkoB2i1Rr-dm)r|Ie4QI)V%jCb*>ibRene8**=LYt z^Ld~DA-G5UH7^xI@8Jo5gAXIv+NRHp&^Z|AqR{2-Myt2S)l;D7ccK?xu+K*b$q^q* z!3mug8-s=3va|ZEkAvV6dbkKYI@n+L`N8KGp9emF`g9Zc30S_yzCnU8ftjzhuS5_f zh!Z4Hdq-b)Uxgq=;O!gen<2;%g!@MNwvSUFDCyw2y&j+Awb54#>d@*Ti1(HIrut@6 zUws4v1VaSF+gP=FDD*A!t?_Ma7qhSLVBZnGW7^4DdvxU1gsy+V9Cx%N?dPvHn?kpR z?hZW=`eo>;(DR{JLT`rt6nZc8_t0md#$gs=_F?W}zG0zZkzt8psbTqH6=98G1H(p! zO$?hBHZN>x*qX2nVOzs?hV2VG5_Tf&Y}lo+>tR2I{TB9T7$@8`+&bJjylZ%1xHvpE zTppeto*!NoUK`#!d~o>4@YlkpgwG70AHFnvRrrSRZQ*;ukA$BJzYu;s{HO5W!v75C zh$i64oSbFk9PjvKz8z2HI9N1d=oFHlBQ+;0i;|cl~wq zb$`nsYY`ux-;?Kak04<{622FJXWf5r&9oPFHmfg|d5HW(A^)&XTW^v7gTBNMH^Am4 zR)_ZL-!^XN{Nxwxe(9~P4EGWJ{p6q4dQbnZj(^G7N`9f8Qj{vn6y=HvMH*3ss76#T z>M80g8YpTKjS!6%jT222O%_cR%@EBN%@ZvYEfFmjtrV>htru+)Z58bh?H2759TI&h zIw3kEIxo5;x+c0Q`ayI@bWij^^jP#%#1b2c1!6OC7qP9_QS2)A6nl&P#lhlmu~Zx_ zju$73mEu%!rZ`tzDAtH8#5Ll2aZhny@j!8tc!YSgc$|2mc(Qn^c!qekc%FEnc!_wq zc%^uac)fU&c&m7ac(-_;_>lNZ@d@!6@pY5rVwS{6B9NF# zx=3s#juKair^H+0FA0`}OQe!$NxURkqLidcG9|f^LWxFFA*qqnOL|KBN(M@rBqJoF zCF3L$C6gsnB{L+mCG#W;B}*jBB`YOsBsk=&C!kUW+=m9V5nQi0S=+C^$Bb(FeFJ*D1Ke`&BZTq>1DOXH=oW=6Io}y+RHZL?ezGw z?ay|hwAGx)-rf??Lg|tYkw+P>>|+HJeJ2Q}_`WWf;rpgwj_-8ALf=_}rM`0oD}5IT zKK5NK*yOuRu+4XcV7KpT!2w+1*9pG#-6%NayG3xm&Gmk};EL}}-@SsLeDC=l75wh| z)c3T2<0tUDD6sIe^=q5c-|@}{Ys)8=PnJnPlHL$_`mJv_g6|Fa-xm1#-4z7;-4}@c z9tooTo(K~C7!#!**CgGKZ<6aLG%5D8G^y~jF{$-)FzE^3E++l`JWQJWx|xhLM8eyg z$vD4Beqkn4{bu?_nauNB4J@cKLViWxI5j)VyJ@)T+U*;h^-W^tjZi!L7lo!KWdhA*A7q^qlmf^s4lx z^n2-T>0Rl4=_BbADHFks;714}L=6!QF%1a~vIbQ{T0>StUPDnsX+vd0_lAasUJd;k z1~m+Ac%|XhhVczuB5WfZBU~dqBfKO0BZ4EsBcu`05%Cep5z2_vh|GxGh{6a>L`6hR zM14fhh`td6Bbp*cM2wCY7cntna>Ue#843Vr9gdi1iVhBDO|oN2J6R zXh+2EhkGHF)2Otca|S>>Jq>IXZG; zu2ly_8clr$Qpy-#VC8D0VCeFsy@{(k?s7Cx-)bCM$Mm>w-L>ot&Mq5N%N83lA z7dc0}M|X|(jSh?sjTT2oMr-FbHaam{9<7c}kIs(Hk1mcbi>`{UjqVxUKe{P;Wc0Y` zNzqfIXGYJ9UKG7NdR6rL=*`hPqW44}iar*7Ci+73wdn7n??nF={bw{M#w5lv#v#Tn z#y2J~CL~526B!c|lMo||QN^UiWX0sg6vdRrRK|3VX^80+(=TRF%&?e|F=Jw0i>_gJ6U@YtH}eY=n9KDm2r?85HK*v;M3V@qNWbU)So zPWSrQezC)1*|lS0C&${=&Wc?S+pRXNHnw(o?5fyxv0GvlwFR{`wf$?y)V@(WyLLtG zuGp=$M`BOK9;`iCdpY)U?cLgzT9Z15y6<8G>h8ooh7pGn-Vu8Zcg07xTSF`<35ht9Je#> zK-{sovvF7AzKi=M?)SK7amMi$@%HiV@jme(@sjwMcv*Z(d{%r#eBbyX@gw8M#ZQW# z8b33BLHzsiE8^G2Z;byeepmed_@nWs<1feGi2pJEZv4aeC-LkAeu8C!LxM*_NJ314 zDj_eSB%v~)E}>V#fP|q56BA}9EKOLSush*I!j*(O3HK9>6D{{DK1Htl#-N_RFYJc)FWv?($J()N#m1VPnw=IFKJQI z@}yNs>ytJo?MT{_bSUXq(%GadN#7;?lJtAhvn1nWi)8y`_hjGX(B#PE#AJ1Hc5-oY zRdQo;|KwrGuO@dq-`clZ-^x3C{%UXg&svj`rz8`ff7k0}Y>1DxyE=d8v#oww^33Pv z;NN_P@^AW(JUW}#jeQ99RkCVg?XFV=MC=Xn`9q9lLqrzq`@p0@S($NYJ( z?Ir({9Oon-dNeDcM=s1=$tZb=h~apJcztev@5E{$2K`?3s)s zH1%Ej_Xd8|B9E|>3VMAU`5M zCO;)VE59JWBEK&GPX3ep7x{1U-x1?a`7=33VXQD!SSYL&_KIgRXN9|>tHM_is0dYv z6_JWqMWRBkP%F|E*@}Ecv7$^-rKnXjDy}5=R`gd4Rt!_jkd9Q0QM{&@q?n?ZrkJUi zqnNK)q*$u>Q1M;VD#gc&4T{Z*ZHk?WJ&FU0BMM{rF~upxS;Ym#6~%SMcZ#1BzbJlF z{I2*@@l0`E!ciJ4O_df(Yo)!?S?R9qs`OO`DnpfGrL81V8LLcG%9Uzmx-wgtuPj!U zDXWyV%0^{xWq;*hL***v$I5UC zc5tEFO!eE8J88{g_9zc1k0_5RPbtqTFDS1luPeV({-pdx`J3{0<)6xDN{-4{^+05* zvQSy8>{ZSxcU4!FuPRU#suHUrRk5l>m0a~_lvx?%-Ku@6L#i)T zCsb!t=T*NcFR8AnZmK3Je^A{~-BUeKJytzcvD8Ltf!a*nMQy9LRynHeRjz7JwYS<| z9juQIXMsGpt=#<11WlDNVZX1iD6iG{YN^Ob;d%TS)y;J(93{DxAGBV|S@T(~k zQr=8?C*{4AWhoz}tV{VcWqZmODF;)&LhsWl-=thkxs`Go{I8%#DJ?*5s!1w#q*Luu zT~fVL{Zd0xC8;r~NvZ18Oq5(*DNNNCO{%t3q-sk|s>lZRwk;Edx`vr72Zg zMx<)X=u~YPmpU$WBFbcxsVFm0W~0p0m4&I=vLsbomZxgV%G8yqYjovs-Ql`*soJtB zRa>^CZb>~^ce1YSO#U^$BUM{=r|wSOhjIwzSn3&+^C*{4uIb9n)SIc_)O}NT1LbFw z$0(e7PQ4k5JuRN~r2LSoErIpY`b4x->hGlfmijpLS*lT*Nm`dQ`!v_Iu4(>hA!*XI z*tFy{Ra$0Rewrq&Dy=@PciO2uL$(IaC_djE{3jHT%#Gf4C&>EkjcWn4+0nnB`{*&2vABMq}PGebXD^WeL6 zj@r)9qKvk4^!yBw*=d~@{hTb%(9ei|HdbYjxmcH>pNY*GB$H>UGciIEeMiRRv^^Pz zGLB`CF_mHdRw47v8K*NYX57fQlkscD`E}3?ju9;q${+S_}(#)95CUaBfj?8_TU!t7Oyp(w}^G@c2%%>azM~HKB~onwa%w*6gf>D9f|fWNpgYp0zLQOO!Jxmr!nI-O0M2^)$;U+br8Qn`Ggd z?VTN*EzOS4#;q+oGrJ(WBD)@?Pxg@P(b*HSr)JN}UYNZsdrkJH>>b&AvyWz<&c2v^ zBl~vt{p=^%+#F$!P0n&ea>?nI6PzQ-iO*4jf^#x*3UbPG>T>#^-51#p$r+XNGIP?_ zW{#Vc}&cmoI5pl2K72S zcV6y$xvK2eZppn0yB)c^bNA&QGURwP z_hjxlv@U~gq>B5 za9+5sNb|HMI!{~T^Ry*7Pg|6E%Dhw*oGy8}D22MB$ou@71^0Z}Qp0-TR)0U}u+A=+FdLFsj&&t!5b@l7&KSw!=GBRxHD)yyHC8q@(00GZp^dLn4xh~CFU|ije|7$b{LT5>;BROC7x@SB59c4tKb3!0 z=U;!M|5>elgKYn8ynp6FZ{2#0&`Ub2Nu+=NZc4tz(3)f0H&gvPaA&bzEYs)uVv84R z$W>32v`{h#>>{8`LU{MDite*?9%k^lX-PupgPadi4^Rr5}Nx6rodi+OYEv;Am@ z^?2RfTKl{Dcb56{JxDM8nrl19t+E$qp^wn{_+H%aWzMqaGkwd1dE)CI?$11l#Ze>W zMKk;2$Q?D$M_Fw0fr-*T`#%=p-{<*nN2fn3tz#v}=fx|$)vhy6`#mm#ooSz!wXPe& zJ+J>Kl9!G7BA?&n-^hQIZ&~11kW^4oudNxc@qiKK}~^SLjOqw&1&hrjVZselGZ} z;9)_1z#j$A3OI$vg{FlTg;s?lLhK6N3ws81E%Yf2EDS9a7v_XS7RD56f9sG?C@)kM z9>VvE(+jf;NBZX%78jNl4h)G4sw%84Y%J_mNPZ2`zi?3Du)8}m#+nu#YX6@zLc3Y`-eY^~|zoI_hqiv*r@;pJ_ zk)!d(i*p6_MV>|eMd3x!Mae~}MY%+ zl^B%>O3X^GD7%!{mN=GNSGt#UE%7Z0ED0}>mZ*!POA<@uCF+v&lHIE8l8K_i5=}`( zNlnSL;`)-FC1+IR)35WYz9j=oEaXikzbHqPj4l~hGLe?aCDTe~mdq)cU$UfRdCAI> zH6`myHkE8G*-^5)WM9dlk}pe6pj=a(DLG$qspMM8@5-AcKa|`lDOTPqc~J7WtHxIos0r6ZYGO5s8o5TTN!Mg+@-@XMWttjIz2=#$r>3uF zux6NMq~?xjjOI1X1JNYS6wNfvY|T8)BF$3GhniKIk2M=Kn>E`sJ2iVW2Q)`CCp2d? z=QWo!p|WclSMhh6?=*Kb_fQ^a9&4Uyj7kNiW~E(9ZA%?XT}wSny-WQ|O;y3A;?l^{ z*wQZQ*wVyOYn8lIU7B8+U23n|lbl~#Tv}FIRa#rxSlYXEU};n7h|HN|~rAtdcEL~OVtopcgL+RGi9i_WV_my^49V-2@^hD{I((|R4O0SjPEG3`O z{ZM+R^j_(M(mzX|m2%3A%Y0R)WnIc_%N)zDs9noE%e>3{%Yw_qWszmEWr=0VvedH7 zvfMJcys%7DR#jGC*1N2KSyS1Fve9MZ$|jZts-`I>mrX63Q8v45e%Ye3rDY$M#j979 zeO$JwY-`z$vOQ&o%Dya1R-Y(4Q+B@WQrWe#n`J+g{ZjT@+2gXOWt{RsJ_a_@5g^5F9Daw$r5d3<@UI=Ng~o?4z+o?BjAURG`@uPJXV?_EByd|3JD@^R%o z)f3C7l+P%iQ@*f#2})ml0=T?&)DZf|#p#0DBXXTs<;|jBiE)}*FjuoyIo)x|offb<@;)=+M*owpoWkq^L zc12-@rlP8%wqls7v7&Fq;EG`tqbtT$OsbetF|A@|#hi-y6^kmCSFEa7UvWpXxnf(z z&Wb%12P%$K9IH50akk<@#g&Td71{D1D(+O=t9VfHxZ-KWYbsWyQKg{Ltg=g`eWhz< z*Gk{Yz{=1{ab7k~x(NE0VU#Iaaw>b*=KP3akpP5?4i5#a1O(DXUVeGOO~d zimS@1s;X+MdRFzX8eBE3YGl>8s)<$m)ce#^s-{)Vu9{c1uxd%w@~V|pYpT{)9a3+u z+E%r*YERXHsv}h=s?JnhsJd2FBmJ&wp!BDzU#fnq`n_tR^v^1CC1Jl*X@AXW-(p%` zwzTi3ZM|&Y_I90ldO6u@lYFaxQ~qhcm&@jPD}8SNG@icSSnTtTZEP*iM|fUB`uufi zwHVvDmOd?L<9t^5b^TxWd>O5FC2B37;opGfi;4lwyFix}3~wxp%^T0+@+RWHuWDxT zc??^~Gh&*t*0qyy=MhHsa1k+~M(j zo;Tw9p>Gh|lJ^ec4vBZ*N!V^YK4Jaftanhs%p% z^La^eLS7vDCn5GxPFAx5xul@2h_mEnAcr{kNI?!caplbgh(8zc-$ncdh@XT01&Ch) z`)b5rg!t1D|2>S^67g-&cUF83ubf@oToT7^?!jjBs^RlEN5!jy&pzz#%{`FIAjEzJ zW9@51jN0|Ve^{VJl^}5o7dsvE!e*a`!`@e3-;4tvkbX? zfZSFhw^cYM^N`yD@5exD-06PUX*$nPBHZ7Xs+iuH1lZO6Nc{60W_eux`{{Hl=O!T1#3 zjkp}%4fwi^WB7d>kM{`k@&rDacs7q4&*goO*ur>A9zR~yY#ERB6K~n<5YO;#K>rzH z-p1VB#d@jZn)6&>cb9F&yA9j#q5l=*@j#!4i2Vn0?-t*^*$;hpA>S|1cOUZIkNIRH zUt`3{#(W+^&MM@51Z#W&@?|4m9_C4oHO|HwH-Q}wYup55H^-crBZd`Zc8KAGHGT}o z(GGLvhImexTQ96}AK1EKOve%TB;uYy+*gpZFX9HEZwTh15LJkS=k%k=d;>vkN z$RP-0KZhK?K@Jy@Lmqq-A%{}Lzk>L0BmQEH*$VOP(Dxmz@k(}eb7>rx*Ng4Yd=+b{ zJN%x+v1@?ee(dhey^zlk#2L@;{evQ2j_>@iG|)a=ecmA0o$7n7^~g@f*zFW90W0*3D(C^>2~m z3gj4o*dfTV200$aTEB(0eha>S#pvpCIo7ZV{Dff*TVd_m zVZA%yxZQ%yABg)iOn=4NX~24SgKZ1q{tSB&?0Zu{T?BQCm4ed)_efuk2w71 zy&QJ)6U@^e;P-=X;W#v31YPDZydjCWUK{gygA#?j0f|1mE(v}->x4I&hbQ9N44tL1 z4=+5yuUVYH@MfWHg?27%@?kR z5m+`a6R?|kd|cDeUX3;z^?1}$NlIT93ltxL%FFbiMYSxpr&k_}P!LpJl&x&RqLZ zbKbFEJ$JgpNAt!yPH>#<_>tpVj;rTQcO2z3%W3VqbDc)L`;OBr=Z((qId66TeExRl z^2He*y*?F2^!n5iWCL;lxq!NXhJs!JjRlPdHAf6+mdFP*M}W#f?}FX~EdcTHoMQ!Y z0HuI3K;uELgWdwY4f+PO7jzZ$E$DmDkD$AtUqOs=KrAE+f~-J$LHj`^ zpi)pds1kG<^fl-l=o_WznqQ6R+T3cH+El8UPvs8V(u- z8Vi~LdIR(p=ieeG)i_~&2f|XvACF761;{*Q8T%RctcF=JDDU$IaL;a_0l!cB0e$jhKAi<%5 zcz3#$%&>8-%E0w3C7#DCh_`Cai6>G%u4vmigfqc)?LLQnSkCx@vy5ZkQqn$S(PtF; zypBE-&?gmr*v;k8XH)$$=odr38u}H`XEPjJDd)!Vc_m!S<^|M_L@D61Zxy01!}}Ea zwH!Y0BV0j0LF^jpCkuYk;HLNHwRSIS$Q5XwE@%6`Cfh`5Ky&&|HS* z8)&|bXCKaH{4jUta9sLR?i)H^#*pozM~!e_K&!-26E;W1u@Bc%E(Y0VGeldBdGAlT z?%>vQSe!SSdnB@NZKmAo;I`ubb;fgiBAe%7JfV3lB>SjjFC^8Fd_o<0uC>N2a1&Xy1uL|81|69pzClM?CI+1hEule2TIPr} zgT}W-Bu7MYMI=iqCGqVcb%xX(QmaHhB2sJgv`G}umNvefK}RAw7<8oNWYCd_E(RTG zxgpXf8oyftyV);+v`AbZv;xqYO?48qqG*fgBG8IKYctg;kzpz_%tVGB@V1%uS3{Z( zX*Q%@i5|$5S|eh&L{Hk%=Ivw9kxcyzI?@U-=t!nP1|4aIAkrKfzYvi$h*W_{VN^oa zk*##>4UqJLq#q>nsLc>ahC?!nN=SY~A$bLoS0UL+Z6;t=U#BgiZ$|44v=&j_EVSm* z7SX+f*1Kr!qq=4Av;v-1Qwh<30Le#?tc7Gb&FE7|K7-_QNDk3n`ye@l`S}v_lZ3Gx zqIL%$Jp$=5NM(uDm?vtD@hTE)Xbb+)QWB}t(n>Sv$UJ2jbflGqNGoalGl+B^ zkuD)p4waJ3&q8_u(kqbWCH6o>YK@)+i9Kmc8^6e)BN0msI?^gN=t#tJgO0Q+5otXg zK^?fwl$!wV5an)AEwSrIwS;?%Y6Np45Lo>c2mg z_ownE$~WnF;(r9?M^F#RxYv>UH}G&W?hNe1H3V<6HSN_%QBC_c(!Of)G;z3*;H?yD z*@I##9dA#HsdOwoDW*~nJqaF8rEz=GxT(}<8tvPQ;Nf)Yxi|HkLC4#N;Nc7^@1v8G zG4`R^W>K4d)FzAC^rJReRNIeYHjUn&Vm4!nzWpiY(Y}Ld-#prP5bc{sdkvzPPjeeg zbIYeTgDDnJ97632sO1ofg)~YN#X|CAh$jw$g*0Ll!NY}g2Ab#$6jT4hC~7E<(D7u& zmeLGgp;$`i>J^HmG}bE=lPT6vOr_Y9Vm8J86bmUf0WUIg`Yg%iJOM|Z+_(lA%OGPJ zWI}_iwJ&3kF`T{dLY{@WoEzZClP8zs!zMCgaK7MbD966FpRR;k6xB4JMvCbadjo%D z$#E9?q2Ev7$deH{8#c4Z(SDmvuotye)A?wmm_^U0e!zV+6B9hq+@zThjzlGRi{d$o zk0>TH7LeCaOlG=Jo}iLS>M1Izyq;nzmGq>TN+mrhW>ZOjirG}spJE=B45FAvC4(py zQb`lVLMmw@h-WAt;9!ac6o(MR*+s_P1Nb#Yl}+dOA-MjOJ40n0%+muZBU}jPoIE3P zIicXlGa{Kq4W0K96lc(xnN4vH#d#DLQCv=OCGapuPM;#l49>%|Be`o4+(a$50*}Cg zJXI2lofP*`wB?d3sx6mTTXTt)M|mg8J5X&`F1ao_P>iA|rE)2?6jRG0%EwSXifZN5 zatN0ky(WrwR1!hal46*SC(*;G2U{wUQanc`=PBAzjG$;wF_NMKm&{odMF%R0qUc63 zf#UZRf1nslF_U6f+DlHcE0xG~a&qO7a|!xViJD>{#dM0kynG(CyaHef!Hd4ULhxx+ za)#n=iYEyg`{A#hv5mthiU~3Y1fNqp3sjpHnG#H(SPXpI^ek{c{y#}rQru4@Wh!Bj zkj?BAo&oOH;n%{$LOFdeAX1fCf*E{KRGAf2;P!m4YO}`CwNhYw*&UY?i6KA zIOW4R2eA6d+c%5z9XRr?OV*r%_N$})6tqVjMFs6wNAR$MUdQVQUQ{r_z&fB6u0Qmh zlw%F99%l_>kg*Ih#K5}@=~GWp$%IipjN^whkG#9_IR42wZy10&qzx5%3wmlFw&yy;=>$*(qr31v5;z;fISeA>}RkzJ;9Ov3>K#sm2q(;?oDNcW8W&G&tXFeUM!+f zhZ4M1Oz)Y)C>GOM8b-00uD4+ni)r4&Xx_!N?=af8gvy6gETNXeDQc)>1jSPN1oH~P zi>0*hD-=uVXkVe&gW#1AYMwKCkxban!R3|Z=A9D}Si z2G0dQ9qphcPO$Psrl@2#)N^;f|}5F$Ni9kO>SjfkDPG$T*xW7!}!B zVRN>EBRebP?IM*%?Md)rDv@36Nf2iendkn%(}+p-BUzmL;K=SD%OGP6GR7bi7-X$| zIR+Vra}?3ZZVsFCB{;I1!{#i;T#>ys7H0`KvX{m($QXl+F~|f4nZO|97-X1dmK-}q z&YZ49h8-iqu`d>qSU7ipI77(znt&f8BH5#3an^w&dvYv;j4{XGEKV4-bk~CuPB~(ym$3}8Ry&zNCgVh*2i*7JZNMF5-WstErDbUg#6HY4Sh@D=>GRRn*9BAq82`86w#7-|`8Dy2(|q~sVG+BUS!GqkNaGU$yBZ5!I=BNEvyRC2IW2#&-w(b;Hs5tSTMLt7hD zXlQF=ni<;KnC6DIHl~H4t&Qn{NMxr^$-yokI1~CmmW0L(ca&K9WCzk<;N_Nk% zYEdgWt2v}iR_3QvL)IYK%_jCU$de8bX8~58k~0JrWWSB{-3(ldzT`6mC1*d?X#374 z_SmTGoJYjlR(R9DB@&CRSl{|KIp^k4t9dl$JnCZ~mF$B=|L#co?Z)g8v;ppe z5511~SWbH^r#_ZbA4_023fYm}L6Y|&;8)0-e43%;Jfs?J-ixUHN`g2puw_m6i~_z* zaTdkn6i-t;Ns;44Z1@ySDR!mkO)-w5oT8Fq3dMMa^s1qJCdD`^NuXFqCG`{sQ5;Nh zD8*qEU!gdX;&_U$QEa9-iQ@YdS5RC@aTUc;6h~8>LGf*hpHSRDaU;b|1o`Rs8_#Th zCdF)uxfJs$7E&yxsG(R!v4Ub1#Ttrr6dNe^px9rB@528e$`1-7d=urHC_kL?!zn+K z@*^p)qWnUNt0=Ca_%X%x6gN=ZL~%34trWLW+(B_C#oZM5Qru7RAjM-kBw3xL{7D-9 z4CT*I{v74cQT_tuFHrsi%Kt*~F2#Ekf2H^o$TjAkn|G0W?z4-8n{VKjYdMB{F8mVr zobM$rIFW%z!Noo z(Ly;cI1#@0DW)wJTKK&Bum|2D@xT5;j?Z*aD?B8+T7+6m+iWJ4!LBURlfkYmlfi5T z_My0)jlEU|`=O8$iwtVfhhi3$WKq5!MFoR*0Y<^#U4W?r;_s(}8rUpoSqyew8N7Kg z*zrW(q?k*w zh+-MVB#TWJ?D3yijJ5d0VjS$`;0L0`9=`#&K_}awl`(JAJ_{%=q4)vCRTQVg7k>AI zIoc1BffOJm=q(nD!QLv90>Y;xIGQX5`v*A2EC%oW4EEX?d`iN2Veavc&0znWDFETq z5(e*)Ob+C^Ahs)u>5g_Cs2-$&tPE5R!mcfY-3SId2uwQS6+nhJb!G?%pNcU3(H@HW z6CA${ppBsYpaUR$vcl{}9nVE<*x~aKrV#aA)D562@HL=%P!CW~P%qFzP+!m@&_K`t z&>+xY&=61)XgFv*=rzzPrwiSXUJx~rLuj0|4MPKO7BJEjLY znjQ>CSFjeih6^bLKt+9*3;Bzcy9gqWQ zD7_YunydkQFB=*aIA3sC&|zJ{Iv=Z$gB7R5ie#fEYZ9N3Fxac6*2j%l%n8s*&?zGh zWXVhk^t+&+30e&5;-$UjMZy!g_C;fKqz=c(v=T9D5hSE08mX>LYI1cXwM17FeFWN4 zT}|3iIy+JmIjJLQ&8GgywH2R}QN*W^sEd$e5x62MCy39^Xp3;ff{daBTnTs%MI!Hs z!l8&y8&MAh4y7`J_~ebY2uHNTfx}UAD3Ur1S>fKm1bPKxRtN@qVa<4jphYkQ$C4k$ zVgz9%^DtP3qYxBPBz?m%7X+mgBPd2vjG`C~6w$f$gOxv``k}3@#kyLetEIX+LRUxX z>L^_ujhc)8Bo{qLd}?LHtCk~vwH)!R<%n-BN4#q};$O>=2wF}bgXHW_M?lXUdNzqE zN+?PxMo^5T7)3D}NY+i5t`67LB3(^<5IyliYT}2~#1pBBFH#e4q}KW)*^ss$Q-iEX z-CbAL>gqaOU9YPfbakVy?xCxD>gry)y0@VCSqzpfsjs|V`pLArXdt{$SR zn{@S1T|G=!57*TrboDE!@i)9c_+V_^Jo>28{>316l>T3VHxy@Y~<{pvNFv{ADC3 zP!uQ`R1WG18V~vubP#kMbQZr~b;s{De=5O!PJ_Qd0I~)7f(C7IPDH57Yu0REhfvXbk8+s0Cz--)&igazHhp!Js`Les_!)lnx55$8{Jq z2{Z?^473$=6?7AHw*mI})sG*@19R3LGy=2%bOdx7bOB`1hsD@{B%s~{SWLhm!~n&D z5h3C}Iq*`JgvIJ3y?l_{-=ZE07p81~eITeH@GV5%e4A z2}n4e#W;i9LH$63K*K?q%@`jj>2*BMfNDXnPDZ|F%a@#1nh?!a1+87 z@Ou()3eLg2iZG)BR>O*g{52^!2aR8$?;!>rgooksBIYo!(kAdGY=vF$DI9^H;ong6 zHO3W0LI=o#o-h*@!RwI17*EYMBO(o1A4VFik&GGs=a7~Dy}Szyi?V_V9+1D4=Y@O0 z2e&~4G=OSwJ5+}na0k?cT2LD-r~`wbF4TiPuon)%K{y7V!xwNLoPl$2KRf`D&=49y zQ)mt?pe3||XlM;F5C;j64xQl#_z`lU5A=m+U>eMTa+m`z!>h0as_|So)th>uTS0Y* zVZ7gi4uj@>xes#X32j);liGB($JJg}`&@mStE;)Xx~prrx~8jZxw^KiEmzlZwb9kN z-V3g-=IT?u9sieIcTo?=?Qz|Ou6uy%PRw?~BZfJ;u+-7Pk&bTW`X4EG+<(k<^yQ(B zjvDUhYHqxa;~n=MIgTD*=IA9aIC_8^{!UNFebFt)lWzQiey;ymM~8KD^d2{Tj$7U$ zHy_Ilzc$5*cN5LJr5AqIZzDR<#lBe}D95?I}M65uz4r}Y)y7&i&)0Q38?>Vb=68F|Fn zLw-5<-`7{lB4rO~*#lbkfR;U|We;lEgIe~WmOZFt4{E)Gnl`9ugPJy|X=62Q8{R6? z5+VaCgDPWH#;I(pvYpC!q|9Udu9o!Tc5=vIJ?LSLScYb;&Yai7+&)KFq)U0)EQ7aT z1^g9O!5UZx>!A`h!Y0@ZTj71!4j;m9_!#8LwGZ~g0r(US!XY>cC%}eNa2C$NdAI;y z!X>x@U%}UK4X(pCa09-B@8Jjd(I0Ls{sL4(Lhv>KbE3v|<(JlWf z@KCRt{GBz?xBTbPtNhFS*NCyo|FwS?&s?!?;ByOWjsLP*Ce{tVPvr$d_Hqrcy1sMM ztRwuE|5Nf?kCyx^iL;M9Hj@83jlWULxlhRNvLTq>&+kufR* zDuXIxRmQ1otFoQSc%(CS9WCjdvFm8bL)?;!Xvs&k2BlDl^zi@sP&RU0j{+>KxVEJa;x=UyM9P zlGd?{xK_Sv=VKSTb|JRO9#D~9S>!g4$RhO_qOwq3MTXN(5)wn1tK4G6s7tOXw#0Yh ziX~x1hSR2E1vIVWmb3v4bu+yDXuN=59w!V4M%rzb-Js| z2+cRV^t))uaT%s$-^DFJ!mdj=C5k47tdNsf!+jL0FBGn}zluc7p|jLH&?lTR$p zkjZ{8qg%#y26dFZ3E3s;#D9@pkcI3A%8s-2;YdO~$PyhnBXu96h&w^rbOipQOVHAe z8Cz$LWyCk`qzBeT-B7LH2c|KeoD$fUz0hK|Ou`1(KwpH0q zWjs>uYrm@{y|^U@(UON~$wjo}BU*A2EqRHS+(bM1$@4+n@_cZ#lb<{v9JiC7%u*b; zlb_5~9JiC7%vQuL^A$%s`3vL(a~0+t(WL350SypYVs9u~MW|)t%0xM$1Udp?4G`oS% zunSwxyRm}RGN5vwMcM~gnRI7fbG?N3@-$Xltj0dc<9$4ZRUCQlW7c*z zbEiki^A>3ia*gTCcQ!F6I?LQ?cRs5Gu34L~tCWeKkTCkgcdXcASXq^@Li%MfI|Gli zLSmlv`cvfpG-Y@x%=nB|-?={6kFW}1)j5$BWghwLBkoS>|Brc;gYdlmtem*UNy<=* za<(Rqwi8*26MmF3JWsmQl;;54$13&%!hhfzj}bokdFC0^=U1*3PyMelXR9-awxn%J zne*LEd;E**ZKqBvDaReeIWUqHD69B}J?H zgq;rZT1(myl;IPY!kqIebt)nJC}|Frv+F@wlbC;gLz{j?{=ZU}DB5JrT-uk_<$U_$ zAbecFDwb>Hy~ygExU=bRgKI6Mts9Xha}=v@R{#4*`x9j>q5e&X`z_^bME_*bws&)_ zH{gA)x0kW7lfL|fy#7WVCs5wC%8Jyn}NX zbF^g!{rQIlw0AesbM1Gi(|h<|AkB30IN6;t(7q4RUlr8vAmvON%ebLjPg1TK)GM0! zf1z9x7*jVPkv?5i%>10|^`#99>5JObX&~2$rp}KOzXkc;L)oqoH;Q^bPaRTdle=l- z>4Y~YzgpCDsEiY?(Up8x5O$e9@{#YC_z?Y%G`x~j}e~GgLJ*vIbckUAxwS;KZ^F=HS`J+z+{ohuS=6=0O$SV?$eAq%OZv_YTzY zu|d39>~GI9@<`c)7T-wihQnlPn<^UiP}5(a7d5SbFQJlJru1c126+$DTJ*?Kdf*Ef z!3bIdHZ9PVnn%DO2-17IxjXLTPU{K1X^r}fg5Ge7me>yul!h70c^bsh8tY&bE#iBO z(!%{?d1}Hb_zALzmjDN7vGugd1bVX{qq`$5(vy+%9gKgLR-z@Q!*+UkKiq)lXq9%f zMj5?ZQO=&;9PXld^@tW3;-c4RwACAK*I1OjuE4b!0|M0cm2sJ=QZmc#?P#GMCDPH$5b9yc|zr9Ds7cts646il*-d8&#FAH@`B2XDle(L zqVlTBuT)A|%zD>E-g&~i*=yc?#Je4NO64Vy#$m72Y?O~ag^4g3o`6X(9+tsd@C-Z+ z)8Sc|2`|7bm;no*99F_QsD$;f1-8P6@Bti!HLwRhhP}RVz9d{@u=m49@Ch7-OgO-2 z?#+BHRkl(Ytuj?*rb>R{#)#55Q9g+i<&!v3K8X|MlQ>a6iPJ*kv{3&R>fb{BTWYG7 z>fcJ^v{E}-?Pv{+R-b_S1k@*>R|%+ptop>N9j9^P)F)2k#HoK<^=YeiJC*SoGhXfX zYPVNAQSC&HpQt$`y8cp^L@jfYh9;?hlGY_j{gZu7iIc23Bx{^x%^}&BqW;n*$r?Xd zVsxIH?*ZRpX>;oHUJ-rg73VPMXF^(>VN|57$lC zIO*!2uKwxjpQZj;nl?+*W@(%(jguvD8u@*t$Tli7k)8&TMrU6S)m>c8FKem0o2$Ev zZWL+skW`GKHY#IOrXi!$C(0*2Q9ki$p*}6tr-k~YYI~-sf13KIsehLGWT{V<`ZV*U zYd#`l-If$PP5c|BYZ74yYYaJE(S0?N(~HQoE(vE!B=zJ6i2nwPV$eQ#(%Wp!Q2p`z5F~3TmwbDq~f~ ziLBq$*NLBGkb5vywcJJGmitJw+&!XYBssd3tE179O574V%hj1^xz8lN+;tKz+VOYd z%f07>%Xs9Ia$-q5xevuHC3m#cS==&u9WDNHk4k=Wmx^2NO-V1h$}Q>SJ{7mzsa0Ci z$=xb$(GpLz_{%*j{&IIpexk)KcUhH|_~MrMat}&9M3`c_=}c!a(7l~xvt!^j@xNhxnm`N(Go6qp@cUhH}RMLt^K`Zn%_N+|q8MV|k_?MJK5aH=3eT zxRb?7_Q~@moV=vXTVqLVDH&%)d;wnuu5d~!PgqHjfuB5iom?}0bu@makCS%zORkZj z*pZ>w5tKcJ5Rnp3a%$r{pf;ah8O%)mtfrwob^~|_?!tYyze%K=pOMo&(MIFQB-MO| zhVPy52=OMsQ&5-q^`JIba643o8gK{Hgj&##xC4xik#e%g>tPj#y9q==D|iq(LVx%Z zG=>DjtRHD~;u(^_GsL`4p6cfPkwzDv`9P%66)8_e^N*26H>5ln&B#cjJ5rvGCT{_r zkUTk&4I_=7$OKJg(-M~s!UCl~U zeY=&ey1JF2x`vgh`VK2gbxo_2>RMK3)wQiIsx7OlYWXyFDRq4VRvYUK84YrZ^ex

Ta&??&=<{ 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 literal 54160 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 Jard(e{u|mlErT4AoO9;P+`0G8y}Mat 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 HU0wIzoXcFF literal 51864 zcmeFa33wF6_BY(qJ?YH8^kgQC%sZ*y;RaaM6 zch5|m%<(`RL;hH%MgD*k7LtPIMbZGwIfP+`?*WSL#^Wd_Xv;B7K*=x5Y*SI&ice&Zzhuku5 zEw`EboZHJC;*N7?xr^LY?iR;N6;eTJmb#@$(iCZ3X{NN9w2icrG)vk?nkyYD{hRbv z>EEUANT*BZN?ICn4?sGiqdm2mtwBR+>Cinlff~(jL+b@Yx+U1DrrzECR0?3X#R-Xd3(5y zmrsI}67^6gEIk(05MP-z*9^1`l{)dy^S$^1kOu)HftRTMHPAQsw?Sv{^Y}&l3VuDm zmEXzl=a2HI`C|Sue}lin^Rb#(Q>;DKA6q>(EjA;zNo?HM~Dc1Y}q*q38p zk9{k4dhFcTk7Ad{eiEC(eHObT_KVmfv8Q6sBlk0K4XB*{9m~m-GK0(_t6cI|^G@o~ zOKDOS-cw|Gm_2o6jin@IhAo~5^On&X?Wy#lW$!{aTlRr$iEOoO zqinlupX@L+CuQekmt@z&HE+wLa+N$zZk2oG56M&I>GDSM=JK}kF7h7o{_?@{zuLe5 z*8lGa{C5QYI|Bb5f&Y%c|EnX=SUO5RmR>0*fKHJ&mQI(?m468NWBKZGSI|%8pCh+N z{sq+?k{>TumcgBt7t4R7nqTDql9$S36&YNEm_eHVrvHw>{})GKB)z*R(7dj3aBl(k zpWarL+5W$}X8ixPUs^@H!l4K#9#Pa*)K@&AXsKwgcwW&8IIK9SIH$OzxURUZkSbNmIHgtTRX(IlRn}29P&QSzQg%>wQ}$No zDTgb^D90%$DW@stC>JW1E7vLi>Nww4-BwxEUDPwxC)HL>7tKt~NsUU|R69<)TPxEw z)s55b*2(lu^<(wx^w;&NLJwi4a8q?sP#KyVZmN11&dLQvE5#d%Ig-k0O%=LBR42o; zi>Ar~i7XsH>{0`u%fwbER{9S2$l3)gMwG3(F^!N21!_ z_gcR6obp1sT35=+<*o31PkH;EWfd(e=2pukD!EEe`+*7J&Drh^Xy3xEOtnD7=d?>9+4)$M47x{Y1{d*KR^!Ec+Lqar zmtKPXs}ESGeEqxSH&k!`DSuN`Ggb3di&QJawKx2Zmu)IRwnJr?``>6-1UsS)MexpjSZ>!%^zpwsC{c*VT6ZL269aUQXXU5?R^%3R;6*>KKh$W7OC*KF!0LTAF&A#+s+^@!b1A(|QK?tmgl2vU7I49r?fW$1+ler%eZx zA!Rk?!^%gLHIy}#wUo7$k18Ki)>GD3KCW!2Y^?mYM)I%9HuujlqqE9F$zR`Yg9b+KubU6-fGW>!ll|1G&x8ZPFdm-O`bmAA6L4tBUdOn zEd5$~TsnhS0t~aIWGTvTLjE^!2av>UDUkxP zfC5khI)K<3z)e6RV2ybNeJoTKDz}t4kax!r3m>E)P%Y+l68e?E8el!J5!eiD19kwrfxW!CYlKDTqr#mP8Uj#-HFI2ON)?B-VsyLouaZ5q7zF{ zPZCMda(G6%s{B=1eCMX}-^x;DaoE3DLR#nw9Z8Yaic7^Pic5biy@(W{qE%HiGEXF` zvU$QmCV#w27M2($N2ySqFVU#Zm5{_RrNEt%J0-VcbgFOZYAb-p0j6-CXcHit;e*K5 zu-;BN!*e{(%Xu|FK0IrtfzJUJm77HyAa9e97#U_~SbtPCq;6FAZAo^Re_PTcEailGZ}7fUK0|wT z4zyTuNpeMURbu9Eg?oBC%rVkoi6A3-j1 zeE*2|S83QSB`JJWc8HD6GD1n~RoVPc>GtDj)T%Nn(jtka4oV*jTV(LLDjoXqIP#5v zC&Kz>;7@@F8o13Cg-faig1fcWbf=Kr((WSCz{9z2mA|4;noN6+&z?*}uWU&6c%JBw`!UkZ2-# zhPmI^#MZpg2*vz^(a7wHv?WaW#u8p`e5z+HS5SYmBsTQ{vx%@#+&p&)J8bT zJ&4aTTX7Fimj8Vz5=&LQ?8uW+@rV#kk~pKqT4l$o%uD4~z3i9@v(nGLf_#uIte|C> zSbQe&_y6SKafw7ETEDCst9nf}UiEj?Bs|TUTIsC#eUIf!V~O{>Vn_;~_pkF4_(=QZ zYn9cQj%Q*FGy6WM9-QG`221&hPQF__GtsPi7MuQ6Sf&0 zmrwY0{HG5vF7mQC%A{!DnzNe_y-~UipGLjkh&M#%NUzdfVysbrqR_8YOqJAsko_#` zcWCL*D%ahSrDFO6N6Z%0=TTo(*>0k{)w@f`ntHeP_cX+w;8+#)c2*I?o~UkLR5}oq z4n?KPZ62vq@^WcG={KserKeP9RNt$9P+e3NKtmF#Sy1|mid+TAJR-cZH!**;l24-j zHLANAmHr)-?nI@^9wq9^ng<<8v3?tN4>`xm|J^lf$=Mh_N6On(kngW`shYp8s34_Ri~>n@FpZv-ALU; z-BjI7-CW%Q{clxn4BC{FD+G35nc4T4pZ8TcYSdMU{d4Jkr)a%DBZzyB2d%lbq%1v1 z-Md!XKd4Mc;ty;h#Z~*h*EvLL5%2fg!nu2#i;>pv#ZS|{-@Qt!)|0(i#geM~R?$Yx zmF*$Rj%;Obch@VcCGJl}O0<>hwq^J6?bri+2lf!(i9N!1VUN-CzAJm8^7(&vGf@pz zg6QhdjXlk0v)}PO*c|p8{{!Efy;${CGFtnOgvj2utXIER()j{0}sf)U+y4wS;Mv-GK!EuWu@hC=)D8odbkKt`%b%?&7BX2YMs%xV5V|Y8) zU)@moj`HP_mrEK`>sLxX!W+7ACAsQ6b-sGAdZ@ZK{E)YHL}OMFO;r(zy5YZ5cJEq| zl9B3a%2Ddk>b~k4$}#E!^;q?X$`6!<>bFbAsmH5lluS@hR8LYbR!&w=QGcwQs-C7^ zp`4-qTKS1`rg|;j9JE)?QqNJZSI$$5V=o?+2o>-5E|wm}5h}v?K4`jtCqw7xc}bp6 zi+A!{N`A)kwkyCj;0ACDxC2OH@oo%=1r&e=FaYs@8L$Ixzy}0@YCv_M29OHW1|9?I z1DQZ$z>IfpPl7)Uv;v+1+5sJbF2M6ZHqaC31LOjOfZ@O>;3c2{aKKL?_;}#&fEW3< zz^4N50keU5zz4uWU@@>1SOI(jYydU^TY>GsE}#hb0yqeK1snyw0Zszn0%!4!s|&F| z#a@n`uYQ$Yt;b*nZYc?&?SG>DSKt;<3P@#JO5}hBFaQaF4R8a=u=j(9fQNw;pf->W zJPtGlngX?8_Y`t0=x!H0Nw(o0`CE{fqB3Oz(Szx z*=k*BL+KLP3fUUjr?M@w9kQ~kvnVx}J|iuX9l$rSzLAkxUcQ{XR*4xro4{4o;*|j z1Z>tK`ZCPIw;7wuTg%(YJIlMtd*0>0k9?uJzkG>$pnSPHU%pyBM7~ZvT)t8LqI?TI z)3>Yls1K@-sn4h{sIRDRsw?O3s5y;7BWTPTwg^ z=SRz5mgj4RYDQ`pW~}@r4e9e(%|i81&1)Ky>NU-H&EGYXHB&V+Q2v^Hwr0L&iF%=C zxq7N*v1XZOm1eyB@A9|g>rsmLy7K9?f15O`5&Krn4$U6TKjd@d^W_IL3+0RDOXVwR z`C-jQ^}3R;H44=UTJN;xtfm;!8u?F}E1Grc>zXa`zo6@=tSUwJH{@w-`8%gu z)E|i@@>ilM)v#JIS5_T>eghez=FhG+2R zyjJv6AdTtgKgyyiFEywXVfnJEWU_XX>uF>S7q6`(7qN~=q7_-KiBxuNj@VVr8)~1> zR#QHOs9I>-XlG+A+G)wBTEx^5qf;AiX6r%!xUw^iy|J>Z_6b}mpP=K`P1{}D3wrVy z7d!3&34cu4PfI={!!VD~PsyApsgE(r)#hpQwS(z+57my;=HV(kQadU-9uL!NHu*G7 z`AA1=3$%sWH?(hR-`2jXeNQ`E`@Z%=?PBdR?JDhB?WgdzNxN0ML)%ihTf0|#KzmsG zjPh&kacw>N8J+rw{`bqpw#0W-qI^0U5y|((la>BJE`7oxTCA6Eq-&6vyPIzQ-O`Bt zHu(vDC@YR{veKWZ;k z=xxNFVa7z`IgVNd>?!$JXwJwB+3&+%#zig4YTYdr%g3`nqQ(SvVkP@a@?Ydv<-f{r z$|tdt*?-IL$fvMVS&2fbn8wavXR@=XeXK&En8VIv)e4(~wDtjaw26hTEbMfD18)=;G4Q~q@;=*ntT zmab^8-eZg_Tax_UtIc)ozqGfsC0a(u>3E%7r_yP4g3hQ*)Y)_{olh6iJ*=yttEGEX zm!WHjPwqdhYolwg>!Qoj<>>n9@^piALvvrk(>JI3>(tWKvq5D?%z3vCyPr6@p*L45V{aaV6I5HP{2cnKM)lr0uRf@+_JDQDdwV2Y_rc#0SFAx+ zpcH+oK8^Y-zw^q$y+9B3NLj&$H>WAw`>PP8E>&NH|@ST`K{W$%2{RI6) z{UrTl{S^IF{WSdy{Y?EV{T%%~{e1lb{X+dB{Sy6B{c`wP=pb|wx(Ho`ZbCM`>ysn&7WxYP zg^6PCJB>;DZ*4?nlJ<35Sk^-5#|Z= zg$2SwVUe&zSSl<$HcN}-O7fMf;oT~Ca;26xMz0K; z*m{aBYy-tMwxMD>+eERGeNwTTZLTO{TPpUkZ4~?2XB7w84vIr;XT@Q*E3Obn*(}8| zwuj<4+pFC5;w0NwF+g#K%~K3goMVS7Mkp?@qwqbkOKgGS)pB;_qpMmT7qyn%k=?l> zTobOaZzyh5=)u)!{MXruiW}@(iks{d#Vz(-#cg(m;tu-{1;fozu-y9!DYrnua~~;W z+!BR?TL#}MZlyxQeWK8D>!K~;b0FNOicJa=w-w)GGjqEXMG8Cjh2o&X&3&afTF$QO zm>I^;1-T^dA$&gf8)|)0@vY*l;yjhBa~Bl9RfxZ8FSms|0%KqeQUh<0859PUL1WMv z1Vfy`WJoZW4OWBQ;54`mUW4BdG$a`wGE_Gt8&V9ZhBQMRLtR6)tbTV`?bTxD{bX8^>dKhvHy$yX0{SCQ>JVU-=uwkfSxM8GW zlwq`CjG@3V)=+2|XBcmoV3=r_WSDH2Vwh@}W|(1^X_#f0W0+@{Z&+YhXjo)eVpwWe zZdhqpZ4i6Z04vZM!#cwT!$!j3Ez<0i(vhaV!E7q=j8 zQQXqFm2qq0HpFd;+ZMMot|)GQ+@ZLmamV9M$DNHUj=LClIqquQjksHJcj8zhZ&VmH zM!{$@nvHg&+vqnY8LJypjH$-$`ZQzZV^GJKZme(2G&VLiH9lo*VQg(|Yiw`qWPHxp z&Dh8V_aw4U~H$~Xw1b*c@gX4Vf_SQG*-?{#x2He#_h(P#@)su<38hl<3Zzi{UPIF z<5A-=<8k9j<7wj=qd2x_jpvNT#tX)a#!JS_#w*6F#_Pr##@~#$jipA`6l0Q^lqQWy zZ;CU;o6IJg$!YSK{HBoUA=4wK6jLoz9n)i`3{$45iK&_CX;W)cTT=&9CsP+wS5r4r zwyB3H$JE=@*VNyXYsxd_n+BVPnueQ3nnsyMo5q+5Ok+)jrg5h6rU|Brrb(vBrYWYW zrfH@brkSQ$ra7j0run7?riG?OrX{AOrsbxUrqw2f`P8)4wAb{d>A2~P>741Z=~vS& z(;X8V&&Mm{_3`oXj(A^uQhaLsWATmRpNel2-!cCA`2O*O;)lnNiXR*Qdi=!r>G8AU z-;ZAyzchYT{Mz^p@t?(Sjo%r+KmKt1iTLm1e~iBze>1)`J|;nxpi78PuqLXkmiS)cti-vA^Ai^)E=gRTxH@rd;)cY}61OCNp13n{PvXAB z1Br(ck0u^ZJeBxe;`ziM6E7uRNxTk^za^F=O3X24xmjyAnG?-cv%~B*`^-UeHFI^K zhB?(-+g#UN4`^U+Xl`PD%G|=-+T7OM(fpjbo4LC=$K1!<-+Ul(pgG?>#5~+Q$~-3V zCG#uh*UaP1Z<^mWPc=_B&os|Azi^E z7q#6&d`A4=i{FpU@3nWoF_wR-B*qf)>a22%%528c=XMe6-)rv#-Vzk3-IhYs@LK$q zaq3{yx9IQwX-936rLy(?zgsJ-`Df~o+EvYm%DS>v?j?y&kM31^xBh;kz59Js#Mk|L zh}c)=WX6(yif@@J&Q3A+$8)-}&&v6~65~Ub=_M)pm49%5#W2+^$(9sLswK@*$5Pjl zZppATuw+^qS(;dyTAEp!TUuCJS=w0ITH0AUSUOp{Sh`xeS+XrXEIF3mmcEw$mRw7o zCEqgGGSo8MGSV{2GTJi6QeYWtDYT5UjJHg%Oteh0Otwt1Otnn2%&^R~%(Bd}%(Kk5 zEU+xJEV3-IEVV4RthB7Qtg)=KY_M#!Y_e>zY_n{)?6mB*6j}CJ_FE2GMhS;3hb>1f z$1E4HPd{#%Ae^+Eww$q?wVbmQTP|2GS}s{GTdr8HTCQ7eSZ-QwS#DeISnx4htJKO{ zWmbh%Wz|@9R>2x)HCYp^W~qtEtJmtc2CYffhpcsk>eggyiZ#`mX02nbYfZOi zSQ}U~twlm3YZGfzYcp$eYYS^DYa44@YddQPYbR?LYgcPGYqqtAHOJc9+Sl6OnrqFo z=356_hgyeQFIz@hM_ET($5;!jW37eOan|wH3D$|$N!H2MDb}ghY1SFmnbuj>Io2`4 zJnMYx0_#HSBI^?CQtNW-O6zLt8tXdi2J1%aChK_p7V9?acI!^-ZflWspLM^rhyI}T zkoBv<4zn=RYc!&YF;vGum~ zwe`2<+VX7qw!yZcw&Avswo$gxw(-IkTY+t?tIt*4erW8*Dv~-zw_6(#3_Dp*tdlP$8doz1;dkgzXTPu4Tds}-udk1@G zJBj}}`}6iJdv|+JdoOz*dq4Y4+W`AO`wRAMwn6qG_F?uB_80Acv%h42+5U?CRr_o9 z*Adeji0be5H|=lP-?qPF-)>8=zH6UuKdzr+ZDM=R{trYs8*$FHziP*XZFpAcq^j)+`hxU%f83H7twxUKW;mKm`7T_MBHB? z?j!cE?cdl>*iYG8*$>;kMGwA1AHKI=5YF2#*nhHLwqLPdwO_aY%YMsVVlSorB7Gx& z5{J|g>rgl}4gpEj-A#>-1c$|8ceu(~cpc`_fFsF~i)Z)`IjTF79Vw1fN16j~OB|0m zG8~zXCXOc^%^fWrZ5+=!IygEzx}tWLqlcrHqpxECzLvA2h!|tn(GkL`wlUE;1JV?4l#Y?5Yu9Zm_BxhX_-SzD;#24+ z4l%8DtaYqM`V{Fiq|HcMkv4B_@dMJ2NI!+s&yJrRSCD>1x`l+VK{%vNsZ)-m zp$Rv;Nb%uhb~>D14mE6x?~GP`Upr_1B=yF#vqT#vX?T(w+vT4wdBHW<)z&%8MS4S`5+jPlB1SRNb;J2L*BG?@ z3T?fXtI+j2TAe`KC8IS7?Y!fPjMj8lWUOYwci9+~AEDW<@?&)O2$9h#8<)tK%yUIX zBr+Nw(6Lw;9f`#>k~HUZ^pLc^)b*lsg=@8It&8;OoKxod0Ff_tZE$UJZFB8(?Q!jM z9dI3T9dR9Vop7CYedjvo`oVS4^|R}W>zeC^>o?bJSE-A2$GBzg)h?x51pC==4s(+<7wyV2E%d2e~Pdv|(wdy73}2A%U1c~_hEdG~t{dJlOIdyjgLd5?QfdQW@* zr=GB#@qX_u_I6eNmFLIg7%)uvr^qB<{z)>)mw%c}^5PR^A~DPb??vw=@AJyb-Yed# zIHuRVH@r8!x4gH#cf5?R?32S~=e1bx&r|WvxZ5p2w zw-+)35B@BGe5$5w?8-k0h&*$+cZ*e(l$QJ_QdOQGL|48a_ggQS`$iCo;1A8 ziTwR~S81e#d_SZ7cL>F~R95;YrRZn9N&Q=jQnddlm(Jb$6Vp}o{N7Kes)`Ezz)ZUP zFSg3>J>6|rUQ<6jc2Xri{#cdQ3jK@JEISX0Bx=ia5v#j-q=l;EzuUfo=B`K@bIcu$ z(x7DSB!oY?b+3`B;OF-~r~ozGJ1w=qDN@ zJvxhgBt=?_@QV9balJ0YG}0UL4Gi*0rN<~2eO@4-Tfh-4Gxw2bvW`}6;iKq zzeT%y{i58TAAhlrkzb&D*4LiSP@PKrzKfvh=!;X$Q=3$seb4#&D4+Lb`4UtkwPxtL z`+EAU^!qQpe0EhI-yhfM?yFd*pHG0F&c4C;9?eMYAJ_liZ*!=c^sQo?1AGJM7*%!e z^q-}rW_w+&bDdgTiA9wN$ zGYj|dgK>{O2lw4maj!iC_wy5QPd*m+A#RUe;-4%f%8{lR7;wT|?T)EEE6`V2D_8nJzRy94c$`ov-=Xr%sL2cC}K z)xH=%eovu7{1w|5<7b!`P&?B9nRtp2=|5?|V*R`O9}XDo?(ut&`a^ufeJ}b(`(E~q z^}XgB@B6!NlJ9MLR*5bAna>$d^;N^S4O*LLz|Wt#7X8Cl%{<39M)|()!*Y?7^|-RM z$oKJm*^zq7|G;vUZ;h`%KF@QnzfJn}zE6Fde9iS+eV_Yw8g}@0`S$oyYlSUXgFs)?;9%o;QP_{lkaEWFTO3tL;8RE zuK9lT{VN*PZ@vDSB%8wcU00;EO+@mexE;+MPxhzy zFWXZ6Y5qF?E4Ih{_5AhykNX?>oA?j-n);veKkaYnZ|#5H{*1qyzMa2=zmva<|C+C> zznj00oxIiSXV3Qc@E2Nh{5Nd9{eAuY{kb&d`3L!j_=ovN_(%Ci`^WeT{A2xv{&D{C z{t5nx{z?AH{wYWU?Nj~J{4@MB{kLqh{B!*C{EKY!{R{jH{fqod{7e1I{VV;e{cHW} z{h#```abh-_HXrX_wVxW@$dD2;XmO2(*KqJi2rM(Z~Q0yr~RX?XZ&aV=lwtUfAmk$ z|K$JKKTZFO|DXPA{u}sex&M8G)IBSpo9yaZX@fV18gh;G@9ez{i1Q z0l~f^usX0Nur6@fz9FzNuqm)5ur077uq&`9us5(ja4>Kva5yl>dNgn>a3XLz@Lk~h zKylzg;9}rX;Bp|&-o$n#a5Zo}a3kNtA)(Jiq%m_9JW(FGtn;=+zt?Gk)Gm=)|1>=o=A>>pfZ&kep192^`L92p#i^ae+&LQcqb?cNki^HY)BqbhSVW#NFOqUjG_2YV#pG*g%((yA$Q0d@`r+< zq)-FuPH&icFKlFI0VW@GaX{cG~=}^m1>rmTJ`%uSFvbA&QxzO{W ztWft*&(JP=uTY;*ztDitz|ae!L7^d`Zo;t8$k3?J=+Kx@L1=8~wb1y`gwVv$mv|$b zD@+Q#9eOA9ZfJVwz0j=C+|c`>4?-V?7KM)3mxPvuR)$uG)`ZrDJ`H^q+8o*%`aHBF zv@5hHv@f(jbTD)%bR_h3=$p`q(5cXw(D$M9p&vp&hAxFJhrYvm<$s2*g>HmyhHiy! zhwg-!BsNK!^u0YcNuH!kQYUGX^ht3^rliCqYtnwfk#tmWC3%v3Nr9v@LMVx>B#}F_ zKg%V|{iKR(R)yUC|H?&q%L*?CHgXpYDwbW zm}sgc4f6f|Rpa-3mX(P!M9i1sFR$=qqrAc`!0AQ|zeU3G+aywchlJ;MN@P6Cs`yw| z!?%>`_&pMVZ&ELg-z!PrXL5F)mAZLe+JtXduNlv#w<=V?j!$pGE7G$IHR&v`VWqqP zorz80&1{Rp0}{yT3HU9(CcHVl1@BJp#QR}uPiOdpX!j7>J%V;e)|2r8w3~#w)ma^X z6zvYJm%yj7c3y!tHE45Cy%zj4(pG#5+lfy}?^c+Wt|`nwn-@7LUze5fndvG%1NAe} z_I|EKVH3pC4EZMMI=%&B$bgS#h@nk-7rq^0c&Hx3A43es5yMHu&;~x*A%;$9|68;_ z8ST$Op9QpULfxtLTJc@kZiSuFrF>sDq3{gH^4aivh-<>R{tqQ+}|3w&|rD%5%>a0W? zD>0UC*!j_ywPgjj|{3O?FQYh5JT&kxlG~>7x!{!#+ zy$sWDKv}0)Kkv#27J4!m{sQt{kbfLD4Pi3@ zHkY95iu&_Ve@=ZJ{|?HtP~IKoOHh6V<

h89rXg@bkOt2Mdd!zYhHj)Z2!7TTt&^ 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 literal 24648 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 diff --git a/icuSources/data/in/base_in/ucase.icu b/icuSources/data/in/base_in/ucase.icu index f678a6ccfb4d0c0292496e0efde46afc0ccb5aeb..136f0a620dff21c46e484828a7dcb780fbd0d44e 100644 GIT binary patch literal 28306 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 literal 28188 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 G^#1_zOM7|% diff --git a/icuSources/data/in/base_in/uprops.icu b/icuSources/data/in/base_in/uprops.icu index 63d6a4eec6306583c14c3dd1109ca81de68c782d..2bc695d76bb8477e362c0e6bceabe0f321e5597e 100644 GIT binary patch literal 130080 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%0DSv-FP*8azJ;5ylp}mo$^T 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 literal 126792 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 diff --git a/icuSources/data/in/base_in/uts46.nrm b/icuSources/data/in/base_in/uts46.nrm index 11f1c299116c5347808971443ae080469a199a32..52a89135b8b554810954bfb469132402a39ce898 100644 GIT binary patch literal 61652 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

c+kVydMBB3{ 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 z zzSxO6D-w5=Hu)*DJKSIn*^s&3Q08pEEM%=>40AT#{N8zq@+Z-TH?S%5(6e3eKg-%C z^WX^u%oizVA8EJK|9`wmJBaVyow*!!oS+RAXlH%OXf%Pf0pgF)hH2zGMSDu&0p``8 z5dS@Oj3mBb8skcTexG_e zvBM?W{c|V!)dTxso3-c$QT}|cuPn+=n$0zbEn6_2_s+%Mt;tW_AJM0c=+Bd93T2#V zLmRN~lZ@9q`geeK21jw-(5~^c>s9&{Px?R6u5nybH=!A0x?l)12I}jI4F@w873ot? z>WQb%V@O|za_^&U*GL;jKc~@$3~X`_Hl9NKW0Y5ce)iLKLLIFrcNuY)86!XCUZC6; z>B~WEa2_s@=SjwO6ZJkwzC*NgF6n;Z`d>m^=LM|0F%EB0&VK6rihCh;9P?xBRh&=X zuxA&pt77_`!gbb!`fr2xvF}mZ{5k0+V~2;x`w{JVoHjpAxkrglYfHY4tYvUbjUes} z;W+HQZxm}B*t93~gV&)G_Wp#jDox@3<{D~@4gU*nV4GV|dmiO4qzrT$D1SBMa^K8{fYyxJ1(-#Uw)(SkJHDIy?jm^_q#J(dE~5##XqKZ1EGN4W=cW{J^ckb z($jfx0oKvWjIPWRq4zUbixD}(2z&{HxPn%Jiv?QI^BCv_NsQi3?v4kz)7n8NtWlM# zpc9I8YE+l4`3J;@sFgn@Zcz(ns5?+gdEbPK`9pd5UY%1G`n$iH^n0D zxN>g5i&L=@mY4$D80G!&E&Lg)G{zeFjPATytTN8#E_#!)u}nEEQ|Ui^PL7*%N^S;j zOZWI$#`>eWaS@$S5Okcz(E%NdHs(07^y#L76JCHPkLQ?NS z!|mN^MD!@W)f^Gs&)mVd6GEC7qJ4LM8U0bTFYrV3hG;Af$KWKKg46I7T#NSI`*rlE z(Z2h>j@}*}g?|g7C_-BZ`vQl^?W=SsdSkS&${}>VDu>NIV(w9MkC}Vi+|SK*&Hd8c z6Xu>Y_msJ3%sprBd2=tCd&%4@=3X`TD|6KrUzKZe?>Zh`6z#j`aP&6ZljdHM%QsW% z)i6I}2>LC|0vHP~!;A19ybrIyB$xtIVLH49GvHO23$tK3d;sg z9ZOTk^mR;M$MkhAS6$QBvo!V0A8-D6i;Xu;qG=LMlW4Uhnm*Yy$>vY7G%2P@u{0^B zZ)BQA=5K6ns-;Xde-raJF@H1jH?#E3tb}GEz53G3+8nglpy`9wm!Rp>{k2GwZY88! znsh56-JfB4*(BZ4r(60AOPOIQGc09>m6>5_GAvD|rOC83nU*Hg(qvkiOiPnxX|gO$ zmZizEG+CC0^KsPM+|o2ReRI<{H+_!jb1ZL;<;}4)IhH0zX{smq^KcuOn~fXwNUYP+ z-`3>QA=xS8m%lHsn~EI_4&tn`Avr!XNcWn&0a|n&0a|8h>NG zEhRKEJ2Wy|rJ6t0{7uZ?#QcfoPc(m$`IF3F&;0ewU)TI~%^z?6c=IQlKiT{#=1(zy zl8sA}jZ2dCD9L)AXl}B(DRQgU@;}9)72SiGCUqAntouk(caNm5Bu~~0$#|r4DXi2v zA(@TTeWvuf>l82P>Am#2_q=#rk9@05Dy7qXsIXe@N%dJ_UA>-^UiYZV(_N~t?oH*F z42P9Z_o>3VQ^QjEbhj!jsdSRk>zq(`smtT7IQ+Jy5l1it$Gb~lF?pZJF*;RL}%9m8U?n1@arZnj_zG10& zjjI>d)#Qz<7xwb2bcNMg#VahSC#R&wOYs^fNsWi3?BPi-zn%;V>p9^`Pp{S~Ec;5T zf07y}$@GXmY%j09DqsClyrg24Ue=bB)g<-Qm8>0#SGyIK-6WHFrXE2CO_p_PAv3s> ziEO8N|p{I+fJGUuu57IdgaeP2de4`3O7-cN4w`D#tRLfM?N-gO{K(`YKQn0`LbY z2j$@oxDzTsH`4Zi>QEEnpdLH{O`$tH3N;|j@l}m=p5hsi#xuhAfS%gE2ViHgybz0-<$>)oWb=u(S>F47q&l8X*BW|@=ryXvZza8%dk3cP`4Ua(_)PcHC z58|OdBtQdb2#Jsc$&dn#pfRLE6KDoONQVr_ge+(dEkK`PvNQ7pdR7bSLr)kF6JYXV zycxm2u+qD*1pW$3VL4oc%WxHTz%955i^;nLR>J%6S6Cj)dPfcB$B*zv1+(D|cn977 z8fD!ixAW;Fw;ww$liV)m^GAG1?vT^}Gc@#fp}gOPhW##-Z{-z5O5PMH+0%tf_VnRU zIL@ml95?hdwl9O7eY^ukF}H#Bz{wzI6Ksa9@Ck4($k_oqfzv_G9=NR<7J$?EhhX)0 zVJKsez?H3)Nx2QpO*A*j++=f8%xz?DV{=n+qqxS0bB$}YlQR#jh-&3?IIFMT%BZ&v zsukH6SdEq27q_qN;vC0c(AD?m`lhNgv#nC*p7%5Ry2#AtJ!WpP{kbZKF+XLd_8POV z>CD{L^kddUILNGMIdj0jGiys_PF|Tg=Nx8Z9s6)q&7`Nu_Jj+WV~%Ae6+@Z=W@CxW zy7I}to*CcMv();!1F9rQ-rmZSuZ85Fx_RNEJWsao?a41jdGd5SPj>F7JNzx$cZ2r- zk#;wRX03cqnp=(W>czZsGx*xj5|{@E;q4^eJl!VDvO3VOzA(D2G!KxcD2d&T7J7=% zTg1HwrIfo8ZD02++9-N)mUNFJvtTq-NoM9uEBufR&%kha30`i`Zceu@_2uQUet_nz zY5Fh=yiVwQ@MER7p)s_8fv^~Uf{IwIJ@kQBUoi_gh)FP&lyfzUs|&zM)!tebCVGu>s(K{MTJwDTKuRhfy`0vCUOm!R{dUxKI-AklT?;+n6d_#J$egxy; zJY0bKjaf56*6ztz!XW6~m_54gq|>A%b`6?!u)Zf(yF2@=;u=tEnThm*tDuC`E!~au zqKkWiJiXBkhKuB#kNgb2fS;kT7thI5)(=vBPPTjO47t&?$YtFe#==^74?ci1P?2l8 zD)fL4;TW{(qd9%~v$UA2{uY{n$VqU?V!kJ)8mkk#&@6}eCiIK&1Xu{8;dyk=_fyON zz{p(WF8e2UUpCzLI2MOXq?pZBI0qcoHx>}Ls(|&8bna5ZJ)u3{e7AIWP+vAVenB%C z+6`oXvHJq$&R~`3VW>QaI~bP0HCXnXQY@kWC!b?I;t5LR`?yx_Qu1^d%$f_DeB>h7 zY%$ZZZ*#ZYX{Gvwe661MIj!9-q~FFW-e)iX?q)@*DGY)!F!=?gdWca;B2=H}!4OFN zBX%F6n8TFxGciMkD%6v)ZSBsWH@kVdq;l6(g*Qo^gM0}_!z#WvZRXaX%*qBDo$K z%_zV$$V#I}r0wWFNX}Mc7<&uV#J(Nf`R4AT{nuZ_Ud`zFSl0c<`kYSgc*^VKE+x(v zly8OXG>)|fsD-ApTR@3N#`F0aWNim|5!kRu%oNi0d5L?5Yo`S1n}GEoDP4C>ZM%1x zQ*u`ee~EAG%Zh1AzBw;*WfAJ?o}gb{-RktHSAl%X@a5ra={`%kocm5cdiU< zhy3^%rCW-ny1F0ZwshYxcLC|kPUPA5I`=ARXW^d)3t=74)ej|MD_oiAbDnXZAjgA~ z=mo5T>aZ2ALVMT;rEqGJ&*{e4$sLTvy1B=(N}Wuex3BQbg1aaCobK*E%Ik}-n_CxO z58`t(75b3&b$5@DXE3@pQ@E~S5G;pR;m)Z%xsbJygJBAshcc{O|4g18_@2J>CA;?i2JS@XnvL{B&1dZ*-rwQwMSPR&I%j@!f}A;wiR$Z2D8s4{CwO(%y-nGm zoyKl!GA61$QYW%IBXuUbJ5r~zdmwc#yC*W8v)3!5f_DCU6;da_S0i->`~##;ftMn6 z`uj7a&VL_3>IAs+a5`^?cd_%I^Nsi_>kPod;AEKI(W!z+SZ4@0OBV@q5`l1ZB&@Rq zoVbgG@8XnPQPgdbaAga}Qj^X*7U>)#KGj(*l*T&;Srk=0687qRG!pjetPu%&b=Hi8 zy*g_}!d{)6IplkP)yX+Te5$i|D2;bMu_&rfB<$7MHxl;h>=y}pb@q>hy*dX(!d{(u z)T9%PMU0Movdwza$trmdYs8$W5omO_v4}B~PpNjBPO0)qrSp#?kV-W(ino%`iT_dP zbRKez>AW-kW6|wGH=Yu7GO~z~mQSVrWIB~PhEzI3IUcE0m$?>mIo-r=%az*gmtp%Z zbJ-DD+nKv2tnmdr&84+rO;kuTenVIj9n$P63Tyl!P30|N&21sg%Hpu*_K+rHS6EXn zq?uU~)|3xvYL|vJcZM`04umxoLYm@3VNJ!5ru@;cCJ@qeIUd$j3TbZb32Vv+hFISp z-CY)4S*JO6C>IzMC?Dt-SP_cZ`MF}ULNS#rhqE%se%0K-+%-XV_2vdHtqroXH#abT zLy(=lxq&@JL3Z}$1}bj}vb#4ou(CMF&feTW#;zdc=LTk$1lir28>n3xWOr|FV8nqS zJA88k#fO6I^34sDKN@7GZ*HK=@gTc>a|4Y_&#mMQ*wStYIJEHAo-QT2ch!S(ff0c< zyH)a#z~Y3%?DWzuxJ>ra9pv<(LfZ3n0@u^tOwb9%#q1~BkA97`F`i#1CYQ1M?E`Y{ zWp7zlOgN-7kSh~1*kw1*c9@0zHxteztR{xG#OTze;#ZSS{{57)nmud9NLf(2>+E}* zM_Bvu*0A&JoNBS1c&c0BHRS$pe^$h=9d_D>w}p0pYq=EC`Avn_QRZppY#A}~>D1*0 zcEE*u=lNA?F{OJgC`u?v;FliIZJ@8|?BG-D4ku)>Z%`6y%*k@a3~=Yzgqtd zDUXp-CqNftFYPBhMoNX%s$-NV|GI>u=2OYq->4mmo?XKs)%rOl=@jV>TC$XsC&;4_ z+KMm3eESoQMEu(Qc!D-;q_>$dN_UHV^Af(av})ZpERo4h!ueQ6yAw|lqtmF@@t;Ps z*K#UevGWqNSMU(|v?nslb`E;Iyq<90Mm9a>yp5|u8Ug{!`sQTC9s$MUo)4Dekiv7VW`rVJCNd4wVO@BJ;LLFEY3j2;n zd@Ulrl8A42#J4BnI~4I{M|^c7zIqW~X2h2h@imC}8b*Bl8eOPW@eyBhe>GaH-!rLh zvV;Foq<+(+hCgV(YEqN1dXhm(y$xukt39FWk&xnQD0E739sMNcG2}vT=mUMB zAM}R-Fc1d8b1)d5hZkT7423)x2Kg`?M!?8`6H^#7j}6R)G4nYTSn%7q8|g2f%{w@? z|pds=Jd;?|XLuA%w6931C1#L_|a+fJnl=V+gAZB4R{DLsI&3rZeb4XzOz!iZbMD#hsasXI zs=KQ@F6Kzk$dErN)3In+mK2hb_65=sY}|Z?>H9NqzB=xKouG@1VS*}#8Iys|b%t3b z2ghI5prS4eGfP*XTO?8IKa!l5os(UXU6UE*Hn~q;N1iRuk++t2kav;yl=qbnl^4q= z%BRX_$Y;st$={H_C4X1GUcObnTmHHHYx!~c5At8+f54~JVNlzuo8FcE9 zNk;h(Nxvlh0l&(mWL75Eu_o5e`q{hK25d976?;GX5Sz~yu!GnU>{#|G_Br+?_EmNv zyOdqQu3y4lkAV|uk00;Nlr;_m84HLCmZFi3t31D2xQ=rem`clfPklsjnE9Kpkbtzj?cBOop@@2}=lv61` zrTmui&lH(Lr7$S03a_HJqJg5BqLt!)#lwp3ibBO;MUi5HVv1tAVzy$wVzFYmVzpwU zVv9m1-=)~6IHWkHC|8_E?=o-=h-=E@Nh+m5X;pfawUu#}c)vU9Wzvk`H1o{WubC<@?a&OL|PF%#sg0&D;3WvpHsd>BVJV+pGn8muZ(O;AlyO;^oU z%~vf}Emy5pZBlJlm8$;T+xy>q|E?K$m!6^ju5AC!^WPcx?+pBR2LAsw1IPbuYvc~x z(Huy4HRR-c(h=23YC8*hQN<_yp{i6Rsf}`#npdZ(h5H|w+^G&iuBUFG-iB<=)UDLh z!7CN_Lo1VaR(Dqys0XQ^P>)vsMg6S$MQC49+YSG1|DA#V7iZva>LqH8+;6C3Fv_!m zTW>kH<$ddU|LggGKLab&Yt)<7JJfsC2i0Zj)9Q2TOX_QCxkjxqYHS*#+^4Cd$=2j( zT5CFJx@dZ8`f7%1iZv58Q#CU*b2JMyOEfDqYc!iRJ2ZPW2Q`N^Cp2d?7c^Hij5bB9 z*P691ZAhD`ZK7?dZKv&|?WX-#w^)zAPWoB;{dzsuiJQgk=k$C_ej>k_zsBbnCK@&y zt{HNS6O9{;=ZqoKK+_UanMtj;rFKf4mAWYPMCx}6x3WOFKv||d%Gy*%+2(-ICaD%l z7D=|Ku17S@)xFfjworXc?a=hnEYuv+5T9FV4(%dISM6NTHv!VV)*fZkbmD0L<^P?5 z{}*TAL0xa{0PP5z$HJXyucWcs30fjg)=tx&N}3fp!^u6>JnbUbmTFgMS7|pu+6L<$ z?LO-NPSQc`VXX#{$I$;i5?B3>w^H$L5+Au<{j9y9y@H78$&Ah@PtoagY2c(DqxvGo zbm{`Sx;m1D=o&$~PnoA&u5GSs6ZVtIJ3{KJ>keBX)m2}W@V;1N#CVBh9;6$t8>5?~ zTa#3xo2h$6*IxBH9r5qFw{`F9Hqe|~bi1J2tJC2f#DluB$T%eaG4)ieBwtJ( zMPr}TPtuoE%Mu->s#JZi+?r-3-f0!;BmOf{TeKNswyNrQRr}GXJC!7u%YUui(#SU$ z<>v8UBu`JCOZUpDq=lHPrTTaD@9XtDE}aC?r&bpzuSWx(YMo> z8_eXL?Z>L43+MQ$8eWrX?r_#?u1y&KWBnf7z0~Ygvn9TM@_yrC{ZaiX{ZIN|^?&L+ z(iKR;MdOKorD9e13^d9WoJXnV{7NHd<9u8lE}N^z<#0abT^zC0hNU%^!FiQ+xDH$w zt|!-*dyspSdz>4>EJW4ZY8YwkV8Jr`3&w4Q%edWn1WKa%%W>x$jtH&Dr2+`HVm ze`7^kxLw>n?htp3D@WF!t7Rsi(U2N+^53~Xxp$K!yn^TWG~UYFa6EbW+I$1P8Q+Q* zwi_!s!U@~`uM=ilbv z=Re>-=0D}XF_@DUSBFFmeX1+E5fAX=d@;^M9QGN=aqW|CgNf|lA(xHQ@3{`E_ zU8;Jj`l<%1hN{M@yH(9pxvCbbdsMAd_o|Lpv{l`wx?lBx>Os{*s)tpNs2;`V{?We_ zCdAZbnlP=I{>(sT3{%1^W|lImn9a;~<{)zkj#rozNvb3u=^*JO=_M(YjFCj6|F5Nd z)xXwy#LWf6Jcd4bE`nitgBDP!ud2UlplS$}hp9$lRvD&9H3pyfGR*OcXq$w&zHwui z$#Fj9xr_JZkI2@^d&~OCrbq_MHp(~4N65Cyx660R_sA#U`1(}7PyU7cDcN+{U(qX( z9K@3qN96Nl-{Ogl6Y^~pr+~l9wpEma{|KA|egQ55zXJ@jtzsqYS0MirxDH5?wpGZ1 zWIzdM06jo_4dAIjI$%qhf^B?O^{i@Jg%f>G67ldu3IVl~rm3dELUeV}uMcD=y%5%{ z#h8tuX$laJT=14aD_}EhZNTpXK7!l<{6T>D?Lz-kpfmc90NsEdKrf&m=_O?E3uyo_ zIO#rAH#jFi)f0~mR1)oki+>-gNc)Jk9V*hcRSZLoBY{!C7+?bM6fhNdp3dY< zNPh)h1<085!T$!FMNMyl{{zp#>{gMst>W#ZQq^-6*q6|+2G#)^fz7~HU^}oA*aLhD z>;t|44gy~TM}TjE6Tm5ej8~qt7h5aHg#UtZF9By^{{{Gy^ue#7+UVatIt%+%2O=|d zP<2Rkm};ZBguKzH|C}`KUs#VCs*Yg2Y^$1D@odHPiifZ|-dUYxs^jwDE1)lW3T zVywXTVYNMfhxy8{M_Oe>5_Fa2L?hz*naZ+oJ5zc1x+s@bmZFti7h37{(x`>#1PkIM zVvE?38SPiqB~|(LKU7!o{%UzRzhEIF^oEW!akTPEp^Ea#A1lwIiB#}PM8)HTQ47Zj zS;eK0$zPH>SuL*W162z3_Z1rT=?c>FRh7W?it82El630hbhYKc4S*@!C)zZ~>BvE3 zYglimoMB}w%PLq6J3V~V%mZHpERQ*gHbLGV?(YioLz3&VWI4wg*)(={#hVpNk$Gdq zx{6g5|3lBE*z@S-^7E)~7UG_%;KDQTJkD*h^-i^0?NtZVwbXa1Gx1qxLv>?yQ+2Mo zh58eAO=%x8KOwNVYoqSG6Ct+>Z1F z&QanY&7ZF-i|lhzI)-&7dL%?w9kTimy+Dsuo`$TfR8^`gHI>>*U8TN~tK=&UXvRuY zWh#!LG{9V$4oadJhOZRY8Ij*k^-*6jI(Al~x~ft%E-J-tACVoE&Po?5B(b8`Kz0Z_ zoPB~VW{u(VQMBBgTM%KBS}Sdp_Hb@@rH5Ww$kiY^x;UdZ%jiXI!e6m^ta<{TxDfjS zAImzV6C$fZyiM%6qmcT{n|%yrr?$>SNt3cdT8UvqW56OT}YX@Da9CSP4W8;leR3=83J4 z$Uf=hxU)GReFpuIv?NZ;Fv<8X!HxeE;qy^Evjp$S>Sxp?>gUxn)Gw)Lt6zz%CW&W< z#E@CI(MVOTq%X{z7)5%?q?)*ziMAG2OTwRLXRxGRAudXp>!LhQ{W`8;3uEf7I<7cc z&0NSO*yE$cQHYJmHRmAqcq{3@Nw2R)6XjRX^NU1_R)N2zUao!z+nKLg zg?zD1%vKYR^^MAcch#ziR@8|+ao(y{p&zRyW6}LvC4uN8aAA9^Zf&$qK@wAto+wx4 z@iFmMF-qi7tC&&bQA@m3HB#uuYDtE~$8%ljODwU@W?#YaOr+R`<3Dmdzpq{wK3as) ziC=sjiF>j6M45QTM++7qL%u2-XW2ZgA5ksw79wJGL>6PBvY?5jLJWK(=d++`ByCF1 z=hyLlpf|(YFODjBM7LkeL3nKL8_Urs(XV>6s1dp7S(V?+E>>PWE(cq=1p8UARNc>A zDtllr3${e{injQ?QBOgNw~}5>aZyhaDV&GRrEihz1>HaSs+Q8_>^rDeFMki(s`bVm zmEzdZv4|!*LR1p8f`1|!^}HQPQAw{_k>iTQ=BwIB+tcG}ExUpJfLT@jQRYX>c=$R&DAyFNqTd+4x^6l&{HvYUyR84dY zA$L`pD5kn@W90ffpmG5Am6)Zv=a5RFRky@z#07 zz2LPuQvaCBF_9}Y$uHOm6*5ey6q=xkwa0qqtG24QM{-6jQE3Z(7bDsiC2|)i%D2Xe zKf&PyaXTY5L@V7B(R~_`_C=&GB2v}S4~8w`tUp~jrShYbZ3N)mV z$SIZQ)#P55oVSEm%_j7Jjf@tp?@~nfM?|_Bkt!lmwTv1;6U`)g#LsATyXYqz9m4iS zb)BW3kTo;*uiC0YR@d+v73&u#$5#<&is^{6D{z@6+E1c#jO%TQZ`5$S-BuD|MXF?O zwIxg*oqw`z@h+qv)m66>@0;1q6X7acoR8!tzF64xK^ow!FLg;#=!?YE*O zIij`PYQ*}AXuJIkv7-plB8|1g%kecvuN`9K?NuSXx{Z$|z4$R>d!kL?)gy0j{2PxI zJ1$u<;`>6c=J!`(YfBValU>|G@|ikmHPu*CyfD^jR2%h3G=8j3^o-RB@-g~eN7ODz z)%|W=Lo!6Y#mw7ZVRhwYWk? zuA052$Jj#YcWhs2f9YxV2X>(JZ20aynn0ZEsOCnJ_+D0YtEzho8LR7We&wzjBfOTX zsul8xb&I^Z*Nrsf-67Hv``pM@H6mG~&=jau8uF*pa2i9*orGB1jd<03Regn-W*7;5 z-%>b!h%S005nF5%GsYjA;+-LhjU7YuuF8X|NqF9hVaW4V^Q%2?#W1Z@Ce6Kgo`5`W z^^hv4O4FokteOn^d=_~c#ja_9=w^62%c*IlnxlHU;^~TesrNG#%kYHOvKs-C94#;(CLWSWMW#+s$7C91nMf30Yy z$<@rSXrZ}B(@L{kb+4waW`*iL&Hb8Hss}WORBKcZYS!V&k4IGxX&%;WP(7j%_JOc> zL@J!uXDbh3@04PmZ?~PnCwr$6OYTX21SflWTgA`#yz~O_8*mx83S0*y$#}L2NCuRE z7BB#5fCX>>9>5QTfZ9M^pgxcdGzOXhEr2}WUciE9rtSlO0O$lf40HwZfu6wQKq1f% z7z7LlMgil1iNI696u^l*CE(M67XcsoFN4noUI*R)76bnPmH}@AD}ncbwZJA|3-A%J z1K16e0-piKpbsz*7zPvp zV}XglWZ)U#Iba6xGB6i-9e4v+4EzIF21Gv_Zz^vkUy<@2e#hp6lx-~ODRrFBwR`jcu ze~_Y=W~ic2GeXf{Q=}NI8Lb$u8K)@HJgFE%SJDZZr!*y+nVPxymg7>*N=?=N8qG${ zHq9Q*{_uA^tM<=pe$!mlNVQ5WueE4B+N%9Yil-GJZ5@0UG+#AU(NIgaxv937rj9mO zYf|Up`=PDy4bcwxj%dE>ImIK|?%G04FKvHK2W^42pLURTy5dE}%Zd@O=Br*&yhgXL zSUVWCkJUb@eMnpX zrP|?|<=QctdD?-hccAN$u#smrh5HMJiG7D-mA2~2N9rQiIf08*d>Zt9?K(tk(ta3; z`v}sGNKeeRTU)CAteRG|GR*!ewjSZT-~0#{M;7^4+Qzi9ueIN3k7~cw9@l=SJ*E9# z`-ApJ?N8c!R9|UFs>t)GiS7Bg;?%?QsSo4H$A*!ofbXTx{|X~SYZIiOt5jIkUbQdQ zSraE~JGttLYrJp;COt8eC<$IKfzu=Ug=W%9$!fN5;HYrP8&IYYh62C z2VEy!7hN}9PhD?aU)?}t8-nj57U>>Tjn<9RP1HTDdssD9_na=5KEvGt)!*1Ij1zl@ z_5!U)oVCGtM|vnQ91#CDDmE)bIT7D_L#r6EU9nTKM==t4i-6*o{GvyckCA>F&N)uH z57Gqb7q>Kqm|>#ypkk8r>zJ6AbhELYb9Jvp=3n#`_~b}EM-Vkd`mJIrG$#}#(o^9q z(;^=6k@3B9#dPV9h?pUrS;haH;upn5#qWwMidoXx(tj$hE9OY&N+n9Ua-MX)bb)js z^-oqRm5Zc{r5dGPxkS2DYEY)e{yZNBTP9szC3AcQcq%!@zEZjhz17lmrA_HndT6dS z(sj}e(oHd5(F}fN2*0vcH*U=O%4}t0Wz#raG@`2XH{BaG%yCuEXkR?~Zk<Wxu6swf3g5|Hr`xF8tlO&Fj&J3b>h|dl=nmdJLL=`QGg*Im_B;`_G> zy;g6~oAtLkvR&`i`}G<6yY%(-4fS{HbM^P=@73R@e?b3`{tD1*ejPd{J3fX-*^9c?;ZW2I^CqW9*+ zm)N3zcjI;7Lj5AW7!kD)Nz@8gUDAtgZ@eezkt$>DM6T`?uZj8->AkoS;%%f?_1&YY z`ETAA?;q}z$5$`(s@GYwCQKz~qwNPk#=L|>*qraz%SsXwhR*Pqd!)t}R! z*I&?I)L+tH)?d+I)nC(J*E5`y!(;4R3a8}MoR-sbJZI!mIWuR$_lzB!i}T>y#sMzG z)xvj<>vEY~7QT7hh-<<%#kY@}b1k_%t~J+&Ysa<6_l`T_S6w>e+s9qGZd`YK2e}v5 zn=8aOk^6H4xxw5}Za6oRE8>c|G2A$A0ymMH#7*X=a8tPwZW=e8o59V*Z^F#x=5TYl zdE9(%0k@D_#4YBQa7(#m+;VOOw~|}Mt>)I?d%GLBP26T~3%8Bi&h5ZAZ})Je++KYD zc0YH3JBV-L9_Eg4W%w@c3GO6!8sEr0!=2^Map$=U+(qsZcbU7wUFEKE*Exol@^YT# zQ+Oq>=C!<@=XoQa%A0u$Z{r=ji}&z8KEQ|gT6`V8E}zL~@!5PMz6sxy&*7Wn*K6|l z)_fbj9p9esz<1<3@rjNi@=BsJf3qXz#`Yt4*W*m(vC0!@v7WEv>^rFM!gr0yA3gRM zW^?4uV2d zDW$T%E9J7KN>=ti$`siOrBe1Ta;s&lm0HIgfpUv7RrZl`hteY3tt?eK zWS=SbD?PF=m4{;d64%Ty0a-{^OI8Qpzx#%Im*KZzPb$Bsa$VUOWkJj_P*aXu(UW=U z%lGF8@`L%I{BV9GU&I&lWB76W1pH>wBz`hKg`dio@YDF|{0x33KZ~Eu&*A6t^Z5Dv z0)8RCh+oVv;g|Bu_~rZxekH$(U(K)K*YO+pP58y7E&MiqJHLb9#qUAArTkugAHSbJ zz#rrf@rU^%d>Ma?Kf#~mPxIyc8U8GPjz7;|;4ku*_{;ni{wjX4={nCCqz1WxHKZ7n z2DL$J&>MJz(U58|8!QH!K{yJRV#RV8Tn3N9X9yTVhL!qS_!YCdhD^h{$hw&5oFTfK z%~F=3k)f%fxgpQc#?ao-(a_n@)zID0%TQ?OZy0VEYnW_!-Z0znx?zdo9m6`qR>K~{ z7ltE-Q-*Vf%LbV-U!^o^jl40{XfZmB9%H~*%UIW#Wo%?@YHV)IGqy3dH+D33Hg+|3 zH}*0X8v7du8;2WOjZ-ah;!>OxlA6@X1&jJP~QY=a7V1p7rE2=Y%X95nQEEp znChA`O)XpUAoA#y-rjDjgrp~4=rmm)LrtYSm zre3B3Q(w~n(_qsu(@4`O(-_lu(?ru#rYWXpP18&-m}Z(@Hq9};YMO8Qn`x2h@1~`u z<))RU)uy$kji$|}ZKmy}9j0BTJ*HCAUei9)e$xTdLDM1AVbc-(vez-w3DZf_X;ZoB zjOncDoawyjg6X2^lIgPPis`E9n(4ZUNtLF`Q`yv%RAs6ZsK5sZXUom-=Gr?9>IRe@|VJ`hM!B z)Q?hkryfi_ieC~toq8_y*VN0YlCY0sz4OnWtLVcL?kx6@Xotxx+f?W44vX{BlV(hj5@N-InI zF70gErL>APnOSY-%qDZX*zNyxo15=7-)HV%e$d?6{D`@mxre!zxxn1lJit7} zJidYb@LnMznkAOFE_tqe$TwdyxzRYyv4lTywkkL z{Hb}L`3v(Q^Ec))^KtV@^Y`X6=AX>x%@@son6H{E%uKp0olRGytJC%A#&mPKE!~;! zN%yCR(rc&JO|PGxo!&UTX?pYYy!3n1?@NCm{h{D|(MrXMmFr1wi7ls+u|iS)7Q zlhU6~pPK$$`t1)#0L)x6aHGO;f z&h$O$pCbRh^e@s6rhlD&H2sYESo+EIa(Mih{&V_;^xx7ir~jE=kuI^wEy)(8MPt!h z43<<&y2WO3S$vj|rH&=jl5J^X$+5Jww6?Ufbg*=?bg^`^^tAN0^tBAM47H536kB3W zHHg($k$8Lco_MF6h?6IU#E3-qoy3+X?pAa<%{U9mDdw+)c__Imq5f8DFTjjAM++0pP>#=cFwf3vedH7vfQ%5veL53vf8r7vd*%>vdOa9vcGE?cfxu3D~Hu3H$Z)GD{K))cGK zsuE&Mb={L80$Fe1nWfWBTWmI)!{)Mi zY(87S7P6Je@1GS+;CjBU=+&Q(KO$xvixw&(_-3#@5c(-qyj^(bmb<+1AB& z#oE=@&DP!4)7Hz@+g51nYddW1ZyRVEY#VADZX0PUvK8CL*v8o=*e2R0*(Tej*rwV_ zY}0JhZ8L1`tTS!1Y_n~1Y#sQywt2Sswgt9@wnetZwk5Wuwq>^EwiPy)X{BwIZMAKU zZJlj{ZIf-YZHukUy3MxTw!^l|w#Qa#+iTlr+iyEyJ7_y(J8Zka9kG?!j@eGwPTEe} z%57(CXKm+f=WQ2k7i}}SOSa3lE4Hh)Yqsk)#xAwX?W{e;uC%M|TD#uP+jnqAdnuP{ zH`^_Ca?IF39aM7JJ$9cxU=P`A+3VQr+B5A7IQ+jJ*s`g;k-Z7!4Aaz}V{dM6Y0tB_ zwzsjjv$wZ*uy?d~vUj$3v3Iq1vv;@mv|rcvviG(Z+WXr3+XvbQ+lShR+eg}q?8Wvm z_Hp(J_FATi_DS~1_9^x((^PwjeVTo`eTKcIZKi#eeYSm$eXe~T+I;&0`$GF7`(pbN z`%?Qddn5aD`wII?`zrft`&v6W8`j%5+CQ*=Xy0o8$o{c?Cu-Pj|HS^O-DdyH{<-}N z`|fizu^+X6Yd>!P&VC9teUGYsu>WZP$^Ntb7rVn=Wc}6to4qA>)w;;`yZsMT z`6uf9r@g{ni8+xtWR4_9vP0qU*;NjWL+9We28YQp!=C0yceKPJF~@FqI2~?>*Wq_8 zvgE01s#IYv9iIi8I1nB=fjKJA$5 zu;Meu62~;hbjJ+GOvfz8DeY{>D~@@N1&&3IzdM#X{>QPx@vdXFW36KYqCaqKaeU<1 z;n)qi6!^@sAM{JdA<%CeWsc*HlaB8lXB79htTjvaM~nJ zp~;*=!#`@GE!inFJmx@~$|*FBQ)u{jls3-EISptgG`ys8;)RFPie?WtXZX+U6q?s5 zG{4jD42D}RXD#Pl;a1NnwEE8a&TO=r)=p6$JJX5f#!jK#?Y!IB3@sOJg1UvXh4UV? zR%rKzTU%#aXM3~<(Ym1JqxC}TgEo-1VNTMX2)APAc;_VapK(6tobG(lIm`K1=UnG& z&IQgloQs|Ra4vJc?Of@6&$-6A-nq&7p>vz_W9KgCC(gaj&z%RHUpWsuk2;SzzjK~; z{@^_8{MmWI`J3~y^H1kBXQfl>N^+&RR4%QHa~WM}E{n_Va=E;&fGfjQ$5qdj(YvkuBNi+U%O;-0C7*vfZ`Qwb;4GMYiNq z*FM)u=NB%rHKZz`BC!^sii4=&Yu6Es{Vg5+CD#epDU4c9$0f6M7UTTl5@+i-mpE6K zkvlp^u`~3iD|U{m&k&iN=)8z?axF3=;%rpXxsbZWnMiVzN@h8K!xoa!Q`}!URc@`D zbCYdqj%}z!3-Z@h%Eiw1KmU1!|ymw%%eg*KZlPOK}U{~C)`iC$?>1~c#mp}-Q&v|h|g}D`;Sg)Dpc$<6iO-65$I?vnM+s4}tz1SB2nooSnMc~AiuWIk@ z;O&S;p6}`8?dF5>4&&PjD zX^HXkyzS%i4D}B8j`W_=7I}-kW4u4$xv6p93Eqj`Ns%fid!O-^Aougo%<#VCo$YZP zX#2hUy$8?^q8&mz9BxOvLM!tM?U+|+C%i&C=@r^(uh7c9LObIX+F7sA&UuA)-Yc{V zUZGv|3hk0tXqUa0y=1k&;uTtjx5A5map+T_>CnhtB;QrY^YXr-bk>G@jXtuM$c*NA zi@crrR9~X!vB=R-jM*N8Ju=CACr<(l^p3-xHv2kyU)J79d?&BP*V$|HIeac(XPz8E z&AlF_(Hx~zB<0TzD!@1FWcA1_n&&lwu!HquQ_J%U->+vqT*V`KPzHC)wopg zTSe?A8|Ny1s)+q`<8;NT3gHuu;}yp$zO88K%k#DN6{y*(v`>+I{| z>+0*~`>bMb#itde6`xe>sn}hyt72!xj*5>fwpV;ae~W8N#fKH-tV{H_szys9?^kZo z`)TS|_0@gVjO56ys*CMM?cz!lYrQpDh`gC^&2>aa7NtAmH>;p#J9%Eb=K7*>H?AxG z+XB(3n@QEP-Yg>49*vIG-b{{OYwj$*YW~>S6EjxziS3I%vHXXMf33ylzg788#usC% zjv?wrUe#W;FZ#vvo8PC!<{`1w-{Xt*NGuEcOBh)gF|l7w+SvUq`c&NxQ7`g%d-a~^ zcViw~ImvNj?;BZ#3U1_4vn^VE)Ter7WJMtFAq#(Ets)ooH{;@1jYtuUwhKM?vhKi>-~wak;{sSf51p7+u`xB(9_EA(>s}NicFu z)GdlN)pv{Ga1&>qM8s}YR8EvDYE3*pLQJez&2pmrHR;HHs+uXWZ}b!7#P+CG_zmnk zr_oF|lB!lM_HPsuZ;Rbi@fOmHZttyTCVtiPB+`f@$NGz-+&-^9LTujZ*2J2sF=CB^ zccQ8i=ZR{oW{g^hR6S!=yWkbCy?IZ_E39TB#czP(IwJlWQPq(X<&5=7WRL1%w=y;= zDo1^zl4vCwQLc$cqpC|JM)*D>p^0-UK0buX zUgG1v>XugR-^sh!@iF<;{<9JJ-W~aGM)7{t{{vFu@8{*yZ`_hP8vyzAza|kb{MRIv zF2Ba_^yT9}E#+7FPfPjuPfLl%x$%Ez`gg|UNB#?xxIMX%{{mHgd&qaiGh*g6AK!T< zaaFfl@T=)ROx^kX3-coWN2+&x@6u0PbZX)EPdN2^K7;xZjY<8!Z>?{LYQ1lxFHIfP zr9=0D??a!J{vOI!pI!Zt@8&Td_~K(e_HoGbzAs3AS4DU8`2YPeGc;t|;_KY$+ezmr z(PvKoZe2}lf^dY?M59rOSN2$YO*sU;xV8zr>T9!jtLRhJOX$aHZ#-tKHNMhlPn6Y!eeJB_EkrsTw?XaMn2Om#V54+s>}Fnb}v4Ay@JnE&*L-Hi};-O zG(KxB!{@9A@mcLIe9pTMpW`0G=d$JA-9Eqb6W^yeK1qDO>Jt5gc`s<9_;o0!{my(<_3?%J^HuTn$B!@6pRf7^)r;GI z37-y&+fT-ikFUP{V#UJt$IsvG#YZ#6N@U-}_N&UoUh^OEuGvZ~H@AQ0+wc3*cgXjR zugrJcchdL0?+m@C5GuKo@74e0tBqgfSd;z>=KW5t;TL^>P5<53U30~E?UwFtDt%JF zIBz$e4g3!(|BXGwJU5@&#CcNuD*r)KY?gT0$7%g~zrnv+pXxXJ>l!S6o8RG|VRQLC zexE{i8FZmky^e`7guzM5kM z|LXSmJXP)S*2HH+tWVYW*nX^EP4bP;=EUR2jxokR&OgCF(f^dcjs0o=GyZ4&&-vTg zpZCAuf6?FGKFdGbKgU1U|C;}G94&wIFY+(;FYzz+Z?rG-@6x~Rf5-o>|2-TL@B7#K zKc-Iy@3gP?Z}gwAe&Fw9|IokH|B?S=+IIT)_)GnJ{rmi1_`mdj<^S6MjsK|sTmNzY zcm7lU@BKgce?d0T?3k1K0H} z19^egfwqDB0v!S!1Dyh$16=}L1Kk4M13d%10=)x;fqsDjfkA;Gfsxi>0iGKf7#SE9 z7>zbIFg`Fb@KoUGz%zko1J4DX54;d~G4N90P+ zivvpneeF%HO9RUS%L6L{D+8+ns{?BT>jN7D9|S%OYz=G=>k5S0zU_S36N))e+~Q=_&xAP;A-Gn;Cg@w z4z){zNx|fxBG}HM3gX9wf?UuLObwcYmY@v}#=3*vpg(xk8VqIx>jdisvx3>d#=*OT z&4RhX7Qx~6MYel_t%COk+XmYQI|MrhI|cu+cMf(5J{rsq_6YV076khQ|FriD4hRkk z4haqmjtD*xEDnwdjt}Omo(xvl{}OyEI3+kWSQ30bI3qYSI4d|iI0tQRa9&X2m>*ma zTo_ywTpavI@U7r6>+;|`!FPkJgKL8uf}4UG$L8SH;P&9o;GSS9nhsA$?+xw??hhUa zeifW!H8{QweiNKxFAE+I*0G-qo(@j4mj}-T&jx=+!}U0LG5CA%kKmude+I7y@sDIe z@(>$J38_MwkS@f93?Wk}Eo2GVL(Y&VBu8KF7$+M&9k`k@A)MxiF5W})0ri_krx zR-t=CZA0xt4}>~}Mg<-YJra5}lppF5dMxyKs36oQ)Gst3G$_Q_hK7cRMuv()#i22w z`Sx+4389IhNukN1XF?^R=R+@qUJShydO0*FG&l5G==IRwLW@Fw5B(!F-TGGOe?o7E z-U+=MdN1U5ydPQ{S|7?+Z47-7`Y^OLw2S*Fv?H`Dv?o*=+8f#z`XY2NbSQK4Gm8XNEh&o8iw0X4J~KE2CaU{fq_~jWU{KG;^S3zZobgD;qZ#=bJu-S_^v>v$(LW=bAC!^956KvoF(TuMj5hqJ46-JP z@2lJ?uW4Nq^%CY*TI`BeMZVSF_>T9hlH}IA;`e{xaw;?_JyX9%zT zNX+PrPklGOI^QT~)JBd3;n$d>y4#n8Ij+Rt$da>M(=~SYGADh#LRpu0y zXmg~jRw`$C=u)L-)*|g#^0@?Zjv4=Bt_^F+>BxF=y0ZcJI&v6xKgK$u+Z$qz+bzF|`(4$>sZnTwX{dSO^%-Jh#HzBM|;%JIj1Mv6*bh!W!S^0;RtFdLk*pg zqbq9Yj`5FU{Mi_P5w@Af_^F7Uo7;))CGB0(Jx9(CmYPdW$fRr`@*a@2Vf!QRaA{%5 zVANBL@h4(?M?g0YwNAiTW1yduqh+V$v?(dUwqHc-G%3rT#QaQ0j#==Z3I7@Jp9}xl z@Hvgz%2C^osO=~0m)B9-LTu0D*e^e$zJ|%_y1T|VvqeI?^ZG~E1&+Sz5HS#aV z{H(;d%Mr60W30wp;xTYGfNfciu~wqqEwHc0JZ*x{cKCdZI(FxDV6)^MOSV9F2y<5# z^H2)?5$GGqJF>e_<4M$bjBE#Lyo4GrqsA{We_x}`BzP3^mrm z*mY530ctGGZO4}9bYjbq>pb@5*&LR=in+OtoYGuOOsP)Qq=59^cRCq z1>Xd0Q84VLloWQCLd_PX=u1lBy8(QkB85E$-R2ZMds2~FQV!pJtOiZ1N zUvrq1x^nKk)RnJ>(k7;O&xCxJ7-S>OV25n%2eSt13t z0o#ETKndsp9@qiw0=fa+fu2Aw;2>}aI1C)QH|x7lLDqNkdS`vN09XVp0hR$PfK|X6 zU<0rj*aqwXN`ZaAf!?uR z$5Y;q#!NxXB*aWdObKEJAx2u#3-%Gzz7+Pwu&;!DIqV}C8CJ~sIVo&+xxQo}^&_Kn zm3zuZBbH$|z`jbB!mhxIv4)P#LR*MDy^v=x^7KcZevBO2S~=2^x-&hZ=`!B`Qs37OX+^Y&bx-GbF@SFY#qXlgkG%K=!9 z!EywalewPK5ljfx9-(z5L)wlx>4!N{mo!E05e(54Vp}%K$hItLA!S|3Q%hF1@RaYQ znjO&ehGt(253>vZk!bmAbJIP{H=55ib6($M^^^@|yvR_L<0&hm(k4iwAZbeuKq`PF zXS?UBONQrq%KDLB$xKKisI(gM@}A6qaphReQm~4tn-h%@8eFhhB{W)S)>0o|b7@J4 z_J}=zUM=+2Q(J3zw}W>Fsv-6^(6oo9BQzVSPhV&TLNk5}Hq_&kktzK(m)>h|ex)N}<^YO#y!DmQV?$ zGSGfh(~oNU;btTHG^SPf+2(i-g!LUk8hfvR<7*|?4G%S-5hf~dPsu@m48A0=pU{tUcQEL&k7E$Xcnr##` z($Zq8FQ)p@G-@=?Z*q>PU>!{>A4_W+Pw51@)f4FUPM}c*ln$bFL^zLHc8%#n&tZ8) zl0>Aam64r>A6Z-EvY?bm$&jSw<#YxH&}>6Mf0DGq{s~drY^j>g2-)%hw3^}AXW!F2 zN*U$`(S%;1wgN^6zXFB>?MLN)R31d-K~x?=~$Jdv83ppj6h1p8KSl_h@BnDP2$LM$k{;LDmA|v6a%Dlzu{K z6FH86@`iGTQmm!r4dleLtDMM9soaEGTT#!^avk)IsGJ$5#IqrlzoAi$C~Zt>6FHgd zCRA=t>5r5?Kxr##Z55VrG?cfc^8KKm@*w*#OK2BXTHcP(vLO2iJCXrbiofSGAPcs{RUe zSC}4Bm#SOQ6_jY(Xqsz~i_$ilM>SH#H=0sSnWh!^=a8gWVUL6Q^>y`9Cdt~+DrJ%> zRZyy;R6{98X;VsbC~Zz@3rh1q$vW)Ed=!#%xvUUtFQN5iKQOJZ9t5!;$%=s0p{y@# zgx1G-)t8)gknfTiBz=VIS42VtR`a_k&6H(GTfrWbkt3l$$%A8_9A5)z&VeK+WbEbA zfi&kprY<4}F`2Soa9olrFsWb&ITy-?&cyuOt{L_rxYWW52NSIFuEr=Ne!tFJjvCLY;!TKqL@}uOsgoSGc=m3QA^bAg#JM z981>9@pQ#3U=*^Gm~(RfB#B5&M2cEvvNy49FxJ4b z@ifPHQa>~@8RKjv+~de3RKh($L??;pBoSR+M3*PiBZA)h$T%vISWzd5=p-^1tn@xe z=B5(y6Lpe^F6x&T(dEf95kc>dWc8^;Vnv-KqLV~)c@bTntR*7oeUt1SDv?-GCyD4J zvQDtldnnmMR3d(&P7={Y{qiEZJXvo<(0eOc0hLIssFOr=l87!ZqRYcs@*cdUm_tI> zQ@WATt(5Mh^b<a`PI;?3&KNQhI<=nTPnKP^zNTOR1mI97$51+!(g~D4N$C_ypP{sb(&s2$OzAR8|A*4IDV<2^ zUnqT<(%F=*ru2PE*HF5a(3JZ#U(1xHJV5D#ls-i1!<0Tk>7$h9Q`&>l$0&WA(gI5R zQre%=fs~F2)A`6>MCGDPB9Er>Xey7R@;E9#N#!T0+=j}3qx5Y`-=XwfO5daOeM;9- zx}MUFlzu?zhm>xm^dm}lP`ZoKJ(PYPrlhI^R6amQ|BA|AQTZ^H4^#Olm5)++DV2Yr z^a7>7QhJfn3Q&2n{P1gK^23|Ti1d0y`iCGf^27DNl^+g%D~FU7k=h=YA8vk}=!o7eMqGZ-zFV?7g^v(B{x&RxS2wr56~Cr2lNL900V(Rz+hkqFccUD z3B zm&4S@(p#Tt?aB`GEbs=j?`F!8@e1Bq7(}k9s12`XP}O?IgWqBvj(=BLh}9hTDa^xC z3I3m*gy{-A3VbV(F!|s;fZjkKU=T167y%Rkqk+l5Gr%-pI`D$j&CHheWhP0axVH7h z*5I`QMjVV0hf_*)66O`;UkLQ8BVp!)_XnR0{ycKb0QyVG){{Fg7rifVk#|0@y& zzyrW&;2Ypaxs>UbG$l#O1leL%%Cw_&H>K?fO*YXx|5QrTD78`Qrqn}eZA$A=`X>G> zi!^yLrSDRjrOZ)ElbcYQN@*IUHcD$#>Q?2bq{$vanFq94S}F6Hb~WhR+Se$36Esh^ zUMFQbQ2G$1T`BEBX-nN&9rN_!DNo?P(11^ULRYMlPFby+tdoI00WO{LKJC3vdx9^t z%xoIJfYLW9T}tWOl+Hq42@||a!rTR9VP9ke_W*f7d!P?+|56F#l}eaSz(au4E@66t z-;bkmHTKc_z#3o|up7ulOlR010WRRUdK|m}=m!i2{ss&K-T+{zzXKGZ5(uV+JFAVa(nbiQGeN#Jv%b z$e4v;AK~6=qpVM)FO1nY(ig_;7wHRQ_K)<1F$YBY!k8m561n@r)`4%7t&ovEnXz@$ zLgr?qlk7Kgr{rSDosx^m3$HnOvSN6VJ2n!(9&{z*$v)jE+eIxTz6kN;-mVy&_>%Ps z?^A%o0*8w$sHr9 z>l4s@sEZs+8)cWNh14|;apVqjBDipONyd_vxtInxwzBZ6UouLwTvDbXegRBIX+!kf zXk;Fe;MW3;P-uV_j658Z<&rR&IFGV{hCm~rG0+6K8>kKN9ygN<9s)9OMJd8r;$;e$ zdbk=3d=#{+Xs-{nc+CX495c4s&8}gnq*?C;cX2Kf;Ng@Wzx&X+Cl-$LmN+2ch;sxR3AvL`Uc##uw&-bsVhY zsFhH>*NI9=byB9br#7~R(Apj;Q`b`$JwoexBuq-Cgi&OY5i{XgAC1r~N=a;eYy+VU zDQ!e)V@jJ)dN*hmos$r}GB9cgeStR!^XxEh80L+_ym6Q}3G=(b<%lP>h!V*u=tx#U zB6$UgWELcnTaZY0K_dADiHsmf;uxf6p~`|VFAVcOVcs{)`-OS`Fdq=+1H*h!m=6x~ zAz?l=%!h^f@Gu_{<|D)Wi7+n;^HE`59Ok3Ld`y^+4fAnfK0eGRfXl;sxwgm4G)2qB zF_DYrr8Jk3O1`bt1V{G}T#5dItI}VunyP*oC3b?Dq)Lz;mVvZVU&Og2m+&kPCan{2wVYlJtd3>XaWoeo&b(MCSkq@eg&=rMZF}<1mG#) z5^x<*JuYDkKqsI87zKO`q!eO%f%}1a{jfp-&jGIjOMs2Q3E+F+LVx%Vz#IWC%vm8Y z9(W)46gUVR1$09tj1kBNhK!UjwTdtX&5A<>L}bB17*b$rW`Pj#(V%F zAQN~2m<@~>gZ&1q1hxX_fumz3%t_!kpy_zrWdK`%;t8k;_!Ag45pxGLdJ1fm}S6G;5ab%H3{Pun+hW_!{^IumRr!#{oOw z09=3v@B%>~1E>wu0qz3o0`-6_pb^j#XbW@zeg!T9j{@C*d|)c@EHDjt8JG>s0Tu#p z0t&2WN4sLZ0ly1S0a-ZD(!nJ_Mn2BJN6B@K;e;!OG|XjTo)qS6m?ww1BFt4`t`2i; znCrq^ALd+`^WYe51sSb19k+mL=B*MnQclpEUM*^5Va>$#q9!S<*|Sm9uwjjHv#3c9 zYgTL%HHxsN^-fWv3TtNV7B%XyCbU=7Xv3P~eWFGe)@<7^YV=`^`b$y6g*Dy25;c5S zb8U~PQRBaOk=gL=l0zqF+Co-wgYe(O`f+cEEjtboOPjETrxA32btG9rxN-?x5#~p` z3jI0Z{;-FHzAW4y67D}1?%(sUU{4t!@F61wo;_6Hp|JjomxaFbQGtKoPvEr%3S1HP zYd&7+Yq|)0e38K4oFVYX!uBO!n(1>D5-g;>)HxIG&S zv33=3#?APo4}8V8Labc{T!J%N8@+K>9K=NKF>*YNNUZ5+hDw+u zTwAyYaczOF53c{^xCi+Swr0SqJ+Phvr^aASfzNK_>jJ$kpUe`O)dqA{8_-#8KxZ|Z z&T2ND)oePe*>qO3>8xhcJ(5jhvuSKLjm@U94QXtB+^3LzL}&v_vng#zX(LJ-Q`&^m zyFtlonanUJ@uW{Oc<|2W0Nh9R!z;1@xU1}k*B)NHrYgpqN|?o&xKGM-GfTmj0m~u3 z4ZH)q3%m!s53B{&0~>)4fDeJKz(>FiU>C3l@uk40z+T`pU?23K0|$VwfWyF1=#K%% zffK-Yz)9dVP!5~{egw_}KLO`}pAq*9Z~^!gxR|*(^NY-Dxc17iMT;{($9vO4Z*k^N znO|kT3HxuEM?mGwy|Dk5N#4m`oGF8R4IWD}KZR};v8D(zd57JLx%e&fBX}*%{2xfm zGB;+v3;$0tlbALsVvoFs{{QuMrqNXu*&aWfB-eD?D$*hb6A+Lo z3?hR-LI6V`%reLzGIS#d*eKzNsGvYIg99@ND5K2iVG1)SgS5ui-O@bm-+!Nw)qZ;G zeR;C}d+*w{Ygg5-s&h~6o4X7pT6cm=K@>47!7c=TCwLCN6z|u9Pr$zo?ywOq4cvbA2pxVM=m(`v5=mF2%f%jI|! zR?*`*jny=ok;(xpoyT%F9;#dEmW^x`{oJ)$70fJ?cQd|~*luDbH_e|)`hG#>Q0#8v z?Mvpq8m_sorG9U4Eu}M*(!(X``+`t*&O-AQhNRdkMxQdDyV3V$Kl&TZB8nYW!dSNj zbJ=5>;rigNU=Dk%h?aYTY3#Hj`g7qW(7nL}jO2jLD2m;-Fu0Swk%y!`;rlv_FTcDq zcqo{GEWbDKa*TQF+mH9@Me#XCOjOp4kI}2-wZWtGs&7jCy`^>a_k?zuzsg0d`0?NZ zyzUNug-?B#vV-w1qD=^;Zy9SC`+p^?rX6?^-`bO#k#bGi7d*l|JnD9q>9n&>V!sX_ z8R4?OgU_Pi32UP{Y$f8oI8$?(x1x5M8hu}L9oa=Hp}vICs=cgaQ$*>Mjl$<8tW&YA z(@kn5U1uc4jQ^nV>x?>#atVE3g@$r=wFeaav#h0X$oy&VspQA^dhopM?6mOnwy#yv zn(0jX8ozXRZ(hQOMw%Wj$seaAMevH9=un;tI#XKxYs6G*bVn_CQfQ@Qdx!X6w>~6m z9b|ojeRqStcL&!%HBP^z@6<||rGFw^o}udtl{XQsXEfeug3&~yNk;1%ZD2GR>OX;f zuJ-;D*yr-0vb>1PkGMRE%a^#kiTnPP>rlBK8lP)KD*OKQ8Na?TiYI&_8L&v6=%PKy zsYN+G;e#j*;CUZOeU8-^@LrWmE=}J%`{0){bv0I_2cM&i#2C z`-SqU`oIg1wQ4j%KIFZ>(M=(e3rx;0r9Dj}+MC{$-Rr^U%oBXu=1cOBXC6d1h4@sT zNd@-Fly9^T-$6yu#^(j4ymu)dVqC426)dpaV6M@8qj~5wM$t_nq6H@B7|n-oKxIa-15g=%x_S0+S1E#rhlF6r$BDFgd?;C5Kxp(M=(u1$;*tNyL1*hb(ac`C*qe zP#!ghf1VGP^yD>!e-orIRKaZ#2PZqR}Ly^^G<#nhezm z36^rTS6Lp!!O@>!kVI_otKQmwkVFpZ3eXKfP1?W#6CP zt5w#Uwa?`*im2%O9as-GfQ?`i*bKIStzaAY3~UEGz)tWv z_yX(#yTKl?7wiN3!I$6wI0z1b!{7)w3XXx};4APo@W2Uh5}X33!5L5t&VqB`Jh%WZ zf=l2sxB{+%Z@{;i6)TdPM7Yyi2e+w;ibzCpS{>_Xa4_qlW|brvkN&c`Z&oL9$=hx@KJvZIaBJ7FovnLJI#3ZgU87? zZlV5r`WQ<6xT&lw^ZA*+l9~Ti?m`v16H8)K$X%)u@%R`0ZDmeN7{`6s?C(dekbG+- zes)mbjWLuPPEL?m{uMtPh~E@!e#YlqD`}b z<~WM+uE2jI#y6BW zTw>fmbzojyi6609gRU?B=d!;t@trV>Jx45?vYwC3A>OTMPv0Lgr*-Jh(`FJrPPS$Y z#P=E2tBCm>V4SJL*f)%8G~=4WyyCF`6XP1io+<&2S<|=sbMK|UPQ);uwJ6V=y3tP@ zbAAc?82moU*sft4%{-?vhje06i5O3!{z?2jz&v|tpU_83{4S>MGHVpT?*;shU@ixV z!Fh0jHqWrG8|b$R?G7={IoRE1|1Y4f*OEF26AMrvRsN6Q*S{9|U<2aIF38RB3UGrbMkGt(k) z0jy<~>7B@SfS%72Emq_RD{unzWd|(>9ua8C%)>!{jRv)g$9#f zah)My!}!~uAz{6Y=0nGnY6`;K`%i>@6y`qoL)fQbL>wFgr@(1&27Cjqg}IM>8}?b4 z`{=h}+rvVTH&F_qw289&;2~PO6%K{13v(+TLg!XIZ1jlHqehPzJ#O?Xqn^{su z(Pk54HZi7;F@22bYg?<@rjIq7Sd-&SjSs%Lz5eu+}P|Jn}^1wdd;P=jXBk7Q%#?0b4f)X>7=nnE>saq zGn+K?kQPWcjbf5!_G#uP-7M41GTkiG&1bsVq?=8K*<_eahS_A8O@`TIm`$eHWSUK; z*<_kcrrGeTe)?@l$qa4XGC4v{+v?+{+v?+nzQTFx5(AE=q8(-Y;r@B8=4$%a=gh2CMTF2YjUi~wN0*Va-7L= zCMTMlXmXOtNhT-QN+#G!CfJM;EE4fX6OAT`R<0Rn&X03-YBP-M+^MXSC$94*uD$2; z*is$`SF6}Slq2gb%Hqx7I+?Q9IhDP*ua~{bzCUsK*SVEmCs$>SJOjU)hx{tm>Q7wt zI@R*0bFH#Yv)YTRow(ZRWUF3h`z}{Iop0HR%T8Q+opRafJj_7ni-b>~(52 zPn}rb&Tl6wy|~(mtDR;ozv8mjtb9Aaz4V%=&ZhL@veS9K%hj(=xnEXXqbU3H5Ldm< zt@^Enw=B5USN)62UhC?YwVPD-+l#9#@2b~mL!$zIVGSJcGyoEEQDTCZ`d zthk9M@)SM-Pc&ByIIW?2`nh~A@C4+^2#t(z z+CozTZF%FU7KjY=yrN&CMj3Axcp{K$zecSdNVVUi)}XAnoN7dnH+%3Thz2pBHi!jr zpbiLvx}YA22MHh%B!T*%0Z0Z7L1T~#(m*=M0GXf(eKiGHtVATw?VKxGm265;WuWFh^B33m)9ncMo24ld)CwWT*|03@1fd$|Lum~&x7r|w473=_aKnY)w zz879(bS~xh@v{Id10RA9z>)~^K-H@`Gpg~XS&iRJz~2DxR_BeedZ?G+bv%>c_2QQ+ z3Ep!i1js+qPfsq`vuCVU~~JMs4TsS4V3AY%i*V^t1N{t?`VJQZFKUKcET&UG@pOQ*@F zQ2GZ5u;!7WwH`Afrp$2|1OEOWY09}>^hm=ZsM?mk_Spm z^9Zx~g;Idr&G`C6AHEGt>%tqmcM1Enu9B`G_3uh94U7io!39vK0r?|%t!}I(=nHx_ z;8#7~gfm!Dy9&)(@JTn<>Eq2htGc@MTJ9BQ!7kW^bqjADvv|%sNt>SN^1(&g&V_#o zz6L*m@!ff%CX-7^cAaM4v0_@IY1)JD5Wq;V1}p?CK`|)Lo~{hKg4N&{Xq}_{#_!HD zVs`xnNNcRCrfKY)k& za)QAEa1AVeQ5FlB|EU+r%{+}qzME|6Euu}keDY6d2EpfpjaD;__%`wGJtM2zv}@VV zby|6wu-{5X^GnbhJWO`35$FqE0uu{lRh3mqpj3zFL4OecN8;XJHHY!^6E*z@sML+M zZRJg8Hec{`N#@j425(}W1%DX~2g~^mxv^IrpBV#{hs(jo+XLA_gIJkCuG7W~M>CGn zY%3+=wXOFMBON)IlL3}B;xh@p4&G!4?+;)i*b6E@!@I;#*U9#hXwk@|S>&pkdh_YA z{4mwLhsSJh9kd-;E_MKI!Y#K|f@M4J2cwS?t9D*It*Q=Z6~I)GnZk^)ZSPf~Wy_aX zdn?r-zU{raMn7l#*GCYq#>{*qIna@=)4>~!zYg9a>fBUGOBJV4U8jq;7k{}(oxR#fU8(Ppq0(x`*Tp+Rn|ySwC$Xo0th?cK&=>TFiH8M*q|ygz!w@p6UI z4syC{x)SBL^y!yD54qlB%&31BIbU!NeJ^`*t;v$~CZl-Dl+O|REj7r|UFwWZb?+nVu=4yhH_TW;IG+Y-8#)q3r(6?@&^=L`%XqGENo`}_TJ zUT?q8dCs5bIp;j*%sFSyIoPB(uL_gYe_HA8vG>oGN$DqeGCcpO{S=!v$eZ)JS&|Cq z@M>$-NUGNl_SzGtm6rUIR`UO~R+_(4E2aKMD}DJ4+Il6=tSZt-9|diX=<;iqghrD5 zB}IymGNoLmIYBCsW=NINBB@qdB{fJJr6y^+v_oo>+NA^1Vd-_LOL|{AC4DJL8h?$V ziO|?I@tPz}x+YVTt0~Y-(3EIqXeu>}G_{&lng-2AO_OH3W{0Lt)2=z7IjnhI)1`S| zb4v52M$-Cg6>Ws}F5gMM(Y`ssNz!g*vv!;IF8MLvC$!6SljNs-JA&`>n zUxmES_qE^$eCNq8`o0rfukVph1|JVzuYW*36Z}Q+FZ9dgSAG3LUJv|7*%b1q{?~dR zKXZsRKRANq*jG+jaHgwT@E_XB^gKdPG%dVlCi?Ww?{KGarPC%@%;yY36^<$hlV z#)lsD{W9c3U&-{U&ZJZ;XSBXPaY0|0PMY$9(t=h5edzP4k11$F(C(nULDnF@prt`i z1a$`YAzw)_@BAL~yEXj&@Ed&tbPK~nbq(Qv2zxK= zzrs!$H-`Vwc-%P8{{jDH{$CjHv8*!9F#Uaae)#n8TvMf~JZMgkIjF=mS^MMXf9DeT zsrJr*I|DMcKYo5(0zWQ+AD6(7OW@okkgaVB|9(Dm0~Q1<35eF^h82X}6ZX@v^01j< z_lH%7U8D0iSrxmFSy>vkG;E#kZTdU)+k&ct?$tYklBD{eXusd+rO#ZZ;?Osy-Rn-xG?nZLR)k%>ko%4^ZQ4?3f-LGF+o%HIYGY(b%(}Z>5KYsq-Spt7=dD8MPmg$y% zxBSxbjOACB@!BG-CE|X|Y0J$Ke;<(~-R^s@VTIxs92dM)ze2x3*`}lgPxGDUyIDD@ zJfT$hT7zHl|3XO&KCYZm(zVt4-}&tGdDZVlpL)d{JSO;6pQC&*g|60!QC62Xgwe4ETC)20ar`<>L&GfDHZTFSrOu1HWmnFYUzgoX` zKS`IVtJSsZB>znRz;3#C+}G@H9_^!;;{x*(rxNY|viTbSB*|uuFvpwi=JDnT)9*vy z3N12EG*2<>_1^J*ZXWzuYu;pTro`UQWAgTpr*zeUPs!On<9%$V-^uZ&dAc6oeR5ie zkGwQ+Ovo}{b;z6$AO94;0Qp5ZRL%=2@?0fV^PM60hFmTuNmD~!m7|H?&&-gw?;D?=assrkd4Hw)t}3$^G@XlxaN~Fz~Z0;Mo8Xa3G+} zXSPq3&*6aA1G)m<52)#%@`k{B1MUr&8E`nzTSkNFfN7oSMbjgu7SlVX$4pO|o-qB+ zbjb9$N$sQ$ODB-Y)O|Pxa?}`+wiD)%@VM2kMAocDmiSIKiub@@RetMR(V>O!;&-P=hjPDv%{Mwz2&=pOy9XqR?Eddu@@-i zTFVdn8D+WQl0G+GU|xo|)&>vtbITtrFIfJ|@>fex#PgP`BCd=0Nko3cJrRGj+#j(p zLKpFK&g1_lKY!)li_*pa$+EAHEc?M91{i%VKGyJtkY&kNmYq6TUZj`hhYhm4Bv6(& z5F0Ryym~aCmhMGHhWC?YlT7rN<<*8mB}cV~9z-+t;TYs&+Cy=;6*KS;$F#DXOc`;g zWg2x@jwy66H8jdn0_;dc5|WXMG^8T~qcH}Va3C8w$Ze9Pam4Y+Ljej=M81LYnYFRi3Z9iDf<$o1lW;?BqSphX-G!~Mq>;z;XpQWkc)8`k31Bh5Jhle0w#j; zH&E^>%G;>c!>FzyS^n?8{{Kwf2L6BkH`G?j_VvAO-$PA*U|zgu`=7veSi^R|6pK)c z)wI(pHV}n4(Rht#8(B@eUD4NWr;u;NU8pg}$dUz@v7a(3azcqLR~rs^+IN`RFP!n& zR@Ug<(YHwMY1xwd=v}n^65amQjS2f#p&pyC0c#r*+@-Un{Y{OD^iQULGX0b3mrQpC z-5GRe(4Em#DJ3ypHu*W^=a8R6cMkn1Z>e$rX40!03+Y!#ze4iW^u#7PuGroEytIF{ zO!=tCCTzf3Il&#JmM>GjO!=tC2CSATANANEXULxNWy+T+ANAOT4Kn2~p?uP-Wy(Z7 zHh9wP58{eRPu#zi`Q1vHYlv%z&BSKnD&~C^<<}GIiH*cYVgs?k6O)KZ`*$^hxRqtI zmHMqAt|2xO8;Q-tW?}=efmq*|#`Mw{4#Y-cBe99tM67R2r++%r1#uJ0c@y)xmAI9- zhPZ~p z*F7vzRwiXJ4C`?f%d&~sL~I~7$l31hSEbFe^%fb_BZqqAP!A9{5;w{@?z&x)+p$Yx z8snM9c%}hj1F?a)sxgoJJn9Ex6S0ZdKy2`I7tmcmH{^mQ+5b+yZ|`LO3z`2y$^~%^ zaSd@TaV>EpaU-#r*i5W%ax#51P9#pGy-lR-$&@{rWd&jbu|b|JFH*lR{I6}2!(hHv zMw2|QSVog~kCk!~1n=6epNELl#-qTS!c^jMb4ElqOrt^4<~{PxN@P4WoF8^QR>ZS=eC3EBUS zCOLj~!}93|)1CBZxhTYtI~li-aSPc@n5OY=%9=!3lUR0)=g)W})cGK-iozJW zbBVdd?q(O;znyd?sxTkb#qO~Wuy3f5+{;k6o^=W>TwCadV~fP{OJMndHrPNLY+xQ5 zXbTP0r$H`s@9SV6gJt_AcQkxRx40$uSRCC?xnU{pedP>;Wz!i3K64o6XDnAE%fa{) zrj^FDKs#=b$FP2LSid>$mdBV5nqQUNrLR&Kd9>R>UA1s6R@+}1>pG2Pz&fxOv+q&& z4cYEx_fZbU{){@zMk{5vO8eWGmp0~Q4{;B%jqS9J?Q{=u53!ATY-1kx5cd$?EJKrj^ zUyGuhMKH}U+KJyyZr4J|-Te&9)&CmMp8eJKOgl8t-$a`VqfO*dW**VAEzp+2XiLTv z)&p(Za1(9nCdRp);cutDcTj)Yra$wc3b}@9V1ydkhOEqoLOCY36$Lh?6M-m1A_fVt z!^E@|*0&!FP`8~V@@;of_6{zCyE=TwwnK~Geh6uK& zFzOtENZ1gCI3&OyX)vnG0t$7CB-#+cG73Q$WhAQQ+)WyWdnlLk{g{7+Wfy`Gh{1SF z!5l0?4g9WU{1k>`{`{CH<4sJ5eS#m;FtS`{G0f~@wf(xg+5VbUF4Bk+wDaY}jkNK9 zW!qW8uuBm|ePZt7dp$joWkno~@iykw#(dhCr&NxA$)im~aEuTMGi4VtZUoUuEI|QE zi-p!|6nZGISQ*xaD8wKR@koFjiAX{+vIE&i1qy8{<3oW3R>VSUA|Kiim>J%mZqj!8 zrKB1YS?AO-6M2|mW7&xe`eh*(`Ea5bWvPsx#&pt&Ma4p&PI<7vidfi@f(&FK7x{3a z7-gtH6&5p{)tm#YLOnKNE1t$0G-3mGV=XqK0o(et5ue4LzV7A36@BUL#DUat_72MP z_HQTOh5hKj0USaTn&BPJ8($)?voHTJ@fFndbsr(_LTjJR#Mj^*SB>8KtI<3E50j?; z?kM8xeZ!n@oW6XCe`if=;PBpZ-eeeWzFM9)-2P2? z3Q&Xzd~cSp?UgjilZh&|t&cFW45Gi(`=7_mDFL}4ui%MqZEz1ZluQDqS0)V{Yo~={v{h_L&+nusbrh1&>ewD zSn0M=zZlYS!~~)piAbVfGI^st_1G*s$Q#Er#uM|HUIDR?ZfA+RRHJc6h2UNG1Jp@N zol5`8cV>u&Ix|21Fu()_5r~8p>b%Dw4(hpq9f?RnGDerAP`2zbjyN89C_o`7KZ^3Z zgEelgff%H5JJfmi(I}Lwc;<0Db!3^8hLD#>UUG?htdEB8HO9|i9?e8E^Akc0p*x+J zPMk=bNNgfD5nG9^#K(z`6L%4J5!;FF#13Kyv6I+IIWZUwwf<2hk5U(f`4`st#wK|R zc~i)9Fnk(mRVL{iWFxo4?TXX5T~|?0+f=tBPV(!V0ub zb!+Vme>JY9-|GzL2O~^SFaq(gBYEnh2_iRGs^$|jh=Q0!e3zI@ z9C@`Q@`+hQC$aQuwvkbqj;S$BZx`cHj$JK>7)#6|TK2LGAEsUpPZip`jdBk@;e&S2Smxzan zhlzWLdx%GfM~JTxUnBm7b|0^CYvVOd@&xiGkXKGDC)N^ciA#t}h@Hev;(Vftaa}R2 zOE_YgMy!V8Me+?y^D4U4?aH5Se}g56Uc`HS~bmf=CIR$ z4gJ?lb!)F>Ty@(^q8}XBF&rF;M7U6=M)K;eW4s8)i6b`MBBm14 zkd6$D#u#M6LH}%G4stP$?(xJt6rd1AWoq5jf3*8D_EQ1015DJhpF$Z7YM$B;1{h(2 zf)Iqkj0lWCB&@I@3NeU7JQ83>B9f4bG^8T~qcH}Va3C8w$i+B}M;;1Lh@vvLW0Zz{ zDCtzS&T{YE{PnLwe>caS>@VcHKsC?1kN6>?OOEMw$vK#T)p#78IEApIE;$Vo`qU7+ zj;i%!SqHde-(xIq;$HF_k1~$|-g#j8lb?3fJJ08fth@VIhcLhh6BL9X3}!^!mne@Q zsv=2SiPrmUvW=*ULJZw;#5iI+QI!BY5|MP@;5xW{f5NtYJ=;9$e!{v6qdl1e1`l_k zZtwgKj>5iya|l?}_1wsH*d{FJTqlIK5T+A$+Ca+Po@=p#$30&+^Q2Szsr8|4GM#dr zuzp$2GK4=2P!Ixh`N23J){~WVJQ83>268bDMQ~ycDzO5quoe$vGn%js+sj3Yt6XG2 z|7E#QVEM9Ktqg{A_{4U!Fc3hG{&F+naIWjOvGeN zK?zDxjv1JRD$GYU7NG`9uoShZ!)mNSJvLwyn$b$Vcd$-iffaV7K>IZ7>1l>(!?V~! z-d^%x*-LjjoI_fkjOpVc1UMVd5+FSG!+_qugD(o8|K+%WStsXx}EU zi~ijV+fDiyj^lmuJ|OP{(x>nVK4aQy_ZRg0lK6GGTf3KO`Rj%9wx?aGZR>phM8^5I z9YubpT#--qPeWv#JFL*orrhP_!)-r8+dv%~8RzkGxzY~@n4h=HMfml4p*84*9@=yr z*A#SIQ_yiufo&79>9n^QI-!jS5PB%EM0oZw>bwcP?{t^El{V-%oq3-wS3)+zFr8~3 z)4BFBT_~`c$W!RAkRL)m6j%`pdkFo*rgQyP34`Vl8$Jem_*(GP96w9#<2mY+igXfr+^K$RM!QI|`?|xKRm>&yu z)>0pB9Lo_3EU+RLDbN1gsBMbwps)KIE zw?JVU3e&ZyNL$IXs^x@{k689?cBH^cyN!kRFZ4$&!&w<87J79Xva+mW5Qli!k%%ND zBORkL2ARmlc;ulFMVO2!C_yR8P>vbMfele`AOTKHz(nL?98!^n0%Tw|=AaT)n2%~K zLJgK+DQYomx_8}NY8>|VqpzbK!U8K|VMhuwkcC|2!&yh2mSY80VfFORt_tbfkSm!^ zCDW-~O$m4#woT(+_H&JU+N~P*zKt4p^a|278n;h5@z4!8_ zoh~I$*bF_QA-YF=eNB&;Rnj9ISM-QyGke5KDLrE8Lp@^o!XB}AU61gu=@B0=T)lsf zXbSET_FwggM7(3}5lO`H44+I)#Y=jI9p57|ih4x+y**+!YS4)z>&d5_?D8Iw#<2eL zdPF+$_!9Doqp@UVk1+g0j~GKb6AqaEm1&_Ct<62+(5fEs@WVZ#OzshH>UzX>>a{JP zN4$+TV~?0f9TP)(#3yK_j!P^(!uQG^5rO$v^$6S5)a&Y=P8;j*e}Unyv(8NF`@h6+ z>fBjEeScuXsi$|C&RXjGzd(O|nyAnJ0^a&uYV2&M{y(rwt@HoX@X~ku=aMTq=Z)Ze zxe5N9Bl~dBt#hoNO zMIBtwwv&bnKC`sq4yRERVUm+;DQR4zNk;}oV+=CkKyH8y91mkW@=$<66a|P#d_K#6{x{wG>2?md&bEQ>O=!keY{o`3q6z*mA!NSW zQO+@=ne+%)5j9_J>zuogPCz1(=eu3%aA~A7=8G3u4zJ)1bm2Xm?5q3dr2hi>9-}ZK z6eI5O9M_7Gq~q^ld1tfib1(rDF*!h7N53@Oglu(~Ddd+7dEJe9T0mRDc07(JumijB zGmM+Xkz5MEmF&2sFd`!HU?5xj=i@h0BJJLp0;j^Q}o#|QXmflDs` z*d?z*`WG&FB9?sNIq%&j^_~w8j`B%Q*_;=$ev>gyNBiVhem3(y2bI`Bck2RmI^KPd zh>alMkKrR3-bBnM=IA*0mpO-)x$lDW6Q#esc;`=z>NJMie!b-lj-1<8i+XFdXtY*y z9$L*c*J`1Ssup@Eu)vB~q%hoiI7!>pZe$@B`N)W>?p(qyDtF z4(dE`okJE=CK$zin2mX;!GlwQvKe3fzAHy#E7VUTeo%lW8o^aNA znaHgQ5czPT7-gtH6&66{q zOHqqvhTDoKu){!k{%)5K_u2U}AG^p?eAsslc|UdUz0aE%W;32OxTAPlZ(0)L?J@8> zANRS9BJHBze9EcDeuG=9UK5|gHsnv;It+v7NA13p^~Sx?q1<ZkX(}k)2g4boly87v&_Tp{OTerbc zo!1V*@7P+`RDRE!%J%_rHgPtwnpi#caen7lFgU7tE?L{HPQ&|;Yc&QNzu(*B9DX;w zMq}fC0EOTEZT#-9@VkG9Cia_sqwLGI(5|W8aldQiJCJSUT(m{@pH|q=$aWD$^e3jG z!?TTWEhQWlT!zbW1+K(ML?f2{ZZP{@Md&ujUHVujaZPFK9$K=}1H)0i%$Pn~{S%P=rY+#Y|NGYOYI; z`dGYG9U!`^J;x5B<0id$8H-c(qBd1OxLz0PR@arce`oCi+V8g~vUbfC`Plx{T=C>n zbG_5OPA~Y)Z20fHznJ$q-)UzXTqm_#{DNV&;<3+%^*uM#G%l7W zb}{|mUU>SQnKfL0`2G#9n|SyOqj&_(_&4mpGuR6^Uc#$*6Yt{v^Te0GGKwQ#owdxw zTVI{^9shl=(}B|)JYPR#w-_-xP>e)8t{WZrZR;Y^82=_@<8~C{UX);Z?{qtxXd}a* z)xEP7gJI>M%p)4>xac8JF7K+0Jqq#5)bXXD<3Z zbfJ2Br*pBWPUB+3{7?12Q2mF~@4MD(IAvUDm{GFiXP0d{?mO3y;+a@G_W{TA{Ou^7 zg|*2}j(;W?+%3N6UB2qQ%IZIv`<4g)Q-4=d{|(u%%hQW{5`87^g^_I>YukDLRh7c= zWD3WVcAihQ^K7bJE;QKXBI=Td0yvP3F@{8*3r^%&U>nDyi982Pnz)=}(>l*SF_GtM z6M2R>k!Oe#dA4`(@^;y|heLrazV~{Pt^T+=j4P4*Ic!Meo(>xlxv#^9MDFddA(8t# zY;)eXaeqh>_lLwI0yZRZuSh&1U_%o3jl?4YHjLu;{5Xu_K9V@3@Y}u}R>Z;`^$7QA zY~r2`Vkx2;=~nY5(%snq+m5;fxo@$AbNv$Ty(PY0;*O5dhzV~S#ZOU=pJ6^8c$?qo zni-~P1=kzPUy`9`YN!}ABgO`umEi4N61I*?e9oos<7qD3oRy9vebKa8& zg}sX7(gO842!?|K3sUHp@y#**kk=S!H)`8Chgx5i+VAn+ZN7heHP73Bh^XEte@=gI z84Rz;8O1z1>3Po5UCOgp&G*wbt0bO@OH!YyWc)N6&*TutAd~xQvM`o(Ht`l4&&}|A z=^b?Esn5|7Co4P$M6}bkuT^;Fhjc3EmRat)UrVHO>7VazJ|KnhT#CE(TWKEHRK z&0EjG)9m{`xI#3}2o^19MLoyx>(Pi7v|=aPs)zMmDPpHA5O$o#nJJ!YO#|2S;5rQM z{;t=P#NvHRWZAt$XkS<&^iW<{B3HVX^tauCZE@gw^Dcii@;xb{X9kM|j6w_NF|F8% zHavgRdCzCWJ(HG*DYy@_F%LC(5UcR>NlOOL^T2Mgfnk1ut#}N(@LROw1$5%~-%LYv ze`WM6U)q?6HM4DB&V3NDz=~Mdk%A0lAs6{@q8MeUKou6F7AsMY^=L#3TCwx;>HW)+ zW#z5Au=d__B=jH86$&h{e(X8l60xN1y=m|8-Y8N&o~usJd%aU+Fl;XJ;p`i~m~M{vW646H}EU&`@@K@dyOVeK`olU?%!@b+w^|&j(^?1owLn9 zB@}{)jT4{*E}jG5bZTQ$3sj)a?Lh5m6(R~8t$3K zXpBK79OP#shjcD+9OI5>I(aCl;n8LCi^y{lCtxBbV+wiYHBHp1i8{HXmPzh9bYmL! zp}C!Bf!h1qig!LP7Tu0yey175?=+|*txfL#t{ph8yDm-RlH-oK_x(g8^eOiV1r}Hl z3p-Mffh^=AA5Ijb3>B!tV$@aiY;XhCbreO!y@_pT*>5xKRh3(%(p*CPH}YCprf@vQFi(*G zB*W~)Q>5XTM0^^*VR)3bF-|e*-!jba=>Ht!!!eb7G(W>ItovqkXOg~+ym9oqlUT%f zPTa$|(;06j<5d!?DEnW)JvDXB47UTj817m6?IAL)QVr8X)N=Zvdll3E2gX^$IB?8j zSUBbp;rJWdaf1+#6Kd!0_uR|6vW+sVlffjisoq@UGY4ey?$lAIE9+o_o8z z;|`AeK3UOwKeKvYvwBZ+6u%So>XfRvU+DXz?w3X7uRYiI)cdGK3&)JD2wxZ=A`y** zg#l`P)Ow1qH%=Em|2kb55R3?1i8x$~RNM#$ZbJd?!4%wwRronJ;1}46$FK{(#Zi2K zkN>s*+OB78E!{A+eszqD$K_s z)L;o}XSlV3{&l36Gpw3kL3$NdV-4!jgl2x1iu#!6kw|YwD>7#CyFJDr6Aok}2e}wG zQ>`!8*GcE00EH-m6BGLSPxeH0SoI&*+38n`GL-lC>n(oP^P>3QpF#(hN`cIkVcJ1?g-%<7~cb%&*ZDW`y&oJtA)be|$S4Mt0GTHAq zkc}MVVjRXJ4+Wlm66KOEf)f)k5tA{cuYU>Y*?s9!(q$;e49x1^ul3IV9P%nrh4k61 z1B}KPWWs@LB)WRDWpqLhH}jC{x{{%A+P%WgOW)S zN8+o+Tj<6qoW>dGuC5j)L?Rjq7=?7)j2zs7NhrlkEWMiFv-w@+A<}EG4x6y$>gt1; zu^RCt(H5r>&k?1oGzYt`(g^L%3xpmDEU+T>X6`3Yx09>|Hpuc=+(P;m;;qD6iMJ7N zTOhQzGd>hpZeO6z?KIU=-9LDfg(&oDQ2P) z3$YXrVGY({6B2Zuc^Ft1p~P?v1GS|AVkPQJ13GKD*LRp?`C9HbxR!ejuH#+wEOgTZOh^%%d&p%M$BZ{-|`@9RdKVLET!q<6`!ea8#hPkBD?Q*rv6bNk`$|AoSI zb$s_Pr3@3XoA1jLD0-6L22qNcsKi1n#Y0&0Wbb^fdveJ68E*N5=iA%enaQ!wMX1Ay zGyEo~<2OMQ!V!sRB=r79C`OS^?@QlIItO>42$OpA)oseNeU_595KHmiZ{~`V`207_ zXEy!4_wleDuOWXO^iOk+jGe5LHjHBVrQ_y>0hcoWB4=TMXI}15kH1o)8^LO)w0*e|u=6lv<#bKh_j=g%9nT>I|wmv`66JH{&PNS4|_)U9P z#}V~^WdHNWxi_8&uf*8^pfAJ(5wUFkL>4)I8U9f?RnGE$L- zbYytOJ-2*+jtdPi!UP2&2tx!S`;IfMq-}`m>y9BEhj=8wjzlCO8L3D^21a9yXS{RE z_v5(G9|jmHh(kOQU`Ha7kc?EMAsrc%t#1F{%zy8^`BhRr3@}1L z2*MCi**i=mX)A1f-BF}t5Qlgqz>Y*DAsMMiLpm}ry7KJhAM%NM-{L{ZrV&bf^}#Np zmDoN~BkaVcD2>P<)<$bYF30HkaME4EZ+2y*D^QD-sKs}O{;(PSe+)f+E#D61am9OXC zHU$<~5eqv~kbx}ZA|Fl^qYM?O!eZ27CF-#rjcD06*X`=ih*qMOd**hM*M{e}@xA;_ z+wW{*zW>I~D!+^J|Hg*e{)NJ^wgpzi!j2SVAa_^)F@bQ>UHnb=#g5~L>|e|A-*+G? zIaXeXrFaNyunwEB1>2vQd$8#yWc{`{6i z(P!*0P>PwT#6m2^L!Wu(L#!da4x6y$v$N-a`)6}IYbpN%)Oi(m$Xs{8Of1AhScfgx zjwi7j&tbpZ_bkT6_u&JVqq-gNUG_6IkMF*p@!ba_Oi&Qw>E|7X??Up-i16eelnne1 z9Z9zpQGF?;SbT3^8!+=c$*PZKc@o#jiWi8qI~RyT%z^dp1@5D>w7vCk zdcJ#ku7~aSINL82SYSo$ahB8jN zIH7N5ny|o%SlE$*3}hh}`OR!QTT-`uamTw{e|fieUq6X->ARkGs&02;Cf)k3 zv-U&kI0OH&FXKFT1QwyD|6F>w-)mg|XS^v`705mdehT|e7{H${kWEk&(V@O~YYqKZ zF>Fl#^|yg_8JHe!`7ZgTk6rRf_AwEhPy53U6A|aR);DmPL#4%*EgYlZNkk$V2^fWR z+>9LD0cR@Lf){-vc5mrlro*l0P-UxmVkh_EwBdPl;AI@aTj<6KoWg0Gf$kHozakRR zNWds$(XSr0Fn!WrKbO3Ted`{)^U2^ki1bh99_+G62ixt^!KN(fV69U+SW>}v$?__$ z*97wZIj(mx?{lh0Wv2W<~Z2fOMizmc+A zrGvJ%-g^b*@quc6U2+X&HexTj;QRT(E_eUEF_*gh-E||i?&fHor}djh+n?9j&i?#+ zcChJcjyZ4Eh&9vaiFMQG9qhVWBeoEw*_wm4I*x_Oe{T9b?t}SU>{sKg&&7+==M7#z z-*>log>v73c7l3eE7!ME13ELA|6$_3oX@#02cLY-F$?Q6LEl-z_}_t89I`;vVkPRa z9*t;0D|Uu(%n=4N#}E`U<%&L?D^n=m32BM|-(?=eC&5};S#A9V5O40yi)_t+(1 zJm#PQyT0O>lIJE%0^N=*w%gJ`cbyu`c;8WGpimrv9S_P<$CjITuJ9)ECo|lC(DvI6 z!r}-NR!3lG?L3bE|F(F?L63L&D?HQ6u`~BUMCds_HHhRfERTuI$8PG$ZN}Uq&$VPY zkc}MVVjRXJ4+UU;wd%4gBwYk2CSW2aV+u-;!17v7Su3zguRc#J^k4IPCM>Wb7Ivf{ z16jyLKAb2<87feP#i+$f)MGsw(Sla&L>sitT(fG{d*@w^{H8#iI&m0J<6*uhw^Fxl zdUvT0_XfhDJ|nx9ev7ahZKy*6%k3rNas%(fW4tKl?Eu}GjPKC9W7KDFvq|S57vnG< zc_{GAJMDz$3UZLkGYI3LF4HKc8^bddYxRlzZ7=Q(=lO-AQihp_TIgq7zZtgIs|>xgMn-crLaWhnu6Bq9mPNJSdb zk%7?|gG@M(jU41|-< zkf+vX3ER#FVgqLB73!`~cN@=WC_JMlBs^(_tEQMjOv~C@dr19Vm0YQ{7oIoBinDo-8M@zU@dv5|WXMG^8T~ zqftnkDS{IdP|CX%yQXqZOga+&v>7YWk7&m>#@UWm%!ie>X+s#pOvDWGmLQ%y1H;#m z7eo3>^1jAja0XhwXOie&Px^5fN!Jif7rnPkZI2iG$NMIj))ANyff0zrYj_=R!U`MS zMigT34!Y2dV>piY@c}-7LMB0)c_XPXZ@a}!0KhZ!m z5KTlAQ6VZd8@aF9UHU6+gB-?v&aK*wvYGBDi4isK?w#b1sByb?5hH83AC-J7!|f*8 z=zfO$s2X=v8!?9QeoKsFnz=O%+`G)5bfTO*%E==Z5DSQfHI3NFea!#DeasuVk9i~a zF>mBPX4)=s3imUYpp@~;!2Q>CTWRYd^rud)H?(f;n_9O6b#JmiPhxq@U>`jz(5-dw z_kEty+T>^TP3-%5_q2igs12Lhm+-!7c{9_quuLp04-3n}!g8>%3@p^oLfy>N%fda| zyuUB-QHFbz;T~nUM;Y!>hU0zN+>;$fG$Vq#j-We|v=uheQHZJOv~lm_Fo@GXe?XkT z8JvQy;Q?VnI3f{^1dKvDZblCD46DEbE9{7cUVTr9S>M@C`NPCMoO=|uA^&vDOnLq9v(*>peGf4@KO7WE$HH2yZ!Pgt%@_abEZ z2DZ%%woxN-G;s_v;lM21NdCo_58tPp=N6&}PE5c=@EDam1^gKcxfEr}zpWneH5Tj=dRmG8-`<}mhVvdB`oAUzYBRsFX_mI zLZ7sd_x `GAFk%O2P*Zts0Rk~fcM0@*HS>xMgDon3rqe+S~_CeHWq7P@f)r*Il) zpyRrO3E?QhB$Q$%Dv__QN1kicGpwHTIt2^Kf9{)W6yA9oDvBel&y`H09(Jaqo67x# zm^t;FbFHDq|1S6LdB$yG`CTHB#eI`{+VO*@s>PSM;p1wNiCd9}yD=H}oURsAa35x4 z9%}F)R^jKTd52OQ_n;(TH`-uhdyg9S@5-_~g5#51zS9hh8-g&H5rGkyi~=l0HVUy8 zC8(YuCh1w;7=?7)j2z6wPX7hs2(plid^qtIbo7rzG)~Zc3YDZ+vTW*M<@fQ}n6u6` zhFX8TkDBvmSYSmg>_|ZdvXF~>I8lr;RGKTP1>5oD z%wX@hLq(Cr^m368CyG&~My6keif`^!9cui}On&n|4^hGRRj@L>SlE$*jB}?scs}Sp z=bb&BC6qOYu)N9dE{KI4Dab$;a*+=wic$7v|8-68ybO2wi*%Od&3KFX>BedHdkc8q z-5vZcdV=m#sAAq0qxRhS^OiR_4!8XCEuZ0zKe$|Rn);r(wD$xJo`%}pY5N(+zkho| z$9wus>ifL&rm;_i6H`!%a?HXURG}I*Sc*EVz-p|;21H>DCZZmjuo+F*if!1ApKv`R zgV>5Euw$CgU%~zl7FZDrJ5rE=EaV~|P86dI6{x~u)M6#-u^x?RK`VBm4bP+FivI6Z zp{4!lZ~D&HPX}Ln9cmq)FHcmcb=b@^->|@nSlE$*3}hh}`Ea5bWvD=P~#ZGmUhYj|dT3D2xUfdy8?!oK9JXU4@! zb-QL>Yq1jbSdT`$wS(g>oWLoZMl9?&1Km#Y&;R`Tcm3^@^FZ1kEU+RLcBCK!S;$2` zoG3;aDo};RsKrXuV?7$tf-}sYZp;P0hlT#noS(u1D`H_s3Nny|T;#)vVw9l*RalH# ztVBK5qY*7=#ZI*S`GKL@Ajd$ok5ZJO{G588Z=Xs2NJJx+ZJcweW^BbaY)2~|#}n9r zU3eP1(S~QS2YVHvKS29|1y;nujud1d3%SUL6U8V)1*)(ZwOEOItVbhS(2AXC!}I9C z%Q$kNcl*%J(06um?R|j3%Sq@CEfFS!BNEX_z$m0cKcjyeYCdK-G+3x-Gcutg;p6 zKa*!aFM{!gdq!9TVzS0u@Dy!-C6jIj+E! z7>Vd8%66CD%DY^0c}^Ry+jvfU9No9m4aaz{ccAVLp5e~t9h)-m5isz+&H(_!Xq8%y1e z!iQm6FqYwtVj06lGt53rqkcyN>2D$(M7~13xen++6y-$aG2Oe!yN7ZnQqE+ikEkic zDZBtu3RMkUe(teM%ZF+0!!o8fHkj@Zy0I*j?l8K;>BcfM-4?nd=*F_ks1M_`FwQiF zk7oFzXknab3?I$#N72GK(-=Nl9Ud(s=)RopNV?H-1>IJNM49jdyp?XF2_c`g@-7Y0BA2 zIY>kj-O0pMq>)ZX2IdV_z)u5J&k}k(a={UBfVT zhPjsRM25kB#@otx%NehXak3dFhH-ou=NQTuZ$IO0WxVB#SH?Km*U^vs>G6^~=W5Sy z_#OQ9x{hgDsiQ?BbsY7RI`*k)U#Vj(-Mn+Q!-wu^{DwKrpKb%g=%tQm_?YO{5y@Xh z_depZ0QxbF7KR%eNFLp64;|4y45Q|&!;`m+?iRJb+Rw-|)&6S4$V}w$d+BXb$AeDV zA#GdTuC#X(C$J4nqP@~4yNl^ZyYzX6JhguT5!yTHk2<)ZEuWP z=d^*}u~t#uM&cTNgKE=vHgW8K0eqkG{nCoZ@dVea8UFiJ%Qf1+A&v)_k6n84K&MgE zbs9S}DZdZL2=v>HHav?x*o$_!upb>bfJ1l*oj8nFa0IX6b-anU@earMlyN>?bNK#0 zn=E%RUbnteV!Xc*Sw2RY$MHTsz(+WVQ}_g*;S0U^_ZN)fHT)-z;X{0aub@4^{R~iG zffcc^BLx`;jGgVw>jm)pALV?Fzu*kC{6^*rKlsA{BTP^bf-nQ$3&Z*z9ZuWz-gD5| zMO*)#b+jn#r`UJx!?GauN5SlOh|`GC#IZ{My-fqZ=e+5TEw@S?Q*XZDFy3K@itbY0 z;S%)#?_xnzEfIAUyq9G*?{T@GbR~$T{Jo~`1q}1|D{&jOmtNnQ=O&#x}X?~Dc zN?sYm-N*Y}7_OP&TnyJuzo>`k&L*ABJ1I(8Pi2PlZU-e7*hVg)AJ+{iXEx@b(lB`6 z!o5LU!$JnKkc)gcQH(NFpbCpo+xwobp_b)$$-C6+KC--qdsQ1?Kj$903)MsD)%#6h zffcc^BL!85`|o!>-!z2&KX|qk7FdyjEMy=T`G|!b&i~*Z+E?)h?x%f&=VMV!Ic2CQ zy`*}duRfQW&$&bYxuV$3^}pw^A1~q+yn!yfhm-jH?CY(fin=f6KHU=T)BRR>w_wRP zE~Wm$GW_e1=bNt3Z{hqF7FZDrJ5rE=EaV~|P86dI6{x~u)NVQJddlFk#PeKV>A=f4 za(11?r1u{XrLge3locZv1&C1}83#|}eBGC_oro-cgU&@hoG6BV0rL+FtcZmjDab$; za*+=wicy9NRADh{u@d!Ik4Chh6+6*}=h1?;GwPEZd750~?Q~QnL*i!vl3BLWy$=wn~el&kmZ=~nFHf}BHv2Yof z9!lw7H0<=x&gN{^C8 z6ddF`=wJFS^K*>9QKG)%&sL&F?$wyiy&KcHZ(}<5Z18TawY*yk*CG|Oc{kQP)Zjt1 z;{|l$_oz)bij}CxdNiU1t=Ne+JfGgbo(8vL(Lw*0aRhIn8z*oIr*Q_l8;rt)a6}>+ z2^fWR+>9LDfg(&o=?%=|jkpOnBMW133vR`2xSeCNJ2)o0gLmgnDCVAoV(ynA&LD=| zz_HT}?$UiM!+pFzHUbx0oJe^SDcg1z>yPm! ztM$Bvdfw6`89K>IItrTF-Sr(Qen>LSd%)Kp&$fSHGMB>gux#M7-3RP63U&tyE)_r?#am_X4x3W zeRQVe9y?2Vlyf_GbBZLiB}TW;JhsPq(q=g_Md<17PLcR~RA~&8?nQU{{#~-#ozW+g zyiB2#80pS-JDMe7Dd8B~)1CV`=YZso_Y$%6vzMH=T@G%i=j-MDE{Vk928uRQT#pZI4HOriTpiloBB7c>-Mt0+^Z4!%$F0zC_@FRuo$&i ziF&L@BU;dkooM@}KHmBIHnC%>UFyh!1|#i~oxjg*MaPx|sbgva?-f5zosaWA?PoL{ z?=qhvQEkt&X~U?&lG)yJhx zv>_)d;t0#`Ep+1qPT{m#pS6MF%+Sk}I`WQ&2rS16&$}Mf`V6=Hq3S*`Pv&|e!r{3- zJuoeF>ffiUsbo20DQZ#YdEdgp%n<2dQz+|Wji+0d>*?2kwb)SUcDXgebGb)0RkD6C0?V<&Qt}ibyBlS4hC9 zbLW@+CS}+Vg&4#kUJ>aGf3v!L8v;enx#M}47xm|S!olClo6fz8Ii$xS4~6_)JT=cr zdLpKvl;LKOS5A5s=Aa7I^AB!2ARXNH66IqJ6` zOSnfw;eL??L@oD`RG}7a$SCHwITWJ|S;&VI?{R-gMe%~+t|w8&IE$e$-Fg&qZ^FGu z;hvQ$tVAPT#%Y8z{b-Cr4mM#owA9stSacO|FOD-%*h%kXoNVS{J!Lea1tm;>I_BVZ z`qh%R67?#E@5U1PEyHU3GdALv*oI%@Y5Wc@9K>P#0q@{X_z0ikYxqns3Il=>fh!S* zYmtf@;lOPuz&#U;{4GkpD+R|FE=i<#zUwCQ_lk{=$j%ax)z_U{Vr=Bv=>D~h36F9e z6^SCh#K`w$GHF#R#}U^P9pvTkzWe)lo&g3J?;|fmIQbslSH}-c$tB!>UBYoi$xhNX zxti|?zDvtcfhtd#NsOaPR>#F?v6z0>{*vzwrqeQub{2BISV?+p4#&V;Lq0ZEa_`G# zUh+7Wy@fP!Y!UGu$$gY=AFeC6Fl-BX(?~Dl`f~GFro&g5JOi^7=7D1$mHM}^W|KDu zm5O_xLlX6rzy93sd$tL-v2v7Q2FF^nIM#v!3#^EpWpqcSvW!!?7RoiRZ^7NnxFwAH zJ#crcb-AA7$?GMtw8AJJ!Wyi@CTziWJc-?S4*T&UUcnpa!h1N0&+!+?v-!K22*n7D zL_DrT8g4>1Zbu>RMG2;34i;bumSHvi85{9SY{RedG=2vc4&pHWFq>sRhh<-BbT>0k z`bw66C3#ik&FA<}&6`gi>8Lc0>qy7Kj+FTfSB?L}+}*%eRo9OL9~Un&{*xvVTS)ge z2ctD_G#MdH#BCrgLLj7t$PC6pbVN827$S}VVuVC0NHlFQ9}o$}2gFA>gH2IcN@kjs zFfy|TvnT5pW&iit7$FMIUl_sb{rY^L&iDI05BHqA-Q9DR*>B6W3BTuao#j@_lS~RR zGRPsHLPoAky3Ok(%{Zq-J52Dm^v%b%?-fiqC7LXqN)P2R`LqeC(O&Ys#Vj#SAF|c; zRW?w&f@aClVakU~j}S*OnsA(H#z}7OFYGI<|4)q*&M%zjChO_D0L`!8+pOoYUY{e4 zv&njIust`}o*Qh>O}6LVw!!~(yS?9WHrQ|L?6(c}+Xnk>gZ&nszus&Aw2reO+C|$g z6I!pkPwsgo@?^VTM4n7%Fr_TwHXi4fB)%GXuXe5dAHH9Xw7rhB9_#GiaJz1B3~q4z zZF2nG>iDX0{B3aj9qBm#PmOb=En9a$92~8 zja+ZLi#@~`ak9UX>TfIR*PiKjSS%RWuD&OAeZ3FO@jjHgF!u9)lsXDNt*(E|@4*WC zE2Ct9-$Btdprt(hGc9qg^Xcg~d4HRm5Dd7I(+A_78B~U+uae-SabkXHe~2PckXQ$RJJ*x#UyGNQx+?l&|}o zb2&G1Gq!d5C7fVO%lVxIoxI$Sq zwXA0oTi8kiyLgV5XyP^A;4i$ziMDlTK0*(Ak`?YR`=`$S*&+W_m_JMYtb|~<{EOlK z8)W|t@)@-EE+2sUi17-jGEUu~gy6KAq@XXKA&<{8qQ*S(w4;i;yrX_5f3(l*-%YK7PgT`78gVqiy*iy74i3)g&G3&u{;o{#viCA7l)k zT$dC)%L}~BFZeBgVm~L`krezty4>-O-%T8gc?BQUciJ7!Wp^euCitxXIEzN_O=?Ut zkN*PxuEgJ)n9Fe#Jhaa_pC|Y}&+}7$&ad|+HBKn2lye!w1(a|x)0xFQ7O|A;SO zaTlBG-t+Hqj`p`Y$D*#Sf49@tc8C8h)qgyn_piSvYyG>j|7d(4e=GBW{4Gw6^*^4r z8UHw{kL3HCF?0AY(RzMqOqlLk{J}XmPMR@}vv4krdFFAPHP0i>v2Z+XvmK7737)Tg z9PLU-NI0H8$aQah%^fW^?y>*hr$hT|OmKga{}PAJ>qzOg+{@)?ZTzjb&s6HzK?6_l zBu~@GGwkL$p63OA%uo0kduZb4{Nin&rw28!B?Y&$k^6as?L5h|yzrWzo4WX}R9Cu@ zN_Tn?BaL)=(VI-Nh|`B``qGd7gx|p)Am%cVLFAp>IKg+$-Y0$eoV?)VVC=6vo14kM zYX12#_^R{_uAqvqvz!~bnOoVwy*$*i%%S@(2;NzCX#EGB{&(+v7bITk?+ZyGMh06E@51@s+sVH7 zc5>q$_b&V|(ANFbnBaQwU!rx+!74v%X7VZea~4DRJfk_E30%Z9E@v(aSi-mboSJ66 zj-z1epZ!jaU%r_X{Ej#I2Oa*B6r4m?P9dF7kj)tk;v9x^9^;tE6u!nxu4EzK;5xod z4Y#wA`+0=zJjt`Xz{~uC-|{E+bHZOgkl#BU+?W6FuYR}1M@i%3^x@MCWH7_{0%Q3y zlldw$xPmIa&T?+#W^QEz_wo<{Pw;)7=coLfU-Jk4m&pJ6y**)IpmU0AtNcG zm{Q6pr-Dirvy2r~Q_Ffbv4yQP{I7GxKIiyXc$IgaH2?VT$J4Q1_tx#&))@TqAI?X- z$v^1umh%x^IfZmSK{jVFh;tbJ*1_{caGv})CNhPuF_SA<$Tzr-Z&SnVY~=oyK7vQ2 zxAP>=@&YgO3x3O=*v|?7^t*Ao@KMtK**u5FG{?^etj*gq9yuw>*UgHh^!dsk}dQ#At zkI;jjWN~`xJGOgc+FZxd@zJvVjGcFUweI8KC*4m9_VFuz-~DadD)?(lKKQ4)j;EXy ze28v*j9#2ZUp_+~pJfDJWIU6&giD#tRb0)r+`xBO%N^X!13X4OPxAwQ%wB%U?|74c z(4ogk!AU*dHs98DdaoFCwd^UR^9iy!gF&3baLzk&-@!Qb6Pa@4HbS9U_LlY;+87d}cFAEytW zW?-+kEpzA`8Y^w9ZS56_FPms+SS?|~{ zjoYl>adfnG3+sX>PCF_1KF{-0e$KD?1OH1Teo~Maf5&>Y_S?9}`W;8D^Egs$OmO}> z29DJK`z>#*^z+Vfv@7EG+y5zt{w_TnQ~v#Kufy91KO1;b@Cv`-kNl1HXPp#u;$%|! zAA0l2v)*ysHrDw4_HlIh`n*>@+5O0q-GkgS6X-)fav8`V@+hE?F%&VDag3kSus6r| z#rpAS-x>R~`^S8_A}u!!GT@~Tnf{X&+2k~5xiI(3xKtKI`kIp@B zCW`rINQ=Q}=b&dXq_3MSVfF`;Jpb z&kM)k<{`W1C*W1#iQE(eVkn1nOSO?HAIck{R_?aZVVz9I)7gHj^psX_WQA_ z_Z=?JW*SOi_>3loGlEf!W(-A)WgO$VkO`Df%4DW+2~(NIbjq2*OlFrKK4;&RI?3Ot zvYKjcriQiL!fm|3I@Ys+joi&W+{b3N@DPvi7~8002Ms*I(=_r7yLpc1dGFt8Sr4DR z%wQ(7@zROTWgeAOv5>2|h9xXz8Oynj8(7IIR#V;lSQAw40q6<~@9CFF0kdYKo zOetlQQ$Zz*S;h*gzkBfhB8Tt8V3RSou$6{z{2JqvLW~UJDL$~`o#@}Vk=Xi;xwjDq3=;JlZzQJGGw)~;( zzsvD(qw&7Ycesh~vW8l2<#z7iPQJ%oY~o(-=K&t%VIE~G0o$qPadz?)yZAoO@&kUz zk9d)n_$e>5m-n7~5c#8HiDXiUkwN^A2e)72HusqN00jg7gB7IFHJO<(%ap8@1DkU`{8aAkBl(IE__kYNmG1f#AzeE)ma`N_fQL`Gj3 zB#zc5;m~6seBTh}4=sD!=bwjd|AXy5-7{Ic!}|!AZJpDBdAw=8{>tC@J8$7ZbkP&& zKu6xSpRn)ucn{X~YyNJDgI8xvKnn+uhKXlnc z)Bo=BL8)h|Cle!wGRmo-lEo}z1=U0-4CAjn74U@z^m)sxRe=Cg)?z1e;j>vbLc~N6mfKe?L+`X;-9vJEhM=>i4nWS&?&gN9uo0 z$qyp+w=wCtNPRsgY}EFL+A#QeZ7BIsq<+W?k@{Q3IlnSlz?&L?2}`2SB;XO^u`;~@*58EEL zPnB&`VB17&n>wm&pMsCdcTZ?&-^IO_wHvJ6B<*@?w~t!wCTZ7GyM5GZJLwep9`e+F zOg@&-u$`X&o?f?wYPrTS)kqEa9dcv?JTff2W+qv~4gb&jz-rMbnl`e?sLDuee#EV z&VB3>vb{gCtaZJO%p0|PjHi`7^KXBKbm;kNi`T#B8VqLyqdfayv^Yk2kvLX<9OI=6 z>m%Q=PWL6$r<+Stcz?@hefQlumR#;R2G;+Uh4R`=sI@9&(T(Q6F)fvjgcDC32vz2=ud;Vbg&=}XP&nUO--tal? z`TF(Tfhy{V7$beG@ksxId3tWZTIr@Rf4*|o(u8Ld-0E2ZG~WYD%%(5>=+6Lh8OR{= zC}0RfIrKh~BjiUhnlbJ#StO2S9OK>dDvLOMXuTI!Kk5GA{t%n*izN;symw`I@2w#W zrOgP|K4gdK@Sk+^ybq+Cw@-6L zOWoVH&w)1YYx{)D7{A|vcyN6Vxo_wD>Q7(cy~mojw|KBW>7#CM_3ycTY>W7Tb$r|L z6PAVl)F1WuInd^a>l4>hUVJL;>^0wnUJU)~iJfD2f+q13Lm-@&O=jEH7pIuwlx@Pp; zEd6Yop9^GLz3X;vy{3iNv(s!#_ZdDd9_@NsTD0?N@^P~1+uL)f;_fe;7R}6&@2~z$ zaS#RZXzU!(^QvN>bq^-`d{(}YQH*w9#Pj+@d!HvgCM`O-*!z(QneK;py8Eg5{m>Wr z62-okMk$j?QkO|T1~G=xiRPQ-nGgxCxpANMeNt?GM$yJ-*Bt4iKBLI*q0X`V(2ddD z&xY4)hPU-Nt8ZHE`uLr9ytfGF6V8P`t#c9kan!kl^9bj#V@Gw?jvdjg9h=3?(X9Ff zCH5_YCnePH6StRozd(Cxm9=;O=h`XW3w>ET22apV+&)n|+Ec4+ur~WHO3;5_{rA;B z;%aeqv~T@_xt5=su;U5iK4JXo>iCZ8Xk2^5-QwufFPf$MJVP&&hh#d2hIO zhVAVA(vHjYGt>K(*?6y4MTz&31=nh`T>4wuUnjp(9owl}rQCjMUu|35q}+SV6TBbW zE>>;U_95?Uw&~ydvPs@^wJ%H9v81MG$C7B#j%&ng#FgSov0AJacZfT}eDzrQu{&0Z zE5+*Saq{DKEUO;BV_9^(?Si;l+#SZ~0PRNYxX!ZIMaR{rTeqf16MQB;(swdP)~9ci z?tZ%C{xrurox}J^`A?y|V_28tH9+Sx<pb^8*I#nJdx6sNb2ZU)?K+xEr!Uk*JAcNq?v0*g+@!N>qTReM zyA|K;{Ge>GWyJ2`+`nj9ui;R#bh70_-HqMF{A2peHkWSUv+TlWhmFzqNcVKtUzbnn z+q!oCG-v3;SUt?ClXdKB9XsozyX8CCZmDz%&ll%g#}-E^vb~eSb+k@N)+Z_4&-PI!9c}L<$5|)q()EmZboNBw|LR{~7dYO# z*e9vsu^jGGePy3lU$V&Sk;pf_ewTTTI2Wv?WQ%f|9+7_}!SUue?3Gg!?Qlj-G&MX{ z_0!?=jv>cos$(_jEXUpX8>6Y_m+C(L18mO$pH*j^)bozCE!SG_`nvFEvZdy*EJ1!u zeWcO3hlSsF-e@ixTc5t$d1QB3pGP0EDfn=>e3j+fTfXjEzwEbsopZ}z%b#HRf@NXZ z*!rgMoU=Pj=h2633hJxEpBHP4eS-T9I(HS=4ppp`j$ExD=ffTH1N8n0_#!zMjd>r*)f+qwfNJr-$!P9#AG<6^Cb)HM0{uZZjd2B@sPH;Zz=e^Wf?rC{OAJ3_9ZaTA1v>P4IO!InipUbn{+tRZidUysz2a*PR zkELDbbJC*S&QV5R@3~SxmljPL>Al-X{e7WNw5v9K&U0^SG3kr)Uo_VEv}m&PU>Do1 zdvT8YpC0LTaV*N62hOZ7aNVxE$7?^+>#(bHMmMkhWc#U;*Ke1>J8r4&zvGr@f7jCi zuBQWRXToczxKgYU?erauVx#zs{qRgQx4zc<;lWE1c3e|E$aQ;=V zj?QyQVv^V|ygoReWrp$F0kJV z?Dqo8Ay!upksl(DxLe#UJ}o{S9a6vVc5|S1ow4cZHMM<%xzK(?csvx^uZ8-dISvyPO0`u5ISwOhjDVYq(PRgX|VLOszD^$Q->Cxcyg_K6D~m47sRzdB00QQ9Hy7I%wJ zi%*LUwpWAg_Kf(9__X-6?YH1@%QM(E-1m5b?J>so7^5GeW9rkNbN>6W`9H7zC*~&K z^Ce!8{+aWse3Sa^>IeVSI{wg{)Gtuq{$=OXS9n$3FZiW$`30{Y{5hq*K)yhIt@>K^ z`{ef>Qorv-WAE{-)gL+6>%Ub0KiB`y^i4`Z{b%d(hH=#|RDZ&sl&c@|2Q0TkeL+|E+YO)T)Xg)YJkM#n z{NPhamG=CmD*1@~KJ}B-_w>A{TKQV_Jw5L!(&Rd_*Y)N#+kvLPh&27vwxi0ktRk%S zEUcyvxkjbC-*3w^ufo@OedJf#nB(BzSQqnJAm85n+nfIa^DU6C3)ew?PwTf&evi4N{`d|C+@9Or;|3mrTq{V&mwQrf5e3SYG@`L5K%P&wrSXq1Xi*zu*j@I`?5^V?h z1s(tOT&x250`;}(Yt`?Q-*-rTo#%U{pJdx4(b+Z>Yvs3#JwMcP&*GAkTH^N3EwTN9 zxZp$WHbzUluPd2Q6D<`>#mVAiaf&!ayhOZ2oF+~ar;F3YaTAN%2YXY4K_CIq|s(uGte^uSupmar!cb z63Qngdk>u)T_U}Vl~l8q&1~Zde$3A%HnjVMWA>BnT*Kru89lM#)LuR#=$()jePd$7 z-rhbN__)son4hUE9J~90{#*N9E8jFRTqaz$^;-CDu_oGKl4}f|=|VTU6Qeg-^r0{P z$)$jy3?nwt&u9}pA50u#e(9cF&_{l^{BAK%%oEp%>(uv52qL$L8QRq;Z&2P~9ec|^ zsl1o?nDU<}|H;G+wp+OET4UUL#iPHp&i74h$p3hP>#BDBEU(|h0hSvmKTsSl4xhNu z_Ve?Sw)&0SW1AQ^_L#i!B73y^x%!_^Y*-VH|C@;oL0J9=`{CpAVj!lxssGG`AVZue z=7?)Pkq{KWssEuR8>59KwuLyH5z?c?(Tt&pv5Zqbo(q{kNlCar{0vm$I!-5&=u9$Q z=t?(I=}r$~q>)aq62}Q0=|mEpNv2D4|K4Ltr_!As#7HBZaQWV3l0}?8WYd>^^l$Db zoNHQip!^{6C}4>7>Oe<2kwj;b>0%wbirq-1J3WYzMmoLdO(t2y=|eVs=|_M43?Nr} zAcM%GfFZU)Z!*auP9L)AOF#NEfLsPLh&&1immf+Y!x+v8MlqT(6fu@@jORio(6ay1 zET3limhCfKdc=YBXz4K&F_v)$w`17$Sp9oH-yM0kFlS3}~6f%+`iYcXxaw@1~@od{`GM6xo za%R5k_H!L^4(df7<5^Diq;OqpqHCMu;p<%!-Egqn>u-|R9-ZkzH@Xv}H(B(dFa61- zfT0YdBS|FFl~j6=MkaBx>Bj&DGK4~gGm0^cWdfy4VJg#^!EEMI$wIDSDK}WxjwF#x zS5oOg8kxk&rXK?s$Pfw{&M3w(mI;(Hg{e$u2D6zMpMLvlrWh~m_|7> znZrD)xSAzg$4b%}#5k6*nwzQN7H(tR!F^T}T`#|pyKRG2^dgV(ET?7v`ySfCWezbo`E>bo`Cjt9 z8EYrg=CJH>Cyy-6e+%1xRk4VYAJRtv&NS(G3 z<&j728`g$%9wbt7wwNalwJdd?Rrfh*ZA#Rqs|)A3Hl#jXeWXymHtC;NM*48eovZyw zb))6KsGKHBzQkB*O3vp3b;ag>p|%r5s;DcGE>-^(E|R}i{WmSQT-tLq3s#5}tQ14G z&Dv^hzRMcrwoSVAEHQpvIEV8rJ4M}{^50W#JC)c*CALHQeIiY^Q~DNd9@JOJwyJtW zJiA>G?>#xl?LFD~kXt4P8Fx<(QtlHQCI`t+P7WfelY>Mu7ETW0zfzWJ-*wlvlvV2M zlqrv^k8R+w$>D1?$k%US*zbVJL5{lIziOxNM14n|X>Jp?J4Ii{$Y7Ierx^V>)%p;lWr)|Fw>PwEZ8p{UEk~{XVa&+8RIm)AJ@j`?JsMYyp#M{X9?4 z+vSCP(!Ur;v2YqLn+d8EoYCw+uA)P0$-jdMudBxTMcO_RN@XJ~)9bcMEarD?iS zyh?t)^g`)H;??5Ul`XOSQvFT5+8!=HN*UX=pTzcX8S6eNjLwsTty|A&mbFf`H>4<9` z_vtgWaf~-D5W{2KK2LXi*L_1<$9LosuOA|piPSl!s$AEb9CHQX>ur?%Kg9kR;=NOe zxs`|$#0lbLak4m894l6em14PAZvSnu|F+nlTP(jtew+L@`EBysCO1sEokB0bBMhtX?c`#j}r zuM+8LJ1hu!oiA7{&pv9s-Y3~6?WtYnH9)P`NqeuE0%N5ct7NY2Lc0E%Y||3wjdXpM zgy#*`+SX0BZHc}j*V>Lm^i%Ln?Ut)2{aecP8@WL}5$|KFhm>*P1eZpl?~vaizr*{M?tWGvmwXBtNfE`AQbu|A=D$Y>UpL3{-=RN?9FugVpKsoW zAn}`iej8I@45E+i-M;)>4uAf$t%ofrM`KM7jL{M=qCAi*R%S@ zHtnzABgX7OPqH|j0i4ZH&SeZ2P{PGbXBP8V%Jr;f4ePjz%{IS?7umzByuSS4{5|{C_NRzqN-10UulldrE;G1-D!$J06$k5&cDx4t&EqVF z@OegaJ`=czX$R(bx%6BXu%x9d>^Jz9{3^c7ZG4aWc=*6_bqC^3WzX;$z9v7DD_O`lxQ=fhSgz(k zyj|Hw?&pz1mftS_B+v2!FY^n2%b(cK368h_M;AUy8Xs>t{(?TzpJpI~8O9eF%a^&4 zo4J(@+{;4*Ji+&Qo}cn_e$5~FUm{)yi6oOkj11!BkV`ogRI-?5te~1&HnD}RG_Z^3 zc!?(7;4i$ziOwsX`3ODeNmk2wCOBPs0B1AwU+13ST=_9vKnWK!omtFd4ePjz%{VGHwCjX$rcU%YP$|>JznP0l}C&=au25}C<57eJ0J&uV?;cLv~%9eV+Bfr@1 zX(?w0GcOKbH{rjX+d3rp?DSyX?{C#tvGC&hNZot>?BsLSgUhz`==1KX!28gk<#XVI zx^{k7e2L%NGxd_zHm%XzluticZjSOZn0c@)Z0q-@Z_BqX-x}-d>bwWr?!DS}5tjWVJ=l=E&VQ(zM5+e!}>DKYyPqcnhtrs(x$?U1E z%kNCwxxYs-+kV;jL#mF4WaL0<^7cP zX8;A{lE)whQphldGvaN_wv07O`Do@$v(K4FB~{bH`klQ`vhGXdmp13^bLr(=#|_P8 zVY_$x=kEiwS#@B!zS09If7fNqSzQ4`7)l|-7|sYr9q4DY^cad5%Q(h!ArmNJ8q+Cd zGE=yOsc#$Gv8HS$vzhZX>(4wYscODY#m+sQ!}XV6+LE7evix%S>$u^l_p-45+N^qy zHdCAH?XT&!0R;?UD1{7TI3pOvXvR>)SjI7)3z^OYrZSBZN}0?QE}?w7zg=i%{pDve zoBo&DKjboyLF7@u5Qb97ForXNQH*8`MU1^PJPyoBdOR00ff7oY%oHv;&~9pTY*}WS z^68W_gPF``&cQY)FH>w$i}7HJ1j9SjzRR zUUO+OaTl9;lpQ?9ZeApDgMB~>F*1mgLoWFgGLj;S zDW!~ZDyZDhyssM*W+uE}LE_!UCxsX}F%J=BwVy54FY2yUj>^KWn-*3HH$6ajZQFibYyLpj4_g~srX}-r%khsP1 zvcym0!Y40n++&^}goIgMlS3}~6f*L8%e*)IpmU0AtNcG zm{Q7KKDd72xhW`b$p;ncDi5R=ODFHqH!(7Zle6c*x=QD_q#L(c*AGIP>*KMMr@!~X zeFAL*Qizd3oE&n=|6}vEXw0+zAAoS*_!+0%-$~JlBs!B!7rN4oRJzlH7-^)_i{50C zMVvll)0ckqX8^ejWDt22G~ct@*q0gmvX;3dHOH28XXVKU%DWy?o_a7HwmbBnIa;O% zG13k!n=ajp-ei(RoIVHYv!(me??Ar)fjFQ!hW*T?g250oB69t8|xD1{7TI3pOv zXvQ2^u1I<;;|})QxXt^+@Ux`M#{}UTsO6;xBpdbY5Y26oZJUwDhoiSFk{7UwdC#7@R1g%}yc$sxDX)63l{Fx-r z!Z?*raTe!u(HD$=p0PbMV}krk`ma7;zSzFtTgr;n)hb(0in16P#L3|TeUH?ph*-ER zx#W|qzZh}KSkD_QvdmrV=0*Na;)VJnmwXBtNfE`AQbsuyRI-?5te~1&*0YH%Y^8x+ zJjY8k@fvTCObW3JZHH1OGlff-$~2}^&J1QUn>oy79+gzFkgK_dB`jqb%ejslSjj3@ zQ_aoPu=euCJyZQ0_5QUUym0LPkI635!*hM`l#K<7t z#XP&3XE*gElR}IP;^dG^K81{=h+;}9qnrvVS=>#ZsWTfBzUt@Ock+JAcroLVObRhF zD5Z>YDyU>J@z~7zeK$seT8ptyG5#)YF^5VD2_F6yT%&tH;=Pm=*MRU=Q4&1 zDB)tJGmCjFB8$@*z}X*v$G$)GIBrb`iP^RvDa6PiP7Z}sGPkeSiTLN!X9n$aW(Fsd zN^d?%0i*a5U*R(5a}E8N!?~7yOCO8GrF2sEKm17FKjRg0)fZ953ToLx1FzB9ay>Ym zvnk;&cJLxmeSC{k8Nx+;k2-$CA9-E7Vttjfn0!W3$}+0i#8#f;C7L+Vavvd!0bIbv zOlKDBc$D4zo$ki^6ld{yCa{1de3yrLhF$tz&l^mWA8Oe#^kg2Jd5R=;qq&crtl~EQ z#vb*VVud~~7yENQALiB5k9r&gXW9p!<9dBe6<3RE_@?wqF60(&%6Zp*8n-zY{~LUV zXQuDMF_1yzQNR#}QphldGlEf!W(-A)WgO$VkO`Df%4DW+2~(NIbjq2*Oy`)fjAJ|( zGJz6GnamU}VJg#@PB}9Om!HiX<}!~;s#wU?T*DHUvW(?i#|^ABhuO?wF7v3QiiKRw zH7sE%%UI5J+(5YeDppg?&D5}#TeyvNtY-roxtn{qkIm+=iq%weGc~N`7H(r5>)F6Y z?&couBV2w95Ag_(v5h)*(7+Qs$`PWShyYK7PgT`6nIq^&z_PF?w+teSbf*vC?|JUp1CF-nRXF=g)uV+@ zyfva7X9YO}q&v=v&L-MPnrM=kG%H9MFe}JVKSO>tbCo4_o)sjM(pkG??U=!A<|eD} zGAk&wOtdTA)N?s=h^ERjn`n1wqA`(Znn*OAUi2nY88fM1F44F$W)tlr&FnDtniWK{ zmGzZoHqn04MEi^V)mxv$aBhR-iRMwj5Qb97ForWi8)g$7#c0M*#8`Di$1$D@nLr7p zOlAs~FjZTk(?n)Zo8=lgtH$`QlN2z7p%gNV;f&A*21PIQY%^dXVxBO=kq*e1QrvUQdvxlY**Wkef9qECoKpA?BcEk13T zM$3@gsO%YKM0blspA(5bFFvpB3);SL)aM=^X}h+yJV-oYc92X8F*1mgLoWFgGLoVb zW;)oaq0?XB_6#)tpEsg%}yc$sw2guEy%7ZK}2;lR_+2d3Smc zQ=g`uWKxKwDNk44OF7A;5F>*)Ipp@zuD5oX+L4?opEbL2g7rEEoGbO0P2bs#mHPYu z`TgJQ#u{V%ANW0?ZE%)tKr$)B&NA<_mFFubnG|AVixPmLWiuo*H5sUdc-{4xl$+x(k72L?T`3^VnUDi;` zt+Q*4Ut|0lKj9+8?8spa(zsC4A#;-AcP4oD#iN7|NJGhhYaTlAom-~5u2YHxB*-F56 z>Uo@|{mfvXkjh5eFdH1Ih zlf~`S^Ef+sie2GYyEnPgRj=U4a4GQTc#HJ@%2NT-V3 z#U8|@)5LUo(VI-NxJcc_l<`%*#-&`wZb&YaAI5M-FpANPp@^}Jt7uH{^Zf@T8vU{{CNjyqzG7Y^ zlR}I)$RJJ*x#UyGNQx+?lrqYxppwNbV+GaJvYt(BVJi*n;yGTTiPyf;eB88Nn}ff6 z#r!VfV#@d`U*l3P<8o$E!4+J|Rm^7ri&)Ip`3BeW&5Fh}+qDf^=dr;YHk!jmbJ%DO z8_i*(IkeVqG?$I$vcX(7n#)FW*=R2Rs=rFzd}Rw*#A3dFNc}g|U#sk!2g|}`51*s! zj`^?PM!wB=?7N%nJCaEuMh0Ad0^!sG1ZDR%LFp5+JpkRS0PFY!}eW^YB~9-p5b zLF=|{jg1MHd955%KTNwvTq0vxxSd+qQ`Ip53;H_MYFii1wc0wy0T`IrZtcM;3XOTYY4`*iHT} zF?CM;+D&5jIrUZdh&|@G50eqBW8FUTY)ux6)Jk zoLbKjWcw|iF?g#ww%_JigVf&cS%d2$^$R)S4l%S|`c9D!8zS{}bogGRzJW!aOE^Tl z?XF1uPZFcBBX=}P+exYli=hvNjwtN3R5@~4XS!`?aeO^)Q^9tn? zX8N=iUx`uvM+VkD=hb7d1<$lj_+-&=9v7PDlkn|&-yC%m|O%Fx9rjc~|2xKCZv5rOUlopDW&Ft2$f|JsI^!4ANgKb;_yzUS#!t82YoCxd z{#xUw@6z88eGHw`+t_hq_BLLIvD_n%zH?4Dj{Ea4z%vqa8OR{=C{R9xq0)uoFntVX z1f!IVW{m!d#IcNHJQvP!zZXihD{VgB{@vsEST290W8TjQ-fMTH6P@WoSGv)i9>nNH zZ!*cE583pkAN?6XE(HuBd>=oI5sbRRXCG)cT|d*qeus-hhl<+Io+4Uy`edY|Nu*0# zetP(`!~{whe?^)$elDOZF~a!`WDt4HKRX=0&W(HA&*V4?62EmtkW31(Z<*)yR|Jt2 z<}N0#P)7dYx`}>NGD6D5F>*)IpmU0AtNcGm{Q6p|F*uqqpzFv zBPQOYFH(q+L7W_N$)}K!6j4kmWt3AvC5u_c3aY8S$vEFN&Kl#0iEE5Q3NbR)yz72C ze808k8`E45j+53o{9j`*YwZ=mJQlH(>siej)^Qh`d6XSI#cp0?53jDZEpO#^?%+FSD0@SNNR@w{r(~@;&Zi z6ZdjI5AYxl^C(*h*iJo~k!>;#j1RkrYu(DP@#X zK_!b>#tN#bWj&kN!d4ncB$*UqWDqBZT|CEIyhIbP@dkh4#9v$yoK8;`F@P+VaxoV$ zof0~8Jw5mc=W;f)7{gHJ{o<&vhsFfQ|8W$2__Zs7?wm>{pQ1l!F@(=En)8{!MNH#z z=Dv2+b!*G(DoFg5eMJf}GKiByF8LHPk|K&JrHpbasAMtASV1+ltY;Hj*h&Mte)YCF zH`e(1>Nso5b~;jnp)Pgi7jlUfn7Yu zOEgjby4Uc~xjt)W7{eLCC`L2Jv%)*jkxnGhnPj@qm2RZcogTzUBb{FKCX+1U^dXzR z^fN{WI?{OgX{6JO-ei(RoIYgJm$3i-3?P?*3?h#LhL}Tt29V1@ z29ZYrVf|1F8OCr%FpANPncJA)@1c&TZO%W((ZSC*XHvlD7n2lye!w1(a|x)0xFQ7O|A;OIy}&we*?;>2=a~v6)BN!Bgz! zMfUJ2uk&aAPV_5tgQTwB#JkP!@Umd_rS>oDxQop^$_}1lH!re>S9zU3^LL`<_AMW#JExM#r^*lR@59GC zJRkJe{w#*@c}8;5We4XU~9gm|U&Fh0IZ>+Sw|0RyaI{Gfam43HRCRxPkL-v)?*-YD5Qb97FzuK=Tx9wPMqL>skG?WU8GU7AjqUkg;#h3Y_v)iD z&(Guk1>S3(N2+g}VE+Fljx@*jQ{Gr(eU78U=i1P&ozJiP`%L-_pHZ`yH3Q@$KA-m4 z_5ASj>s+5(hfdH&Jk@8{6PZuIUe@?rdoS(IQcphfqw<5KS;Jo1oh{GAJWiDUv_6ct zSDdfx)bR6jV+3JdoFC3bUxCli=lcvj7-6~L(i5e%4}7LRU;fn47xkm>Q@^0!3y}}Z zDG=M8r(d7PubH4e?AKgQ)n9%%=P&7VG?qElXZP*GxvAUhv;9*)r>(i18g8R-*>lu| z+sHWW)V2Gv{n+f}ad&=}}xx1I_ z58nEJ`-9|){XuNb{@}05F1gb9mCEMt4`%9f?qdDlu-`q$^+ErS?++rSe-BP5+uwQ| z1tZLHj{bjUoR0sWwD%9}>Zw4dzXm??Ns4r@J!wLXvfvv(P^ z8l6Wu)943|fpgGmbY8j7QAX#{nCY~;4c-=HHh#4|GqHv>S=*l3#I=`?YtJ-tO&3_} zHG93zGS`P$uPWw$jPj@o*5}jhna6K$&&<86Ju|DB>uPDwRIVpqiQT-(a_BteF>ns&GN+E5ez!!@@1?-qaP`OCxjVI+d*wXJ;cV{yB%ByzR&uRN&{{P6 z=k1wOJ=!x3?Bgm_(33NQMuqK}r_g@1W*=wd*PKE2`7k<%I#9!}+A~M?wP&8DT*3aI zARYy$p&eZJe5i9WAo*72O<0oOp6U4yocRYhE1bO-I1>{Ga^^nI+RUTfC)zV(r!gLT zQhYD{QvY@-=Zp0nK9)JKPo>-wL%-0TdF1Pi&3U^(yVLZ&54|v*@#nT@jxORna)$rF z*?#pVzdx@s-cqhNm;RQpZ@Q1p-PoR~8O$8Gcb?#$8o@l)e6l@rhPjs%dGEvh$>HfB zzvxzYJM(1Bm4DHmDPoRC&zB8roOf-JW^!M#imS%rV>_^s#?E*UI&+VvWzT<`>`3b7~~d73Q;a3Ug{~&%8`O zJGd{NUBfl7CM7#rPsTa<+4jtV&v6g1FALe1vafMZ(XO0(>D*$@1ARB_rJrHUi#;7o z|FgKBNyBNw_(yMU&pgQbO#T$}qpxRXw`ZRJYs8s5P{B2_4zqil3nayY&dO&dzb1Y;p;7ORehBf3`@=J)XZO;@Iv#)3rZ-1P9xV1e~$JyV{9`EPgn1c6_#rWFTJNA1t^PNs#+qmx1 z`u5Cv;+^Pqlpw$4AN*^_Udm4+y@r&b0Z6Zp`_K{eDC$6ky_kPY+kea1;+#K7?i@bK+X3lrg2TCvGUT3Z&;7BwH?Lniz-Qix33%^KzsAdt@45z?-Xv3G?fE~3*MK=_HQJ3b=sX(3Yr!0p zLH&767^C+r^+D!Den+PMs*X&4AD+>u6+O#&cpFy!6VD`6*N^+#l)kznbL@KVIi%-j z8G87dj?4&HhhE|wt%6eyu;#FYd+aEhil$xHkvYk|IRp0NSz3%pA~U`E#QpmeUY9SBRQA- z(4*)SXM5qt8Rs+fKc4gd3HFRR^ccXi03G@kez*l4Ma7!WLC#27M`of(ydNDzdM-Xz z{#Irz*PA=A!%6331F>`w|CF0MGE?_-WKvvDsq_%{6}*66MJb#U!pa9?j^-l#zOOV${TeuMSq{yh0O_Z}SmW=CfJe{$xxGDogw(Y>tQ zyWYxd=e2gl6U+y_u#LUVdn?o9zc}Oh%$w(?G?8^a!@M@5rIcsf)RB1#KEt{{hqMRc zIM!eL@G#nr4xj?|LVKe3Lrc(lRB#jT3s47oy^?!)SV!h8oQTTVw^?Wa`?miB9hsd_ z?e&ZuJk&o=n?K0>*|)=E{hn#Ro*&PACbHh2P|a<$MYXdS zV=nhJs`~m&&Ls*=fj*)c=$tHLoM|m=DI%7k*OTX8Tk&+K{)&Pr6-*5}>foF7NYG!t1in+HsknXYLXxk$^8$QOKq7~>l)ch;%C++9lj?8Je z>h_Mz1@>0=V$CPm*99G!t?(GywXh>IcTq=X<0m<5=+sf}8~6;ADsJWeLaWeTG;|XD zF5|$%%{*T|#kJhs;XYSA&HZ~~GUxs)jEgR;>c}ko9_xW#nBe=^PrG8;JdN*JR6B+B zM4Qk^o)_h)ZW?Ph!=J4~pXYk!_%k-n&eqB=vL}mpjabJ0u$=2c`fRmyCG$cXkv?bX z{pVT4=dDxcIR`m>M(mHq=(8f)t(ea{bI@viZbcb%9`)z*&m6QG?M4}u`8>26ok#uo zOf&}VMj4g)EHnr8*JmJaWj1p9|dejce`5j76K#Npyj0zG%|5KgT*9gNfrj zo6!U7c+L1M=Mia5MrEkq(BbaIeSguBc^f_UIi3g8dA?Dnd$Jx)MlFBUk$L>sa$O|IWS7eSHc| zL+|G-p5k@pfsV{k_GIAS@jeS4YxMX2+QAGQ3jnyIr>fkWzcz*`MzKdTCML5 zRHmQZXbkOlqt)oV_0^yDtI=-SjlsJc_2)Z?F=!4tk9NVG>Pv>MI1J;Ymi!0&5+_Hho%pz|n){TzcaEPH+j$>zj_djx*6%*{4^@AI*V&(N zfAxOLUGveuWzTlAMnA=e(tFtd8+o5Wc|SZp=&j7@!Ea@bKEV6Er|@#^*gE zT#2XpGtL;a8f8!pV~s&`&~B7LIgH(3k6)MvHU*1*68y(hu!6M4!g@=-p{qJ|I7RF`OEw9`OEw1eT9B}{_=i&{_=jV zyFx!cf4RT!75qMbx&Qhr_OY@ieyPk*0-*w-keAj)yG=F*jUH3QgcirD8-*ta4&0pSs*ZqzBUH37{cipcj z-*sPl2k~|8ykD-n!a7I!uIuTqv-5uN*Vh^Q`FF;C-kq_ZZ)fc1sW?7A#k=%=qiT+0 zo-r}PVq;>q#m2;Zi;Zbx;sMLUGWC0CPH@1eaq@`Wct^}WLF=;mknQp=0V4>DF7 zhru%PwNU+u@{KXpTm7w8FRFfOjLF~#&-=jTXObUGeNf!!*X`-XV2H(4Fijk<&%1DG zy<*KLaj?-nFG^uwVo~ix^(X4}W|-BBsuxu+s-Jo&U;3EuN0d*LPjvMstRA|0=<1>B zOQD+wbn}329#HjpXMMe>dQtVF=Ar8@JM_F;r)V9jEOys>p)pWC0Tt)H;A3%@;)~6W zX=86=sd138(m2dmYaC;&H{NQTYMg0oFy3igVq9))HMSWy8SgdjFy3$6Z+ysj#P~hq zDdUffPZ)n@ykPu|@fG76#}iNz6Xh;^gFZhWSMGC(5@7 zCWFO}id!xJFx2>>>P6KbHXeZ*U!TjAFW~*AV!iKFJ5l3^%Iou(eB&%X!QvJuzo_~Z zP=0+L6ZQE^oXh7b)o(OD36YJ7hF@A4y|d}A$cG@ga>i)zpB z12`7u`@E=pF;ssOj1L<5S)r@vXOgaeea@3Vm(OqFXybU}I;eSUH0tx8d^?T1EU(Xh z%0C7*KT+}X7K`fVb<6kb<$a=jYmNJ$=6%rOXP|3meB0_HR`B^!_4=Htb{j1|nzs0A z-~Z!$u9Q!oFSUQ7VtuYuybfv}JxYAL0;qVXajbEg)$?;;*S^v6D=i;!)JJ^3t(F(n zA3ra4?L@`r`uXuLLd{2?XO$lT6*pR3QR?&4pw`#3#Zi8KZs_u&;#P}A#ruu?Owq-q z#@GA%I5ohJR{*t+qS_5KmK#S!@r~YBVdQ66&Od@!^BxJ+eyp)-pvA@+#)Zb`psq_) zyXTGhgM3^CHLuxF{Wn|wG3d^l#b=FkZ9d10&qK8r)&C0?>+_=Wt8VgasPs&{&-;#6 zd!90$HZJ1xq~;;2zfDm6@VhB4-e>V~iyt=*;PasT1EJdMeX8a!x_KC1{iu)kSbWr2 z!}lg?U&s4Lwb%PdwG-8ksJy<Nz)c@g;o+CNOYOnLG zJU<`izl(!~7C&Q5kMi|J#sS7^<96c?;~uDf^?ix@y=Z*d@)Jk<`K-O!^T0Uo*Y_y$ zH$ct%Y`u@48}G@_JIO8%METw}=6}M+g~kEKI^%e#cB1B`?`72fCF9G+U7z&%{ZM{> zzUF*WCwVR~K4yFxYM!F{d)fFl)N`lDr+j@+sBsIRe21a>7Zsm0ZvM27cN!B@d^`}U zy}mb+e+^W7QSt1lo{Nl|jRVmP+0S5!Y|jL%qJRDSyc^F!yi_yuGBoxZ-% zc+hync+$wv*25HS)6{=YQDv(sCcaY<$I-yTa#}8n;2s zThx9WvHYvX+Ew1a;H#eNjr(Td`%9n5UOmFclG?p0$7+*Ec__`lQRQp-REn9uO-S|4xyhZsQ zz1Q=M@uKl16Gw;6XB4??vQ)$S$Z@LfL6-|e~Pe$VO$ zykC@`-;s6PY}{hx=WH&2#`u`=S>y9Yeh%k+V~zYw&czMJMaK0;en#i&pN5*ZsChhZ ze97{n^7VVIKPW%H!|C!Xjr^?CI>HUan zn!_FagP?LjD*P7Q4>t@5f@i;(3SWkw*_8@YHwHnk-Kp><_#}MSAlm;^D%>r8I~AT0 zA4!EH1_!~3qp5H){LryfxEcNy2JZ=i@1977Tj4kUJr#Z*zIKXyc@V658ooCO#+*)t ze*>TXVJdtY{>_h4VXulH`1xb0@NW3XE!c>bwW z+sO9?LBrSPwM~K7ZkiV!9})yLAL$hy|6~xn`pZ-sUpNGLi@qFgejo_0e?HZA77qK% zFSphF9rI7Ow0%jeY-w9B*0i*JTl`Q<+fT(?TH1E)rTv7Kw$#2Ln7XH_Z4JzOps6kY zAK=7gZPnt0Wo>K4isrUpKOEfL)+#pM)pqbFtn)+5+kOad`@{0KUO`SU^9w86TH&(W zSBA@Ta)Mv{CKaBAr(a05?MmbXc`tsst@>T?w_k4C4bwkZ**2*M@zj-VPl^{ACkbb+ zY^xSOzp^dp3GZ0hmYg zn!?*)-5poAomGC$%C>i14QDTFnwqd#+`?}9E+IbC)Yhv{PEdMkXqO`Dd$ zydKLoZGq_?%i6BGp8U_6+7^h<(yom9AFgcs!hoFMrJt>AI|r}&#maE{z?|UguU*~N z3Y#u+ebwscD{a9z_-QylC-}(3mbSACh-bC51$V+c*2bt&m6>WSi4RQO}~p8pU3?{k79 ziC$swdQOnJ9=?$i+&r*X*b0}ur&pN%LryTNqE|Q@rYn1en_&h0r~jAvl=KQm!#}&O zS9lhFsb4RBCzsrY)^j_Sl|Of)YQpm;$~GBad+tOTaTRp=RloKzbn!)tp<=0W&5M1L zLqn+~xh7SToC>}ACTEeKWpR*O!Z!@%CY2*aIk9(gQ{J`7;M(5F&3RFo_?j+p*ZSUF z>aXh(_w5p2-zC1GOWeOpd}BN==9}eM93Q)Pm$}C05uZbR{P@`MakFE_$Ge7ahoZ6f z#LDC=WBF{Ed{r!;Et9W~<+Ek-Lu2`DnS4zwpDmLg9?NITb*U?f)s=Lq>ldrj-vo&F zsrYWBzZ0N;|NmdQcvYvr6|g#%FTJFEX@8|%yaQrh{SAWn*aKsA`r8EYy1}tJ{mp`S zU3sidf6E|VR}ri8f8#*=l}=91=NwE-C#U3>B_HWVN6B3({$03~UMCzk7`F!e4d!B( zcO>tqeA@D&@*?@N-5%9lqUiW2()dH;|K*IHec@}ns39V=fKEBB3+ zuaA{)h?V=t$~Q*k8eXGspnr6Y<`d1+a*CZaKg;R0Te;rKRZ&L0(KQeAT3{Y`ZFsJW zwd-r``o?nCTkiT;?gq=<5X<$qT>n_^M$6q8Mt$92aew2DqUNQ3Sf5ei5ME`zvkC`y zPqy(UTYie=r`R}Ctgk6nKi%r5E9UPF&E#BFY7Ni?&AW#8yVO;c@l^?HR+SX}8OxSc zZ)>FaMCHk}=k?#Mi=Gw3k)93ed$h_D?_Z^Ai>uX!YjE}W##$Ru&n~rBS@*fhb=o79 zX;WuX+iL2x57nqrF`h~!jM_ht#!6)kk0couCu0#YGbk1x<+fP9Phht zc?is*kjpNP=-r-35HyrN>>SkEEehA~MOl~^&(}=P|?j9bYym@st z)TSD0Je6HPcxpL6dfl2pS=Xm~c?43w5nVszrm$wU(f25#Tls&nli~vDSQ)t(hZjN6}XE9mPC!AM3u$-g8#( z)=wTuIW*ch*79ScnD%;&m&e_AD&ukMZuv=;n<5_J^Qibxa_Vf>YjjfQhqJ|cWy{K+ zNS;#FK2~e4IHJ~`>ltTf!x5j(mClAZ)b?rIL;gM#hpP?JK4eK* z=Td7u*7BO0V$DT;X%6GmANyJtd&XtU*}Q+&_`HAC__BY-Wy@K=f5!PdW#(3A?*$y4 zZ(H_!)wz3hvB&5>Csn19KbiSvkOLo4esB@o}qW<-{ zHtK&5<)|MkyZ+T*l-+giqpW!yi?y?IHXpT9K3Y$eqxH0M*3TNc>sFp} zHh(gfr|j~ge+{T}_pn~O76*EL*LxVf|ImAwI?lbG-+JvGrFl!#IdLwO*ZHWAzo$}6 zUT4u!F=xL@e8`_i<=ykwJnlZQvd+Hh^~~12p?g~KB&7RYWjChIWRZXWQqR05*!|$h zHBN{iJ_Ht-0!)*fTx*CbDOG&+5v=lhm&$AJ?nb zmPuvF^!xEl(%z!cw4Fp=`yiitmNCvGjU_*FeeicUZ?#zOk(Aeaq{()#I&yuJW3Qdr zayIYJvd{ao?8~ed>y|BN{SUTR_E7KDM`$mt%snzSBsV4YS;D>Mv!?Dn0CSGs z1Gx7Cf}+Ms7_;9S^K6o)2;96x>q>Il_I{XgOK;-+DE-Us!#X6BZ}iW zjX^x4h&KEUiJ3|EY^Sj-Ia%+4$MH8PW+&J3V_IVr>z>KxD97{3C%e=UXX`m5*>>){ z`2O8tub{1#r<8@Jg>#Q&6d}4GxR*vVh{YQ1Nel%}4FV#iY z6P2T}V{x|M=z3HaT~Abww~Jqo>f?3MJfgWr`yfVj(fp#hiBTP&Gu+(W=MDBDnn!$0 z?osD~Ztl_eu8*{x4Nty%cClZ}&T=;I=3;p_AIether`THlb-yIlSV?DEVZjG%!Tjxva z;_c#diSk^#^Skw;ACYUw=A!GdeD-=`v0Del(e+q4p1-7>t~EBk&PjH>=z7#g{CZ+> zw%_P_R2TIZ%{`j87}Z7di`F_mk7!&Q(~S}J@7kBy+4M{%jr6}aR?g<>JDYdonVR08cUn@I*)Q8qU{YGu0cJ6*9@9tL^&4<@WHy`NQ ziBTUaN9|RP+PM3gJ|KT@P%kNS=J zfP2+%)DP{PH)_v$aIrfV_@eggx64DPHWc=5U@@Ai!LZqJO- z^(YrzPgIWjh{bMRilghXay*~Co~SN1zTa~jJGvhEZ2oTjVsWk|?V$O_Zzt3tfMn{LL~O&(p=Op4g2y)cl_Oy)f(F)5XqD?EH}Pd_X>T zuE)E4S#tawedaj;y>E)m+cTNm;PN|-$>c^C?=qGpcg!hE?wONJK4|mxbg}D~*o_aj zYaCBk@8(17=5yNl4kSI3$>%KgOeSBpaXmBqzplw6+M{$sS#koZLMn^>jAh0eI1be` zuy41YNEZFlbGY%@UzU-l-RjzE z2QTn9>&#z*zrfmviaX`!*vEORlAe4{A=aGwxjcXK&RAv~U>xjNmh|Lr;SsA{xz$$~ zD~(lf2iGDVGinVKKl{thI+ayl?ec?@#f^iLeHw?rAutU~lC>_bhCZ&hxZdLNv?*>Z zO)fGnw*2YFzU0f2r(M1rs^98te8zm|%y-WD1}C3!z9G=}d(p*}$%`&7OFrk~DyaFS zlP_7jm#m$SE0Zs~co_7)*Uk63`4snQJW+c5SGv{{mB)X@&q$bWPwM+H&%>y+v6AcZ z@kwIo9BWeQ)vU7dVdH_yf9J0@!7a@9G#VDoM;UyYz;)MfyUJuRM;A5PFe%?8I2)E zW2;=BZCAp${yKE-qOnffdaEz3pT^MoX$-Ajh4X3*zkU_Aeid&0s*{zBt?RC|xr&-= zCDL3gZLXDgG*|hxwu;YKy~e4uaVl+`N*kxr_DR>IHP>GG_0>7@*P-$Knez1~={M*R zl{?SqIcp!SkzXI}mFA{CqH<@yetp!Ju3yx-(HvBc+W0f2T+~mr#_BWbL(d2GQE%6z zbD-*(_tyeH{vo$Id*mbw1ck=MHUywodb=bYf^iyyT%Zs zF;tG`=hv{)qgZ2zQCpo+^{KP7&d!e3Lg!jzYme61I&>gRk++^YU+?c*^&`*etgo{Vt(p4JTFIxiQy)I|YqZ|hNPV6*f7I7$^Pjdc z#i%cNbas5Z&bcTb`L#Y8U+c5p)@Qw~kH*#dthe>qLSMSZEvTNdkNtjZp?$r{m;E)$ zqxo#H{odlP#rL7tg1t!BpgvF9x$i9N{_MOj{cDH6XVvbco0ncsyiey_=SIHHKC6;% z+FYZYu3hsIwHBJMUlWyePisE@jA*`EgDtiOTWO;+u@&h|D%P4P*7a{i(euWa{W{2} zy_HXU;$uI)d|D&TVXLjvR@-y=G;g)@^?rU^ZGQ4;ep_vRJ8eEY$!U)i>&)y#>PLB9 zx6k{%+i7EW`u)6oUj3Kj_v7xgad+CdJ8j%uHqI^^XP1q$m%P?X`=#~rvG0E`{rYFB z&ud<)7j>A+7tKWUGF?`vN;mdxE zeKy8E8)Ki1vCqahU}GGxF%;KRR$Nb6vG!iE_TI<-8V@kO-+Q0e+~m{TROeq4RQBtC zz~*qk=5WB~aLC3yL|ct5o^14IUv=tNIjyaa{oWt4>#v7VS!4UMzy3ou_8}Ylkd1xF zja|Cn4wH}JK9*VUdiuGE27@cJ7!$|kA>h*f1dYxg_ zYi_F7^{8Ig&B~s8ow-=Z*jiGg%%gO zSl6t1`)k#Fb*(;DPJQ_E9nWk2QNFXRIr_F*C-tRuQeR@^tEX*e*`HJORqw9F`?aoW zuXR;>F=`W?Gv&3Oy2hwZ>*(|TT&Q2w)gxc-oZ~r{i^listM@TF1KJl|ulf`H{C(Na z#h2B$RBQX7c9B<%`tUj5uhvHQ!xU>9UH57H>N{!^U9O z?`!p}IAhn~W4|6}++4LDCGP#NA4~5|qi0xD_Uq#Fe$CX6=B|FD_Wrtjo9OjIZK7*Z z8||gqXy4Ab*9A|#Z&tnbQ16X(U23Z}l)p3XoQuC^?^9bzubXPG{XAp$#~Hgn&e*=3 zv9&qZcp|;#MYZwkENZ-SZakmYK4@KhT~zPa_?+t}nS848MDoz{8UCFqG0l6@GCnV+ z`D`lcGinvoyib&_c~Nck9yZPWq54vHpG5Di{n?4mkgxOW7prp!M_ZbUo3!`Lh$9b>Ck1>^WwUlGEsvyFO7cEL*IXv@Z*1w= ze1d;li@$R}|3q@Y?~=*U#<9kU##zR>#zn>@#+Ala<67g$JAA*R9Lthp?n7;{&#u+CXryFM&XBlT37aA8iX71nHq<%B| zjlc0sCVMVPCRZSFrE!(9)wl-cBKbu5MEOMdMEUZOe4>1!e4>1!d?_TKD4!^wD4!@_ z0g_LYPn1uTPn0i>`5BKbu5MEOMdMES~)e4>1! zd}6Cnz5z%+Q9e;VQ9f}E8i?c*_^@`>_^@>L-D zMEOMdMEOMdDv^Ame4>1!e4>0+NIp?MQ9e;VQNC&_^@`>`*A^Al4 zMEOMdMEUBGe4>1!e4>1!eB+UPqI{x!qI{x!6OeqOe4>1!e4>04k$j?jqI{x!qI{E( ze4>1!e4>1!e3OxUqI{x!qI{x!Q;>Y3e4>1!e4>0)k$j?jqI{x!qI}bke4>1!e4>1! zeAAJ9qI{x!qI{x!Gtdg7e2V201!e4>1!eECQ|Q9e;VQ9e<=6p~MrPn1uTPn53!$tTJu$|uSv%9lp+ ziSmi^iSmi^6(adW`9%3d`9%4OkbI(iqI{x!qI|_jK2bhVK2bhVz7iy#D4!^wD4!@_ zA0(eBpD3RwpD15HB%dgsD4!^wC|@a>VU$m?e4>1!d}T;JQ9e;VQ9e<=0Z2YkK2bh# zu2H^$NIp?MQ9e;Vu>lQ6@`>_^@`>_^@|7d`MEOMdMEOMdDv*4le4>1!e4>1nNIp?M zQ9e;VQNAi9pD3RwpD3RwUp10XluwjTluwjzD3VWdCpO%b;os)TteWR} zkMTa^KI6Aw+I*sXqI{x!qI|uf`V-|7_^@`>_Q zLit4bMEOMdMEQn6`9%3d`9%3d`D&qjqI{x!qI{x!W1xJZe4>1!e4>2yP(D#UQ9e;V zQNCNDe4>1!e4>1!d{d!(qI{x!qI{x!GogH1!e4=~}P(D#UQ9e;VQNBB&e4>1! ze4>1!d`qBwqI{x!qI{x!%b|Rte4>1!e4>11!e4>1!eEXq%qI{x!qI{x! z4?+1v`9%3d`9%4SK>0-ZMEOMdMESl41!e4>1!e7}M6iSmi^iSmi^y#nPE zRAiSmi^iSqSB@`>_^@`>_^^4*B!6Xg@-6Xg@-t3dLJ@`>_^@`>^dLGp?6iSmi^ ziSms=@`>_^@`>_^@_iJ^C(0+vC(0+vSBK;ixu{Ua{&$)t6d5boGi=FRFf!)k9aWSoNanE3F>7dc~?2RX@z?p{rM{dQtVYRu5gh zV%3YPA7k~<)hkxLsQP-Vhpt|+>P6MxYW2|7D^|Uz`l(hAUAjY#_0ZKTR=ueD z2CIjzUa{&$)!%9L(A6tey{P&nRu5ghV%3YPUvBl#)hkxLsQOl`hpt|+>P6MJSv_?1 zid8SFev{QhSFc$0qU!Ipdg$sEt6o(74y%W*Ua{&$)!%RR(A6tey{P*ARu5ghV%3YP zf5_^gt5>XgQT0cx9=dwPsuxxNJ*$VVUa{&$)t|C@=;{@#UZg&m4Bh=Fs=f@CUBY*J z4{e-ReI~eHbJ_VARDG${Lszd@ z^`hzrSv_?1id8SFzS8QUt5>XgQT4;D9=dwPsuxvXYxU68D^|Uz`Y~1yUAj}; zdg$sEt6o(7tyT|Ry<*jis-J50(A6tey{P(`Ru5ghV%3YPZ?Jmk>J_VAq@LeHMgxuc zck{D(REBEqPA(qm#Lov?_+2cNZ!9nt!ttos;yxCa8V6Xu%J@O!hm9YFYJanfOZm6- zO8Ix&N|X77tMk{)n9Qp>Im71eV?Xb4^j+lo-fSEKz2EzySl6!p z6c0;I%Jv`CYi)-l2fMbBPh+ZHbl2+UF@in%J+E*1C_ahi5ghuN&*mf?}y0Rl4<7tTC%; z+t1p14k6Y)X};dm&&^Zk#rIiHn^K#L=evmC#hUOt)^3fX>(ZXw!&&g_;CT<%sd%$d z*Bzb5sI0ZQCppl3p7*d%zMW@$-~4$iw|dWe*a!J{8t+L~TD|8GV$Cn2=6(<3s?A>; zH4lHT{8|l3j$qA3#P+z>`L}a#s@**z_o$0u{GN?pTRgAx;$qtS^_}k4T{(ZhR4}iR zHjbx@-8jTMV``7@;TfX&Z#TNw^-tdQ@1HU8d)BvA zKG&TKKjtVq!@4G&1wAwTGfHi>&-d_r@?&|r*o{T(#`4cEzZRu7M{>44+IKzUbWQFI z*fTPE?hWDGbe4xw9%+6(M>Q|szdxh8cgEU$JYDSOL+s|mJ(L~8mwj7*Z|V9K`|BS| z|9ZAjXKNef<830pJVTP>+#32l(z7Rur*Th>LuHop=S1~>O?Ca_+}K*{n&f1=kLsw` zz3ZQyLy~p$KNYX%rDsj&dOY6fx!GCPy!|{UX7^X~9hUU5=HQ>H{&lCyjX%|m6+HvJ zN6&jbKd0F``ZMCMq4SJ(p8a~f(_?GObB=K}m+i?}Zm)JFXB+1_Zca8hmLA^+EkmDJnw)&_Fa8m7@wY58Z+8L|;T-LQUu{v<%&i zmZLADub{7@)#%UAJ*W-+Irf4+u)UlHlwM7a+2Mc1PnP=9nI8kEL| zu0_4kb*L}89^HWYqZ`qnKKRhJs5iO}^+ngC8&H3AV?TV!AP9P*-Z}gy86-yrt+%ZC zND#CpgEeR^T8Gx74QM0Ugf_R9p=7WHZAIINx54e`KC}bvM7zlEf_u;dXfN7FZXeta z_rnL#0m=tjt57mHNckY;gOm?ZJ_H{|htU!A2s(<6q2uTTI*Cr9)96uj20ez(qQ}t_ z=p1?yJ%ye|&!A^plZgwh$$_X2%|{#1gXl5z3M%?#YjQZ6hE|{*=ooqy^|;uY9E|GG z0<;kwKxfgbsQ6c{$q{HeT8Va|b!)N~%|NSu-CBmKP;wVKfi99mRVbPJd~31-O?bYQf3Lok ze}}#`xrj2VLdnhO5HaF+<64tXpx05K-?S!2qFJaF?LjBeb146X)?_7`h!&$Q=wWmY z{Q>oRu{Ajg%|>fpY~}YDTlw9>R(`LrHTeKKg`P*Lms*omXcAh2wxYx6N%STv{qNS~ zXfzkCMSIa{^a3h)xiwjhCZnZj8#;oXLLI2=x2?&sr~$1*`_QB4C6s=pH8~VbLCt78 zdIUX<-bMp{*P0xM8h_WycUP^+^=LmjgI-33ueK&@&{Wid?n6h>Gbr(U&J(Ib^U((M zAbJeFf{I?_JfUf51=@j*p=VK#|KU8Ldb9v-LH}Cy$_9mkWaY zr1O+gS4mxvLIvJmrI;sMqA(fuE~H#!ZTOd5gAyzEiFx}a6TEBESd87%_1l+z2csd% z_2iGh92ly^psGp8^Mi{1NP@dII|Fdbo0MEiO9JUb8BD5F@rF3t-F6;m$BbNk}fxldjq7(m@X>IPCbn0P30OOB z{xI=J^1^Tw@o3`d#4{KR1+$17iRb5q!{!q&aD4~CLh>zEUO{ADkHI6gZ zIr19CJnLiS@m4>=ex(4FK#7nLU_b(w{O1b%}@N+FNk>W9s^6h$3&PDkar#uq{sUQyp=@j=m zWfT-qE>3YyDVL)l73KdE9Fn6 z!t|#of7-_T41XtS8u4_zv#6h)3h$jwJlE#cU~Dwbw|4w}r=Kjux5(nf^t+gNiN#A( z;jpE|&DO3Z)%|_Cf^l1&$M5l)EBMyNJnO8_^~MdxjmAxmuD`@)=Czr5Y_Ynno{4R# zaML#O+bw^e<#(jQvVS1|j~4UysU|)|{LdEicdBkYOnk&*{$AD4QT(l((Y@ThCdT#( zYsV6g>&5e~SCE+2D=eKxJRQv-p4E%L9YlFH_48dDf87hHYbM`*x;!>*;Tw)$OPJ6m^LLo{#V5S)b;tr4zx9bdcDY4l8#O?;>uznrGD2;s4yh zAO5=Y>O}BW;?-A&53MHtGveP7|DO8Sh+ikpEu_C|+&*5*bE*%z0S!d&MLZAuvn#mv z|K@4c-!9{A_aEuI?vM2K{lEDb^ZGx+bHg9u>HkM~Zu}!WgPf%M3A;}A^9RJ7aL0){d|I| zKVhu*GuHcUEMtmXftAyazW+kY6&Zu-cRF5tohi34ZVT7TACAi%!a5J}^GF*D$ro9< znEF1%!O(X+rp^a{+JP~KC4$s2KSlv@nz+ct{`!i^l?-$JU-F)<5BYvRpWW+Ha%Hq1 z7;8V6T)FjML0vU*Q1g!GYiE%;e}Flo{15m!r#`@0uyUcXi27jo|HBv`RNwykb3e#f zF6Mopv4C9K%7q`~_1?-Qj=o(V%LOCe@jU$Ae2DA(kiW)!$|+a&eHU0hZ7ht{6@4fX zl;96)|HN@W?8nS?^yB4!m~&|PbSz(JxuOpTL2)c!LL7{Ir{lA?AF;9d7A4=xDM!0* z%cZFgM!nPi-7_)h`BByt<$u(Vl`<9>)5bz$k&(YHtIuHX@EOWAjnO!M{<*Hq*kjmF zD;F5k#zIH$FS1-Q{t_$qG4?Z-8q3Bcf^sWY;IBl%*gtX3H@CXaez`aEY;a{;|C>4Y zzrE|afORnOJkL>8voFkx5o0r$&avdZLEGI`Jnz!nJ07mICJ~B-;aD_>f=1~ ztXya;G8W@6v2q{E!FV@r5o@l`&U)R~`s;m{Ui0;tk?#`R>-`A#n(zt6`-F{WOpz}FA&2!4isZVo_uI%sIV(Ln)t`BvkRxXQq z29O^di_3{C%~uu6SJPK8<(omZ9ZdbLpkNj_N*dKqe81Miq!>E-FSceJ@Hw_ z`K*mYIhgh*&i8Zl^EvL_&-uOziHlG${hjv5KHWxNx7nPGDPsY3X)6aa{)E0~()Ud3 zdnV6lE2oWxj((ksELUtSG4`41#?9Un{phpQ>dNSIu$9Y=6~;ai-|2pqswZ-Q)^=F1zkUv;9668%w&>_pyAx zF8NX)cRSBAUw6rM4X}O&`nt=mVQ`oJ%ekhCD|jorc&oa^)m`GDKE7l=HS|B+<}|`s zYaHqQm(6h$ZAPQ9zP{UQA7_2k8S9PXyUb}qH*=c!f9Q9Tue)qcle_dgh51eGrtfLw zr`ud+7-xAVW>YuUmHj>2VD*j0`Njptg~mn3#l|JZrN(AQ-)Bp#yu#{N8dn)xjcbf+ zjq8l-jT?*`jhl>{ja!UcjoXadjrSRM7$x!% zt1F0=)7f(8d$mGqQ)DbQmKggu`f>VMuGCm&9AF%19BeFi^ld9*<;u=-qRM;oj6t=J zgQ1Hvz zW}I%EVVvcenC+Qo4CcDn&!d4oZ8YC}^BL2|V1dsE3yq76i;YVheSb?W*KBN=bLs2# z3d^rFt}?b7*BI9t*BRFvH+1Q5qvba_`Z;X2+!o_jkt@Nj1?INVuI9Pw@PjKL#54vu;zj#<4i z?dittZMjn8AY-L5IPTgyZ{mdYV+>CEI5=fI9rHeFUSn{^JdYXA8Xq@4VLWGi()g64 zU!$ij_e^Il@vP6~Jv%2zqu@f9y}xK}p6hHAJm1Chg7+j|>h$FKauB?1?O*AvOT6lH zd7gf5ulZc!b*uAqb?I2Sx7C-%a)T^aX&h#(jd{jcuHJZStd4)rTF={HrZM<~kApXj z9iE9Eb9pw;jXj%V<@{JV6)P9S%IR3SFjg*dWxg+o z<-xIXd8}L!D_6$KRk3n)tUNSUu8Eb0$I2sInXfX9BV%==V&&1X^4M5;T&!FdE7!-$ z<6W7rG-A1lvGOFVpB&3giIu0u%F|-y>9O(*SLU;Wakg=;XQF{K(P-uQbAvn-EUuGa2L>^NlHEfiZ0?G!_|) zjU~oD#(u_9W0`S)aiDRqvD{c;tTa{`tBpgAHOAq_5yo0af3J_U+$iH{<5=T3W1X?y zINmtHIMF!CIN3PGIMq1KINdnIILkQOIM>)fuX8^;?b#5@x%H_15JIK?=%foH<) ztnKYuTi{a zx!RW#LvIgv481)_47)u%G7R=;WbTd8-1Yf{@2Ijd*AOeG@D{}4bgW$1Sxyu+hUp@_ z#f_JJPm?I2u7tWim)8aTTpxU&^3~mhT2QzMY=RAXoD~wZl zg?!cJ{RY+D<*w&W^=%W90_=YK+D6i5D==Le9fN%8R=6ySPid zB-VB*t`hK@9qYXAJ$F2mVCXn4GvwQ z?}r=1-VZbO;qL2$BbSdCJc9oy^FGENAG^H1_p!#H6a~jGuS=Yu&56tNy-(1loBSaB z_0$C?eVeZPpE$+-o}&JAxApG1mw1#hAH{Q~TTc)?=JV0LkT}~I5^0gXcPZ!SkKv#0y-@ z3!QQLg~qUwT<}siAfN6P#TPd@pS&nF7zg{1|=X^RWzg_VWGMf3EU#%mDe607SoFI>`RUXbWJFMOyk z>_=TGDx1gigm}%oaOxW3wca1BGp;AM!TQ)ZFT8Uj-mlFIzrG3n<-G7K-+(>lGgp*5 zKM`!5@5kOo`93S}pnP^dzB}-t+&dD%*gL#$9OboEUPs;fJMb;QhjJGrg60LpcM_xA zJ9%E+NxYC46qbBJm<(l)ESqY+pqDC1RBOCE_m;>vzxeTECdz zZ_w|fu~rq7$62|K@<6?5#d^yphiSbZw6VJ=0AhD|{ z{O)eJrzyPle)vFB_|w0Gdz-?=e-HOHg>UbJ`}3LZu##wg_Yl@ zkJHTY2k_CR@a`YNGfm;fAHm0(!qUfRch>xmHwAepc*5dyP2sKQh@Z6hsituGQ?&aT z*Yq>;KX1}{yZ4HTUo?gH{(`z^o5DNJ!wb}3boD{vxu$T?bHvYE{6bTB=L^IyS^RQS zxZ`Eo{I)6l^(*jqT+gfU_f6rx*I1jwy^G(azsv9WK+4rt9!j~^ z$|ET^+!Z7m?+Sl95B69}Ta>$$pU*ATng+pq%FR}8F|IJKq;AVnKgL$d$E|#VK29zT z5~r4i7fw+=ZTUwX{rl%LmV3-Iadv6AcKrzmjF)eId+U7B0?%`OCuE{AE1LmbrCG6fEQS%!$($ z7cL7QDkLuQaZqgel4aqT653z4EZlS*?6WMqw-4+~+!yv+7Pj_-*DniCT@Oo_h4+`j z8|bUQ^>w3hknugn_Zn|9zRxr9e&&XPA(kIz{DAR;#t#`kjQ1nHocQRnaL`AI$5`FX zly9-}$BZ90?1mxXuFfphUREK3A0Q|{3mzR{yONF{@sxv2%G&r_8m4IGYV zg!crs#*xNR#?i*H#&O0vW4&>_ae{H8aguSeaf)%Oahh?uafWf0akg=;vBB7AoNruU zTxeWmTx?uoTxx7Kwis6!R~lCtTa9asYmMuS>x~A29AU?lbN;K4?5(JZL;*eAsx{c*OXK@u=~b@woAX@ucyT@wD+#;~C>)#*(LtI(1X|7W7E z$oeggJj-aif@fJ2^S--}dHUfmwQ^Z(>;dElT7EF)@~G`y^wo@(yZHna)Kx}x^jp&&;_xWTy5xXClInZ4QK_b%8< zd7JIycJ>Z$$X z|1HXG376y&=Ubd=3ENV{1s11U_#bhJ3oR~c3C9!>7h7D?5|)+__wjMik8-Kil~Gql zJiy|CEn)3I;=vY|w}k0(;tGo^Tf%!QiK~1ZR8t;mbu}&FkPi@l(Bco_{SfhoE&d2& zeT4X<7LREO2aO@V+2UJT!rSVI>wO%IxBP^b@Ru`Nc;D6%J~0b^z9sxp1H2vYJoDaR zywmta=Du<1dWojlVSh%J^&JZ;UT`CVDLA-dTR> z@7Uxn*S+LFujO~COLd70V%~I@y237TQJ1(l*0!WeU7uK8zbVeg^jYhvU6|FxZaKvZSk#~+Ts3@~#fLtqe%$c)Sk z&2^Pr!;`O(xn^eGGbHl9CMpCn8Xi&6yr8KGUIM%gqnWkUij~PJ%j~k&wnbZ+Z(Bxg zS-aa-#=Fh?InQ~-vGm>kd9mO5et*B`a?bC2p655mnH+lK_fh?_6!uftpSEnp4T+An z166F0gIZ3BD?W$5gH?P8e5m5X;KLOkp>U+a(F(^psEucy@eWUdcT@a&_-w^X;M)`r z!e3JSb+~>P=ek?XIZ@#~YVLbWT;JU*xs$`>pXfC;tZjN2|6LfrFN_z2@i}3`m zp!z-&7JDv?KTrP`!u-Qw{N*tIN*I4NjK3bn|H%2@ls@kzG4E$3Li?OO@j3CosrZ); zYG1Jyzasv375^vvU#ji95?8119DXG{OYs5Um53b0ZzG%2^v?H>T=2bi_b=!Z`wRMbIG_Ft`o;f(KJCu$^V82^M8dqEeJ&*u zo!HO%CjW=IQZ6zs^#bSU^dII*`w#8u7nrm21!7$;5X-ngtn2ybyWsupc7bu-o!ABY zXI`Lx&kMwQT_D!`0UW-sf$DoH6IcaxOB@ z;QwQuA_Efo`3X3#*Dp4eEdb?6VAWJ zpWWZwdFP&~^1^t&GheG_lg{_GDf3+K-#3q%R!U7Pwf`Q;X9%V8?>Zv3lz;!Gcp^Mi zwRcjnG-90<@1oi=i1k*y58P0Epu$0%Cr6DL3?HK6Llq7qHeB%$jGrVq*JFR4;c)pG z<23rsC>7ewQdh@S;ObJ>ph|E}sjJf(+8%Pwp{*}<4Oox=u=1-)U9+q3Hz|KhscYL7 z{6~~uTk86(j(N6~iWp4naN=T@!g__f6+Wu)F@=vS{Jp}b6#hYBgTiMNKBw?`g^dbd zP6 zFhOCW!eoUh3R4w!QkbSNU14X1T@+?0?5ePv!tM$)74}rvOJQ$?eH3OX?5D85!fb_x z!hs40Da=tgSm6+bLlq8FI9%Zf2epxY*N9QPKRDX&`tvw&yx;Zqc91Ml&>-kbtX^}8m|2Iu%)i|2xce%I@TU=dgZ-tTwaSj>Hz=a>6l z^ZQ-h{KV(`U3bkV{(!oUg?`ud3yGV=%GEV4QEe4|5rc{4%3tAkC9S|;rTSGWT&r-M z!VL~;8~v^;H`2da`I|Y<7Qbu#7I3TIwRtP}2>1wC<998s0c-uPvRbf?>#Aeyc6I$b z{jTSC65mCvUY%#R!bgccrq1y=c|MN+d+9qh?`KaK1gAX!og?zasDA; ze5h(4=AbrwzAI@sIo>hfb?H4|{(P-ZHMnWM>(mZVTY$Cv>^U=%7~i!gqO}&yeXd=^ z;wPN*?LPAR_!5b!X9|%V##89u3*VlrH+;A=R*Zm;Reb!p{&KDfw9Rzd#cU90TE#RD25j zn8VBL@o(Y(pxXWi-j45xPb6Ex7=)|R8jlWg(t5H}->|j`* zL-=nf-_H3Mesh?A3jbStd;ag?sorxMbn>=n<&H0wzypd0;rrmW9#6oJtN01{w{STZ z{6~k&ewxm`($&3!_k!D6+kJcEuTX8P;0bLVeG=Q!4{o2QH~iUnXYPaX^uNT3uezi~ zd+SoC|J#?gXn%3IJ+Iu09}vq=ICri|322LNujvYSWU@0hI+?u#x6c(1@2TRw;D+J@ z;iDBF3(r&i^Wl@=b}m!key5L|YXN>4zP*R-xlQ~;-?{5a_O)p5q&nBol*;;t+x*M$$3qDx!A@E6Xd2V>uPR?B2I&rNIFXO&r#bPY61?OU-ER3791=ZL+ z@Z`&!c~UNG(K;!f2LJYQC;t8AEt)6Y;W}vREwxK;(K@Sm7kGx^UE%!|&$i=NIAgnl z_PB0Wke`ZW!TZ7OochBJ6(0!i-q{(K*_pWF1L5Npp8(H?+jCBW&rtE1@RJTli&>&s z#ZM8Bz0#S}b0zaDo(a!|+wUli#&Pn+>;c^bfNqvjYkBNEod-_~V?8iT-<~U^Y z-g3UPbBIH|>EF*e$Nqk-tKT@hKX`V{X8)!|o2KG3K>PY<5<9M9C*bk@opJ5@Q=b%1 zgr_Us8J?+lPxwZ~tKpj!-wLl&d^`MOhuha7K2h2AIq@YowPI(*+i*5J*p`HOsqi%BP`o9G~IoQdo*+H56sloJD zaqU+2$E{8u54@e?3Gj5qJHrPlo&z83a5>iy{3Xh_^Q^%CLiIhZ@M~fdT@aC>YJK4iQTA3C16!^`Y^g81*; z<&1B-i?x5Z({KCT+}B)(?^F0hF3+J8ojC_h1KjKI-uIG^;xinS=b3qq z;}?rr^!wl^vEypo3EBoua^@Q}sYQED@i!D6BlfZ4pTJKm{x!VkWM^Ej$vgu)T%P|m z6@P>H@v!&_{EgF`G1b#rw4I6v;QJLn06*$*XD<9xs_hGS>~v?mXF7XN@dWrj#h-xh zSNs6{Ma5ro(4JFja)h=8bDX)#6q<8dv;&Gi3!ibn(?0Wl>Wkt_;7=(2q{63(eNp1{ zJ+1I-h5snw`F5Vu7CWy+o2z&ce1pSfo*VJ^3%K78IDEzf zEn0=*%i%i}55T`r{4~5znbSY3jAv_y%k^vE55u?5HypkqtZfy3)I zI9!hV7=MZ>`^g-pnLKxtJL4vlw`kRhZ-&3U*onWhnCn>LaAOJiC_V!|SMeeT?K!bx zQA}ISQs-Lhma?Yc_8vR| i{+<==sb$XG+m}%{;dXv|;9HkF@tWnt72gAY(&2Kx zr|~l?oqk;_d5v4^@OBCl*0yMAil-~=Oza<`7u;71jI4gQJZC*h|Q|3cwu2W38A)BbIhGvD`B zE!u=?$z@w^HP3O5FDAj4E4~7*Z+6DSZ|1eq;c`p`{z=u=4F5*)Z{g+^XH5AP_Lbrr z;hPoT3g72&IoA{TU#Paz@ZL4f_&zn%m|BN>YMFPNns*y(ZM)=he9!IFO~)65;FXH6 zRk)7Wvx*;tzoz&b3Xc&xq4>w}X2nmzvvxS=?6-qwdc_AS97HT%@k#KRiqC>qD83wi zQ1L_X4;(J9`#65HYC8r0BCPE+e$Gzk+=F*=9*4_ulkokjZ2{ao*G7A>C?{5-+LtR_ zLCk&N-@M=UBkwhZg!nfW3h`ekB_=8=LJWbv(_%%tar$77i?ng^?xX?r6*q0kCg@qM=UXS{i^ z3QQB0$1Nkv@!qlffnPtcilg1H612H9%JwQ|*=OzV4TV<0MuBU=Ia6*fSrc zZ5`~7-bnEgd^7y(2R3rFTdF~uXUcxIH*a=S)U_g6zg=9RcNJIb38EXnVxpV=@5aN% zwfc{Zht2MKsPV9MwSETPRsR8gjs8E4hqW&B>!SY)|0?}E{0#kj#$2KQ1KwHxC;UqN z8^&~G&NTX_>8FWZu75==UH_VK9raW2PWs>Am+43@W~^<#{S&|jvHrXL~RMn6hC zQh$|rl>QoV|HaibrJ7cEU08=Tsiwu7K8%-Y8jhOZ;!8CRsirB_G^CoQR1?j@)HJ1< zR=WOo#z{4;PWl&csiq;-G^LtWivAgKsiq;-M2DZKX(j3((?_alw9`L?OEnFtrrD~d zA=NacnwC`4lxkYK-o%*m)U;ytKM|8^8qxY2aH*yt)ikA=mZrZ#T&ihEHBG6ewcz4v zTG!gEQj=;LSKF)7ehZEJAk{Qm)ik7q>j&qFI=l*5&r9)TEk5M|)Lj zQcXjuX-YLMpS>zIsiq;-G^Lv85UwVxQj=;LQcY8;X-G9qsixJcrYY65F0ogyCe^gO z_NvsRnrL=*ZL%sgsiq;-G^Lt`RMV7dS`qfDS#S*QA<; zRMV7d8d6PDs%f>VX-YM%47(O+QcbI~y~j1FCYqg9lRd6UH4UkzDb+Njnx<6KO1Ag7 zCe<{gnx<6KO0{bOI{ZXUL#k;?H7%*8Db=(R>^h*es%gdBdt8%h8XkL(Yf?=^s)=S{ zY8p~aQ>tl6HBG6e<+kg9Ce<{gnx<6KinRB*Ce<{|i>pc9WNlJ6+3D0x)+Tk6wMpHi zs;aulPN!~CF{zuVN!_GkQa4ePy2;u^voJNOo2*UhCOh4dYEn1Z>C{cCDs>Yzshg}# z>Lxp#x=F>PZlWeS{6tOaCOe(FNwuYJveT)XR7~n7YO1vf&@20fnm!}=w}mojFl9*tk2yYQFmG4xoed*BOojiafz zVPv@;NqoWua!a=kU-6;d**bia%*~Lw88SC(x88-BWp0Md&1}uh+NO7+P3C6E+)SC9 zwN>{Km$?}-H}kyQtZF@hcA1+YbEBQyto3?Z;xacw=4Q6$X2{&k<$5eVWNxO+&6K%W z<$4tH+zaQnNanUp=4Q&=%%H82CUY}nZl=u5a&qI2X)-rM=4Q&=tS$B((`0Uj%*~X! zS?6-&j%hMCL*{16+-T>HX)-rM=4Q&=tk&F2nVThZGh}X-%*`_GJEqCpjJyly_SX;X zwbw@GX35+vnVTVVGi7epUj1t3Y0b@$xtTIIYnQ#UHJO_sb2DXbR;|5ywexZ_WNxO+ z&Dw0QV%o{gkhz&MH|t@0^=hrTSrzsU(PVDsO8YKr3+>gY$=nQ?o0)%s+}LS1$=vQa zZm(hX8|#_<#(iVIu_oDX>@@ZpxvBleePh3|CfRT7H1-?0vER6F>^IgV`;DE(ej_*I zyxiDttV#A8JB|HDZnTpd`;9fpeq*Px-^fkvH+CBPjojF8tV#A8xv}5Kjs3=bW52N` ztuFtvE6Wp9mK?I&IoEzhp4~PS3c}`sPk?3MUT_{3DGJ)^VouvBj4fXVKn4%pvXUiUQTYK0oWntqPY0B}IJ$}C$e?X3(svS0F+apamUiPqC?ksHNOYpnL zheEKW_HTE;Mr`m65w*T6#ZF&>sQ1NS>#V~c2Yu@~?)GiqxYM_W<1XJ?jsf389BX|m zIM(@Aa@^)y#c{iDHOC#kN{*YDX)7~r^)17D#J8MdjqgF(vIO-u`<8Ot;;SIC!M70p zu+QYU(YJ_Wm9Ly*wQn)U2f40FW_yU)9`Y?9vd;Ga$MwE4j+MSrj%$2=j%$7MIX>ts z;<&AQUobKGfbmcGl@EInZBnqF&bmR@IT zmcGr_EPcDJS^5rJ-%crc}<9%9&C*Qz~bkr<^I3Go^C0pqwd{Go^B-RL+#jnNm4Z zDrZXNOm9)6b`jVSRDwijf%ah9GN#*jSa(Pm@yz`XHlgi~uD?%2`r53+0k7qFkL+u1+dfCzY#{%GF8b>ZEdY zQn@;*T%A;|PAXS-o^o|kxjLyFE$mZGDpx0!tJ`4jQ|)1UpK2TJeX3R2`&6s8HP+5o zj(w`Fv-hdC-rnO{rM*wJHTFK$*4lfS{_In2g}qO;mG(Z>R@wVhTW#-a?VNJ#Q*D{O zPqpQ?*0iuswI%jG)t1_OSu3;mskYGGr@n==R_{5y7hAoz@Lp~8-orc5>U}nO zPUC{>#Kz!Au|3#T1cM3U(O?WVk(IGGcn{b9STLV@6AVs(?+)G#-xJJb$L*ruuHabw zKyVy>eQ-Quwg*STcLYblcLv8WW-D{n(ziA^oLF6O1hH+wI~lh%cpLnY;4pYi@OH*+ zqTiP-q{3EJ@D{jK*f?L|fyAZ4hE&*;3L8>kQz~q=Dr`!Htu?_L86y?8RtB@+ zQekvFtMIRgNrermuqhQbq{60D*lJbSlnPsmgPDwx3R??<*TAL11`1bSL}5cJY)XYK zsjw*(w)WU7Tx(U>3fQYxlL{N#?bWMEg$=1NI)*81NQF(Quq72XrNUN?y~4Ftg{{r@ z>eZye#zuSfYEofCDs28tVM8ixN`)<{uqhR`*4ZmuYgO2)v{$bt73My%dNrxAAr(f) zFog}NuqhR`q{60D*s8EsxYnw$Rc^0dO)6}Z*{fHR3L8>k6NLj8QP`9UTaN|rWsFqV z+HKbdO)6|S3R536sjwjxHl@ObRM?aXqhpxDrc~J4X4eu;Dr`Ms*9T21Y&Z&2A2g}3 zAr&^I!iH4XlnPrvQ`nRWTMygyM3V|z583rWlL{M-!qf*%Dr`uFxlbr;NQF(QFgk`Q zY)XZ#2kly-NrkPYc74#K!iJ+T^+A&g8&Y9YDr`uFO{uVj!jD}nOdhf$b1%o?T+QzfXwtYPXfRf0N9l}5)fg{?Zf0#k=k*w|`UVCpamQ-@i@ zst%(tb(l3w9i~c9hgrkaVX6dmm@2LPOkwIU6_`4V!qj0ZFm)J(sl%*cRfkcSI?NiT z4pSw#Pbf?srbzGgd@(_%5QnzA_@Zsa$ku$`sc%C1TMct0_ht`*$c5`D3G&DbhX& zg+}`uwFsfX?k;ZBVm=Ioc7Yw5+#;>1t?0(s7m00}Z}-YR9tzz{tN17sT2pGza5a&9 z+B{9E!qXHlE@`?{q%>*bHsX2Ad=i|%h*U;=CP&=CY>|w}6oPZ!0gL8buBHyc&AIH@ ztBi{jaj@448nq|EZH$a#rkCb6YU9B-!9(Du#3O}HkAKp0HW*phsKs-J_wftB6X2)x z>_l8NeIwd5~e^KO9)`u4oHQA-2AMCr1#V`-m5dp5WgoCD4W zH-IMS5}6;xV`Rgq>0o{yqroGz)_|{o_MN^5v{gSvzZ&pwprHLU7%iUSTArfUC;VN; zzLvY_{cG@U@Md~X1runG1c!km!7^|>SY96rb+yL@L!mBU88~SUt7bQP*c$F(TuGz0 zJF~Z_*_k5DfCmeOw$m2N*rDj12@U~kc7pb*r@fB$Y|u@-qRt~K>O!HJTtS;JX%-}pvYm2~-Ir|~-GR`hiL!oGJEZB<-+k2;on#A6sOLB@R^LemPD9TnK zB^2sNzcjENewXA>DASJ99!q=}7>R#Vl1JQ>6bf}9b`O{emVtR-O(K0*=WXzP_*Z}_ zpomWqFJ9`wLZRNwaVQ}aIti|({}1*#cn9P*`uz!vyoY((p%U4)=M&7xS&iCa8_6k& zcXc9XH}VcB$X&|jot8-U_)%A;Xdjy**2j4;V!vZ7pQ}dBWX0NeAAT%24d2G;_;$Y; z_E=UU=MwHv=z3OhHrN3_iqDE8r_kTVsg2roktrgBUx1#$=gg6ls2+@qq~8iK6}&DI ze`2H7BMQvtPTRXFH=ipl}7c|D(73?wQ zhIhh}!u%_Hna!e?_!XbV|5nt9T0VbwwW)6tZ1ZuOzqYw9GBdJARL`hmQEx_NL|+|! zNA$?(c-JMa6|R-8qpnw7!X4qxb`Nkz#YD%fkJ%7&Fy{G~cVn7j+Q%lwu8-Xi+deKa zu7BK(aUzfSL|U#~CJ7wP5tVtuK;Okb`)sISyl>Fe~3dX-+I z*XrB#9r{jvmmbiA`X2pJ{W1Ls{rCC@`UyR|?SQrgZHwBLwKdy{_=x!K@z=%wDgN#F zns&AAUcB`1rH2w46ILfyCe|d@Cbmh6Ou8bebJ9&o1C#Da%1*%?eU3}h?KOH%TuB{M0faAhu$3)btvy}s6%51ks6UYHg#NTYFfv%J!y}oWp%ls zi|7{7E%VwQ*WQ{rBy)G>p3JBo(LF|u8$GU~Zdu*2?Qd?sWyjzhH9Ko}ia*MM(>wDCf*DtOY!H8g4a9{Ay?#A6>PsAS46w~Bs@-|)4)UGL|DYYrB>GGy- zP1iPE*Ob|m)pSGCv46k$?+778g#1&+Yw<#?2CKzH8{$|d)&rZ4&A`gAg;)(%izP%x zi1yep>~^dSTZlb{J&lPd=D~iA^}%kAju1H*D?&tI+1LPV4mKCtfIW zU)u@Bc1K2azbJ#&_ReR>d9>exwdSZlVihuWF5zC&5?wGibe%RG!gy@RB_;`dkjHNxxeZ{n9 zw8UaQj}Wn+NAVAQ()2@mv!2YO(NBInZcn@?*^|ag-hckd_5?if-u>Pt{g8K`x5<;^ z9p>HWouyZLay`d9HQqpcAR&+(NDZU~ItMZW-2$0`UNxSLo=U1kjlSPg>22uK(61r8 zVc>zBh9M2Z8b%x#eIU0XzhO$lj03Y8iW~e5WepVvRy0&LY;4%vP}8uzA<(dAv^U_* z_4d(+c{21spFlr0?7%=yU`SwCU_@YaAUBX7m=c%~m=!1v_yc8uiol9MWng1qbD$=$ zJrD@&nd052&+;D9!}H7dMfrx0u({#c=Q&1YJA#(`^)hdco~sA@^zjCmdy1Z|kJgLz z`sDi5Og%zWuma&5mjHw>; z!42`-sTxyVRo}2ra|ilX^lk22k(HB`krnA~ zHUhU)+|qnY&fvh9iZRV&a>gDRSTQ?LQc==eQZbM38PJc+3shB9HCN?SSJVgg#QuCxhdDYa4sb{7&PxDQ4Pb--|W%`)uIn%2PDhhs>-8?&GwtIH0 zyJ2o%Zr{?3()UV^l$6YyGSB1I-BrsfmYrGNyxh0ky}Wv5#mXO6Hn03)Rr9KpRqj=1 z);6#8t#z+$SQl7VRb5ftcT>iu_o|Lm^{vjRE~%bU?c3zubf&hs_Dp?q{g`0YqZN-f z><#So?RD>MUNOKE{>M<>xw|~YGu1Q8Q|u}8RCtQLqdg})&7QA4-+Pk1Y2FNPrniY# z#b)o<-Zwq*RMYRhnVvpj>&WmN;gwV9?PzoB2^`~f;dOhH^+fj(PY!$Vy*|(699dDn z;z*zRoM%QqlUqN!KDYkK`dRN46ECjMdDHWzCqj?V`G2JJdQZJ4#CKnZA{yicUMkv( z4q_^QcZ?NrqEMs=pU}lz5hFT^RIy%67V%<=xE#A(^b;!PH17e_<&;L$XB!-KXjK4*AL|<{GxI-k1Rbr&Ll|FsM zovkue!q)TWK5;i}6i+brk0BO__TUakVHFJ;g(KYeiRa9bXoi!L!z4(L;0-GexGDB(lT+(Ory_BLq)j+2TfV zz343li+jawVug5+-KvQ;B2sVze)bbB+;*%@bd>NEalg6TtC2W2H&;v)dHH!{!^T@Up@og+mK(E1Xc6Tgdkb7ey7dE9z2|QPj04v#3{5@1jqNP8RWfo%i>< zpKm=Z9#TA^`0nC+i~07p5=1JUS-QG(P3gAMPfI^5JyrU*(l1L-m-3AU{*nIC{_+01 z{CE2&`t$tv_^0~k_zV3-{`>v&{ic75f2;oye~rJ^U+3TDf5Csm|BC-rznGss|Bm_j d^Eb_BS^Ow?&*T61C*uG7`Tsrlf1W);{4ZYt5aa*= literal 175244 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

IsbK=5W|mA@!iM8cO5HV^0mP5pLcxx`5!z_ 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 @?0HDUJI20f9NSn*UHQ7FlAM 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