unicode_utils 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.txt +6 -7
- data/cdata/compatibility_decomposition_map +1 -0
- data/lib/unicode_utils.rb +5 -0
- data/lib/unicode_utils/canonical_decomposition.rb +2 -0
- data/lib/unicode_utils/compatibility_decomposition.rb +54 -0
- data/lib/unicode_utils/jamo_short_name.rb +1 -1
- data/lib/unicode_utils/nfc.rb +77 -74
- data/lib/unicode_utils/nfkc.rb +26 -0
- data/lib/unicode_utils/nfkd.rb +15 -0
- data/lib/unicode_utils/version.rb +1 -1
- data/test/test_normalization.rb +20 -0
- data/test/test_unicode_utils.rb +22 -0
- metadata +6 -2
data/README.txt
CHANGED
@@ -1,8 +1,4 @@
|
|
1
|
-
= Unicode Utils
|
2
|
-
|
3
|
-
More Unicode aware string manipulation for Ruby 1.9.
|
4
|
-
|
5
|
-
== Installing
|
1
|
+
= Unicode Utils - Unicode algorithms for Ruby 1.9
|
6
2
|
|
7
3
|
Install with RubyGems:
|
8
4
|
|
@@ -21,11 +17,14 @@ Encoding.default_internal is set (e.g. with -U or -E).
|
|
21
17
|
|
22
18
|
UnicodeUtils.name("æ") => "LATIN SMALL LETTER AE"
|
23
19
|
|
24
|
-
UnicodeUtils.upcase("
|
20
|
+
UnicodeUtils.upcase("weiß") => "WEISS"
|
21
|
+
|
25
22
|
UnicodeUtils.upcase("i", :tr) => "İ"
|
26
23
|
|
27
24
|
UnicodeUtils.downcase("Ümit") => "ümit"
|
28
25
|
|
26
|
+
UnicodeUtils.nfkc("fi") => "fi"
|
27
|
+
|
29
28
|
Start with the UnicodeUtils module in the API documentation for
|
30
29
|
complete documentation.
|
31
30
|
|
@@ -48,7 +47,7 @@ LICENSE.txt in the unicode_utils package for details.
|
|
48
47
|
Sources on Github:: http://github.com/lang/unicode_utils
|
49
48
|
Rubyforge project:: http://rubyforge.org/projects/unicode-utils
|
50
49
|
Online documentation:: http://unicode-utils.rubyforge.org
|
51
|
-
Home of the Unicode Consortium:: http://unicode.org
|
50
|
+
Home of the Unicode Consortium:: http://unicode.org
|
52
51
|
|
53
52
|
== Who?
|
54
53
|
|
@@ -0,0 +1 @@
|
|
1
|
+
0000a0000020xxxxxx0000a8000020000308xxxxxx0000aa000061xxxxxx0000af000020000304xxxxxx0000b2000032xxxxxx0000b3000033xxxxxx0000b4000020000301xxxxxx0000b50003bcxxxxxx0000b8000020000327xxxxxx0000b9000031xxxxxx0000ba00006fxxxxxx0000bc000031002044000034xxxxxx0000bd000031002044000032xxxxxx0000be000033002044000034xxxxxx00013200004900004axxxxxx00013300006900006axxxxxx00013f00004c0000b7xxxxxx00014000006c0000b7xxxxxx0001490002bc00006exxxxxx00017f000073xxxxxx0001c400004400017dxxxxxx0001c500004400017exxxxxx0001c600006400017exxxxxx0001c700004c00004axxxxxx0001c800004c00006axxxxxx0001c900006c00006axxxxxx0001ca00004e00004axxxxxx0001cb00004e00006axxxxxx0001cc00006e00006axxxxxx0001f100004400005axxxxxx0001f200004400007axxxxxx0001f300006400007axxxxxx0002b0000068xxxxxx0002b1000266xxxxxx0002b200006axxxxxx0002b3000072xxxxxx0002b4000279xxxxxx0002b500027bxxxxxx0002b6000281xxxxxx0002b7000077xxxxxx0002b8000079xxxxxx0002d8000020000306xxxxxx0002d9000020000307xxxxxx0002da00002000030axxxxxx0002db000020000328xxxxxx0002dc000020000303xxxxxx0002dd00002000030bxxxxxx0002e0000263xxxxxx0002e100006cxxxxxx0002e2000073xxxxxx0002e3000078xxxxxx0002e4000295xxxxxx00037a000020000345xxxxxx000384000020000301xxxxxx0003d00003b2xxxxxx0003d10003b8xxxxxx0003d20003a5xxxxxx0003d50003c6xxxxxx0003d60003c0xxxxxx0003f00003baxxxxxx0003f10003c1xxxxxx0003f20003c2xxxxxx0003f4000398xxxxxx0003f50003b5xxxxxx0003f90003a3xxxxxx000587000565000582xxxxxx000675000627000674xxxxxx000676000648000674xxxxxx0006770006c7000674xxxxxx00067800064a000674xxxxxx000e33000e4d000e32xxxxxx000eb3000ecd000eb2xxxxxx000edc000eab000e99xxxxxx000edd000eab000ea1xxxxxx000f0c000f0bxxxxxx000f77000fb2000f81xxxxxx000f79000fb3000f81xxxxxx0010fc0010dcxxxxxx001d2c000041xxxxxx001d2d0000c6xxxxxx001d2e000042xxxxxx001d30000044xxxxxx001d31000045xxxxxx001d3200018exxxxxx001d33000047xxxxxx001d34000048xxxxxx001d35000049xxxxxx001d3600004axxxxxx001d3700004bxxxxxx001d3800004cxxxxxx001d3900004dxxxxxx001d3a00004exxxxxx001d3c00004fxxxxxx001d3d000222xxxxxx001d3e000050xxxxxx001d3f000052xxxxxx001d40000054xxxxxx001d41000055xxxxxx001d42000057xxxxxx001d43000061xxxxxx001d44000250xxxxxx001d45000251xxxxxx001d46001d02xxxxxx001d47000062xxxxxx001d48000064xxxxxx001d49000065xxxxxx001d4a000259xxxxxx001d4b00025bxxxxxx001d4c00025cxxxxxx001d4d000067xxxxxx001d4f00006bxxxxxx001d5000006dxxxxxx001d5100014bxxxxxx001d5200006fxxxxxx001d53000254xxxxxx001d54001d16xxxxxx001d55001d17xxxxxx001d56000070xxxxxx001d57000074xxxxxx001d58000075xxxxxx001d59001d1dxxxxxx001d5a00026fxxxxxx001d5b000076xxxxxx001d5c001d25xxxxxx001d5d0003b2xxxxxx001d5e0003b3xxxxxx001d5f0003b4xxxxxx001d600003c6xxxxxx001d610003c7xxxxxx001d62000069xxxxxx001d63000072xxxxxx001d64000075xxxxxx001d65000076xxxxxx001d660003b2xxxxxx001d670003b3xxxxxx001d680003c1xxxxxx001d690003c6xxxxxx001d6a0003c7xxxxxx001d7800043dxxxxxx001d9b000252xxxxxx001d9c000063xxxxxx001d9d000255xxxxxx001d9e0000f0xxxxxx001d9f00025cxxxxxx001da0000066xxxxxx001da100025fxxxxxx001da2000261xxxxxx001da3000265xxxxxx001da4000268xxxxxx001da5000269xxxxxx001da600026axxxxxx001da7001d7bxxxxxx001da800029dxxxxxx001da900026dxxxxxx001daa001d85xxxxxx001dab00029fxxxxxx001dac000271xxxxxx001dad000270xxxxxx001dae000272xxxxxx001daf000273xxxxxx001db0000274xxxxxx001db1000275xxxxxx001db2000278xxxxxx001db3000282xxxxxx001db4000283xxxxxx001db50001abxxxxxx001db6000289xxxxxx001db700028axxxxxx001db8001d1cxxxxxx001db900028bxxxxxx001dba00028cxxxxxx001dbb00007axxxxxx001dbc000290xxxxxx001dbd000291xxxxxx001dbe000292xxxxxx001dbf0003b8xxxxxx001e9a0000610002bexxxxxx001fbd000020000313xxxxxx001fbf000020000313xxxxxx001fc0000020000342xxxxxx001ffe000020000314xxxxxx002002000020xxxxxx002003000020xxxxxx002004000020xxxxxx002005000020xxxxxx002006000020xxxxxx002007000020xxxxxx002008000020xxxxxx002009000020xxxxxx00200a000020xxxxxx002011002010xxxxxx002017000020000333xxxxxx00202400002exxxxxx00202500002e00002exxxxxx00202600002e00002e00002exxxxxx00202f000020xxxxxx002033002032002032xxxxxx002034002032002032002032xxxxxx002036002035002035xxxxxx002037002035002035002035xxxxxx00203c000021000021xxxxxx00203e000020000305xxxxxx00204700003f00003fxxxxxx00204800003f000021xxxxxx00204900002100003fxxxxxx002057002032002032002032002032xxxxxx00205f000020xxxxxx002070000030xxxxxx002071000069xxxxxx002074000034xxxxxx002075000035xxxxxx002076000036xxxxxx002077000037xxxxxx002078000038xxxxxx002079000039xxxxxx00207a00002bxxxxxx00207b002212xxxxxx00207c00003dxxxxxx00207d000028xxxxxx00207e000029xxxxxx00207f00006exxxxxx002080000030xxxxxx002081000031xxxxxx002082000032xxxxxx002083000033xxxxxx002084000034xxxxxx002085000035xxxxxx002086000036xxxxxx002087000037xxxxxx002088000038xxxxxx002089000039xxxxxx00208a00002bxxxxxx00208b002212xxxxxx00208c00003dxxxxxx00208d000028xxxxxx00208e000029xxxxxx002090000061xxxxxx002091000065xxxxxx00209200006fxxxxxx002093000078xxxxxx002094000259xxxxxx0020a8000052000073xxxxxx00210000006100002f000063xxxxxx00210100006100002f000073xxxxxx002102000043xxxxxx0021030000b0000043xxxxxx00210500006300002f00006fxxxxxx00210600006300002f000075xxxxxx002107000190xxxxxx0021090000b0000046xxxxxx00210a000067xxxxxx00210b000048xxxxxx00210c000048xxxxxx00210d000048xxxxxx00210e000068xxxxxx00210f000127xxxxxx002110000049xxxxxx002111000049xxxxxx00211200004cxxxxxx00211300006cxxxxxx00211500004exxxxxx00211600004e00006fxxxxxx002119000050xxxxxx00211a000051xxxxxx00211b000052xxxxxx00211c000052xxxxxx00211d000052xxxxxx00212000005300004dxxxxxx00212100005400004500004cxxxxxx00212200005400004dxxxxxx00212400005axxxxxx00212800005axxxxxx00212c000042xxxxxx00212d000043xxxxxx00212f000065xxxxxx002130000045xxxxxx002131000046xxxxxx00213300004dxxxxxx00213400006fxxxxxx0021350005d0xxxxxx0021360005d1xxxxxx0021370005d2xxxxxx0021380005d3xxxxxx002139000069xxxxxx00213b000046000041000058xxxxxx00213c0003c0xxxxxx00213d0003b3xxxxxx00213e000393xxxxxx00213f0003a0xxxxxx002140002211xxxxxx002145000044xxxxxx002146000064xxxxxx002147000065xxxxxx002148000069xxxxxx00214900006axxxxxx002153000031002044000033xxxxxx002154000032002044000033xxxxxx002155000031002044000035xxxxxx002156000032002044000035xxxxxx002157000033002044000035xxxxxx002158000034002044000035xxxxxx002159000031002044000036xxxxxx00215a000035002044000036xxxxxx00215b000031002044000038xxxxxx00215c000033002044000038xxxxxx00215d000035002044000038xxxxxx00215e000037002044000038xxxxxx00215f000031002044xxxxxx002160000049xxxxxx002161000049000049xxxxxx002162000049000049000049xxxxxx002163000049000056xxxxxx002164000056xxxxxx002165000056000049xxxxxx002166000056000049000049xxxxxx002167000056000049000049000049xxxxxx002168000049000058xxxxxx002169000058xxxxxx00216a000058000049xxxxxx00216b000058000049000049xxxxxx00216c00004cxxxxxx00216d000043xxxxxx00216e000044xxxxxx00216f00004dxxxxxx002170000069xxxxxx002171000069000069xxxxxx002172000069000069000069xxxxxx002173000069000076xxxxxx002174000076xxxxxx002175000076000069xxxxxx002176000076000069000069xxxxxx002177000076000069000069000069xxxxxx002178000069000078xxxxxx002179000078xxxxxx00217a000078000069xxxxxx00217b000078000069000069xxxxxx00217c00006cxxxxxx00217d000063xxxxxx00217e000064xxxxxx00217f00006dxxxxxx00222c00222b00222bxxxxxx00222d00222b00222b00222bxxxxxx00222f00222e00222exxxxxx00223000222e00222e00222exxxxxx002460000031xxxxxx002461000032xxxxxx002462000033xxxxxx002463000034xxxxxx002464000035xxxxxx002465000036xxxxxx002466000037xxxxxx002467000038xxxxxx002468000039xxxxxx002469000031000030xxxxxx00246a000031000031xxxxxx00246b000031000032xxxxxx00246c000031000033xxxxxx00246d000031000034xxxxxx00246e000031000035xxxxxx00246f000031000036xxxxxx002470000031000037xxxxxx002471000031000038xxxxxx002472000031000039xxxxxx002473000032000030xxxxxx002474000028000031000029xxxxxx002475000028000032000029xxxxxx002476000028000033000029xxxxxx002477000028000034000029xxxxxx002478000028000035000029xxxxxx002479000028000036000029xxxxxx00247a000028000037000029xxxxxx00247b000028000038000029xxxxxx00247c000028000039000029xxxxxx00247d000028000031000030000029xxxxxx00247e000028000031000031000029xxxxxx00247f000028000031000032000029xxxxxx002480000028000031000033000029xxxxxx002481000028000031000034000029xxxxxx002482000028000031000035000029xxxxxx002483000028000031000036000029xxxxxx002484000028000031000037000029xxxxxx002485000028000031000038000029xxxxxx002486000028000031000039000029xxxxxx002487000028000032000030000029xxxxxx00248800003100002exxxxxx00248900003200002exxxxxx00248a00003300002exxxxxx00248b00003400002exxxxxx00248c00003500002exxxxxx00248d00003600002exxxxxx00248e00003700002exxxxxx00248f00003800002exxxxxx00249000003900002exxxxxx00249100003100003000002exxxxxx00249200003100003100002exxxxxx00249300003100003200002exxxxxx00249400003100003300002exxxxxx00249500003100003400002exxxxxx00249600003100003500002exxxxxx00249700003100003600002exxxxxx00249800003100003700002exxxxxx00249900003100003800002exxxxxx00249a00003100003900002exxxxxx00249b00003200003000002exxxxxx00249c000028000061000029xxxxxx00249d000028000062000029xxxxxx00249e000028000063000029xxxxxx00249f000028000064000029xxxxxx0024a0000028000065000029xxxxxx0024a1000028000066000029xxxxxx0024a2000028000067000029xxxxxx0024a3000028000068000029xxxxxx0024a4000028000069000029xxxxxx0024a500002800006a000029xxxxxx0024a600002800006b000029xxxxxx0024a700002800006c000029xxxxxx0024a800002800006d000029xxxxxx0024a900002800006e000029xxxxxx0024aa00002800006f000029xxxxxx0024ab000028000070000029xxxxxx0024ac000028000071000029xxxxxx0024ad000028000072000029xxxxxx0024ae000028000073000029xxxxxx0024af000028000074000029xxxxxx0024b0000028000075000029xxxxxx0024b1000028000076000029xxxxxx0024b2000028000077000029xxxxxx0024b3000028000078000029xxxxxx0024b4000028000079000029xxxxxx0024b500002800007a000029xxxxxx0024b6000041xxxxxx0024b7000042xxxxxx0024b8000043xxxxxx0024b9000044xxxxxx0024ba000045xxxxxx0024bb000046xxxxxx0024bc000047xxxxxx0024bd000048xxxxxx0024be000049xxxxxx0024bf00004axxxxxx0024c000004bxxxxxx0024c100004cxxxxxx0024c200004dxxxxxx0024c300004exxxxxx0024c400004fxxxxxx0024c5000050xxxxxx0024c6000051xxxxxx0024c7000052xxxxxx0024c8000053xxxxxx0024c9000054xxxxxx0024ca000055xxxxxx0024cb000056xxxxxx0024cc000057xxxxxx0024cd000058xxxxxx0024ce000059xxxxxx0024cf00005axxxxxx0024d0000061xxxxxx0024d1000062xxxxxx0024d2000063xxxxxx0024d3000064xxxxxx0024d4000065xxxxxx0024d5000066xxxxxx0024d6000067xxxxxx0024d7000068xxxxxx0024d8000069xxxxxx0024d900006axxxxxx0024da00006bxxxxxx0024db00006cxxxxxx0024dc00006dxxxxxx0024dd00006exxxxxx0024de00006fxxxxxx0024df000070xxxxxx0024e0000071xxxxxx0024e1000072xxxxxx0024e2000073xxxxxx0024e3000074xxxxxx0024e4000075xxxxxx0024e5000076xxxxxx0024e6000077xxxxxx0024e7000078xxxxxx0024e8000079xxxxxx0024e900007axxxxxx0024ea000030xxxxxx002a0c00222b00222b00222b00222bxxxxxx002a7400003a00003a00003dxxxxxx002a7500003d00003dxxxxxx002a7600003d00003d00003dxxxxxx002c7c00006axxxxxx002c7d000056xxxxxx002d6f002d61xxxxxx002e9f006bcdxxxxxx002ef3009f9fxxxxxx002f00004e00xxxxxx002f01004e28xxxxxx002f02004e36xxxxxx002f03004e3fxxxxxx002f04004e59xxxxxx002f05004e85xxxxxx002f06004e8cxxxxxx002f07004ea0xxxxxx002f08004ebaxxxxxx002f0900513fxxxxxx002f0a005165xxxxxx002f0b00516bxxxxxx002f0c005182xxxxxx002f0d005196xxxxxx002f0e0051abxxxxxx002f0f0051e0xxxxxx002f100051f5xxxxxx002f11005200xxxxxx002f1200529bxxxxxx002f130052f9xxxxxx002f14005315xxxxxx002f1500531axxxxxx002f16005338xxxxxx002f17005341xxxxxx002f1800535cxxxxxx002f19005369xxxxxx002f1a005382xxxxxx002f1b0053b6xxxxxx002f1c0053c8xxxxxx002f1d0053e3xxxxxx002f1e0056d7xxxxxx002f1f00571fxxxxxx002f200058ebxxxxxx002f21005902xxxxxx002f2200590axxxxxx002f23005915xxxxxx002f24005927xxxxxx002f25005973xxxxxx002f26005b50xxxxxx002f27005b80xxxxxx002f28005bf8xxxxxx002f29005c0fxxxxxx002f2a005c22xxxxxx002f2b005c38xxxxxx002f2c005c6exxxxxx002f2d005c71xxxxxx002f2e005ddbxxxxxx002f2f005de5xxxxxx002f30005df1xxxxxx002f31005dfexxxxxx002f32005e72xxxxxx002f33005e7axxxxxx002f34005e7fxxxxxx002f35005ef4xxxxxx002f36005efexxxxxx002f37005f0bxxxxxx002f38005f13xxxxxx002f39005f50xxxxxx002f3a005f61xxxxxx002f3b005f73xxxxxx002f3c005fc3xxxxxx002f3d006208xxxxxx002f3e006236xxxxxx002f3f00624bxxxxxx002f4000652fxxxxxx002f41006534xxxxxx002f42006587xxxxxx002f43006597xxxxxx002f440065a4xxxxxx002f450065b9xxxxxx002f460065e0xxxxxx002f470065e5xxxxxx002f480066f0xxxxxx002f49006708xxxxxx002f4a006728xxxxxx002f4b006b20xxxxxx002f4c006b62xxxxxx002f4d006b79xxxxxx002f4e006bb3xxxxxx002f4f006bcbxxxxxx002f50006bd4xxxxxx002f51006bdbxxxxxx002f52006c0fxxxxxx002f53006c14xxxxxx002f54006c34xxxxxx002f5500706bxxxxxx002f5600722axxxxxx002f57007236xxxxxx002f5800723bxxxxxx002f5900723fxxxxxx002f5a007247xxxxxx002f5b007259xxxxxx002f5c00725bxxxxxx002f5d0072acxxxxxx002f5e007384xxxxxx002f5f007389xxxxxx002f600074dcxxxxxx002f610074e6xxxxxx002f62007518xxxxxx002f6300751fxxxxxx002f64007528xxxxxx002f65007530xxxxxx002f6600758bxxxxxx002f67007592xxxxxx002f68007676xxxxxx002f6900767dxxxxxx002f6a0076aexxxxxx002f6b0076bfxxxxxx002f6c0076eexxxxxx002f6d0077dbxxxxxx002f6e0077e2xxxxxx002f6f0077f3xxxxxx002f7000793axxxxxx002f710079b8xxxxxx002f720079bexxxxxx002f73007a74xxxxxx002f74007acbxxxxxx002f75007af9xxxxxx002f76007c73xxxxxx002f77007cf8xxxxxx002f78007f36xxxxxx002f79007f51xxxxxx002f7a007f8axxxxxx002f7b007fbdxxxxxx002f7c008001xxxxxx002f7d00800cxxxxxx002f7e008012xxxxxx002f7f008033xxxxxx002f8000807fxxxxxx002f81008089xxxxxx002f820081e3xxxxxx002f830081eaxxxxxx002f840081f3xxxxxx002f850081fcxxxxxx002f8600820cxxxxxx002f8700821bxxxxxx002f8800821fxxxxxx002f8900826exxxxxx002f8a008272xxxxxx002f8b008278xxxxxx002f8c00864dxxxxxx002f8d00866bxxxxxx002f8e008840xxxxxx002f8f00884cxxxxxx002f90008863xxxxxx002f9100897exxxxxx002f9200898bxxxxxx002f930089d2xxxxxx002f94008a00xxxxxx002f95008c37xxxxxx002f96008c46xxxxxx002f97008c55xxxxxx002f98008c78xxxxxx002f99008c9dxxxxxx002f9a008d64xxxxxx002f9b008d70xxxxxx002f9c008db3xxxxxx002f9d008eabxxxxxx002f9e008ecaxxxxxx002f9f008f9bxxxxxx002fa0008fb0xxxxxx002fa1008fb5xxxxxx002fa2009091xxxxxx002fa3009149xxxxxx002fa40091c6xxxxxx002fa50091ccxxxxxx002fa60091d1xxxxxx002fa7009577xxxxxx002fa8009580xxxxxx002fa900961cxxxxxx002faa0096b6xxxxxx002fab0096b9xxxxxx002fac0096e8xxxxxx002fad009751xxxxxx002fae00975exxxxxx002faf009762xxxxxx002fb0009769xxxxxx002fb10097cbxxxxxx002fb20097edxxxxxx002fb30097f3xxxxxx002fb4009801xxxxxx002fb50098a8xxxxxx002fb60098dbxxxxxx002fb70098dfxxxxxx002fb8009996xxxxxx002fb9009999xxxxxx002fba0099acxxxxxx002fbb009aa8xxxxxx002fbc009ad8xxxxxx002fbd009adfxxxxxx002fbe009b25xxxxxx002fbf009b2fxxxxxx002fc0009b32xxxxxx002fc1009b3cxxxxxx002fc2009b5axxxxxx002fc3009ce5xxxxxx002fc4009e75xxxxxx002fc5009e7fxxxxxx002fc6009ea5xxxxxx002fc7009ebbxxxxxx002fc8009ec3xxxxxx002fc9009ecdxxxxxx002fca009ed1xxxxxx002fcb009ef9xxxxxx002fcc009efdxxxxxx002fcd009f0exxxxxx002fce009f13xxxxxx002fcf009f20xxxxxx002fd0009f3bxxxxxx002fd1009f4axxxxxx002fd2009f52xxxxxx002fd3009f8dxxxxxx002fd4009f9cxxxxxx002fd5009fa0xxxxxx003000000020xxxxxx003036003012xxxxxx003038005341xxxxxx003039005344xxxxxx00303a005345xxxxxx00309b000020003099xxxxxx00309c00002000309axxxxxx00309f00308800308axxxxxx0030ff0030b30030c8xxxxxx003131001100xxxxxx003132001101xxxxxx0031330011aaxxxxxx003134001102xxxxxx0031350011acxxxxxx0031360011adxxxxxx003137001103xxxxxx003138001104xxxxxx003139001105xxxxxx00313a0011b0xxxxxx00313b0011b1xxxxxx00313c0011b2xxxxxx00313d0011b3xxxxxx00313e0011b4xxxxxx00313f0011b5xxxxxx00314000111axxxxxx003141001106xxxxxx003142001107xxxxxx003143001108xxxxxx003144001121xxxxxx003145001109xxxxxx00314600110axxxxxx00314700110bxxxxxx00314800110cxxxxxx00314900110dxxxxxx00314a00110exxxxxx00314b00110fxxxxxx00314c001110xxxxxx00314d001111xxxxxx00314e001112xxxxxx00314f001161xxxxxx003150001162xxxxxx003151001163xxxxxx003152001164xxxxxx003153001165xxxxxx003154001166xxxxxx003155001167xxxxxx003156001168xxxxxx003157001169xxxxxx00315800116axxxxxx00315900116bxxxxxx00315a00116cxxxxxx00315b00116dxxxxxx00315c00116exxxxxx00315d00116fxxxxxx00315e001170xxxxxx00315f001171xxxxxx003160001172xxxxxx003161001173xxxxxx003162001174xxxxxx003163001175xxxxxx003164001160xxxxxx003165001114xxxxxx003166001115xxxxxx0031670011c7xxxxxx0031680011c8xxxxxx0031690011ccxxxxxx00316a0011cexxxxxx00316b0011d3xxxxxx00316c0011d7xxxxxx00316d0011d9xxxxxx00316e00111cxxxxxx00316f0011ddxxxxxx0031700011dfxxxxxx00317100111dxxxxxx00317200111exxxxxx003173001120xxxxxx003174001122xxxxxx003175001123xxxxxx003176001127xxxxxx003177001129xxxxxx00317800112bxxxxxx00317900112cxxxxxx00317a00112dxxxxxx00317b00112exxxxxx00317c00112fxxxxxx00317d001132xxxxxx00317e001136xxxxxx00317f001140xxxxxx003180001147xxxxxx00318100114cxxxxxx0031820011f1xxxxxx0031830011f2xxxxxx003184001157xxxxxx003185001158xxxxxx003186001159xxxxxx003187001184xxxxxx003188001185xxxxxx003189001188xxxxxx00318a001191xxxxxx00318b001192xxxxxx00318c001194xxxxxx00318d00119exxxxxx00318e0011a1xxxxxx003192004e00xxxxxx003193004e8cxxxxxx003194004e09xxxxxx0031950056dbxxxxxx003196004e0axxxxxx003197004e2dxxxxxx003198004e0bxxxxxx003199007532xxxxxx00319a004e59xxxxxx00319b004e19xxxxxx00319c004e01xxxxxx00319d005929xxxxxx00319e005730xxxxxx00319f004ebaxxxxxx003200000028001100000029xxxxxx003201000028001102000029xxxxxx003202000028001103000029xxxxxx003203000028001105000029xxxxxx003204000028001106000029xxxxxx003205000028001107000029xxxxxx003206000028001109000029xxxxxx00320700002800110b000029xxxxxx00320800002800110c000029xxxxxx00320900002800110e000029xxxxxx00320a00002800110f000029xxxxxx00320b000028001110000029xxxxxx00320c000028001111000029xxxxxx00320d000028001112000029xxxxxx00320e000028001100001161000029xxxxxx00320f000028001102001161000029xxxxxx003210000028001103001161000029xxxxxx003211000028001105001161000029xxxxxx003212000028001106001161000029xxxxxx003213000028001107001161000029xxxxxx003214000028001109001161000029xxxxxx00321500002800110b001161000029xxxxxx00321600002800110c001161000029xxxxxx00321700002800110e001161000029xxxxxx00321800002800110f001161000029xxxxxx003219000028001110001161000029xxxxxx00321a000028001111001161000029xxxxxx00321b000028001112001161000029xxxxxx00321c00002800110c00116e000029xxxxxx00321d00002800110b00116900110c0011650011ab000029xxxxxx00321e00002800110b00116900111200116e000029xxxxxx003220000028004e00000029xxxxxx003221000028004e8c000029xxxxxx003222000028004e09000029xxxxxx0032230000280056db000029xxxxxx003224000028004e94000029xxxxxx00322500002800516d000029xxxxxx003226000028004e03000029xxxxxx00322700002800516b000029xxxxxx003228000028004e5d000029xxxxxx003229000028005341000029xxxxxx00322a000028006708000029xxxxxx00322b00002800706b000029xxxxxx00322c000028006c34000029xxxxxx00322d000028006728000029xxxxxx00322e0000280091d1000029xxxxxx00322f00002800571f000029xxxxxx0032300000280065e5000029xxxxxx00323100002800682a000029xxxxxx003232000028006709000029xxxxxx00323300002800793e000029xxxxxx00323400002800540d000029xxxxxx003235000028007279000029xxxxxx003236000028008ca1000029xxxxxx00323700002800795d000029xxxxxx0032380000280052b4000029xxxxxx003239000028004ee3000029xxxxxx00323a00002800547c000029xxxxxx00323b000028005b66000029xxxxxx00323c0000280076e3000029xxxxxx00323d000028004f01000029xxxxxx00323e000028008cc7000029xxxxxx00323f000028005354000029xxxxxx00324000002800796d000029xxxxxx003241000028004f11000029xxxxxx0032420000280081ea000029xxxxxx0032430000280081f3000029xxxxxx003250000050000054000045xxxxxx003251000032000031xxxxxx003252000032000032xxxxxx003253000032000033xxxxxx003254000032000034xxxxxx003255000032000035xxxxxx003256000032000036xxxxxx003257000032000037xxxxxx003258000032000038xxxxxx003259000032000039xxxxxx00325a000033000030xxxxxx00325b000033000031xxxxxx00325c000033000032xxxxxx00325d000033000033xxxxxx00325e000033000034xxxxxx00325f000033000035xxxxxx003260001100xxxxxx003261001102xxxxxx003262001103xxxxxx003263001105xxxxxx003264001106xxxxxx003265001107xxxxxx003266001109xxxxxx00326700110bxxxxxx00326800110cxxxxxx00326900110exxxxxx00326a00110fxxxxxx00326b001110xxxxxx00326c001111xxxxxx00326d001112xxxxxx00326e001100001161xxxxxx00326f001102001161xxxxxx003270001103001161xxxxxx003271001105001161xxxxxx003272001106001161xxxxxx003273001107001161xxxxxx003274001109001161xxxxxx00327500110b001161xxxxxx00327600110c001161xxxxxx00327700110e001161xxxxxx00327800110f001161xxxxxx003279001110001161xxxxxx00327a001111001161xxxxxx00327b001112001161xxxxxx00327c00110e0011610011b7001100001169xxxxxx00327d00110c00116e00110b001174xxxxxx00327e00110b00116exxxxxx003280004e00xxxxxx003281004e8cxxxxxx003282004e09xxxxxx0032830056dbxxxxxx003284004e94xxxxxx00328500516dxxxxxx003286004e03xxxxxx00328700516bxxxxxx003288004e5dxxxxxx003289005341xxxxxx00328a006708xxxxxx00328b00706bxxxxxx00328c006c34xxxxxx00328d006728xxxxxx00328e0091d1xxxxxx00328f00571fxxxxxx0032900065e5xxxxxx00329100682axxxxxx003292006709xxxxxx00329300793exxxxxx00329400540dxxxxxx003295007279xxxxxx003296008ca1xxxxxx00329700795dxxxxxx0032980052b4xxxxxx0032990079d8xxxxxx00329a007537xxxxxx00329b005973xxxxxx00329c009069xxxxxx00329d00512axxxxxx00329e005370xxxxxx00329f006ce8xxxxxx0032a0009805xxxxxx0032a1004f11xxxxxx0032a2005199xxxxxx0032a3006b63xxxxxx0032a4004e0axxxxxx0032a5004e2dxxxxxx0032a6004e0bxxxxxx0032a7005de6xxxxxx0032a80053f3xxxxxx0032a900533bxxxxxx0032aa005b97xxxxxx0032ab005b66xxxxxx0032ac0076e3xxxxxx0032ad004f01xxxxxx0032ae008cc7xxxxxx0032af005354xxxxxx0032b000591cxxxxxx0032b1000033000036xxxxxx0032b2000033000037xxxxxx0032b3000033000038xxxxxx0032b4000033000039xxxxxx0032b5000034000030xxxxxx0032b6000034000031xxxxxx0032b7000034000032xxxxxx0032b8000034000033xxxxxx0032b9000034000034xxxxxx0032ba000034000035xxxxxx0032bb000034000036xxxxxx0032bc000034000037xxxxxx0032bd000034000038xxxxxx0032be000034000039xxxxxx0032bf000035000030xxxxxx0032c0000031006708xxxxxx0032c1000032006708xxxxxx0032c2000033006708xxxxxx0032c3000034006708xxxxxx0032c4000035006708xxxxxx0032c5000036006708xxxxxx0032c6000037006708xxxxxx0032c7000038006708xxxxxx0032c8000039006708xxxxxx0032c9000031000030006708xxxxxx0032ca000031000031006708xxxxxx0032cb000031000032006708xxxxxx0032cc000048000067xxxxxx0032cd000065000072000067xxxxxx0032ce000065000056xxxxxx0032cf00004c000054000044xxxxxx0032d00030a2xxxxxx0032d10030a4xxxxxx0032d20030a6xxxxxx0032d30030a8xxxxxx0032d40030aaxxxxxx0032d50030abxxxxxx0032d60030adxxxxxx0032d70030afxxxxxx0032d80030b1xxxxxx0032d90030b3xxxxxx0032da0030b5xxxxxx0032db0030b7xxxxxx0032dc0030b9xxxxxx0032dd0030bbxxxxxx0032de0030bdxxxxxx0032df0030bfxxxxxx0032e00030c1xxxxxx0032e10030c4xxxxxx0032e20030c6xxxxxx0032e30030c8xxxxxx0032e40030caxxxxxx0032e50030cbxxxxxx0032e60030ccxxxxxx0032e70030cdxxxxxx0032e80030cexxxxxx0032e90030cfxxxxxx0032ea0030d2xxxxxx0032eb0030d5xxxxxx0032ec0030d8xxxxxx0032ed0030dbxxxxxx0032ee0030dexxxxxx0032ef0030dfxxxxxx0032f00030e0xxxxxx0032f10030e1xxxxxx0032f20030e2xxxxxx0032f30030e4xxxxxx0032f40030e6xxxxxx0032f50030e8xxxxxx0032f60030e9xxxxxx0032f70030eaxxxxxx0032f80030ebxxxxxx0032f90030ecxxxxxx0032fa0030edxxxxxx0032fb0030efxxxxxx0032fc0030f0xxxxxx0032fd0030f1xxxxxx0032fe0030f2xxxxxx0033000030a20030d10030fc0030c8xxxxxx0033010030a20030eb0030d50030a1xxxxxx0033020030a20030f30030da0030a2xxxxxx0033030030a20030fc0030ebxxxxxx0033040030a40030cb0030f30030b0xxxxxx0033050030a40030f30030c1xxxxxx0033060030a60030a90030f3xxxxxx0033070030a80030b90030af0030fc0030c9xxxxxx0033080030a80030fc0030ab0030fcxxxxxx0033090030aa0030f30030b9xxxxxx00330a0030aa0030fc0030e0xxxxxx00330b0030ab0030a40030eaxxxxxx00330c0030ab0030e90030c30030c8xxxxxx00330d0030ab0030ed0030ea0030fcxxxxxx00330e0030ac0030ed0030f3xxxxxx00330f0030ac0030f30030dexxxxxx0033100030ae0030acxxxxxx0033110030ae0030cb0030fcxxxxxx0033120030ad0030e50030ea0030fcxxxxxx0033130030ae0030eb0030c00030fcxxxxxx0033140030ad0030edxxxxxx0033150030ad0030ed0030b00030e90030e0xxxxxx0033160030ad0030ed0030e10030fc0030c80030ebxxxxxx0033170030ad0030ed0030ef0030c30030c8xxxxxx0033180030b00030e90030e0xxxxxx0033190030b00030e90030e00030c80030f3xxxxxx00331a0030af0030eb0030bc0030a40030edxxxxxx00331b0030af0030ed0030fc0030cdxxxxxx00331c0030b10030fc0030b9xxxxxx00331d0030b30030eb0030caxxxxxx00331e0030b30030fc0030ddxxxxxx00331f0030b50030a40030af0030ebxxxxxx0033200030b50030f30030c10030fc0030e0xxxxxx0033210030b70030ea0030f30030b0xxxxxx0033220030bb0030f30030c1xxxxxx0033230030bb0030f30030c8xxxxxx0033240030c00030fc0030b9xxxxxx0033250030c70030b7xxxxxx0033260030c90030ebxxxxxx0033270030c80030f3xxxxxx0033280030ca0030cexxxxxx0033290030ce0030c30030c8xxxxxx00332a0030cf0030a40030c4xxxxxx00332b0030d10030fc0030bb0030f30030c8xxxxxx00332c0030d10030fc0030c4xxxxxx00332d0030d00030fc0030ec0030ebxxxxxx00332e0030d40030a20030b90030c80030ebxxxxxx00332f0030d40030af0030ebxxxxxx0033300030d40030b3xxxxxx0033310030d30030ebxxxxxx0033320030d50030a10030e90030c30030c9xxxxxx0033330030d50030a30030fc0030c8xxxxxx0033340030d60030c30030b70030a70030ebxxxxxx0033350030d50030e90030f3xxxxxx0033360030d80030af0030bf0030fc0030ebxxxxxx0033370030da0030bdxxxxxx0033380030da0030cb0030d2xxxxxx0033390030d80030eb0030c4xxxxxx00333a0030da0030f30030b9xxxxxx00333b0030da0030fc0030b8xxxxxx00333c0030d90030fc0030bfxxxxxx00333d0030dd0030a40030f30030c8xxxxxx00333e0030dc0030eb0030c8xxxxxx00333f0030db0030f3xxxxxx0033400030dd0030f30030c9xxxxxx0033410030db0030fc0030ebxxxxxx0033420030db0030fc0030f3xxxxxx0033430030de0030a40030af0030edxxxxxx0033440030de0030a40030ebxxxxxx0033450030de0030c30030cfxxxxxx0033460030de0030eb0030afxxxxxx0033470030de0030f30030b70030e70030f3xxxxxx0033480030df0030af0030ed0030f3xxxxxx0033490030df0030eaxxxxxx00334a0030df0030ea0030d00030fc0030ebxxxxxx00334b0030e10030acxxxxxx00334c0030e10030ac0030c80030f3xxxxxx00334d0030e10030fc0030c80030ebxxxxxx00334e0030e40030fc0030c9xxxxxx00334f0030e40030fc0030ebxxxxxx0033500030e60030a20030f3xxxxxx0033510030ea0030c30030c80030ebxxxxxx0033520030ea0030e9xxxxxx0033530030eb0030d40030fcxxxxxx0033540030eb0030fc0030d60030ebxxxxxx0033550030ec0030e0xxxxxx0033560030ec0030f30030c80030b20030f3xxxxxx0033570030ef0030c30030c8xxxxxx0033580000300070b9xxxxxx0033590000310070b9xxxxxx00335a0000320070b9xxxxxx00335b0000330070b9xxxxxx00335c0000340070b9xxxxxx00335d0000350070b9xxxxxx00335e0000360070b9xxxxxx00335f0000370070b9xxxxxx0033600000380070b9xxxxxx0033610000390070b9xxxxxx0033620000310000300070b9xxxxxx0033630000310000310070b9xxxxxx0033640000310000320070b9xxxxxx0033650000310000330070b9xxxxxx0033660000310000340070b9xxxxxx0033670000310000350070b9xxxxxx0033680000310000360070b9xxxxxx0033690000310000370070b9xxxxxx00336a0000310000380070b9xxxxxx00336b0000310000390070b9xxxxxx00336c0000320000300070b9xxxxxx00336d0000320000310070b9xxxxxx00336e0000320000320070b9xxxxxx00336f0000320000330070b9xxxxxx0033700000320000340070b9xxxxxx003371000068000050000061xxxxxx003372000064000061xxxxxx003373000041000055xxxxxx003374000062000061000072xxxxxx00337500006f000056xxxxxx003376000070000063xxxxxx00337700006400006dxxxxxx00337800006400006d0000b2xxxxxx00337900006400006d0000b3xxxxxx00337a000049000055xxxxxx00337b005e73006210xxxxxx00337c00662d00548cxxxxxx00337d005927006b63xxxxxx00337e00660e006cbbxxxxxx00337f00682a005f0f004f1a00793exxxxxx003380000070000041xxxxxx00338100006e000041xxxxxx0033820003bc000041xxxxxx00338300006d000041xxxxxx00338400006b000041xxxxxx00338500004b000042xxxxxx00338600004d000042xxxxxx003387000047000042xxxxxx00338800006300006100006cxxxxxx00338900006b00006300006100006cxxxxxx00338a000070000046xxxxxx00338b00006e000046xxxxxx00338c0003bc000046xxxxxx00338d0003bc000067xxxxxx00338e00006d000067xxxxxx00338f00006b000067xxxxxx00339000004800007axxxxxx00339100006b00004800007axxxxxx00339200004d00004800007axxxxxx00339300004700004800007axxxxxx00339400005400004800007axxxxxx0033950003bc002113xxxxxx00339600006d002113xxxxxx003397000064002113xxxxxx00339800006b002113xxxxxx00339900006600006dxxxxxx00339a00006e00006dxxxxxx00339b0003bc00006dxxxxxx00339c00006d00006dxxxxxx00339d00006300006dxxxxxx00339e00006b00006dxxxxxx00339f00006d00006d0000b2xxxxxx0033a000006300006d0000b2xxxxxx0033a100006d0000b2xxxxxx0033a200006b00006d0000b2xxxxxx0033a300006d00006d0000b3xxxxxx0033a400006300006d0000b3xxxxxx0033a500006d0000b3xxxxxx0033a600006b00006d0000b3xxxxxx0033a700006d002215000073xxxxxx0033a800006d0022150000730000b2xxxxxx0033a9000050000061xxxxxx0033aa00006b000050000061xxxxxx0033ab00004d000050000061xxxxxx0033ac000047000050000061xxxxxx0033ad000072000061000064xxxxxx0033ae000072000061000064002215000073xxxxxx0033af0000720000610000640022150000730000b2xxxxxx0033b0000070000073xxxxxx0033b100006e000073xxxxxx0033b20003bc000073xxxxxx0033b300006d000073xxxxxx0033b4000070000056xxxxxx0033b500006e000056xxxxxx0033b60003bc000056xxxxxx0033b700006d000056xxxxxx0033b800006b000056xxxxxx0033b900004d000056xxxxxx0033ba000070000057xxxxxx0033bb00006e000057xxxxxx0033bc0003bc000057xxxxxx0033bd00006d000057xxxxxx0033be00006b000057xxxxxx0033bf00004d000057xxxxxx0033c000006b0003a9xxxxxx0033c100004d0003a9xxxxxx0033c200006100002e00006d00002exxxxxx0033c3000042000071xxxxxx0033c4000063000063xxxxxx0033c5000063000064xxxxxx0033c600004300221500006b000067xxxxxx0033c700004300006f00002exxxxxx0033c8000064000042xxxxxx0033c9000047000079xxxxxx0033ca000068000061xxxxxx0033cb000048000050xxxxxx0033cc00006900006exxxxxx0033cd00004b00004bxxxxxx0033ce00004b00004dxxxxxx0033cf00006b000074xxxxxx0033d000006c00006dxxxxxx0033d100006c00006exxxxxx0033d200006c00006f000067xxxxxx0033d300006c000078xxxxxx0033d400006d000062xxxxxx0033d500006d00006900006cxxxxxx0033d600006d00006f00006cxxxxxx0033d7000050000048xxxxxx0033d800007000002e00006d00002exxxxxx0033d900005000005000004dxxxxxx0033da000050000052xxxxxx0033db000073000072xxxxxx0033dc000053000076xxxxxx0033dd000057000062xxxxxx0033de00005600221500006dxxxxxx0033df00004100221500006dxxxxxx0033e00000310065e5xxxxxx0033e10000320065e5xxxxxx0033e20000330065e5xxxxxx0033e30000340065e5xxxxxx0033e40000350065e5xxxxxx0033e50000360065e5xxxxxx0033e60000370065e5xxxxxx0033e70000380065e5xxxxxx0033e80000390065e5xxxxxx0033e90000310000300065e5xxxxxx0033ea0000310000310065e5xxxxxx0033eb0000310000320065e5xxxxxx0033ec0000310000330065e5xxxxxx0033ed0000310000340065e5xxxxxx0033ee0000310000350065e5xxxxxx0033ef0000310000360065e5xxxxxx0033f00000310000370065e5xxxxxx0033f10000310000380065e5xxxxxx0033f20000310000390065e5xxxxxx0033f30000320000300065e5xxxxxx0033f40000320000310065e5xxxxxx0033f50000320000320065e5xxxxxx0033f60000320000330065e5xxxxxx0033f70000320000340065e5xxxxxx0033f80000320000350065e5xxxxxx0033f90000320000360065e5xxxxxx0033fa0000320000370065e5xxxxxx0033fb0000320000380065e5xxxxxx0033fc0000320000390065e5xxxxxx0033fd0000330000300065e5xxxxxx0033fe0000330000310065e5xxxxxx0033ff00006700006100006cxxxxxx00a77000a76fxxxxxx00fb00000066000066xxxxxx00fb01000066000069xxxxxx00fb0200006600006cxxxxxx00fb03000066000066000069xxxxxx00fb0400006600006600006cxxxxxx00fb0500017f000074xxxxxx00fb06000073000074xxxxxx00fb13000574000576xxxxxx00fb14000574000565xxxxxx00fb1500057400056bxxxxxx00fb1600057e000576xxxxxx00fb1700057400056dxxxxxx00fb200005e2xxxxxx00fb210005d0xxxxxx00fb220005d3xxxxxx00fb230005d4xxxxxx00fb240005dbxxxxxx00fb250005dcxxxxxx00fb260005ddxxxxxx00fb270005e8xxxxxx00fb280005eaxxxxxx00fb2900002bxxxxxx00fb4f0005d00005dcxxxxxx00fb50000671xxxxxx00fb51000671xxxxxx00fb5200067bxxxxxx00fb5300067bxxxxxx00fb5400067bxxxxxx00fb5500067bxxxxxx00fb5600067exxxxxx00fb5700067exxxxxx00fb5800067exxxxxx00fb5900067exxxxxx00fb5a000680xxxxxx00fb5b000680xxxxxx00fb5c000680xxxxxx00fb5d000680xxxxxx00fb5e00067axxxxxx00fb5f00067axxxxxx00fb6000067axxxxxx00fb6100067axxxxxx00fb6200067fxxxxxx00fb6300067fxxxxxx00fb6400067fxxxxxx00fb6500067fxxxxxx00fb66000679xxxxxx00fb67000679xxxxxx00fb68000679xxxxxx00fb69000679xxxxxx00fb6a0006a4xxxxxx00fb6b0006a4xxxxxx00fb6c0006a4xxxxxx00fb6d0006a4xxxxxx00fb6e0006a6xxxxxx00fb6f0006a6xxxxxx00fb700006a6xxxxxx00fb710006a6xxxxxx00fb72000684xxxxxx00fb73000684xxxxxx00fb74000684xxxxxx00fb75000684xxxxxx00fb76000683xxxxxx00fb77000683xxxxxx00fb78000683xxxxxx00fb79000683xxxxxx00fb7a000686xxxxxx00fb7b000686xxxxxx00fb7c000686xxxxxx00fb7d000686xxxxxx00fb7e000687xxxxxx00fb7f000687xxxxxx00fb80000687xxxxxx00fb81000687xxxxxx00fb8200068dxxxxxx00fb8300068dxxxxxx00fb8400068cxxxxxx00fb8500068cxxxxxx00fb8600068exxxxxx00fb8700068exxxxxx00fb88000688xxxxxx00fb89000688xxxxxx00fb8a000698xxxxxx00fb8b000698xxxxxx00fb8c000691xxxxxx00fb8d000691xxxxxx00fb8e0006a9xxxxxx00fb8f0006a9xxxxxx00fb900006a9xxxxxx00fb910006a9xxxxxx00fb920006afxxxxxx00fb930006afxxxxxx00fb940006afxxxxxx00fb950006afxxxxxx00fb960006b3xxxxxx00fb970006b3xxxxxx00fb980006b3xxxxxx00fb990006b3xxxxxx00fb9a0006b1xxxxxx00fb9b0006b1xxxxxx00fb9c0006b1xxxxxx00fb9d0006b1xxxxxx00fb9e0006baxxxxxx00fb9f0006baxxxxxx00fba00006bbxxxxxx00fba10006bbxxxxxx00fba20006bbxxxxxx00fba30006bbxxxxxx00fba40006c0xxxxxx00fba50006c0xxxxxx00fba60006c1xxxxxx00fba70006c1xxxxxx00fba80006c1xxxxxx00fba90006c1xxxxxx00fbaa0006bexxxxxx00fbab0006bexxxxxx00fbac0006bexxxxxx00fbad0006bexxxxxx00fbae0006d2xxxxxx00fbaf0006d2xxxxxx00fbb00006d3xxxxxx00fbb10006d3xxxxxx00fbd30006adxxxxxx00fbd40006adxxxxxx00fbd50006adxxxxxx00fbd60006adxxxxxx00fbd70006c7xxxxxx00fbd80006c7xxxxxx00fbd90006c6xxxxxx00fbda0006c6xxxxxx00fbdb0006c8xxxxxx00fbdc0006c8xxxxxx00fbdd000677xxxxxx00fbde0006cbxxxxxx00fbdf0006cbxxxxxx00fbe00006c5xxxxxx00fbe10006c5xxxxxx00fbe20006c9xxxxxx00fbe30006c9xxxxxx00fbe40006d0xxxxxx00fbe50006d0xxxxxx00fbe60006d0xxxxxx00fbe70006d0xxxxxx00fbe8000649xxxxxx00fbe9000649xxxxxx00fbea000626000627xxxxxx00fbeb000626000627xxxxxx00fbec0006260006d5xxxxxx00fbed0006260006d5xxxxxx00fbee000626000648xxxxxx00fbef000626000648xxxxxx00fbf00006260006c7xxxxxx00fbf10006260006c7xxxxxx00fbf20006260006c6xxxxxx00fbf30006260006c6xxxxxx00fbf40006260006c8xxxxxx00fbf50006260006c8xxxxxx00fbf60006260006d0xxxxxx00fbf70006260006d0xxxxxx00fbf80006260006d0xxxxxx00fbf9000626000649xxxxxx00fbfa000626000649xxxxxx00fbfb000626000649xxxxxx00fbfc0006ccxxxxxx00fbfd0006ccxxxxxx00fbfe0006ccxxxxxx00fbff0006ccxxxxxx00fc0000062600062cxxxxxx00fc0100062600062dxxxxxx00fc02000626000645xxxxxx00fc03000626000649xxxxxx00fc0400062600064axxxxxx00fc0500062800062cxxxxxx00fc0600062800062dxxxxxx00fc0700062800062exxxxxx00fc08000628000645xxxxxx00fc09000628000649xxxxxx00fc0a00062800064axxxxxx00fc0b00062a00062cxxxxxx00fc0c00062a00062dxxxxxx00fc0d00062a00062exxxxxx00fc0e00062a000645xxxxxx00fc0f00062a000649xxxxxx00fc1000062a00064axxxxxx00fc1100062b00062cxxxxxx00fc1200062b000645xxxxxx00fc1300062b000649xxxxxx00fc1400062b00064axxxxxx00fc1500062c00062dxxxxxx00fc1600062c000645xxxxxx00fc1700062d00062cxxxxxx00fc1800062d000645xxxxxx00fc1900062e00062cxxxxxx00fc1a00062e00062dxxxxxx00fc1b00062e000645xxxxxx00fc1c00063300062cxxxxxx00fc1d00063300062dxxxxxx00fc1e00063300062exxxxxx00fc1f000633000645xxxxxx00fc2000063500062dxxxxxx00fc21000635000645xxxxxx00fc2200063600062cxxxxxx00fc2300063600062dxxxxxx00fc2400063600062exxxxxx00fc25000636000645xxxxxx00fc2600063700062dxxxxxx00fc27000637000645xxxxxx00fc28000638000645xxxxxx00fc2900063900062cxxxxxx00fc2a000639000645xxxxxx00fc2b00063a00062cxxxxxx00fc2c00063a000645xxxxxx00fc2d00064100062cxxxxxx00fc2e00064100062dxxxxxx00fc2f00064100062exxxxxx00fc30000641000645xxxxxx00fc31000641000649xxxxxx00fc3200064100064axxxxxx00fc3300064200062dxxxxxx00fc34000642000645xxxxxx00fc35000642000649xxxxxx00fc3600064200064axxxxxx00fc37000643000627xxxxxx00fc3800064300062cxxxxxx00fc3900064300062dxxxxxx00fc3a00064300062exxxxxx00fc3b000643000644xxxxxx00fc3c000643000645xxxxxx00fc3d000643000649xxxxxx00fc3e00064300064axxxxxx00fc3f00064400062cxxxxxx00fc4000064400062dxxxxxx00fc4100064400062exxxxxx00fc42000644000645xxxxxx00fc43000644000649xxxxxx00fc4400064400064axxxxxx00fc4500064500062cxxxxxx00fc4600064500062dxxxxxx00fc4700064500062exxxxxx00fc48000645000645xxxxxx00fc49000645000649xxxxxx00fc4a00064500064axxxxxx00fc4b00064600062cxxxxxx00fc4c00064600062dxxxxxx00fc4d00064600062exxxxxx00fc4e000646000645xxxxxx00fc4f000646000649xxxxxx00fc5000064600064axxxxxx00fc5100064700062cxxxxxx00fc52000647000645xxxxxx00fc53000647000649xxxxxx00fc5400064700064axxxxxx00fc5500064a00062cxxxxxx00fc5600064a00062dxxxxxx00fc5700064a00062exxxxxx00fc5800064a000645xxxxxx00fc5900064a000649xxxxxx00fc5a00064a00064axxxxxx00fc5b000630000670xxxxxx00fc5c000631000670xxxxxx00fc5d000649000670xxxxxx00fc5e00002000064c000651xxxxxx00fc5f00002000064d000651xxxxxx00fc6000002000064e000651xxxxxx00fc6100002000064f000651xxxxxx00fc62000020000650000651xxxxxx00fc63000020000651000670xxxxxx00fc64000626000631xxxxxx00fc65000626000632xxxxxx00fc66000626000645xxxxxx00fc67000626000646xxxxxx00fc68000626000649xxxxxx00fc6900062600064axxxxxx00fc6a000628000631xxxxxx00fc6b000628000632xxxxxx00fc6c000628000645xxxxxx00fc6d000628000646xxxxxx00fc6e000628000649xxxxxx00fc6f00062800064axxxxxx00fc7000062a000631xxxxxx00fc7100062a000632xxxxxx00fc7200062a000645xxxxxx00fc7300062a000646xxxxxx00fc7400062a000649xxxxxx00fc7500062a00064axxxxxx00fc7600062b000631xxxxxx00fc7700062b000632xxxxxx00fc7800062b000645xxxxxx00fc7900062b000646xxxxxx00fc7a00062b000649xxxxxx00fc7b00062b00064axxxxxx00fc7c000641000649xxxxxx00fc7d00064100064axxxxxx00fc7e000642000649xxxxxx00fc7f00064200064axxxxxx00fc80000643000627xxxxxx00fc81000643000644xxxxxx00fc82000643000645xxxxxx00fc83000643000649xxxxxx00fc8400064300064axxxxxx00fc85000644000645xxxxxx00fc86000644000649xxxxxx00fc8700064400064axxxxxx00fc88000645000627xxxxxx00fc89000645000645xxxxxx00fc8a000646000631xxxxxx00fc8b000646000632xxxxxx00fc8c000646000645xxxxxx00fc8d000646000646xxxxxx00fc8e000646000649xxxxxx00fc8f00064600064axxxxxx00fc90000649000670xxxxxx00fc9100064a000631xxxxxx00fc9200064a000632xxxxxx00fc9300064a000645xxxxxx00fc9400064a000646xxxxxx00fc9500064a000649xxxxxx00fc9600064a00064axxxxxx00fc9700062600062cxxxxxx00fc9800062600062dxxxxxx00fc9900062600062exxxxxx00fc9a000626000645xxxxxx00fc9b000626000647xxxxxx00fc9c00062800062cxxxxxx00fc9d00062800062dxxxxxx00fc9e00062800062exxxxxx00fc9f000628000645xxxxxx00fca0000628000647xxxxxx00fca100062a00062cxxxxxx00fca200062a00062dxxxxxx00fca300062a00062exxxxxx00fca400062a000645xxxxxx00fca500062a000647xxxxxx00fca600062b000645xxxxxx00fca700062c00062dxxxxxx00fca800062c000645xxxxxx00fca900062d00062cxxxxxx00fcaa00062d000645xxxxxx00fcab00062e00062cxxxxxx00fcac00062e000645xxxxxx00fcad00063300062cxxxxxx00fcae00063300062dxxxxxx00fcaf00063300062exxxxxx00fcb0000633000645xxxxxx00fcb100063500062dxxxxxx00fcb200063500062exxxxxx00fcb3000635000645xxxxxx00fcb400063600062cxxxxxx00fcb500063600062dxxxxxx00fcb600063600062exxxxxx00fcb7000636000645xxxxxx00fcb800063700062dxxxxxx00fcb9000638000645xxxxxx00fcba00063900062cxxxxxx00fcbb000639000645xxxxxx00fcbc00063a00062cxxxxxx00fcbd00063a000645xxxxxx00fcbe00064100062cxxxxxx00fcbf00064100062dxxxxxx00fcc000064100062exxxxxx00fcc1000641000645xxxxxx00fcc200064200062dxxxxxx00fcc3000642000645xxxxxx00fcc400064300062cxxxxxx00fcc500064300062dxxxxxx00fcc600064300062exxxxxx00fcc7000643000644xxxxxx00fcc8000643000645xxxxxx00fcc900064400062cxxxxxx00fcca00064400062dxxxxxx00fccb00064400062exxxxxx00fccc000644000645xxxxxx00fccd000644000647xxxxxx00fcce00064500062cxxxxxx00fccf00064500062dxxxxxx00fcd000064500062exxxxxx00fcd1000645000645xxxxxx00fcd200064600062cxxxxxx00fcd300064600062dxxxxxx00fcd400064600062exxxxxx00fcd5000646000645xxxxxx00fcd6000646000647xxxxxx00fcd700064700062cxxxxxx00fcd8000647000645xxxxxx00fcd9000647000670xxxxxx00fcda00064a00062cxxxxxx00fcdb00064a00062dxxxxxx00fcdc00064a00062exxxxxx00fcdd00064a000645xxxxxx00fcde00064a000647xxxxxx00fcdf000626000645xxxxxx00fce0000626000647xxxxxx00fce1000628000645xxxxxx00fce2000628000647xxxxxx00fce300062a000645xxxxxx00fce400062a000647xxxxxx00fce500062b000645xxxxxx00fce600062b000647xxxxxx00fce7000633000645xxxxxx00fce8000633000647xxxxxx00fce9000634000645xxxxxx00fcea000634000647xxxxxx00fceb000643000644xxxxxx00fcec000643000645xxxxxx00fced000644000645xxxxxx00fcee000646000645xxxxxx00fcef000646000647xxxxxx00fcf000064a000645xxxxxx00fcf100064a000647xxxxxx00fcf200064000064e000651xxxxxx00fcf300064000064f000651xxxxxx00fcf4000640000650000651xxxxxx00fcf5000637000649xxxxxx00fcf600063700064axxxxxx00fcf7000639000649xxxxxx00fcf800063900064axxxxxx00fcf900063a000649xxxxxx00fcfa00063a00064axxxxxx00fcfb000633000649xxxxxx00fcfc00063300064axxxxxx00fcfd000634000649xxxxxx00fcfe00063400064axxxxxx00fcff00062d000649xxxxxx00fd0000062d00064axxxxxx00fd0100062c000649xxxxxx00fd0200062c00064axxxxxx00fd0300062e000649xxxxxx00fd0400062e00064axxxxxx00fd05000635000649xxxxxx00fd0600063500064axxxxxx00fd07000636000649xxxxxx00fd0800063600064axxxxxx00fd0900063400062cxxxxxx00fd0a00063400062dxxxxxx00fd0b00063400062exxxxxx00fd0c000634000645xxxxxx00fd0d000634000631xxxxxx00fd0e000633000631xxxxxx00fd0f000635000631xxxxxx00fd10000636000631xxxxxx00fd11000637000649xxxxxx00fd1200063700064axxxxxx00fd13000639000649xxxxxx00fd1400063900064axxxxxx00fd1500063a000649xxxxxx00fd1600063a00064axxxxxx00fd17000633000649xxxxxx00fd1800063300064axxxxxx00fd19000634000649xxxxxx00fd1a00063400064axxxxxx00fd1b00062d000649xxxxxx00fd1c00062d00064axxxxxx00fd1d00062c000649xxxxxx00fd1e00062c00064axxxxxx00fd1f00062e000649xxxxxx00fd2000062e00064axxxxxx00fd21000635000649xxxxxx00fd2200063500064axxxxxx00fd23000636000649xxxxxx00fd2400063600064axxxxxx00fd2500063400062cxxxxxx00fd2600063400062dxxxxxx00fd2700063400062exxxxxx00fd28000634000645xxxxxx00fd29000634000631xxxxxx00fd2a000633000631xxxxxx00fd2b000635000631xxxxxx00fd2c000636000631xxxxxx00fd2d00063400062cxxxxxx00fd2e00063400062dxxxxxx00fd2f00063400062exxxxxx00fd30000634000645xxxxxx00fd31000633000647xxxxxx00fd32000634000647xxxxxx00fd33000637000645xxxxxx00fd3400063300062cxxxxxx00fd3500063300062dxxxxxx00fd3600063300062exxxxxx00fd3700063400062cxxxxxx00fd3800063400062dxxxxxx00fd3900063400062exxxxxx00fd3a000637000645xxxxxx00fd3b000638000645xxxxxx00fd3c00062700064bxxxxxx00fd3d00062700064bxxxxxx00fd5000062a00062c000645xxxxxx00fd5100062a00062d00062cxxxxxx00fd5200062a00062d00062cxxxxxx00fd5300062a00062d000645xxxxxx00fd5400062a00062e000645xxxxxx00fd5500062a00064500062cxxxxxx00fd5600062a00064500062dxxxxxx00fd5700062a00064500062exxxxxx00fd5800062c00064500062dxxxxxx00fd5900062c00064500062dxxxxxx00fd5a00062d00064500064axxxxxx00fd5b00062d000645000649xxxxxx00fd5c00063300062d00062cxxxxxx00fd5d00063300062c00062dxxxxxx00fd5e00063300062c000649xxxxxx00fd5f00063300064500062dxxxxxx00fd6000063300064500062dxxxxxx00fd6100063300064500062cxxxxxx00fd62000633000645000645xxxxxx00fd63000633000645000645xxxxxx00fd6400063500062d00062dxxxxxx00fd6500063500062d00062dxxxxxx00fd66000635000645000645xxxxxx00fd6700063400062d000645xxxxxx00fd6800063400062d000645xxxxxx00fd6900063400062c00064axxxxxx00fd6a00063400064500062exxxxxx00fd6b00063400064500062exxxxxx00fd6c000634000645000645xxxxxx00fd6d000634000645000645xxxxxx00fd6e00063600062d000649xxxxxx00fd6f00063600062e000645xxxxxx00fd7000063600062e000645xxxxxx00fd7100063700064500062dxxxxxx00fd7200063700064500062dxxxxxx00fd73000637000645000645xxxxxx00fd7400063700064500064axxxxxx00fd7500063900062c000645xxxxxx00fd76000639000645000645xxxxxx00fd77000639000645000645xxxxxx00fd78000639000645000649xxxxxx00fd7900063a000645000645xxxxxx00fd7a00063a00064500064axxxxxx00fd7b00063a000645000649xxxxxx00fd7c00064100062e000645xxxxxx00fd7d00064100062e000645xxxxxx00fd7e00064200064500062dxxxxxx00fd7f000642000645000645xxxxxx00fd8000064400062d000645xxxxxx00fd8100064400062d00064axxxxxx00fd8200064400062d000649xxxxxx00fd8300064400062c00062cxxxxxx00fd8400064400062c00062cxxxxxx00fd8500064400062e000645xxxxxx00fd8600064400062e000645xxxxxx00fd8700064400064500062dxxxxxx00fd8800064400064500062dxxxxxx00fd8900064500062d00062cxxxxxx00fd8a00064500062d000645xxxxxx00fd8b00064500062d00064axxxxxx00fd8c00064500062c00062dxxxxxx00fd8d00064500062c000645xxxxxx00fd8e00064500062e00062cxxxxxx00fd8f00064500062e000645xxxxxx00fd9200064500062c00062exxxxxx00fd9300064700064500062cxxxxxx00fd94000647000645000645xxxxxx00fd9500064600062d000645xxxxxx00fd9600064600062d000649xxxxxx00fd9700064600062c000645xxxxxx00fd9800064600062c000645xxxxxx00fd9900064600062c000649xxxxxx00fd9a00064600064500064axxxxxx00fd9b000646000645000649xxxxxx00fd9c00064a000645000645xxxxxx00fd9d00064a000645000645xxxxxx00fd9e00062800062e00064axxxxxx00fd9f00062a00062c00064axxxxxx00fda000062a00062c000649xxxxxx00fda100062a00062e00064axxxxxx00fda200062a00062e000649xxxxxx00fda300062a00064500064axxxxxx00fda400062a000645000649xxxxxx00fda500062c00064500064axxxxxx00fda600062c00062d000649xxxxxx00fda700062c000645000649xxxxxx00fda800063300062e000649xxxxxx00fda900063500062d00064axxxxxx00fdaa00063400062d00064axxxxxx00fdab00063600062d00064axxxxxx00fdac00064400062c00064axxxxxx00fdad00064400064500064axxxxxx00fdae00064a00062d00064axxxxxx00fdaf00064a00062c00064axxxxxx00fdb000064a00064500064axxxxxx00fdb100064500064500064axxxxxx00fdb200064200064500064axxxxxx00fdb300064600062d00064axxxxxx00fdb400064200064500062dxxxxxx00fdb500064400062d000645xxxxxx00fdb600063900064500064axxxxxx00fdb700064300064500064axxxxxx00fdb800064600062c00062dxxxxxx00fdb900064500062e00064axxxxxx00fdba00064400062c000645xxxxxx00fdbb000643000645000645xxxxxx00fdbc00064400062c000645xxxxxx00fdbd00064600062c00062dxxxxxx00fdbe00062c00062d00064axxxxxx00fdbf00062d00062c00064axxxxxx00fdc000064500062c00064axxxxxx00fdc100064100064500064axxxxxx00fdc200062800062d00064axxxxxx00fdc3000643000645000645xxxxxx00fdc400063900062c000645xxxxxx00fdc5000635000645000645xxxxxx00fdc600063300062e00064axxxxxx00fdc700064600062c00064axxxxxx00fdf00006350006440006d2xxxxxx00fdf10006420006440006d2xxxxxx00fdf2000627000644000644000647xxxxxx00fdf3000627000643000628000631xxxxxx00fdf400064500062d00064500062fxxxxxx00fdf5000635000644000639000645xxxxxx00fdf6000631000633000648000644xxxxxx00fdf700063900064400064a000647xxxxxx00fdf8000648000633000644000645xxxxxx00fdf9000635000644000649xxxxxx00fdfa00063500064400064900002000062700064400064400064700002000063900064400064a000647000020000648000633000644000645xxxxxx00fdfb00062c00064400002000062c000644000627000644000647xxxxxx00fdfc0006310006cc000627000644xxxxxx00fe1000002cxxxxxx00fe11003001xxxxxx00fe12003002xxxxxx00fe1300003axxxxxx00fe1400003bxxxxxx00fe15000021xxxxxx00fe1600003fxxxxxx00fe17003016xxxxxx00fe18003017xxxxxx00fe19002026xxxxxx00fe30002025xxxxxx00fe31002014xxxxxx00fe32002013xxxxxx00fe3300005fxxxxxx00fe3400005fxxxxxx00fe35000028xxxxxx00fe36000029xxxxxx00fe3700007bxxxxxx00fe3800007dxxxxxx00fe39003014xxxxxx00fe3a003015xxxxxx00fe3b003010xxxxxx00fe3c003011xxxxxx00fe3d00300axxxxxx00fe3e00300bxxxxxx00fe3f003008xxxxxx00fe40003009xxxxxx00fe4100300cxxxxxx00fe4200300dxxxxxx00fe4300300exxxxxx00fe4400300fxxxxxx00fe4700005bxxxxxx00fe4800005dxxxxxx00fe4900203exxxxxx00fe4a00203exxxxxx00fe4b00203exxxxxx00fe4c00203exxxxxx00fe4d00005fxxxxxx00fe4e00005fxxxxxx00fe4f00005fxxxxxx00fe5000002cxxxxxx00fe51003001xxxxxx00fe5200002exxxxxx00fe5400003bxxxxxx00fe5500003axxxxxx00fe5600003fxxxxxx00fe57000021xxxxxx00fe58002014xxxxxx00fe59000028xxxxxx00fe5a000029xxxxxx00fe5b00007bxxxxxx00fe5c00007dxxxxxx00fe5d003014xxxxxx00fe5e003015xxxxxx00fe5f000023xxxxxx00fe60000026xxxxxx00fe6100002axxxxxx00fe6200002bxxxxxx00fe6300002dxxxxxx00fe6400003cxxxxxx00fe6500003exxxxxx00fe6600003dxxxxxx00fe6800005cxxxxxx00fe69000024xxxxxx00fe6a000025xxxxxx00fe6b000040xxxxxx00fe7000002000064bxxxxxx00fe7100064000064bxxxxxx00fe7200002000064cxxxxxx00fe7400002000064dxxxxxx00fe7600002000064exxxxxx00fe7700064000064exxxxxx00fe7800002000064fxxxxxx00fe7900064000064fxxxxxx00fe7a000020000650xxxxxx00fe7b000640000650xxxxxx00fe7c000020000651xxxxxx00fe7d000640000651xxxxxx00fe7e000020000652xxxxxx00fe7f000640000652xxxxxx00fe80000621xxxxxx00fe81000622xxxxxx00fe82000622xxxxxx00fe83000623xxxxxx00fe84000623xxxxxx00fe85000624xxxxxx00fe86000624xxxxxx00fe87000625xxxxxx00fe88000625xxxxxx00fe89000626xxxxxx00fe8a000626xxxxxx00fe8b000626xxxxxx00fe8c000626xxxxxx00fe8d000627xxxxxx00fe8e000627xxxxxx00fe8f000628xxxxxx00fe90000628xxxxxx00fe91000628xxxxxx00fe92000628xxxxxx00fe93000629xxxxxx00fe94000629xxxxxx00fe9500062axxxxxx00fe9600062axxxxxx00fe9700062axxxxxx00fe9800062axxxxxx00fe9900062bxxxxxx00fe9a00062bxxxxxx00fe9b00062bxxxxxx00fe9c00062bxxxxxx00fe9d00062cxxxxxx00fe9e00062cxxxxxx00fe9f00062cxxxxxx00fea000062cxxxxxx00fea100062dxxxxxx00fea200062dxxxxxx00fea300062dxxxxxx00fea400062dxxxxxx00fea500062exxxxxx00fea600062exxxxxx00fea700062exxxxxx00fea800062exxxxxx00fea900062fxxxxxx00feaa00062fxxxxxx00feab000630xxxxxx00feac000630xxxxxx00fead000631xxxxxx00feae000631xxxxxx00feaf000632xxxxxx00feb0000632xxxxxx00feb1000633xxxxxx00feb2000633xxxxxx00feb3000633xxxxxx00feb4000633xxxxxx00feb5000634xxxxxx00feb6000634xxxxxx00feb7000634xxxxxx00feb8000634xxxxxx00feb9000635xxxxxx00feba000635xxxxxx00febb000635xxxxxx00febc000635xxxxxx00febd000636xxxxxx00febe000636xxxxxx00febf000636xxxxxx00fec0000636xxxxxx00fec1000637xxxxxx00fec2000637xxxxxx00fec3000637xxxxxx00fec4000637xxxxxx00fec5000638xxxxxx00fec6000638xxxxxx00fec7000638xxxxxx00fec8000638xxxxxx00fec9000639xxxxxx00feca000639xxxxxx00fecb000639xxxxxx00fecc000639xxxxxx00fecd00063axxxxxx00fece00063axxxxxx00fecf00063axxxxxx00fed000063axxxxxx00fed1000641xxxxxx00fed2000641xxxxxx00fed3000641xxxxxx00fed4000641xxxxxx00fed5000642xxxxxx00fed6000642xxxxxx00fed7000642xxxxxx00fed8000642xxxxxx00fed9000643xxxxxx00feda000643xxxxxx00fedb000643xxxxxx00fedc000643xxxxxx00fedd000644xxxxxx00fede000644xxxxxx00fedf000644xxxxxx00fee0000644xxxxxx00fee1000645xxxxxx00fee2000645xxxxxx00fee3000645xxxxxx00fee4000645xxxxxx00fee5000646xxxxxx00fee6000646xxxxxx00fee7000646xxxxxx00fee8000646xxxxxx00fee9000647xxxxxx00feea000647xxxxxx00feeb000647xxxxxx00feec000647xxxxxx00feed000648xxxxxx00feee000648xxxxxx00feef000649xxxxxx00fef0000649xxxxxx00fef100064axxxxxx00fef200064axxxxxx00fef300064axxxxxx00fef400064axxxxxx00fef5000644000622xxxxxx00fef6000644000622xxxxxx00fef7000644000623xxxxxx00fef8000644000623xxxxxx00fef9000644000625xxxxxx00fefa000644000625xxxxxx00fefb000644000627xxxxxx00fefc000644000627xxxxxx00ff01000021xxxxxx00ff02000022xxxxxx00ff03000023xxxxxx00ff04000024xxxxxx00ff05000025xxxxxx00ff06000026xxxxxx00ff07000027xxxxxx00ff08000028xxxxxx00ff09000029xxxxxx00ff0a00002axxxxxx00ff0b00002bxxxxxx00ff0c00002cxxxxxx00ff0d00002dxxxxxx00ff0e00002exxxxxx00ff0f00002fxxxxxx00ff10000030xxxxxx00ff11000031xxxxxx00ff12000032xxxxxx00ff13000033xxxxxx00ff14000034xxxxxx00ff15000035xxxxxx00ff16000036xxxxxx00ff17000037xxxxxx00ff18000038xxxxxx00ff19000039xxxxxx00ff1a00003axxxxxx00ff1b00003bxxxxxx00ff1c00003cxxxxxx00ff1d00003dxxxxxx00ff1e00003exxxxxx00ff1f00003fxxxxxx00ff20000040xxxxxx00ff21000041xxxxxx00ff22000042xxxxxx00ff23000043xxxxxx00ff24000044xxxxxx00ff25000045xxxxxx00ff26000046xxxxxx00ff27000047xxxxxx00ff28000048xxxxxx00ff29000049xxxxxx00ff2a00004axxxxxx00ff2b00004bxxxxxx00ff2c00004cxxxxxx00ff2d00004dxxxxxx00ff2e00004exxxxxx00ff2f00004fxxxxxx00ff30000050xxxxxx00ff31000051xxxxxx00ff32000052xxxxxx00ff33000053xxxxxx00ff34000054xxxxxx00ff35000055xxxxxx00ff36000056xxxxxx00ff37000057xxxxxx00ff38000058xxxxxx00ff39000059xxxxxx00ff3a00005axxxxxx00ff3b00005bxxxxxx00ff3c00005cxxxxxx00ff3d00005dxxxxxx00ff3e00005exxxxxx00ff3f00005fxxxxxx00ff40000060xxxxxx00ff41000061xxxxxx00ff42000062xxxxxx00ff43000063xxxxxx00ff44000064xxxxxx00ff45000065xxxxxx00ff46000066xxxxxx00ff47000067xxxxxx00ff48000068xxxxxx00ff49000069xxxxxx00ff4a00006axxxxxx00ff4b00006bxxxxxx00ff4c00006cxxxxxx00ff4d00006dxxxxxx00ff4e00006exxxxxx00ff4f00006fxxxxxx00ff50000070xxxxxx00ff51000071xxxxxx00ff52000072xxxxxx00ff53000073xxxxxx00ff54000074xxxxxx00ff55000075xxxxxx00ff56000076xxxxxx00ff57000077xxxxxx00ff58000078xxxxxx00ff59000079xxxxxx00ff5a00007axxxxxx00ff5b00007bxxxxxx00ff5c00007cxxxxxx00ff5d00007dxxxxxx00ff5e00007exxxxxx00ff5f002985xxxxxx00ff60002986xxxxxx00ff61003002xxxxxx00ff6200300cxxxxxx00ff6300300dxxxxxx00ff64003001xxxxxx00ff650030fbxxxxxx00ff660030f2xxxxxx00ff670030a1xxxxxx00ff680030a3xxxxxx00ff690030a5xxxxxx00ff6a0030a7xxxxxx00ff6b0030a9xxxxxx00ff6c0030e3xxxxxx00ff6d0030e5xxxxxx00ff6e0030e7xxxxxx00ff6f0030c3xxxxxx00ff700030fcxxxxxx00ff710030a2xxxxxx00ff720030a4xxxxxx00ff730030a6xxxxxx00ff740030a8xxxxxx00ff750030aaxxxxxx00ff760030abxxxxxx00ff770030adxxxxxx00ff780030afxxxxxx00ff790030b1xxxxxx00ff7a0030b3xxxxxx00ff7b0030b5xxxxxx00ff7c0030b7xxxxxx00ff7d0030b9xxxxxx00ff7e0030bbxxxxxx00ff7f0030bdxxxxxx00ff800030bfxxxxxx00ff810030c1xxxxxx00ff820030c4xxxxxx00ff830030c6xxxxxx00ff840030c8xxxxxx00ff850030caxxxxxx00ff860030cbxxxxxx00ff870030ccxxxxxx00ff880030cdxxxxxx00ff890030cexxxxxx00ff8a0030cfxxxxxx00ff8b0030d2xxxxxx00ff8c0030d5xxxxxx00ff8d0030d8xxxxxx00ff8e0030dbxxxxxx00ff8f0030dexxxxxx00ff900030dfxxxxxx00ff910030e0xxxxxx00ff920030e1xxxxxx00ff930030e2xxxxxx00ff940030e4xxxxxx00ff950030e6xxxxxx00ff960030e8xxxxxx00ff970030e9xxxxxx00ff980030eaxxxxxx00ff990030ebxxxxxx00ff9a0030ecxxxxxx00ff9b0030edxxxxxx00ff9c0030efxxxxxx00ff9d0030f3xxxxxx00ff9e003099xxxxxx00ff9f00309axxxxxx00ffa0003164xxxxxx00ffa1003131xxxxxx00ffa2003132xxxxxx00ffa3003133xxxxxx00ffa4003134xxxxxx00ffa5003135xxxxxx00ffa6003136xxxxxx00ffa7003137xxxxxx00ffa8003138xxxxxx00ffa9003139xxxxxx00ffaa00313axxxxxx00ffab00313bxxxxxx00ffac00313cxxxxxx00ffad00313dxxxxxx00ffae00313exxxxxx00ffaf00313fxxxxxx00ffb0003140xxxxxx00ffb1003141xxxxxx00ffb2003142xxxxxx00ffb3003143xxxxxx00ffb4003144xxxxxx00ffb5003145xxxxxx00ffb6003146xxxxxx00ffb7003147xxxxxx00ffb8003148xxxxxx00ffb9003149xxxxxx00ffba00314axxxxxx00ffbb00314bxxxxxx00ffbc00314cxxxxxx00ffbd00314dxxxxxx00ffbe00314exxxxxx00ffc200314fxxxxxx00ffc3003150xxxxxx00ffc4003151xxxxxx00ffc5003152xxxxxx00ffc6003153xxxxxx00ffc7003154xxxxxx00ffca003155xxxxxx00ffcb003156xxxxxx00ffcc003157xxxxxx00ffcd003158xxxxxx00ffce003159xxxxxx00ffcf00315axxxxxx00ffd200315bxxxxxx00ffd300315cxxxxxx00ffd400315dxxxxxx00ffd500315exxxxxx00ffd600315fxxxxxx00ffd7003160xxxxxx00ffda003161xxxxxx00ffdb003162xxxxxx00ffdc003163xxxxxx00ffe00000a2xxxxxx00ffe10000a3xxxxxx00ffe20000acxxxxxx00ffe30000afxxxxxx00ffe40000a6xxxxxx00ffe50000a5xxxxxx00ffe60020a9xxxxxx00ffe8002502xxxxxx00ffe9002190xxxxxx00ffea002191xxxxxx00ffeb002192xxxxxx00ffec002193xxxxxx00ffed0025a0xxxxxx00ffee0025cbxxxxxx01d400000041xxxxxx01d401000042xxxxxx01d402000043xxxxxx01d403000044xxxxxx01d404000045xxxxxx01d405000046xxxxxx01d406000047xxxxxx01d407000048xxxxxx01d408000049xxxxxx01d40900004axxxxxx01d40a00004bxxxxxx01d40b00004cxxxxxx01d40c00004dxxxxxx01d40d00004exxxxxx01d40e00004fxxxxxx01d40f000050xxxxxx01d410000051xxxxxx01d411000052xxxxxx01d412000053xxxxxx01d413000054xxxxxx01d414000055xxxxxx01d415000056xxxxxx01d416000057xxxxxx01d417000058xxxxxx01d418000059xxxxxx01d41900005axxxxxx01d41a000061xxxxxx01d41b000062xxxxxx01d41c000063xxxxxx01d41d000064xxxxxx01d41e000065xxxxxx01d41f000066xxxxxx01d420000067xxxxxx01d421000068xxxxxx01d422000069xxxxxx01d42300006axxxxxx01d42400006bxxxxxx01d42500006cxxxxxx01d42600006dxxxxxx01d42700006exxxxxx01d42800006fxxxxxx01d429000070xxxxxx01d42a000071xxxxxx01d42b000072xxxxxx01d42c000073xxxxxx01d42d000074xxxxxx01d42e000075xxxxxx01d42f000076xxxxxx01d430000077xxxxxx01d431000078xxxxxx01d432000079xxxxxx01d43300007axxxxxx01d434000041xxxxxx01d435000042xxxxxx01d436000043xxxxxx01d437000044xxxxxx01d438000045xxxxxx01d439000046xxxxxx01d43a000047xxxxxx01d43b000048xxxxxx01d43c000049xxxxxx01d43d00004axxxxxx01d43e00004bxxxxxx01d43f00004cxxxxxx01d44000004dxxxxxx01d44100004exxxxxx01d44200004fxxxxxx01d443000050xxxxxx01d444000051xxxxxx01d445000052xxxxxx01d446000053xxxxxx01d447000054xxxxxx01d448000055xxxxxx01d449000056xxxxxx01d44a000057xxxxxx01d44b000058xxxxxx01d44c000059xxxxxx01d44d00005axxxxxx01d44e000061xxxxxx01d44f000062xxxxxx01d450000063xxxxxx01d451000064xxxxxx01d452000065xxxxxx01d453000066xxxxxx01d454000067xxxxxx01d456000069xxxxxx01d45700006axxxxxx01d45800006bxxxxxx01d45900006cxxxxxx01d45a00006dxxxxxx01d45b00006exxxxxx01d45c00006fxxxxxx01d45d000070xxxxxx01d45e000071xxxxxx01d45f000072xxxxxx01d460000073xxxxxx01d461000074xxxxxx01d462000075xxxxxx01d463000076xxxxxx01d464000077xxxxxx01d465000078xxxxxx01d466000079xxxxxx01d46700007axxxxxx01d468000041xxxxxx01d469000042xxxxxx01d46a000043xxxxxx01d46b000044xxxxxx01d46c000045xxxxxx01d46d000046xxxxxx01d46e000047xxxxxx01d46f000048xxxxxx01d470000049xxxxxx01d47100004axxxxxx01d47200004bxxxxxx01d47300004cxxxxxx01d47400004dxxxxxx01d47500004exxxxxx01d47600004fxxxxxx01d477000050xxxxxx01d478000051xxxxxx01d479000052xxxxxx01d47a000053xxxxxx01d47b000054xxxxxx01d47c000055xxxxxx01d47d000056xxxxxx01d47e000057xxxxxx01d47f000058xxxxxx01d480000059xxxxxx01d48100005axxxxxx01d482000061xxxxxx01d483000062xxxxxx01d484000063xxxxxx01d485000064xxxxxx01d486000065xxxxxx01d487000066xxxxxx01d488000067xxxxxx01d489000068xxxxxx01d48a000069xxxxxx01d48b00006axxxxxx01d48c00006bxxxxxx01d48d00006cxxxxxx01d48e00006dxxxxxx01d48f00006exxxxxx01d49000006fxxxxxx01d491000070xxxxxx01d492000071xxxxxx01d493000072xxxxxx01d494000073xxxxxx01d495000074xxxxxx01d496000075xxxxxx01d497000076xxxxxx01d498000077xxxxxx01d499000078xxxxxx01d49a000079xxxxxx01d49b00007axxxxxx01d49c000041xxxxxx01d49e000043xxxxxx01d49f000044xxxxxx01d4a2000047xxxxxx01d4a500004axxxxxx01d4a600004bxxxxxx01d4a900004exxxxxx01d4aa00004fxxxxxx01d4ab000050xxxxxx01d4ac000051xxxxxx01d4ae000053xxxxxx01d4af000054xxxxxx01d4b0000055xxxxxx01d4b1000056xxxxxx01d4b2000057xxxxxx01d4b3000058xxxxxx01d4b4000059xxxxxx01d4b500005axxxxxx01d4b6000061xxxxxx01d4b7000062xxxxxx01d4b8000063xxxxxx01d4b9000064xxxxxx01d4bb000066xxxxxx01d4bd000068xxxxxx01d4be000069xxxxxx01d4bf00006axxxxxx01d4c000006bxxxxxx01d4c100006cxxxxxx01d4c200006dxxxxxx01d4c300006exxxxxx01d4c5000070xxxxxx01d4c6000071xxxxxx01d4c7000072xxxxxx01d4c8000073xxxxxx01d4c9000074xxxxxx01d4ca000075xxxxxx01d4cb000076xxxxxx01d4cc000077xxxxxx01d4cd000078xxxxxx01d4ce000079xxxxxx01d4cf00007axxxxxx01d4d0000041xxxxxx01d4d1000042xxxxxx01d4d2000043xxxxxx01d4d3000044xxxxxx01d4d4000045xxxxxx01d4d5000046xxxxxx01d4d6000047xxxxxx01d4d7000048xxxxxx01d4d8000049xxxxxx01d4d900004axxxxxx01d4da00004bxxxxxx01d4db00004cxxxxxx01d4dc00004dxxxxxx01d4dd00004exxxxxx01d4de00004fxxxxxx01d4df000050xxxxxx01d4e0000051xxxxxx01d4e1000052xxxxxx01d4e2000053xxxxxx01d4e3000054xxxxxx01d4e4000055xxxxxx01d4e5000056xxxxxx01d4e6000057xxxxxx01d4e7000058xxxxxx01d4e8000059xxxxxx01d4e900005axxxxxx01d4ea000061xxxxxx01d4eb000062xxxxxx01d4ec000063xxxxxx01d4ed000064xxxxxx01d4ee000065xxxxxx01d4ef000066xxxxxx01d4f0000067xxxxxx01d4f1000068xxxxxx01d4f2000069xxxxxx01d4f300006axxxxxx01d4f400006bxxxxxx01d4f500006cxxxxxx01d4f600006dxxxxxx01d4f700006exxxxxx01d4f800006fxxxxxx01d4f9000070xxxxxx01d4fa000071xxxxxx01d4fb000072xxxxxx01d4fc000073xxxxxx01d4fd000074xxxxxx01d4fe000075xxxxxx01d4ff000076xxxxxx01d500000077xxxxxx01d501000078xxxxxx01d502000079xxxxxx01d50300007axxxxxx01d504000041xxxxxx01d505000042xxxxxx01d507000044xxxxxx01d508000045xxxxxx01d509000046xxxxxx01d50a000047xxxxxx01d50d00004axxxxxx01d50e00004bxxxxxx01d50f00004cxxxxxx01d51000004dxxxxxx01d51100004exxxxxx01d51200004fxxxxxx01d513000050xxxxxx01d514000051xxxxxx01d516000053xxxxxx01d517000054xxxxxx01d518000055xxxxxx01d519000056xxxxxx01d51a000057xxxxxx01d51b000058xxxxxx01d51c000059xxxxxx01d51e000061xxxxxx01d51f000062xxxxxx01d520000063xxxxxx01d521000064xxxxxx01d522000065xxxxxx01d523000066xxxxxx01d524000067xxxxxx01d525000068xxxxxx01d526000069xxxxxx01d52700006axxxxxx01d52800006bxxxxxx01d52900006cxxxxxx01d52a00006dxxxxxx01d52b00006exxxxxx01d52c00006fxxxxxx01d52d000070xxxxxx01d52e000071xxxxxx01d52f000072xxxxxx01d530000073xxxxxx01d531000074xxxxxx01d532000075xxxxxx01d533000076xxxxxx01d534000077xxxxxx01d535000078xxxxxx01d536000079xxxxxx01d53700007axxxxxx01d538000041xxxxxx01d539000042xxxxxx01d53b000044xxxxxx01d53c000045xxxxxx01d53d000046xxxxxx01d53e000047xxxxxx01d540000049xxxxxx01d54100004axxxxxx01d54200004bxxxxxx01d54300004cxxxxxx01d54400004dxxxxxx01d54600004fxxxxxx01d54a000053xxxxxx01d54b000054xxxxxx01d54c000055xxxxxx01d54d000056xxxxxx01d54e000057xxxxxx01d54f000058xxxxxx01d550000059xxxxxx01d552000061xxxxxx01d553000062xxxxxx01d554000063xxxxxx01d555000064xxxxxx01d556000065xxxxxx01d557000066xxxxxx01d558000067xxxxxx01d559000068xxxxxx01d55a000069xxxxxx01d55b00006axxxxxx01d55c00006bxxxxxx01d55d00006cxxxxxx01d55e00006dxxxxxx01d55f00006exxxxxx01d56000006fxxxxxx01d561000070xxxxxx01d562000071xxxxxx01d563000072xxxxxx01d564000073xxxxxx01d565000074xxxxxx01d566000075xxxxxx01d567000076xxxxxx01d568000077xxxxxx01d569000078xxxxxx01d56a000079xxxxxx01d56b00007axxxxxx01d56c000041xxxxxx01d56d000042xxxxxx01d56e000043xxxxxx01d56f000044xxxxxx01d570000045xxxxxx01d571000046xxxxxx01d572000047xxxxxx01d573000048xxxxxx01d574000049xxxxxx01d57500004axxxxxx01d57600004bxxxxxx01d57700004cxxxxxx01d57800004dxxxxxx01d57900004exxxxxx01d57a00004fxxxxxx01d57b000050xxxxxx01d57c000051xxxxxx01d57d000052xxxxxx01d57e000053xxxxxx01d57f000054xxxxxx01d580000055xxxxxx01d581000056xxxxxx01d582000057xxxxxx01d583000058xxxxxx01d584000059xxxxxx01d58500005axxxxxx01d586000061xxxxxx01d587000062xxxxxx01d588000063xxxxxx01d589000064xxxxxx01d58a000065xxxxxx01d58b000066xxxxxx01d58c000067xxxxxx01d58d000068xxxxxx01d58e000069xxxxxx01d58f00006axxxxxx01d59000006bxxxxxx01d59100006cxxxxxx01d59200006dxxxxxx01d59300006exxxxxx01d59400006fxxxxxx01d595000070xxxxxx01d596000071xxxxxx01d597000072xxxxxx01d598000073xxxxxx01d599000074xxxxxx01d59a000075xxxxxx01d59b000076xxxxxx01d59c000077xxxxxx01d59d000078xxxxxx01d59e000079xxxxxx01d59f00007axxxxxx01d5a0000041xxxxxx01d5a1000042xxxxxx01d5a2000043xxxxxx01d5a3000044xxxxxx01d5a4000045xxxxxx01d5a5000046xxxxxx01d5a6000047xxxxxx01d5a7000048xxxxxx01d5a8000049xxxxxx01d5a900004axxxxxx01d5aa00004bxxxxxx01d5ab00004cxxxxxx01d5ac00004dxxxxxx01d5ad00004exxxxxx01d5ae00004fxxxxxx01d5af000050xxxxxx01d5b0000051xxxxxx01d5b1000052xxxxxx01d5b2000053xxxxxx01d5b3000054xxxxxx01d5b4000055xxxxxx01d5b5000056xxxxxx01d5b6000057xxxxxx01d5b7000058xxxxxx01d5b8000059xxxxxx01d5b900005axxxxxx01d5ba000061xxxxxx01d5bb000062xxxxxx01d5bc000063xxxxxx01d5bd000064xxxxxx01d5be000065xxxxxx01d5bf000066xxxxxx01d5c0000067xxxxxx01d5c1000068xxxxxx01d5c2000069xxxxxx01d5c300006axxxxxx01d5c400006bxxxxxx01d5c500006cxxxxxx01d5c600006dxxxxxx01d5c700006exxxxxx01d5c800006fxxxxxx01d5c9000070xxxxxx01d5ca000071xxxxxx01d5cb000072xxxxxx01d5cc000073xxxxxx01d5cd000074xxxxxx01d5ce000075xxxxxx01d5cf000076xxxxxx01d5d0000077xxxxxx01d5d1000078xxxxxx01d5d2000079xxxxxx01d5d300007axxxxxx01d5d4000041xxxxxx01d5d5000042xxxxxx01d5d6000043xxxxxx01d5d7000044xxxxxx01d5d8000045xxxxxx01d5d9000046xxxxxx01d5da000047xxxxxx01d5db000048xxxxxx01d5dc000049xxxxxx01d5dd00004axxxxxx01d5de00004bxxxxxx01d5df00004cxxxxxx01d5e000004dxxxxxx01d5e100004exxxxxx01d5e200004fxxxxxx01d5e3000050xxxxxx01d5e4000051xxxxxx01d5e5000052xxxxxx01d5e6000053xxxxxx01d5e7000054xxxxxx01d5e8000055xxxxxx01d5e9000056xxxxxx01d5ea000057xxxxxx01d5eb000058xxxxxx01d5ec000059xxxxxx01d5ed00005axxxxxx01d5ee000061xxxxxx01d5ef000062xxxxxx01d5f0000063xxxxxx01d5f1000064xxxxxx01d5f2000065xxxxxx01d5f3000066xxxxxx01d5f4000067xxxxxx01d5f5000068xxxxxx01d5f6000069xxxxxx01d5f700006axxxxxx01d5f800006bxxxxxx01d5f900006cxxxxxx01d5fa00006dxxxxxx01d5fb00006exxxxxx01d5fc00006fxxxxxx01d5fd000070xxxxxx01d5fe000071xxxxxx01d5ff000072xxxxxx01d600000073xxxxxx01d601000074xxxxxx01d602000075xxxxxx01d603000076xxxxxx01d604000077xxxxxx01d605000078xxxxxx01d606000079xxxxxx01d60700007axxxxxx01d608000041xxxxxx01d609000042xxxxxx01d60a000043xxxxxx01d60b000044xxxxxx01d60c000045xxxxxx01d60d000046xxxxxx01d60e000047xxxxxx01d60f000048xxxxxx01d610000049xxxxxx01d61100004axxxxxx01d61200004bxxxxxx01d61300004cxxxxxx01d61400004dxxxxxx01d61500004exxxxxx01d61600004fxxxxxx01d617000050xxxxxx01d618000051xxxxxx01d619000052xxxxxx01d61a000053xxxxxx01d61b000054xxxxxx01d61c000055xxxxxx01d61d000056xxxxxx01d61e000057xxxxxx01d61f000058xxxxxx01d620000059xxxxxx01d62100005axxxxxx01d622000061xxxxxx01d623000062xxxxxx01d624000063xxxxxx01d625000064xxxxxx01d626000065xxxxxx01d627000066xxxxxx01d628000067xxxxxx01d629000068xxxxxx01d62a000069xxxxxx01d62b00006axxxxxx01d62c00006bxxxxxx01d62d00006cxxxxxx01d62e00006dxxxxxx01d62f00006exxxxxx01d63000006fxxxxxx01d631000070xxxxxx01d632000071xxxxxx01d633000072xxxxxx01d634000073xxxxxx01d635000074xxxxxx01d636000075xxxxxx01d637000076xxxxxx01d638000077xxxxxx01d639000078xxxxxx01d63a000079xxxxxx01d63b00007axxxxxx01d63c000041xxxxxx01d63d000042xxxxxx01d63e000043xxxxxx01d63f000044xxxxxx01d640000045xxxxxx01d641000046xxxxxx01d642000047xxxxxx01d643000048xxxxxx01d644000049xxxxxx01d64500004axxxxxx01d64600004bxxxxxx01d64700004cxxxxxx01d64800004dxxxxxx01d64900004exxxxxx01d64a00004fxxxxxx01d64b000050xxxxxx01d64c000051xxxxxx01d64d000052xxxxxx01d64e000053xxxxxx01d64f000054xxxxxx01d650000055xxxxxx01d651000056xxxxxx01d652000057xxxxxx01d653000058xxxxxx01d654000059xxxxxx01d65500005axxxxxx01d656000061xxxxxx01d657000062xxxxxx01d658000063xxxxxx01d659000064xxxxxx01d65a000065xxxxxx01d65b000066xxxxxx01d65c000067xxxxxx01d65d000068xxxxxx01d65e000069xxxxxx01d65f00006axxxxxx01d66000006bxxxxxx01d66100006cxxxxxx01d66200006dxxxxxx01d66300006exxxxxx01d66400006fxxxxxx01d665000070xxxxxx01d666000071xxxxxx01d667000072xxxxxx01d668000073xxxxxx01d669000074xxxxxx01d66a000075xxxxxx01d66b000076xxxxxx01d66c000077xxxxxx01d66d000078xxxxxx01d66e000079xxxxxx01d66f00007axxxxxx01d670000041xxxxxx01d671000042xxxxxx01d672000043xxxxxx01d673000044xxxxxx01d674000045xxxxxx01d675000046xxxxxx01d676000047xxxxxx01d677000048xxxxxx01d678000049xxxxxx01d67900004axxxxxx01d67a00004bxxxxxx01d67b00004cxxxxxx01d67c00004dxxxxxx01d67d00004exxxxxx01d67e00004fxxxxxx01d67f000050xxxxxx01d680000051xxxxxx01d681000052xxxxxx01d682000053xxxxxx01d683000054xxxxxx01d684000055xxxxxx01d685000056xxxxxx01d686000057xxxxxx01d687000058xxxxxx01d688000059xxxxxx01d68900005axxxxxx01d68a000061xxxxxx01d68b000062xxxxxx01d68c000063xxxxxx01d68d000064xxxxxx01d68e000065xxxxxx01d68f000066xxxxxx01d690000067xxxxxx01d691000068xxxxxx01d692000069xxxxxx01d69300006axxxxxx01d69400006bxxxxxx01d69500006cxxxxxx01d69600006dxxxxxx01d69700006exxxxxx01d69800006fxxxxxx01d699000070xxxxxx01d69a000071xxxxxx01d69b000072xxxxxx01d69c000073xxxxxx01d69d000074xxxxxx01d69e000075xxxxxx01d69f000076xxxxxx01d6a0000077xxxxxx01d6a1000078xxxxxx01d6a2000079xxxxxx01d6a300007axxxxxx01d6a4000131xxxxxx01d6a5000237xxxxxx01d6a8000391xxxxxx01d6a9000392xxxxxx01d6aa000393xxxxxx01d6ab000394xxxxxx01d6ac000395xxxxxx01d6ad000396xxxxxx01d6ae000397xxxxxx01d6af000398xxxxxx01d6b0000399xxxxxx01d6b100039axxxxxx01d6b200039bxxxxxx01d6b300039cxxxxxx01d6b400039dxxxxxx01d6b500039exxxxxx01d6b600039fxxxxxx01d6b70003a0xxxxxx01d6b80003a1xxxxxx01d6b90003f4xxxxxx01d6ba0003a3xxxxxx01d6bb0003a4xxxxxx01d6bc0003a5xxxxxx01d6bd0003a6xxxxxx01d6be0003a7xxxxxx01d6bf0003a8xxxxxx01d6c00003a9xxxxxx01d6c1002207xxxxxx01d6c20003b1xxxxxx01d6c30003b2xxxxxx01d6c40003b3xxxxxx01d6c50003b4xxxxxx01d6c60003b5xxxxxx01d6c70003b6xxxxxx01d6c80003b7xxxxxx01d6c90003b8xxxxxx01d6ca0003b9xxxxxx01d6cb0003baxxxxxx01d6cc0003bbxxxxxx01d6cd0003bcxxxxxx01d6ce0003bdxxxxxx01d6cf0003bexxxxxx01d6d00003bfxxxxxx01d6d10003c0xxxxxx01d6d20003c1xxxxxx01d6d30003c2xxxxxx01d6d40003c3xxxxxx01d6d50003c4xxxxxx01d6d60003c5xxxxxx01d6d70003c6xxxxxx01d6d80003c7xxxxxx01d6d90003c8xxxxxx01d6da0003c9xxxxxx01d6db002202xxxxxx01d6dc0003f5xxxxxx01d6dd0003d1xxxxxx01d6de0003f0xxxxxx01d6df0003d5xxxxxx01d6e00003f1xxxxxx01d6e10003d6xxxxxx01d6e2000391xxxxxx01d6e3000392xxxxxx01d6e4000393xxxxxx01d6e5000394xxxxxx01d6e6000395xxxxxx01d6e7000396xxxxxx01d6e8000397xxxxxx01d6e9000398xxxxxx01d6ea000399xxxxxx01d6eb00039axxxxxx01d6ec00039bxxxxxx01d6ed00039cxxxxxx01d6ee00039dxxxxxx01d6ef00039exxxxxx01d6f000039fxxxxxx01d6f10003a0xxxxxx01d6f20003a1xxxxxx01d6f30003f4xxxxxx01d6f40003a3xxxxxx01d6f50003a4xxxxxx01d6f60003a5xxxxxx01d6f70003a6xxxxxx01d6f80003a7xxxxxx01d6f90003a8xxxxxx01d6fa0003a9xxxxxx01d6fb002207xxxxxx01d6fc0003b1xxxxxx01d6fd0003b2xxxxxx01d6fe0003b3xxxxxx01d6ff0003b4xxxxxx01d7000003b5xxxxxx01d7010003b6xxxxxx01d7020003b7xxxxxx01d7030003b8xxxxxx01d7040003b9xxxxxx01d7050003baxxxxxx01d7060003bbxxxxxx01d7070003bcxxxxxx01d7080003bdxxxxxx01d7090003bexxxxxx01d70a0003bfxxxxxx01d70b0003c0xxxxxx01d70c0003c1xxxxxx01d70d0003c2xxxxxx01d70e0003c3xxxxxx01d70f0003c4xxxxxx01d7100003c5xxxxxx01d7110003c6xxxxxx01d7120003c7xxxxxx01d7130003c8xxxxxx01d7140003c9xxxxxx01d715002202xxxxxx01d7160003f5xxxxxx01d7170003d1xxxxxx01d7180003f0xxxxxx01d7190003d5xxxxxx01d71a0003f1xxxxxx01d71b0003d6xxxxxx01d71c000391xxxxxx01d71d000392xxxxxx01d71e000393xxxxxx01d71f000394xxxxxx01d720000395xxxxxx01d721000396xxxxxx01d722000397xxxxxx01d723000398xxxxxx01d724000399xxxxxx01d72500039axxxxxx01d72600039bxxxxxx01d72700039cxxxxxx01d72800039dxxxxxx01d72900039exxxxxx01d72a00039fxxxxxx01d72b0003a0xxxxxx01d72c0003a1xxxxxx01d72d0003f4xxxxxx01d72e0003a3xxxxxx01d72f0003a4xxxxxx01d7300003a5xxxxxx01d7310003a6xxxxxx01d7320003a7xxxxxx01d7330003a8xxxxxx01d7340003a9xxxxxx01d735002207xxxxxx01d7360003b1xxxxxx01d7370003b2xxxxxx01d7380003b3xxxxxx01d7390003b4xxxxxx01d73a0003b5xxxxxx01d73b0003b6xxxxxx01d73c0003b7xxxxxx01d73d0003b8xxxxxx01d73e0003b9xxxxxx01d73f0003baxxxxxx01d7400003bbxxxxxx01d7410003bcxxxxxx01d7420003bdxxxxxx01d7430003bexxxxxx01d7440003bfxxxxxx01d7450003c0xxxxxx01d7460003c1xxxxxx01d7470003c2xxxxxx01d7480003c3xxxxxx01d7490003c4xxxxxx01d74a0003c5xxxxxx01d74b0003c6xxxxxx01d74c0003c7xxxxxx01d74d0003c8xxxxxx01d74e0003c9xxxxxx01d74f002202xxxxxx01d7500003f5xxxxxx01d7510003d1xxxxxx01d7520003f0xxxxxx01d7530003d5xxxxxx01d7540003f1xxxxxx01d7550003d6xxxxxx01d756000391xxxxxx01d757000392xxxxxx01d758000393xxxxxx01d759000394xxxxxx01d75a000395xxxxxx01d75b000396xxxxxx01d75c000397xxxxxx01d75d000398xxxxxx01d75e000399xxxxxx01d75f00039axxxxxx01d76000039bxxxxxx01d76100039cxxxxxx01d76200039dxxxxxx01d76300039exxxxxx01d76400039fxxxxxx01d7650003a0xxxxxx01d7660003a1xxxxxx01d7670003f4xxxxxx01d7680003a3xxxxxx01d7690003a4xxxxxx01d76a0003a5xxxxxx01d76b0003a6xxxxxx01d76c0003a7xxxxxx01d76d0003a8xxxxxx01d76e0003a9xxxxxx01d76f002207xxxxxx01d7700003b1xxxxxx01d7710003b2xxxxxx01d7720003b3xxxxxx01d7730003b4xxxxxx01d7740003b5xxxxxx01d7750003b6xxxxxx01d7760003b7xxxxxx01d7770003b8xxxxxx01d7780003b9xxxxxx01d7790003baxxxxxx01d77a0003bbxxxxxx01d77b0003bcxxxxxx01d77c0003bdxxxxxx01d77d0003bexxxxxx01d77e0003bfxxxxxx01d77f0003c0xxxxxx01d7800003c1xxxxxx01d7810003c2xxxxxx01d7820003c3xxxxxx01d7830003c4xxxxxx01d7840003c5xxxxxx01d7850003c6xxxxxx01d7860003c7xxxxxx01d7870003c8xxxxxx01d7880003c9xxxxxx01d789002202xxxxxx01d78a0003f5xxxxxx01d78b0003d1xxxxxx01d78c0003f0xxxxxx01d78d0003d5xxxxxx01d78e0003f1xxxxxx01d78f0003d6xxxxxx01d790000391xxxxxx01d791000392xxxxxx01d792000393xxxxxx01d793000394xxxxxx01d794000395xxxxxx01d795000396xxxxxx01d796000397xxxxxx01d797000398xxxxxx01d798000399xxxxxx01d79900039axxxxxx01d79a00039bxxxxxx01d79b00039cxxxxxx01d79c00039dxxxxxx01d79d00039exxxxxx01d79e00039fxxxxxx01d79f0003a0xxxxxx01d7a00003a1xxxxxx01d7a10003f4xxxxxx01d7a20003a3xxxxxx01d7a30003a4xxxxxx01d7a40003a5xxxxxx01d7a50003a6xxxxxx01d7a60003a7xxxxxx01d7a70003a8xxxxxx01d7a80003a9xxxxxx01d7a9002207xxxxxx01d7aa0003b1xxxxxx01d7ab0003b2xxxxxx01d7ac0003b3xxxxxx01d7ad0003b4xxxxxx01d7ae0003b5xxxxxx01d7af0003b6xxxxxx01d7b00003b7xxxxxx01d7b10003b8xxxxxx01d7b20003b9xxxxxx01d7b30003baxxxxxx01d7b40003bbxxxxxx01d7b50003bcxxxxxx01d7b60003bdxxxxxx01d7b70003bexxxxxx01d7b80003bfxxxxxx01d7b90003c0xxxxxx01d7ba0003c1xxxxxx01d7bb0003c2xxxxxx01d7bc0003c3xxxxxx01d7bd0003c4xxxxxx01d7be0003c5xxxxxx01d7bf0003c6xxxxxx01d7c00003c7xxxxxx01d7c10003c8xxxxxx01d7c20003c9xxxxxx01d7c3002202xxxxxx01d7c40003f5xxxxxx01d7c50003d1xxxxxx01d7c60003f0xxxxxx01d7c70003d5xxxxxx01d7c80003f1xxxxxx01d7c90003d6xxxxxx01d7ca0003dcxxxxxx01d7cb0003ddxxxxxx01d7ce000030xxxxxx01d7cf000031xxxxxx01d7d0000032xxxxxx01d7d1000033xxxxxx01d7d2000034xxxxxx01d7d3000035xxxxxx01d7d4000036xxxxxx01d7d5000037xxxxxx01d7d6000038xxxxxx01d7d7000039xxxxxx01d7d8000030xxxxxx01d7d9000031xxxxxx01d7da000032xxxxxx01d7db000033xxxxxx01d7dc000034xxxxxx01d7dd000035xxxxxx01d7de000036xxxxxx01d7df000037xxxxxx01d7e0000038xxxxxx01d7e1000039xxxxxx01d7e2000030xxxxxx01d7e3000031xxxxxx01d7e4000032xxxxxx01d7e5000033xxxxxx01d7e6000034xxxxxx01d7e7000035xxxxxx01d7e8000036xxxxxx01d7e9000037xxxxxx01d7ea000038xxxxxx01d7eb000039xxxxxx01d7ec000030xxxxxx01d7ed000031xxxxxx01d7ee000032xxxxxx01d7ef000033xxxxxx01d7f0000034xxxxxx01d7f1000035xxxxxx01d7f2000036xxxxxx01d7f3000037xxxxxx01d7f4000038xxxxxx01d7f5000039xxxxxx01d7f6000030xxxxxx01d7f7000031xxxxxx01d7f8000032xxxxxx01d7f9000033xxxxxx01d7fa000034xxxxxx01d7fb000035xxxxxx01d7fc000036xxxxxx01d7fd000037xxxxxx01d7fe000038xxxxxx01d7ff000039xxxxxx
|
data/lib/unicode_utils.rb
CHANGED
@@ -19,6 +19,9 @@ require "unicode_utils/canonical_decomposition"
|
|
19
19
|
require "unicode_utils/nfd"
|
20
20
|
require "unicode_utils/canonical_equivalents_q"
|
21
21
|
require "unicode_utils/nfc"
|
22
|
+
require "unicode_utils/compatibility_decomposition"
|
23
|
+
require "unicode_utils/nfkd"
|
24
|
+
require "unicode_utils/nfkc"
|
22
25
|
|
23
26
|
# Read the README[link:files/README_txt.html] for an introduction.
|
24
27
|
#
|
@@ -28,6 +31,8 @@ require "unicode_utils/nfc"
|
|
28
31
|
# UnicodeUtils.downcase:: full conversion to lowercase
|
29
32
|
# UnicodeUtils.nfd:: Normalization Form D
|
30
33
|
# UnicodeUtils.nfc:: Normalization Form C
|
34
|
+
# UnicodeUtils.nfkd:: Normalization Form KD
|
35
|
+
# UnicodeUtils.nfkc:: Normalization Form KC
|
31
36
|
# UnicodeUtils.name:: character names
|
32
37
|
module UnicodeUtils
|
33
38
|
end
|
@@ -22,6 +22,8 @@ module UnicodeUtils
|
|
22
22
|
#
|
23
23
|
# # LATIN SMALL LETTER A WITH ACUTE => LATIN SMALL LETTER A, COMBINING ACUTE ACCENT
|
24
24
|
# UnicodeUtils.canonical_decomposition("\u{E1}") => "\u{61}\u{301}"
|
25
|
+
#
|
26
|
+
# See also: UnicodeUtils.nfd
|
25
27
|
def canonical_decomposition(str)
|
26
28
|
res = String.new.force_encoding(str.encoding)
|
27
29
|
str.each_codepoint { |cp|
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require "unicode_utils/canonical_decomposition"
|
4
|
+
require "unicode_utils/read_multivalued_map"
|
5
|
+
require "unicode_utils/hangul_syllable_decomposition"
|
6
|
+
|
7
|
+
module UnicodeUtils
|
8
|
+
|
9
|
+
COMPATIBILITY_DECOMPOSITION_MAP =
|
10
|
+
Impl.read_multivalued_map("compatibility_decomposition_map") # :nodoc:
|
11
|
+
|
12
|
+
# Get the compatibility decomposition of the given string, also
|
13
|
+
# called Normalization Form KD or short NFKD.
|
14
|
+
#
|
15
|
+
# Compatibility decomposition decomposes more codepoints than
|
16
|
+
# canonical decomposition and contrary to Normalization Form D and
|
17
|
+
# C, this normalization can alter how a string is displayed.
|
18
|
+
#
|
19
|
+
# Example:
|
20
|
+
#
|
21
|
+
# # LATIN SMALL LIGATURE FI => LATIN SMALL LETTER F, LATIN SMALL LETTER I
|
22
|
+
# UnicodeUtils.compatibility_decomposition("fi") => "fi"
|
23
|
+
#
|
24
|
+
# See also: UnicodeUtils.nfkd
|
25
|
+
def compatibility_decomposition(str)
|
26
|
+
res = String.new.force_encoding(str.encoding)
|
27
|
+
str.each_codepoint { |cp|
|
28
|
+
if cp >= 0xAC00 && cp <= 0xD7A3 # hangul syllable
|
29
|
+
Impl.append_hangul_syllable_decomposition(res, cp)
|
30
|
+
else
|
31
|
+
Impl.append_recursive_compatibility_decomposition_mapping(res, cp)
|
32
|
+
end
|
33
|
+
}
|
34
|
+
Impl.put_into_canonical_order(res)
|
35
|
+
end
|
36
|
+
module_function :compatibility_decomposition
|
37
|
+
|
38
|
+
module Impl # :nodoc:
|
39
|
+
|
40
|
+
def self.append_recursive_compatibility_decomposition_mapping(str, cp)
|
41
|
+
mapping = COMPATIBILITY_DECOMPOSITION_MAP[cp]
|
42
|
+
mapping ||= CANONICAL_DECOMPOSITION_MAP[cp]
|
43
|
+
if mapping
|
44
|
+
mapping.each { |c|
|
45
|
+
append_recursive_compatibility_decomposition_mapping(str, c)
|
46
|
+
}
|
47
|
+
else
|
48
|
+
str << cp
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
data/lib/unicode_utils/nfc.rb
CHANGED
@@ -47,95 +47,98 @@ module UnicodeUtils
|
|
47
47
|
|
48
48
|
end
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
# UnicodeUtils.nfc("La\u{308}mpchen") => "Lämpchen"
|
63
|
-
def nfc(str)
|
64
|
-
str = UnicodeUtils.canonical_decomposition(str)
|
50
|
+
def self.composition(str)
|
51
|
+
### constants for hangul composition ###
|
52
|
+
sbase = 0xAC00
|
53
|
+
lbase = 0x1100
|
54
|
+
vbase = 0x1161
|
55
|
+
tbase = 0x11A7
|
56
|
+
lcount = 19
|
57
|
+
vcount = 21
|
58
|
+
tcount = 28
|
59
|
+
ncount = vcount * tcount
|
60
|
+
scount = lcount * ncount
|
61
|
+
########################################
|
65
62
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
if Impl::NFC.starter?(cp)
|
83
|
-
combined = false
|
84
|
-
if last_starter && uncomposable_non_starters.empty?
|
85
|
-
### hangul ###
|
86
|
-
lindex = last_starter - lbase
|
87
|
-
if 0 <= lindex && lindex < lcount
|
88
|
-
vindex = cp - vbase
|
89
|
-
if 0 <= vindex && vindex <= vcount
|
90
|
-
last_starter =
|
91
|
-
sbase + (lindex * vcount + vindex) * tcount
|
92
|
-
combined = true
|
63
|
+
String.new.force_encoding(str.encoding).tap do |res|
|
64
|
+
last_starter = nil
|
65
|
+
uncomposable_non_starters = []
|
66
|
+
str.each_codepoint { |cp|
|
67
|
+
if Impl::NFC.starter?(cp)
|
68
|
+
combined = false
|
69
|
+
if last_starter && uncomposable_non_starters.empty?
|
70
|
+
### hangul ###
|
71
|
+
lindex = last_starter - lbase
|
72
|
+
if 0 <= lindex && lindex < lcount
|
73
|
+
vindex = cp - vbase
|
74
|
+
if 0 <= vindex && vindex <= vcount
|
75
|
+
last_starter =
|
76
|
+
sbase + (lindex * vcount + vindex) * tcount
|
77
|
+
combined = true
|
78
|
+
end
|
93
79
|
end
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
80
|
+
unless combined
|
81
|
+
sindex = last_starter - sbase
|
82
|
+
if 0 <= sindex && sindex < scount && (sindex % tcount) == 0
|
83
|
+
tindex = cp - tbase
|
84
|
+
if 0 <= tindex && tindex < tcount
|
85
|
+
last_starter += tindex
|
86
|
+
combined = true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
##############
|
91
|
+
unless combined
|
92
|
+
map = Impl::CANONICAL_COMPOSITION_MAP[last_starter]
|
93
|
+
composition = map && map[cp]
|
94
|
+
if composition && Impl::NFC.primary_composite?(composition)
|
95
|
+
last_starter = composition
|
101
96
|
combined = true
|
102
97
|
end
|
103
98
|
end
|
104
99
|
end
|
105
|
-
##############
|
106
100
|
unless combined
|
101
|
+
res << last_starter if last_starter
|
102
|
+
uncomposable_non_starters.each { |nc| res << nc }
|
103
|
+
uncomposable_non_starters.clear
|
104
|
+
last_starter = cp
|
105
|
+
end
|
106
|
+
else
|
107
|
+
last_non_starter = uncomposable_non_starters.last
|
108
|
+
if last_non_starter && Impl::NFC.blocked?(last_non_starter, cp)
|
109
|
+
uncomposable_non_starters << cp
|
110
|
+
else
|
107
111
|
map = Impl::CANONICAL_COMPOSITION_MAP[last_starter]
|
108
112
|
composition = map && map[cp]
|
109
113
|
if composition && Impl::NFC.primary_composite?(composition)
|
110
114
|
last_starter = composition
|
111
|
-
|
115
|
+
else
|
116
|
+
uncomposable_non_starters << cp
|
112
117
|
end
|
113
118
|
end
|
114
119
|
end
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
last_starter = cp
|
120
|
-
end
|
121
|
-
else
|
122
|
-
last_non_starter = uncomposable_non_starters.last
|
123
|
-
if last_non_starter && Impl::NFC.blocked?(last_non_starter, cp)
|
124
|
-
uncomposable_non_starters << cp
|
125
|
-
else
|
126
|
-
map = Impl::CANONICAL_COMPOSITION_MAP[last_starter]
|
127
|
-
composition = map && map[cp]
|
128
|
-
if composition && Impl::NFC.primary_composite?(composition)
|
129
|
-
last_starter = composition
|
130
|
-
else
|
131
|
-
uncomposable_non_starters << cp
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
}
|
136
|
-
res << last_starter if last_starter
|
137
|
-
uncomposable_non_starters.each { |nc| res << nc }
|
120
|
+
}
|
121
|
+
res << last_starter if last_starter
|
122
|
+
uncomposable_non_starters.each { |nc| res << nc }
|
123
|
+
end
|
138
124
|
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
# Get +str+ in Normalization Form C.
|
129
|
+
#
|
130
|
+
# The Unicode standard has multiple representations for some
|
131
|
+
# characters. One representation as a single codepoint and other
|
132
|
+
# representation(s) as a combination of multiple codepoints. This
|
133
|
+
# function "composes" these characters into the former
|
134
|
+
# representation.
|
135
|
+
#
|
136
|
+
# Example:
|
137
|
+
#
|
138
|
+
# UnicodeUtils.nfc("La\u{308}mpchen") => "Lämpchen"
|
139
|
+
def nfc(str)
|
140
|
+
str = UnicodeUtils.canonical_decomposition(str)
|
141
|
+
Impl.composition(str)
|
139
142
|
end
|
140
143
|
module_function :nfc
|
141
144
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require "unicode_utils/compatibility_decomposition"
|
4
|
+
require "unicode_utils/nfc"
|
5
|
+
|
6
|
+
module UnicodeUtils
|
7
|
+
|
8
|
+
# Get +str+ in Normalization Form KC.
|
9
|
+
#
|
10
|
+
# Normalization Form KC is compatibiliy decomposition (NFKD)
|
11
|
+
# followed by composition. Like NFKD, this normalization can alter
|
12
|
+
# how a string is displayed.
|
13
|
+
#
|
14
|
+
# Example:
|
15
|
+
#
|
16
|
+
# # LATIN SMALL LIGATURE FI => LATIN SMALL LETTER F, LATIN SMALL LETTER I
|
17
|
+
# UnicodeUtils.nfkc("fi") => "fi"
|
18
|
+
#
|
19
|
+
# See also: UnicodeUtils.compatibility_decomposition
|
20
|
+
def nfkc(str)
|
21
|
+
str = UnicodeUtils.compatibility_decomposition(str)
|
22
|
+
Impl.composition(str)
|
23
|
+
end
|
24
|
+
module_function :nfkc
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require "unicode_utils/compatibility_decomposition"
|
4
|
+
|
5
|
+
module UnicodeUtils
|
6
|
+
|
7
|
+
# Get +str+ in Normalization Form KD.
|
8
|
+
#
|
9
|
+
# Alias for UnicodeUtils.compatibility_decomposition.
|
10
|
+
def nfkd(str)
|
11
|
+
UnicodeUtils.compatibility_decomposition(str)
|
12
|
+
end
|
13
|
+
module_function :nfkd
|
14
|
+
|
15
|
+
end
|
data/test/test_normalization.rb
CHANGED
@@ -72,4 +72,24 @@ class TestNormalization < Test::Unit::TestCase
|
|
72
72
|
}
|
73
73
|
end
|
74
74
|
|
75
|
+
def test_nfkd
|
76
|
+
each_testdata_record { |r|
|
77
|
+
assert_equal r.c5, UnicodeUtils.nfkd(r.c1)
|
78
|
+
assert_equal r.c5, UnicodeUtils.nfkd(r.c2)
|
79
|
+
assert_equal r.c5, UnicodeUtils.nfkd(r.c3)
|
80
|
+
assert_equal r.c5, UnicodeUtils.nfkd(r.c4)
|
81
|
+
assert_equal r.c5, UnicodeUtils.nfkd(r.c5)
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_nfkc
|
86
|
+
each_testdata_record { |r|
|
87
|
+
assert_equal r.c4, UnicodeUtils.nfkc(r.c1)
|
88
|
+
assert_equal r.c4, UnicodeUtils.nfkc(r.c2)
|
89
|
+
assert_equal r.c4, UnicodeUtils.nfkc(r.c3)
|
90
|
+
assert_equal r.c4, UnicodeUtils.nfkc(r.c4)
|
91
|
+
assert_equal r.c4, UnicodeUtils.nfkc(r.c5)
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
75
95
|
end
|
data/test/test_unicode_utils.rb
CHANGED
@@ -123,6 +123,8 @@ class TestUnicodeUtils < Test::Unit::TestCase
|
|
123
123
|
UnicodeUtils.canonical_decomposition("\u{E1}")
|
124
124
|
assert_equal "\u{61}\u{301}\u{63}\u{327}\u{301}",
|
125
125
|
UnicodeUtils.canonical_decomposition("\u{e1}\u{63}\u{301}\u{327}")
|
126
|
+
assert_equal "\u{fb01}",
|
127
|
+
UnicodeUtils.canonical_decomposition("\u{fb01}")
|
126
128
|
end
|
127
129
|
|
128
130
|
def test_nfd
|
@@ -138,4 +140,24 @@ class TestUnicodeUtils < Test::Unit::TestCase
|
|
138
140
|
assert_equal "Häschen", UnicodeUtils.nfc("Ha\u{308}schen")
|
139
141
|
end
|
140
142
|
|
143
|
+
def test_compatibility_decomposition
|
144
|
+
# the following two calls have the same results with
|
145
|
+
# canonical_decomposition
|
146
|
+
assert_equal "\u{61}\u{301}",
|
147
|
+
UnicodeUtils.compatibility_decomposition("\u{E1}")
|
148
|
+
assert_equal "\u{61}\u{301}\u{63}\u{327}\u{301}",
|
149
|
+
UnicodeUtils.compatibility_decomposition("\u{e1}\u{63}\u{301}\u{327}")
|
150
|
+
# this case differs from canonical decomposition
|
151
|
+
assert_equal "\u{66}\u{69}",
|
152
|
+
UnicodeUtils.compatibility_decomposition("\u{fb01}")
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_nfkd
|
156
|
+
assert_equal "\u{66}\u{69}", UnicodeUtils.nfkd("\u{fb01}")
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_nfkc
|
160
|
+
assert_equal "\u{66}\u{69}\u{e4}", UnicodeUtils.nfkc("\u{fb01}\u{e4}")
|
161
|
+
end
|
162
|
+
|
141
163
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unicode_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Lang
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-11-
|
12
|
+
date: 2008-11-28 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -35,11 +35,14 @@ files:
|
|
35
35
|
- lib/unicode_utils/uppercase_char_q.rb
|
36
36
|
- lib/unicode_utils/read_multivalued_map.rb
|
37
37
|
- lib/unicode_utils/canonical_equivalents_q.rb
|
38
|
+
- lib/unicode_utils/nfkc.rb
|
39
|
+
- lib/unicode_utils/nfkd.rb
|
38
40
|
- lib/unicode_utils/canonical_decomposition.rb
|
39
41
|
- lib/unicode_utils/upcase.rb
|
40
42
|
- lib/unicode_utils/nfc.rb
|
41
43
|
- lib/unicode_utils/nfd.rb
|
42
44
|
- lib/unicode_utils/case_ignorable_char_q.rb
|
45
|
+
- lib/unicode_utils/compatibility_decomposition.rb
|
43
46
|
- lib/unicode_utils/simple_upcase.rb
|
44
47
|
- lib/unicode_utils/lowercase_char_q.rb
|
45
48
|
- lib/unicode_utils/jamo_short_name.rb
|
@@ -62,6 +65,7 @@ files:
|
|
62
65
|
- cdata/composition_exclusion_set
|
63
66
|
- cdata/simple_uc_map
|
64
67
|
- cdata/jamo_short_names
|
68
|
+
- cdata/compatibility_decomposition_map
|
65
69
|
- cdata/prop_set_uppercase
|
66
70
|
- test/test_normalization.rb
|
67
71
|
- test/test_unicode_utils.rb
|