From 4ae3775ab76e6a878fc9214b0558f1288e3720f9 Mon Sep 17 00:00:00 2001 From: polygonplanet Date: Fri, 2 Oct 2026 21:34:39 +0900 Subject: [PATCH 1/4] refactor: move UTF-8 to JIS tables to tests --- {src => tests}/utf8-to-jis-table.js | 0 {src => tests}/utf8-to-jisx0212-table.js | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {src => tests}/utf8-to-jis-table.js (100%) rename {src => tests}/utf8-to-jisx0212-table.js (100%) diff --git a/src/utf8-to-jis-table.js b/tests/utf8-to-jis-table.js similarity index 100% rename from src/utf8-to-jis-table.js rename to tests/utf8-to-jis-table.js diff --git a/src/utf8-to-jisx0212-table.js b/tests/utf8-to-jisx0212-table.js similarity index 100% rename from src/utf8-to-jisx0212-table.js rename to tests/utf8-to-jisx0212-table.js From 70f7bf0df5cf75a06aec3687c9db535faca3bc4d Mon Sep 17 00:00:00 2001 From: polygonplanet Date: Fri, 2 Oct 2026 21:36:38 +0900 Subject: [PATCH 2/4] refactor: add compressed UTF-8 to JIS tables and remove unused JIS to UTF-8 tables Move U+2016 (0xE28096) and U+00AC (0xC2AC) entries to the alias table --- src/jis-to-utf8-table.js | 5 -- src/jisx0212-to-utf8-table.js | 5 -- src/utf8-to-jis-alias-table.js | 4 +- src/utf8-to-jis-table.js | 92 ++++++++++++++++++++++++++++++++++ src/utf8-to-jisx0212-table.js | 81 ++++++++++++++++++++++++++++++ 5 files changed, 176 insertions(+), 11 deletions(-) delete mode 100644 src/jis-to-utf8-table.js delete mode 100644 src/jisx0212-to-utf8-table.js create mode 100644 src/utf8-to-jis-table.js create mode 100644 src/utf8-to-jisx0212-table.js diff --git a/src/jis-to-utf8-table.js b/src/jis-to-utf8-table.js deleted file mode 100644 index b6fec1f..0000000 --- a/src/jis-to-utf8-table.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Encoding conversion table for JIS to UTF-8 - */ -var JIS_TO_UTF8_TABLE = null; -module.exports = JIS_TO_UTF8_TABLE; diff --git a/src/jisx0212-to-utf8-table.js b/src/jisx0212-to-utf8-table.js deleted file mode 100644 index 691427f..0000000 --- a/src/jisx0212-to-utf8-table.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Encoding conversion table for JIS X 0212:1990 (Hojo-Kanji) to UTF-8 - */ -var JISX0212_TO_UTF8_TABLE = null; -module.exports = JISX0212_TO_UTF8_TABLE; diff --git a/src/utf8-to-jis-alias-table.js b/src/utf8-to-jis-alias-table.js index 98b4fb4..793f30a 100644 --- a/src/utf8-to-jis-alias-table.js +++ b/src/utf8-to-jis-alias-table.js @@ -10,5 +10,7 @@ module.exports = { 0xE28892: 0x215D, // − U+2212 MINUS SIGN same cell as - U+FF0D (0xEFBC8D) -> SJIS 0x817C 0xE3809C: 0x2141, // 〜 U+301C WAVE DASH same cell as ~ U+FF5E (0xEFBD9E) -> SJIS 0x8160 0xC2A2: 0x2171, // ¢ U+00A2 CENT SIGN same cell as ¢ U+FFE0 (0xEFBFA0) -> SJIS 0x8191 - 0xC2A3: 0x2172 // £ U+00A3 POUND SIGN same cell as £ U+FFE1 (0xEFBFA1) -> SJIS 0x8192 + 0xC2A3: 0x2172, // £ U+00A3 POUND SIGN same cell as £ U+FFE1 (0xEFBFA1) -> SJIS 0x8192 + 0xC2AC: 0x224C, // ¬ U+00AC NOT SIGN same cell as ¬ U+FFE2 (0xEFBFA2) -> SJIS 0x81CA + 0xE28096: 0x2142 // ‖ U+2016 DOUBLE VERTICAL LINE same cell as ∥ U+2225 (0xE288A5) -> SJIS 0x8161 }; diff --git a/src/utf8-to-jis-table.js b/src/utf8-to-jis-table.js new file mode 100644 index 0000000..d7352d0 --- /dev/null +++ b/src/utf8-to-jis-table.js @@ -0,0 +1,92 @@ +/** + * Encoding conversion table for UTF-8 to JIS (JIS X 0208) + * + * The table is stored in a compressed form and is expanded by + * src/encoding-table.js on first use. + * + * Uncompressed version: tests/utf8-to-jis-table.js + */ +module.exports = [ + '21=3000+3,ff0c,ff0e,30fb,ff1a+2,ff1f,ff01,309b+2,b4,ff40,a8,ff3e,ffe3,ff3f,30fd+2,309d+2,3003,4edd,3005+3,30fc,2015,2010,ff0f,ff3c,ff5e,2225,ff5c,2026,2025,2018+2,201c+2,ff08+2,3014+2,ff3b,ff3d,ff5b,ff5d,3008+10,ff0b,ff0d,b1,d7,f7,ff1d,2260,ff1c,ff1e,2266+2,221e,2234,2642,2640,b0,2032+2,2103,ffe5,ff04,ffe0+2,ff05,ff03,ff06,ff0a,ff20,a7,2606,2605,25cb,25cf,25ce,25c7', + '22=25c6,25a1,25a0,25b3,25b2,25bd,25bc,203b,3012,2192,2190+2,2193,3013,-11,2208,220b,2286+2,2282+2,222a,2229,-8,2227+2,ffe2,21d2,21d4,2200,2203,-11,2220,22a5,2312,2202,2207,2261,2252,226a+2,221a,223d,221d,2235,222b+2,-7,212b,2030,266f,266d,266a,2020+2,b6,-4,25ef', + '23=-15,ff10+10,-7,ff21+26,-6,ff41+26', + '24=3041+83', + '25=30a1+86', + '26=391+17,3a3+7,-8,3b1+17,3c3+7', + '27=410+6,401,416+26,-15,430+6,451,436+26', + '28=2500,2502,250c,2510,2518,2514,251c,252c,2524,2534,253c,2501,2503,250f,2513,251b,2517,2523,2533,252b,253b,254b,2520,252f,2528,2537,253f,251d,2530,2525,2538,2542', + '2d=2460+20,2160+10,-1,3349,3314,3322,334d,3318,3327,3303,3336,3351,3357,330d,3326,3323,332b,334a,333b,339c+3,338e+2,33c4,33a1,-8,337b,301d,301f,2116,33cd,2121,32a4+5,3231+2,3239,337e,337d,337c,-3,222e,2211,-3,221f,22bf', + '30=4e9c,5516,5a03,963f,54c0,611b,6328,59f6,9022,8475,831c,7a50,60aa,63e1,6e25,65ed,8466,82a6,9bf5,6893,5727,65a1,6271,5b9b,59d0,867b,98f4,7d62,7dbe,9b8e,6216,7c9f,88b7,5b89,5eb5,6309,6697,6848,95c7,978d,674f,4ee5,4f0a,4f4d,4f9d,5049,56f2,5937,59d4,5a01,5c09,60df,610f,6170,6613,6905,70ba,754f,7570,79fb,7dad,7def,80c3,840e,8863,8b02,9055,907a,533b,4e95,4ea5,57df,80b2,90c1,78ef,4e00,58f1,6ea2,9038,7a32,8328,828b,9c2f,5141,5370,54bd,54e1,56e0,59fb,5f15,98f2,6deb,80e4,852d', + '31=9662,9670,96a0,97fb,540b,53f3,5b87,70cf,7fbd,8fc2,96e8,536f,9d5c,7aba,4e11,7893,81fc,6e26,5618,5504,6b1d,851a,9c3b,59e5,53a9,6d66,74dc,958f,5642,4e91,904b,96f2,834f,990c,53e1,55b6,5b30,5f71,6620,66f3,6804,6c38,6cf3,6d29,745b,76c8,7a4e,9834,82f1,885b,8a60,92ed,6db2,75ab,76ca,99c5,60a6,8b01,8d8a,95b2,698e,53ad,5186,5712,5830,5944,5bb4,5ef6,6028,63a9,63f4,6cbf,6f14,708e,7114,7159,71d5,733f,7e01,8276,82d1,8597,9060,925b,9d1b,5869,65bc,6c5a,7525,51f9,592e,5965,5f80,5fdc', + '32=62bc,65fa,6a2a,6b27,6bb4,738b,7fc1,8956,9d2c,9d0e,9ec4,5ca1,6c96,837b,5104,5c4b,61b6,81c6,6876,7261,4e59,4ffa,5378,6069,6e29,7a4f,97f3,4e0b,5316,4eee,4f55,4f3d,4fa1,4f73,52a0,53ef,5609,590f,5ac1,5bb6,5be1,79d1,6687,679c,67b6,6b4c,6cb3,706b,73c2,798d,79be,7a3c,7b87,82b1,82db,8304,8377,83ef,83d3,8766,8ab2,5629,8ca8,8fe6,904e,971e,868a,4fc4,5ce8,6211,7259,753b,81e5,82bd,86fe,8cc0,96c5,9913,99d5,4ecb,4f1a,89e3,56de,584a,58ca,5efb,5feb,602a,6094,6062,61d0,6212,62d0,6539', + '33=9b41,6666,68b0,6d77,7070,754c,7686,7d75,82a5,87f9,958b,968e,8c9d,51f1,52be,5916,54b3,5bb3,5d16,6168,6982,6daf,788d,84cb,8857,8a72,93a7,9ab8,6d6c,99a8,86d9,57a3,67ff,86ce,920e,5283,5687,5404,5ed3,62e1,64b9,683c,6838,6bbb,7372,78ba,7a6b,899a,89d2,8d6b,8f03,90ed,95a3,9694,9769,5b66,5cb3,697d,984d+2,639b,7b20,6a2b,6a7f,68b6,9c0d,6f5f,5272,559d,6070,62ec,6d3b,6e07,6ed1,845b,8910,8f44,4e14,9c39,53f6,691b,6a3a,9784,682a,515c,7ac3,84b2,91dc,938c,565b,9d28,6822,8305,8431', + '34=7ca5,5208,82c5,74e6,4e7e,4f83,51a0,5bd2,520a,52d8,52e7,5dfb,559a,582a,59e6,5b8c,5b98,5bdb,5e72,5e79,60a3,611f,6163,61be,63db,6562,67d1,6853,68fa,6b3e,6b53,6c57,6f22,6f97,6f45,74b0,7518,76e3,770b,7aff,7ba1,7c21,7de9,7f36,7ff0,809d,8266,839e,89b3,8acc,8cab,9084,9451,9593,9591,95a2,9665,97d3,9928,8218,4e38,542b,5cb8,5dcc,73a9,764c,773c,5ca9,7feb,8d0b,96c1,9811,9854,9858,4f01,4f0e,5371,559c,5668,57fa,5947,5b09,5bc4,5c90,5e0c,5e7e,5fcc,63ee,673a,65d7,65e2,671f,68cb,68c4', + '35=6a5f,5e30,6bc5,6c17,6c7d,757f,7948,5b63,7a00,7d00,5fbd,898f,8a18,8cb4,8d77,8ecc,8f1d,98e2,9a0e,9b3c,4e80,507d,5100,5993,5b9c,622f,6280,64ec,6b3a,72a0,7591,7947,7fa9,87fb,8abc,8b70,63ac,83ca,97a0,5409,5403,55ab,6854,6a58,8a70,7827,6775,9ecd,5374,5ba2,811a,8650,9006,4e18,4e45,4ec7,4f11,53ca,5438,5bae,5f13,6025,6551,673d,6c42,6c72,6ce3,7078,7403,7a76,7aae,7b08,7d1a,7cfe,7d66,65e7,725b,53bb,5c45,5de8,62d2,62e0,6319,6e20,865a,8a31,8ddd,92f8,6f01,79a6,9b5a,4ea8,4eab+2', + '36=4f9b,4fa0,50d1,5147,7af6,5171,51f6,5354,5321,537f,53eb,55ac,5883,5ce1,5f37,5f4a,602f,6050,606d,631f,6559,6a4b,6cc1,72c2,72ed,77ef,80f8,8105,8208,854e,90f7,93e1,97ff,9957,9a5a,4ef0,51dd,5c2d,6681,696d,5c40,66f2,6975,7389,6850,7c81,50c5,52e4,5747,5dfe,9326,65a4,6b23,6b3d,7434,7981,79bd,7b4b,7dca,82b9,83cc,887f,895f,8b39,8fd1,91d1,541f,9280,4e5d,5036,53e5,533a,72d7,7396,77e9,82e6,8eaf,99c6,99c8,99d2,5177,611a,865e,55b0,7a7a,5076,5bd3,9047,9685,4e32,6adb,91e7,5c51,5c48', + '37=6398,7a9f,6c93,9774,8f61,7aaa,718a,9688,7c82,6817,7e70,6851,936c,52f2,541b,85ab,8a13,7fa4,8ecd,90e1,5366,8888,7941,4fc2,50be,5211,5144,5553,572d,73ea,578b,5951,5f62,5f84,6075,6176,6167,61a9,63b2,643a,656c,666f,6842,6e13,7566,7a3d,7cfb,7d4c,7d99,7e4b,7f6b,830e,834a,86cd,8a08,8a63,8b66,8efd,981a,9d8f,82b8,8fce,9be8,5287,621f,6483,6fc0,9699,6841,5091,6b20,6c7a,6f54,7a74,7d50,8840,8a23,6708,4ef6,5039,5026,5065,517c,5238,5263,55a7,570f,5805,5acc,5efa,61b2,61f8,62f3,6372', + '38=691c,6a29,727d,72ac,732e,7814,786f,7d79,770c,80a9,898b,8b19,8ce2,8ed2,9063,9375,967a,9855,9a13,9e78,5143,539f,53b3,5e7b,5f26,6e1b,6e90,7384,73fe,7d43,8237,8a00,8afa,9650,4e4e,500b,53e4,547c,56fa,59d1,5b64,5df1,5eab,5f27,6238,6545,67af,6e56,72d0,7cca,88b4,80a1,80e1,83f0,864e,8a87,8de8,9237,96c7,9867,9f13,4e94,4e92,4f0d,5348,5449,543e,5a2f,5f8c,5fa1,609f,68a7,6a8e,745a,7881,8a9e,8aa4,8b77,9190,4e5e,9bc9,4ea4,4f7c,4faf,5019,5016,5149,516c,529f,52b9,52fe,539a,53e3,5411', + '39=540e,5589,5751,57a2,597d,5b54,5b5d,5b8f,5de5,5de7,5df7,5e78,5e83,5e9a,5eb7,5f18,6052,614c,6297,62d8,63a7,653b,6602,6643,66f4,676d,6821,6897,69cb,6c5f,6d2a,6d69,6e2f,6e9d,7532,7687,786c,7a3f,7ce0,7d05,7d18,7d5e,7db1,8015,8003,80af,80b1,8154,818f,822a,8352,884c,8861,8b1b,8ca2,8cfc,90ca,9175,9271,783f,92fc,95a4,964d,9805,9999,9ad8,9d3b,525b,52ab,53f7,5408,58d5,62f7,6fe0,8c6a,8f5f,9eb9,514b,523b,544a,56fd,7a40,9177,9d60,9ed2,7344,6f09,8170,7511,5ffd,60da,9aa8,72db,8fbc', + '3a=6b64,9803,4eca,56f0,5764,58be,5a5a,6068,61c7,660f,6606,6839,68b1,6df7,75d5,7d3a,826e,9b42,4e9b,4f50,53c9,5506,5d6f,5de6,5dee,67fb,6c99,7473,7802,8a50,9396,88df,5750,5ea7,632b,50b5,50ac,518d,6700,54c9,585e,59bb,5bb0,5f69,624d,63a1,683d,6b73,6e08,707d,91c7,7280,7815,7826,796d,658e,7d30,83dc,88c1,8f09,969b,5264,5728,6750,7f6a,8ca1,51b4,5742,962a,583a,698a,80b4,54b2,5d0e,57fc,7895,9dfa,4f5c,524a,548b,643e,6628,6714,67f5,7a84,7b56,7d22,932f,685c,9bad,7b39,5319,518a,5237', + '3b=5bdf,62f6,64ae,64e6,672d,6bba,85a9,96d1,7690,9bd6,634c,9306,9bab,76bf,6652,4e09,5098,53c2,5c71,60e8,6492,6563,685f,71e6,73ca,7523,7b97,7e82,8695,8b83,8cdb,9178,9910,65ac,66ab,6b8b,4ed5,4ed4,4f3a,4f7f,523a,53f8,53f2,55e3,56db,58eb,59cb,59c9,59ff,5b50,5c4d,5e02,5e2b,5fd7,601d,6307,652f,5b5c,65af,65bd,65e8,679d,6b62,6b7b,6c0f,7345,7949,79c1,7cf8,7d19,7d2b,80a2,8102,81f3,8996,8a5e,8a69,8a66,8a8c,8aee,8cc7,8cdc,96cc,98fc,6b6f,4e8b,4f3c,4f8d,5150,5b57,5bfa,6148,6301,6642', + '3c=6b21,6ecb,6cbb,723e,74bd,75d4,78c1,793a,800c,8033,81ea,8494,8f9e,6c50,9e7f,5f0f,8b58,9d2b,7afa,8ef8,5b8d,96eb,4e03,53f1,57f7,5931,5ac9,5ba4,6089,6e7f,6f06,75be,8cea,5b9f,8500,7be0,5072,67f4,829d,5c61,854a,7e1e,820e,5199,5c04,6368,8d66,659c,716e,793e,7d17,8005,8b1d,8eca,906e,86c7,90aa,501f,52fa,5c3a,6753,707c,7235,914c,91c8,932b,82e5,5bc2,5f31,60f9,4e3b,53d6,5b88,624b,6731,6b8a,72e9,73e0,7a2e,816b,8da3,9152,9996,5112,53d7,546a,5bff,6388,6a39,7dac,9700,56da,53ce,5468', + '3d=5b97,5c31,5dde,4fee,6101,62fe,6d32,79c0,79cb,7d42,7e4d,7fd2,81ed,821f,8490,8846,8972,8b90,8e74,8f2f,9031,914b,916c,96c6,919c,4ec0,4f4f,5145,5341,5f93,620e,67d4,6c41,6e0b,7363,7e26,91cd,9283,53d4,5919,5bbf,6dd1,795d,7e2e,7c9b,587e,719f,51fa,8853,8ff0,4fca,5cfb,6625,77ac,7ae3,821c,99ff,51c6,5faa,65ec,696f,6b89,6df3,6e96,6f64,76fe,7d14,5de1,9075,9187,9806,51e6,521d,6240,6691,66d9,6e1a,5eb6,7dd2,7f72,66f8,85af,85f7,8af8,52a9,53d9,5973,5e8f,5f90,6055,92e4,9664,50b7,511f', + '3e=52dd,5320,5347,53ec,54e8,5546,5531,5617,5968,59be,5a3c,5bb5,5c06,5c0f,5c11,5c1a,5e84,5e8a,5ee0,5f70,627f,6284,62db,638c,6377,6607,660c,662d,6676,677e,68a2,6a1f,6a35,6cbc,6d88,6e09,6e58,713c,7126,7167,75c7,7701,785d,7901,7965,79f0,7ae0,7b11,7ca7,7d39,8096,83d6,848b,8549,885d,88f3,8a1f,8a3c,8a54,8a73,8c61,8cde,91a4,9266,937e,9418,969c,9798,4e0a,4e08,4e1e,4e57,5197,5270,57ce,5834,58cc,5b22,5e38,60c5,64fe,6761,6756,6d44,72b6,7573,7a63,84b8,8b72,91b8,9320,5631,57f4,98fe', + '3f=62ed,690d,6b96,71ed,7e54,8077,8272,89e6,98df,8755,8fb1,5c3b,4f38,4fe1,4fb5,5507,5a20,5bdd,5be9,5fc3,614e,632f,65b0,664b,68ee,699b,6d78,6df1,7533,75b9,771f,795e,79e6,7d33,81e3,82af,85aa,89aa,8a3a,8eab,8f9b,9032,91dd,9707,4eba,4ec1,5203,5875,58ec,5c0b,751a,5c3d,814e,8a0a,8fc5,9663,976d,7b25,8acf,9808,9162,56f3,53a8,9017,5439,5782,5e25,63a8,6c34,708a,7761,7c8b,7fe0,8870,9042,9154,9310,9318,968f,745e,9ac4,5d07,5d69,6570,67a2,8da8,96db,636e,6749,6919,83c5,9817,96c0,88fe', + '40=6f84,647a,5bf8,4e16,702c,755d,662f,51c4,5236,52e2,59d3,5f81,6027,6210,653f,6574,661f,6674,68f2,6816,6b63,6e05,7272,751f,76db,7cbe,8056,58f0,88fd,897f,8aa0,8a93,8acb,901d,9192,9752,9759,6589,7a0e,8106,96bb,5e2d,60dc,621a,65a5,6614,6790,77f3,7a4d,7c4d,7e3e,810a,8cac,8d64,8de1,8e5f,78a9,5207,62d9,63a5,6442,6298,8a2d,7a83,7bc0,8aac,96ea,7d76,820c,8749,4ed9,5148,5343,5360,5ba3,5c02,5c16,5ddd,6226,6247,64b0,6813,6834,6cc9,6d45,6d17,67d3,6f5c,714e,717d,65cb,7a7f,7bad,7dda', + '41=7e4a,7fa8,817a,821b,8239,85a6,8a6e,8cce,8df5,9078,9077,92ad,9291,9583,9bae,524d,5584,6f38,7136,5168,7985,7e55,81b3,7cce,564c,5851,5ca8,63aa,66fe,66fd,695a,72d9,758f,758e,790e,7956,79df,7c97,7d20,7d44,8607,8a34,963b,9061,9f20,50e7,5275,53cc,53e2,5009,55aa,58ee,594f,723d,5b8b,5c64,531d,60e3,60f3,635c,6383,633f,63bb,64cd,65e9,66f9,5de3,69cd,69fd,6f15,71e5,4e89,75e9,76f8,7a93,7cdf,7dcf,7d9c,8061,8349,8358,846c,84bc,85fb,88c5,8d70,9001,906d,9397,971c,9a12,50cf,5897,618e', + '42=81d3,8535,8d08,9020,4fc3,5074,5247,5373,606f,6349,675f,6e2c,8db3,901f,4fd7,5c5e,8cca,65cf,7d9a,5352,8896,5176,63c3,5b58,5b6b,5c0a,640d,6751,905c,4ed6,591a,592a,6c70,8a51,553e,5815,59a5,60f0,6253,67c1,8235,6955,9640,99c4,9a28,4f53,5806,5bfe,8010,5cb1,5e2f,5f85,6020,614b,6234,66ff,6cf0,6ede,80ce,817f,82d4,888b,8cb8,9000,902e,968a,9edb,9bdb,4ee3,53f0,5927,7b2c,918d,984c,9df9,6edd,7027,5353,5544,5b85,6258,629e,62d3,6ca2,6fef,7422,8a17,9438,6fc1,8afe,8338,51e7,86f8,53ea', + '43=53e9,4f46,9054,8fb0,596a,8131,5dfd,7aea,8fbf,68da,8c37,72f8,9c48,6a3d,8ab0,4e39,5358,5606,5766,62c5,63a2,65e6,6b4e,6de1,6e5b,70ad,77ed,7aef,7baa,7dbb,803d,80c6,86cb,8a95,935b,56e3,58c7,5f3e,65ad,6696,6a80,6bb5,7537,8ac7,5024,77e5,5730,5f1b,6065,667a,6c60,75f4,7a1a,7f6e,81f4,8718,9045,99b3,7bc9,755c,7af9,7b51,84c4,9010,79e9,7a92,8336,5ae1,7740,4e2d,4ef2,5b99,5fe0,62bd,663c,67f1,6ce8,866b,8877,8a3b,914e,92f3,99d0,6a17,7026,732a,82e7,8457,8caf,4e01,5146,51cb,558b,5bf5', + '44=5e16,5e33,5e81,5f14,5f35,5f6b,5fb4,61f2,6311,66a2,671d,6f6e,7252,753a,773a,8074,8139,8178,8776,8abf,8adc,8d85,8df3,929a,9577,9802,9ce5,52c5,6357,76f4,6715,6c88,73cd,8cc3,93ae,9673,6d25,589c,690e,69cc,8ffd,939a,75db,901a,585a,6802,63b4,69fb,4f43,6f2c,67d8,8fbb,8526,7db4,9354,693f,6f70,576a,58f7,5b2c,7d2c,722a,540a,91e3,9db4,4ead,4f4e,505c,5075,5243,8c9e,5448,5824,5b9a,5e1d,5e95,5ead,5ef7,5f1f,608c,62b5,633a,63d0,68af,6c40,7887,798e,7a0b,7de0,8247,8a02,8ae6,8e44,9013', + '45=90b8,912d,91d8,9f0e,6ce5,6458,64e2,6575,6ef4,7684,7b1b,9069,93d1,6eba,54f2,5fb9,64a4,8f4d,8fed,9244,5178,586b,5929,5c55,5e97,6dfb,7e8f,751c,8cbc,8ee2,985b,70b9,4f1d,6bbf,6fb1,7530,96fb,514e,5410,5835,5857,59ac,5c60,5f92,6597,675c,6e21,767b,83df,8ced,9014,90fd,934d,7825,783a,52aa,5ea6,571f,5974,6012,5012,515a,51ac,51cd,5200,5510,5854,5858,5957,5b95,5cf6,5d8b,60bc,6295,642d,6771,6843,68bc,68df,76d7,6dd8,6e6f,6d9b,706f,71c8,5f53,75d8,7977,7b49,7b54,7b52,7cd6,7d71,5230', + '46=8463,8569,85e4,8a0e,8b04,8c46,8e0f,9003,900f,9419,9676,982d,9a30,95d8,50cd,52d5,540c,5802,5c0e,61a7,649e,6d1e,77b3,7ae5,80f4,8404,9053,9285,5ce0,9d07,533f,5f97,5fb3,6d9c,7279,7763,79bf,7be4,6bd2,72ec,8aad,6803,6a61,51f8,7a81,6934,5c4a,9cf6,82eb,5bc5,9149,701e,5678,5c6f,60c7,6566,6c8c,8c5a,9041,9813,5451,66c7,920d,5948,90a3,5185,4e4d,51ea,8599,8b0e,7058,637a,934b,6962,99b4,7e04,7577,5357,6960,8edf,96e3,6c5d,4e8c,5c3c,5f10,8fe9,5302,8cd1,8089,8679,5eff,65e5,4e73,5165', + '47=5982,5c3f,97ee,4efb,598a,5fcd,8a8d,6fe1,79b0,7962,5be7,8471,732b,71b1,5e74,5ff5,637b,649a,71c3,7c98,4e43,5efc,4e4b,57dc,56a2,60a9,6fc3,7d0d,80fd,8133,81bf,8fb2,8997,86a4,5df4,628a,64ad,8987,6777,6ce2,6d3e,7436,7834,5a46,7f75,82ad,99ac,4ff3,5ec3,62dd,6392,6557,676f,76c3,724c,80cc,80ba,8f29,914d,500d,57f9,5a92,6885,6973,7164,72fd,8cb7,58f2,8ce0,966a,9019,877f,79e4,77e7,8429,4f2f,5265,535a,62cd,67cf,6cca,767d,7b94,7c95,8236,8584,8feb,66dd,6f20,7206,7e1b,83ab,99c1,9ea6', + '48=51fd,7bb1,7872,7bb8,8087,7b48,6ae8,5e61,808c,7551,7560,516b,9262,6e8c,767a,9197,9aea,4f10,7f70,629c,7b4f,95a5,9ce9,567a,5859,86e4,96bc,4f34,5224,534a,53cd,53db,5e06,642c,6591,677f,6c3e,6c4e,7248,72af,73ed,7554,7e41,822c,85e9,8ca9,7bc4,91c6,7169,9812,98ef,633d,6669,756a,76e4,78d0,8543,86ee,532a,5351,5426,5983,5e87,5f7c,60b2,6249,6279,62ab,6590,6bd4,6ccc,75b2,76ae,7891,79d8,7dcb,7f77,80a5,88ab,8ab9,8cbb,907f,975e,98db,6a0b,7c38,5099,5c3e,5fae,6787,6bd8,7435,7709,7f8e', + '49=9f3b,67ca,7a17,5339,758b,9aed,5f66,819d,83f1,8098,5f3c,5fc5,7562,7b46,903c,6867,59eb,5a9b,7d10,767e,8b2c,4ff5,5f6a,6a19,6c37,6f02,74e2,7968,8868,8a55,8c79,5edf,63cf,75c5,79d2,82d7,9328,92f2,849c,86ed,9c2d,54c1,5f6c,658c,6d5c,7015,8ca7,8cd3,983b,654f,74f6,4e0d,4ed8,57e0,592b,5a66,5bcc,51a8,5e03,5e9c,6016,6276,6577,65a7,666e,6d6e,7236,7b26,8150,819a,8299,8b5c,8ca0,8ce6,8d74,961c,9644,4fae,64ab,6b66,821e,8461,856a,90e8,5c01,6953,98a8,847a,8557,4f0f,526f,5fa9,5e45,670d', + '4a=798f,8179,8907,8986,6df5,5f17,6255,6cb8,4ecf,7269,9b92,5206,543b,5674,58b3,61a4,626e,711a,596e,7c89,7cde,7d1b,96f0,6587,805e,4e19,4f75,5175,5840,5e63,5e73,5f0a,67c4,4e26,853d,9589,965b,7c73,9801,50fb,58c1,7656,78a7,5225,77a5,8511,7b86,504f,5909,7247,7bc7,7de8,8fba,8fd4,904d,4fbf,52c9,5a29,5f01,97ad,4fdd,8217,92ea,5703,6355,6b69,752b,88dc,8f14,7a42,52df,5893,6155,620a,66ae,6bcd,7c3f,83e9,5023,4ff8,5305,5446,5831,5949,5b9d,5cf0,5cef,5d29,5e96,62b1,6367,653e,65b9,670b', + '4b=6cd5,6ce1,70f9,7832,7e2b,80de,82b3,840c,84ec,8702,8912,8a2a,8c4a,90a6,92d2,98fd,9cf3,9d6c,4e4f,4ea1,508d,5256,574a,59a8,5e3d,5fd8+2,623f,66b4,671b,67d0,68d2,5192,7d21,80aa,81a8,8b00,8c8c,8cbf,927e,9632,5420,982c,5317,50d5,535c,58a8,64b2,6734,7267,7766,7a46,91e6,52c3,6ca1,6b86,5800,5e4c,5954,672c,7ffb,51e1,76c6,6469,78e8,9b54,9ebb,57cb,59b9,6627,679a,6bce,54e9,69d9,5e55,819c,6795,9baa,67fe,9c52,685d,4ea6,4fe3,53c8,62b9,672b,6cab,8fc4,4fad,7e6d,9ebf,4e07,6162,6e80', + '4c=6f2b,8513,5473,672a,9b45,5df3,7b95,5cac,5bc6,871c,6e4a,84d1,7a14,8108,5999,7c8d,6c11,7720,52d9,5922,7121,725f,77db,9727,9d61,690b,5a7f,5a18,51a5,540d,547d,660e,76df,8ff7,9298,9cf4,59ea,725d,6ec5,514d,68c9,7dbf,7dec,9762,9eba,6478,6a21,8302,5984,5b5f,6bdb,731b,76f2,7db2,8017,8499,5132,6728,9ed9,76ee,6762,52ff,9905,5c24,623b,7c7e,8cb0,554f,60b6,7d0b,9580,5301,4e5f,51b6,591c,723a,8036,91ce,5f25,77e2,5384,5f79,7d04,85ac,8a33,8e8d,9756,67f3,85ae,9453,6109,6108,6cb9,7652', + '4d=8aed,8f38,552f,4f51,512a,52c7,53cb,5ba5,5e7d,60a0,6182,63d6,6709,67da,6e67,6d8c,7336+2,7531,7950,88d5,8a98,904a,9091,90f5,96c4,878d,5915,4e88,4f59,4e0e,8a89,8f3f,9810,50ad,5e7c,5996,5bb9,5eb8,63da,63fa,64c1,66dc,694a,69d8,6d0b,6eb6,7194,7528,7aaf,7f8a,8000,8449,84c9,8981,8b21,8e0a,9065,967d,990a,617e,6291,6b32,6c83,6d74,7fcc,7ffc,6dc0,7f85,87ba,88f8,6765,83b1,983c,96f7,6d1b,7d61,843d,916a,4e71,5375,5d50,6b04,6feb,85cd,862d,89a7,5229,540f,5c65,674e,68a8,7406,7483', + '4e=75e2,88cf,88e1,91cc,96e2,9678,5f8b,7387,7acb,844e,63a0,7565,5289,6d41,6e9c,7409,7559,786b,7c92,9686,7adc,9f8d,4fb6,616e,65c5,865c,4e86,4eae,50da,4e21,51cc,5bee,6599,6881,6dbc,731f,7642,77ad,7a1c,7ce7,826f,8ad2,907c,91cf,9675,9818,529b,7dd1,502b,5398,6797,6dcb,71d0,7433,81e8,8f2a,96a3,9c57,9e9f,7460,5841,6d99,7d2f,985e,4ee4,4f36,4f8b,51b7,52b1,5dba,601c,73b2,793c,82d3,9234,96b7,96f6,970a,9e97,9f62,66a6,6b74,5217,52a3,70c8,88c2,5ec9,604b,6190,6f23,7149,7c3e,7df4,806f', + '4f=84ee,9023,932c,5442,9b6f,6ad3,7089,8cc2,8def,9732,52b4,5a41,5eca,5f04,6717,697c,6994,6d6a,6f0f,7262,72fc,7bed,8001,807e,874b,90ce,516d,9e93,7984,808b,9332,8ad6,502d,548c,8a71,6b6a,8cc4,8107,60d1,67a0,9df2,4e99,4e98,9c10,8a6b,85c1,8568,6900,6e7e,7897,8155', + '50=5f0c,4e10,4e15,4e2a,4e31,4e36,4e3c,4e3f,4e42,4e56,4e58,4e82,4e85,8c6b,4e8a,8212,5f0d,4e8e,4e9e+3,4ea2,4eb0,4eb3,4eb6,4ece,4ecd,4ec4,4ec6,4ec2,4ed7,4ede,4eed,4edf,4ef7,4f09,4f5a,4f30,4f5b,4f5d,4f57,4f47,4f76,4f88,4f8f,4f98,4f7b,4f69,4f70,4f91,4f6f,4f86,4f96,5118,4fd4,4fdf,4fce,4fd8,4fdb,4fd1,4fda,4fd0,4fe4+2,501a,5028,5014,502a,5025,5005,4f1c,4ff6,5021,5029,502c,4ffe,4fef,5011,5006,5043,5047,6703,5055,5050,5048,505a,5056,506c,5078,5080,509a,5085,50b4,50b2', + '51=50c9+2,50b3,50c2,50d6,50de,50e5,50ed,50e3,50ee,50f9,50f5,5109,5101+2,5116,5115,5114,511a,5121,513a,5137,513c,513b,513f+2,5152,514c,5154,5162,7af8,5169+2,516e,5180,5182,56d8,518c,5189,518f,5191,5193,5195+2,51a4,51a6,51a2,51a9+3,51b3,51b1+2,51b0,51b5,51bd,51c5,51c9,51db,51e0,8655,51e9,51ed,51f0,51f5,51fe,5204,520b,5214,520e,5227,522a,522e,5233,5239,524f,5244,524b+2,525e,5254,526a,5274,5269,5273,527f,527d,528d,5294,5292,5271,5288,5291,8fa8', + '52=8fa7,52ac+2,52bc,52b5,52c1,52cd,52d7,52de,52e3,52e6,98ed,52e0,52f3,52f5,52f8+2,5306,5308,7538,530d,5310,530f,5315,531a,5323,532f,5331,5333,5338,5340,5346,5345,4e17,5349,534d,51d6,535e,5369,536e,5918,537b,5377,5382,5396,53a0,53a6,53a5,53ae,53b0,53b6,53c3,7c12,96d9,53df,66fc,71ee,53ee,53e8,53ed,53fa,5401,543d,5440,542c+2,543c,542e,5436,5429,541d,544e,548f,5475,548e,545f,5471,5477,5470,5492,547b,5480,5476,5484,5490,5486,54c7,54a2,54b8,54a5,54ac,54c4,54c8,54a8', + '53=54ab,54c2,54a4,54be,54bc,54d8,54e5+2,550f,5514,54fd,54ee,54ed,54fa,54e2,5539,5540,5563,554c,552e,555c,5545,5556+2,5538,5533,555d,5599,5580,54af,558a,559f,557b,557e,5598,559e,55ae,557c,5583,55a9,5587,55a8,55da,55c5,55df,55c4,55dc,55e4,55d4,5614,55f7,5616,55fe,55fd,561b,55f9,564e,5650,71df,5634,5636,5632,5638,566b,5664,562f,566c,566a,5686,5680,568a,56a0,5694,568f,56a5,56ae,56b6,56b4,56c2,56bc,56c1,56c3,56c0,56c8,56ce,56d1,56d3,56d7,56ee,56f9,5700,56ff,5704,5709', + '54=5708,570b,570d,5713,5718,5716,55c7,571c,5726,5737+2,574e,573b,5740,574f,5769,57c0,5788,5761,577f,5789,5793,57a0,57b3,57a4,57aa,57b0,57c3,57c6,57d4,57d2+2,580a,57d6,57e3,580b,5819,581d,5872,5821,5862,584b,5870,6bc0,5852,583d,5879,5885,58b9,589f,58ab,58ba,58de,58bb,58b8,58ae,58c5,58d3,58d1,58d7,58d9,58d8,58e5,58dc,58e4,58df,58ef,58fa,58f9,58fb+3,5902,590a,5910,591b,68a6,5925,592c+2,5932,5938,593e,7ad2,5955,5950,594e,595a,5958,5962,5960,5967,596c,5969', + '55=5978,5981,599d,4f5e,4fab,59a3,59b2,59c6,59e8,59dc,598d,59d9+2,5a25,5a1f,5a11,5a1c,5a09,5a1a,5a40,5a6c,5a49,5a35+2,5a62,5a6a,5a9a,5abc,5abe,5acb,5ac2,5abd,5ae3,5ad7,5ae6,5ae9,5ad6,5afa+2,5b0c,5b0b,5b16,5b32,5ad0,5b2a,5b36,5b3e,5b43,5b45,5b40,5b51,5b55,5b5a+2,5b65,5b69,5b70,5b73,5b75,5b78,6588,5b7a,5b80,5b83,5ba6,5bb8,5bc3,5bc7,5bc9,5bd4,5bd0,5be4,5be6,5be2,5bde,5be5,5beb,5bf0,5bf6,5bf3,5c05,5c07+2,5c0d,5c13,5c20,5c22,5c28,5c38+2,5c41,5c46,5c4e,5c53', + '56=5c50,5c4f,5b71,5c6c,5c6e,4e62,5c76,5c79,5c8c,5c91,5c94,599b,5cab,5cbb,5cb6,5cbc,5cb7,5cc5,5cbe,5cc7,5cd9,5ce9,5cfd,5cfa,5ced,5d8c,5cea,5d0b,5d15,5d17,5d5c,5d1f,5d1b,5d11,5d14,5d22,5d1a,5d19,5d18,5d4c,5d52,5d4e,5d4b,5d6c,5d73,5d76,5d87,5d84,5d82,5da2,5d9d,5dac,5dae,5dbd,5d90,5db7,5dbc,5dc9,5dcd,5dd3,5dd2,5dd6,5ddb,5deb,5df2,5df5,5e0b,5e1a,5e19,5e11,5e1b,5e36+2,5e44,5e43,5e40,5e4e,5e57,5e54,5e5f,5e62,5e64,5e47,5e75+2,5e7a,9ebc,5e7f,5ea0,5ec1+2,5ec8,5ed0,5ecf', + '57=5ed6,5ee3,5edd,5eda+2,5ee2,5ee1,5ee8+2,5eec,5ef1,5ef3,5ef0,5ef4,5ef8,5efe,5f03,5f09,5f5d,5f5c,5f0b,5f11,5f16,5f29,5f2d,5f38,5f41,5f48,5f4c,5f4e,5f2f,5f51,5f56+2,5f59,5f61,5f6d,5f73,5f77,5f83,5f82,5f7f,5f8a,5f88,5f91,5f87,5f9e,5f99,5f98,5fa0,5fa8,5fad,5fbc,5fd6,5ffb,5fe4,5ff8,5ff1,5fdd,60b3,5fff,6021,6060,6019,6010,6029,600e,6031,601b,6015,602b,6026,600f,603a,605a,6041,606a,6077,605f,604a,6046,604d,6063,6043,6064,6042,606c,606b,6059,6081,608d,60e7,6083,609a', + '58=6084,609b,6096+2,6092,60a7,608b,60e1,60b8,60e0,60d3,60b4,5ff0,60bd,60c6,60b5,60d8,614d,6115,6106,60f6+2,6100,60f4,60fa,6103,6121,60fb,60f1,610d+2,6147,613e,6128,6127,614a,613f,613c,612c,6134,613d,6142,6144,6173,6177,6158+3,616b,6174,616f,6165,6171,615f,615d,6153,6175,6199,6196,6187,61ac,6194,619a,618a,6191,61ab,61ae,61cc,61ca,61c9,61f7,61c8,61c3,61c6,61ba,61cb,7f79,61cd,61e6,61e3,61f6,61fa,61f4,61ff,61fd,61fc,61fe,6200,6208+2,620d,620c,6214,621b', + '59=621e,6221,622a,622e,6230,6232+2,6241,624e,625e,6263,625b,6260,6268,627c,6282,6289,627e,6292+2,6296,62d4,6283,6294,62d7,62d1,62bb,62cf,62ff,62c6,64d4,62c8,62dc,62cc,62ca,62c2,62c7,629b,62c9,630c,62ee,62f1,6327,6302,6308,62ef,62f5,6350,633e,634d,641c,634f,6396,638e,6380,63ab,6376,63a3,638f,6389,639f,63b5,636b,6369,63be,63e9,63c0,63c6,63e3,63c9,63d2,63f6,63c4,6416,6434,6406,6413,6426,6436,651d,6417,6428,640f,6467,646f,6476,644e,652a,6495,6493,64a5,64a9,6488,64bc', + '5a=64da,64d2,64c5,64c7,64bb,64d8,64c2,64f1,64e7,8209,64e0+2,62ac,64e3,64ef,652c,64f6,64f4,64f2,64fa,6500,64fd,6518,651c,6505,6524,6523,652b,6534+2,6537,6536,6538,754b,6548,6556,6555,654d,6558,655e,655d,6572,6578,6582+2,8b8a,659b,659f,65ab,65b7,65c3,65c6,65c1,65c4,65cc,65d2,65db,65d9,65e0+2,65f1,6772,660a,6603,65fb,6773,6635+2,6634,661c,664f,6644,6649,6641,665e,665d,6664,6667+2,665f,6662,6670,6683,6688,668e,6689,6684,6698,669d,66c1,66b9,66c9,66be,66bc', + '5b=66c4,66b8,66d6,66da,66e0,663f,66e6,66e9,66f0,66f5,66f7,670f,6716,671e,6726+2,9738,672e,673f,6736,6741,6738,6737,6746,675e,6760,6759,6763+2,6789,6770,67a9,677c,676a,678c,678b,67a6,67a1,6785,67b7,67ef,67b4,67ec,67b3,67e9,67b8,67e4,67de,67dd,67e2,67ee,67b9,67ce,67c6,67e7,6a9c,681e,6846,6829,6840,684d,6832,684e,68b3,682b,6859,6863,6877,687f,689f,688f,68ad,6894,689d,689b,6883,6aae,68b9,6874,68b5,68a0,68ba,690f,688d,687e,6901,68ca,6908,68d8,6922,6926,68e1,690c,68cd', + '5c=68d4,68e7,68d5,6936,6912,6904,68d7,68e3,6925,68f9,68e0,68ef,6928,692a,691a,6923,6921,68c6,6979,6977,695c,6978,696b,6954,697e,696e,6939,6974,693d,6959,6930,6961,695e,695d,6981,696a,69b2,69ae,69d0,69bf,69c1,69d3,69be,69ce,5be8,69ca,69dd,69bb,69c3,69a7,6a2e,6991,69a0,699c,6995,69b4,69de,69e8,6a02,6a1b,69ff,6b0a,69f9,69f2,69e7,6a05,69b1,6a1e,69ed,6a14,69eb,6a0a,6a12,6ac1,6a23,6a13,6a44,6a0c,6a72,6a36,6a78,6a47,6a62,6a59,6a66,6a48,6a38,6a22,6a90,6a8d,6aa0,6a84,6aa2+2', + '5d=6a97,8617,6abb,6ac3,6ac2,6ab8,6ab3,6aac,6ade,6ad1,6adf,6aaa,6ada,6aea,6afb,6b05,8616,6afa,6b12,6b16,9b31,6b1f,6b38,6b37,76dc,6b39,98ee,6b47,6b43,6b49,6b50,6b59,6b54,6b5b,6b5f,6b61,6b78+2,6b7f+2,6b84,6b83,6b8d,6b98,6b95,6b9e,6ba4,6baa+2,6baf,6bb2,6bb1,6bb3,6bb7,6bbc,6bc6,6bcb,6bd3,6bdf,6bec,6beb,6bf3,6bef,9ebe,6c08,6c13+2,6c1b,6c24,6c23,6c5e,6c55,6c62,6c6a,6c82,6c8d,6c9a,6c81,6c9b,6c7e,6c68,6c73,6c92,6c90,6cc4,6cf1,6cd3,6cbd,6cd7,6cc5,6cdd,6cae,6cb1,6cbe', + '5e=6cba,6cdb,6cef,6cd9,6cea,6d1f,884d,6d36,6d2b,6d3d,6d38,6d19,6d35,6d33,6d12,6d0c,6d63,6d93,6d64,6d5a,6d79,6d59,6d8e,6d95,6fe4,6d85,6df9,6e15,6e0a,6db5,6dc7,6de6,6db8,6dc6,6dec,6dde,6dcc,6de8,6dd2,6dc5,6dfa,6dd9,6de4,6dd5,6dea,6dee,6e2d,6e6e,6e2e,6e19,6e72,6e5f,6e3e,6e23,6e6b,6e2b,6e76,6e4d,6e1f,6e43,6e3a,6e4e,6e24,6eff,6e1d,6e38,6e82,6eaa,6e98,6ec9,6eb7,6ed3,6ebd,6eaf,6ec4,6eb2,6ed4+2,6e8f,6ea5,6ec2,6e9f,6f41,6f11,704c,6eec,6ef8,6efe,6f3f,6ef2,6f31,6eef,6f32,6ecc', + '5f=6f3e,6f13,6ef7,6f86,6f7a,6f78,6f81,6f80,6f6f,6f5b,6ff3,6f6d,6f82,6f7c,6f58,6f8e,6f91,6fc2,6f66,6fb3,6fa3,6fa1,6fa4,6fb9,6fc6,6faa,6fdf,6fd5,6fec,6fd4,6fd8,6ff1,6fee,6fdb,7009,700b,6ffa,7011,7001,700f,6ffe,701b,701a,6f74,701d,7018,701f,7030,703e,7032,7051,7063,7099,7092,70af,70f1,70ac,70b8,70b3,70ae,70df,70cb,70dd,70d9,7109,70fd,711c,7119,7165,7155,7188,7166,7162,714c,7156,716c,718f,71fb,7184,7195,71a8,71ac,71d7,71b9,71be,71d2,71c9,71d4,71ce,71e0,71ec,71e7,71f5,71fc', + '60=71f9,71ff,720d,7210,721b,7228,722d,722c,7230,7232,723b+2,723f+2,7246,724b,7258,7274,727e,7282,7281,7287,7292,7296,72a2,72a7,72b9,72b2,72c3,72c6,72c4,72ce,72d2,72e2,72e0+2,72f9,72f7,500f,7317,730a,731c,7316,731d,7334,732f,7329,7325,733e,734e+2,9ed8,7357,736a,7368,7370,7378,7375,737b,737a,73c8,73b3,73ce,73bb,73c0,73e5,73ee,73de,74a2,7405,746f,7425,73f8,7432,743a,7455,743f,745f,7459,7441,745c,7469,7470,7463,746a,7476,747e,748b,749e,74a7,74ca,74cf,74d4,73f1', + '61=74e0,74e3,74e7,74e9,74ee,74f2,74f0+2,74f8,74f7,7504,7503,7505,750c,750e,750d,7515,7513,751e,7526,752c,753c,7544,754d,754a,7549,755b,7546,755a,7569,7564,7567,756b,756d,7578,7576,7586+2,7574,758a,7589,7582,7594,759a,759d,75a5,75a3,75c2,75b3,75c3,75b5,75bd,75b8,75bc,75b1,75cd,75ca,75d2,75d9,75e3,75de,75fe+2,75fc,7601,75f0,75fa,75f2+2,760b,760d,7609,761f,7627,7620+3,7624,7634,7630,763b,7647+2,7646,765c,7658,7661+2,7668+3,7667,766c,7670', + '62=7672,7676,7678,767c,7680,7683,7688,768b,768e,7696,7693,7699+2,76b0,76b4,76b8+3,76c2,76cd,76d6,76d2,76de,76e1,76e5,76e7,76ea,862f,76fb,7708,7707,7704,7729,7724,771e,7725+2,771b,7737+2,7747,775a,7768,776b,775b,7765,777f,777e,7779,778e,778b,7791,77a0,779e,77b0,77b6,77b9,77bf,77bc+2,77bb,77c7,77cd,77d7,77da,77dc,77e3,77ee,77fc,780c,7812,7926,7820,792a,7845,788e,7874,7886,787c,789a,788c,78a3,78b5,78aa,78af,78d1,78c6,78cb,78d4,78be,78bc,78c5,78ca,78ec', + '63=78e7,78da,78fd,78f4,7907,7912,7911,7919,792c,792b,7940,7960,7957,795f,795a,7955,7953,797a,797f,798a,799d,79a7,9f4b,79aa,79ae,79b3,79b9+2,79c9,79d5,79e7,79ec,79e1,79e3,7a08,7a0d,7a18+2,7a20,7a1f,7980,7a31,7a3b,7a3e,7a37,7a43,7a57,7a49,7a61+2,7a69,9f9d,7a70,7a79,7a7d,7a88,7a97,7a95,7a98,7a96,7aa9,7ac8,7ab0,7ab6,7ac5,7ac4,7abf,9083,7ac7,7aca,7acd,7acf,7ad5,7ad3,7ad9+2,7add,7ae1+2,7ae6,7aed,7af0,7b02,7b0f,7b0a,7b06,7b33,7b18+2,7b1e,7b35,7b28,7b36,7b50', + '64=7b7a,7b04,7b4d,7b0b,7b4c,7b45,7b75,7b65,7b74,7b67,7b70+2,7b6c,7b6e,7b9d,7b98,7b9f,7b8d,7b9c,7b9a,7b8b,7b92,7b8f,7b5d,7b99,7bcb,7bc1,7bcc,7bcf,7bb4,7bc6,7bdd,7be9,7c11,7c14,7be6,7be5,7c60,7c00,7c07,7c13,7bf3,7bf7,7c17,7c0d,7bf6,7c23,7c27,7c2a,7c1f,7c37,7c2b,7c3d,7c4c,7c43,7c54,7c4f,7c40,7c50,7c58,7c5f,7c64,7c56,7c65,7c6c,7c75,7c83,7c90,7ca4,7cad,7ca2,7cab,7ca1,7ca8,7cb3,7cb2,7cb1,7cae,7cb9,7cbd,7cc0,7cc5,7cc2,7cd8,7cd2,7cdc,7ce2,9b3b,7cef,7cf2,7cf4,7cf6,7cfa,7d06', + '65=7d02,7d1c,7d15,7d0a,7d45,7d4b,7d2e,7d32,7d3f,7d35,7d46,7d73,7d56,7d4e,7d72,7d68,7d6e,7d4f,7d63,7d93,7d89,7d5b,7d8f,7d7d,7d9b,7dba,7dae,7da3,7db5,7dc7,7dbd,7dab,7e3d,7da2,7daf,7ddc,7db8,7d9f,7db0,7dd8,7ddd,7de4,7dde,7dfb,7df2,7de1,7e05,7e0a,7e23,7e21,7e12,7e31,7e1f,7e09,7e0b,7e22,7e46,7e66,7e3b,7e35,7e39,7e43,7e37,7e32,7e3a,7e67,7e5d,7e56,7e5e,7e59+2,7e79,7e6a,7e69,7e7c,7e7b,7e83,7dd5,7e7d,8fae,7e7f,7e88+2,7e8c,7e92,7e90,7e93+2,7e96,7e8e,7e9b+2,7f38,7f3a', + '66=7f45,7f4c+3,7f50+2,7f55,7f54,7f58,7f5f+2,7f68+2,7f67,7f78,7f82,7f86,7f83,7f88,7f87,7f8c,7f94,7f9e,7f9d,7f9a,7fa3,7faf,7fb2,7fb9,7fae,7fb6,7fb8,8b71,7fc5+2,7fca,7fd5,7fd4,7fe1,7fe6,7fe9,7ff3,7ff9,98dc,8006,8004,800b,8012,8018+2,801c,8021,8028,803f,803b,804a,8046,8052,8058,805a,805f,8062,8068,8073,8072,8070,8076,8079,807d,807f,8084,8086,8085,809b,8093,809a,80ad,5190,80ac,80db,80e5,80d9,80dd,80c4,80da,80d6,8109,80ef,80f1,811b,8129,8123,812f,814b', + '67=968b,8146,813e,8153,8151,80fc,8171,816e,8165+2,8174,8183,8188,818a,8180,8182,81a0,8195,81a4,81a3,815f,8193,81a9,81b0,81b5,81be,81b8,81bd,81c0,81c2,81ba,81c9,81cd,81d1,81d9,81d8,81c8,81da,81df+2,81e7,81fa+2,81fe,8201+2,8205,8207,820a,820d,8210,8216,8229,822b,8238,8233,8240,8259,8258,825d,825a,825f,8264,8262,8268,826a+2,822e,8271,8277+2,827e,828d,8292,82ab,829f,82bb,82ac,82e1,82e3,82df,82d2,82f4,82f3,82fa,8393,8303,82fb,82f9,82de,8306,82dc,8309,82d9', + '68=8335,8334,8316,8332,8331,8340,8339,8350,8345,832f,832b,8317+2,8385,839a,83aa,839f,83a2,8396,8323,838e,8387,838a,837c,83b5,8373,8375,83a0,8389,83a8,83f4,8413,83eb,83ce,83fd,8403,83d8,840b,83c1,83f7,8407,83e0,83f2,840d,8422,8420,83bd,8438,8506,83fb,846d,842a,843c,855a,8484,8477,846b,84ad,846e,8482,8469,8446,842c,846f,8479,8435,84ca,8462,84b9,84bf,849f,84d9,84cd,84bb,84da,84d0,84c1,84c6,84d6,84a1,8521,84ff,84f4,8517+2,852c,851f,8515,8514,84fc,8540,8563,8558,8548', + '69=8541,8602,854b,8555,8580,85a4,8588,8591,858a,85a8,856d,8594,859b,85ea,8587,859c,8577,857e,8590,85c9,85ba,85cf,85b9,85d0,85d5,85dd,85e5,85dc,85f9,860a,8613,860b,85fe,85fa,8606,8622,861a,8630,863f,864d,4e55,8654,865f,8667,8671,8693,86a3,86a9+2,868b+2,86b6,86af,86c4,86c6,86b0,86c9,8823,86ab,86d4,86de,86e9,86ec,86df,86db,86ef,8712,8706,8708,8700,8703,86fb,8711,8709,870d,86f9,870a,8734,873f,8737,873b,8725,8729,871a,8760,875f,8778,874c,874e,8774,8757,8768,876e,8759', + '6a=8753,8763,876a,8805,87a2,879f,8782,87af,87cb,87bd,87c0,87d0,96d6,87ab,87c4,87b3,87c7,87c6,87bb,87ef,87f2,87e0,880f,880d,87fe,87f6+2,880e,87d2,8811,8816,8815,8822,8821,8831,8836,8839,8827,883b,8844,8842,8852,8859,885e,8862,886b,8881,887e,889e,8875,887d,88b5,8872,8882,8897,8892,88ae,8899,88a2,888d,88a4,88b0,88bf,88b1,88c3+2,88d4,88d8+2,88dd,88f9,8902,88fc,88f4,88e8,88f2,8904,890c,890a,8913,8943,891e,8925,892a+2,8941,8944,893b,8936,8938,894c,891d,8960,895e', + '6b=8966,8964,896d,896a,896f,8974,8977,897e,8983,8988,898a,8993,8998,89a1,89a9,89a6,89ac,89af,89b2,89ba,89bd,89bf+2,89da,89dc+2,89e7,89f4,89f8,8a03,8a16,8a10,8a0c,8a1b,8a1d,8a25,8a36,8a41,8a5b,8a52,8a46,8a48,8a7c,8a6d,8a6c,8a62,8a85,8a82,8a84,8aa8,8aa1,8a91,8aa5+2,8a9a,8aa3,8ac4,8acd,8ac2,8ada,8aeb,8af3,8ae7,8ae4,8af1,8b14,8ae0,8ae2,8af7,8ade,8adb,8b0c,8b07,8b1a,8ae1,8b16,8b10,8b17,8b20,8b33,97ab,8b26,8b2b,8b3e,8b28,8b41,8b4c,8b4f,8b4e,8b49,8b56,8b5b,8b5a,8b6b', + '6c=8b5f,8b6c,8b6f,8b74,8b7d,8b80,8b8c,8b8e,8b92+2,8b96,8b99+2,8c3a,8c41,8c3f,8c48,8c4c,8c4e,8c50,8c55,8c62,8c6c,8c78,8c7a,8c82,8c89,8c85,8c8a,8c8d+2,8c94,8c7c,8c98,621d,8cad,8caa,8cbd,8cb2+2,8cae,8cb6,8cc8,8cc1,8ce4,8ce3,8cda,8cfd,8cfa+2,8d04+2,8d0a,8d07,8d0f,8d0d,8d10,9f4e,8d13,8ccd,8d14,8d16,8d67,8d6d,8d71,8d73,8d81,8d99,8dc2,8dbe,8dba,8dcf,8dda,8dd6,8dcc,8ddb,8dcb,8dea+2,8ddf,8de3,8dfc,8e08+2,8dff,8e1d+2,8e10,8e1f,8e42,8e35,8e30,8e34,8e4a', + '6d=8e47,8e49,8e4c,8e50,8e48,8e59,8e64,8e60,8e2a,8e63,8e55,8e76,8e72,8e7c,8e81,8e87,8e85,8e84,8e8b,8e8a,8e93,8e91,8e94,8e99,8eaa,8ea1,8eac,8eb0,8ec6,8eb1,8ebe,8ec5,8ec8,8ecb,8edb,8ee3,8efc,8efb,8eeb,8efe,8f0a,8f05,8f15,8f12,8f19,8f13,8f1c,8f1f,8f1b,8f0c,8f26,8f33,8f3b,8f39,8f45,8f42,8f3e,8f4c,8f49,8f46,8f4e,8f57,8f5c,8f62+3,8f9c,8f9f,8fa3,8fad,8faf,8fb7,8fda,8fe5,8fe2,8fea,8fef,9087,8ff4,9005,8ff9+2,9011,9015,9021,900d,901e,9016,900b,9027,9036,9035,9039,8ff8', + '6e=904f+4,900e,9049,903e,9056,9058,905e,9068,906f,9076,96a8,9072,9082,907d,9081,9080,908a,9089,908f,90a8,90af,90b1,90b5,90e2,90e4,6248,90db,9102,9112,9119,9132,9130,914a,9156,9158,9163,9165,9169,9173,9172,918b,9189,9182,91a2,91ab,91af,91aa,91b5,91b4,91ba,91c0+2,91c9,91cb,91d0,91d6,91df,91e1,91db,91fc,91f5+2,921e,91ff,9214,922c,9215,9211,925e,9257,9245,9249,9264,9248,9295,923f,924b,9250,929c,9296,9293,929b,925a,92cf,92b9,92b7,92e9,930f,92fa,9344,932e', + '6f=9319,9322,931a,9323,933a,9335,933b,935c,9360,937c,936e,9356,93b0,93ac+2,9394,93b9,93d6+2,93e8,93e5,93d8,93c3,93dd,93d0,93c8,93e4,941a,9414,9413,9403,9407,9410,9436,942b,9435,9421,943a,9441,9452,9444,945b,9460,9462,945e,946a,9229,9470,9475,9477,947d,945a,947c,947e,9481,947f,9582,9587,958a,9594,9596,9598+2,95a0,95a8,95a7,95ad,95bc,95bb,95b9,95be,95ca,6ff6,95c3,95cd,95cc,95d5,95d4,95d6,95dc,95e1,95e5,95e2,9621,9628,962e+2,9642,964c,964f,964b,9677,965c,965e', + '70=965d,965f,9666,9672,966c,968d,9698,9695,9697,96aa,96a7,96b1+2,96b0,96b4,96b6,96b8+2,96ce,96cb,96c9,96cd,894d,96dc,970d,96d5,96f9,9704,9706,9708,9713,970e,9711,970f,9716,9719,9724,972a,9730,9739,973d+2,9744,9746,9748,9742,9749,975c,9760,9764,9766,9768,52d2,976b,9771,9779,9785,977c,9781,977a,9786,978b,978f+2,979c,97a8,97a6,97a3,97b3+2,97c3,97c6,97c8,97cb,97dc,97ed,9f4f,97f2,7adf,97f6,97f5,980f,980c,9838,9824,9821,9837,983d,9846,984f,984b,986b,986f+2', + '71=9871,9874,9873,98aa,98af,98b1,98b6,98c4,98c3,98c6,98e9,98eb,9903,9909,9912,9914,9918,9921,991d+2,9924,9920,992c,992e,993d+2,9942,9949,9945,9950,994b,9951+2,994c,9955,9997+2,99a5,99ad+2,99bc,99df,99db,99dd,99d8,99d1,99ed+2,99f1+2,99fb,99f8,9a01,9a0f,9a05,99e2,9a19,9a2b,9a37,9a45,9a42,9a40,9a43,9a3e,9a55,9a4d,9a5b,9a57,9a5f,9a62,9a65,9a64,9a69,9a6b,9a6a,9aad,9ab0,9abc,9ac0,9acf,9ad1,9ad3+2,9ade+2,9ae2+2,9ae6,9aef,9aeb,9aee,9af4,9af1,9af7', + '72=9afb,9b06,9b18,9b1a,9b1f,9b22+2,9b25,9b27+4,9b2e+2,9b32,9b44,9b43,9b4f,9b4d+2,9b51,9b58,9b74,9b93,9b83,9b91,9b96+2,9b9f+2,9ba8,9bb4,9bc0,9bca,9bb9,9bc6,9bcf,9bd1+2,9be3,9be2,9be4,9bd4,9be1,9c3a,9bf2,9bf1,9bf0,9c15,9c14,9c09,9c13,9c0c,9c06,9c08,9c12,9c0a,9c04,9c2e,9c1b,9c25,9c24,9c21,9c30,9c47,9c32,9c46,9c3e,9c5a,9c60,9c67,9c76,9c78,9ce7,9cec,9cf0,9d09,9d08,9ceb,9d03,9d06,9d2a,9d26,9daf,9d23,9d1f,9d44,9d15,9d12,9d41,9d3f,9d3e,9d46,9d48', + '73=9d5d+2,9d64,9d51,9d50,9d59,9d72,9d89,9d87,9dab,9d6f,9d7a,9d9a,9da4,9da9,9db2,9dc4,9dc1,9dbb,9db8,9dba,9dc6,9dcf,9dc2,9dd9,9dd3,9df8,9de6,9ded,9def,9dfd,9e1a+2,9e1e,9e75,9e79,9e7d,9e81,9e88,9e8b+2,9e92,9e95,9e91,9e9d,9ea5,9ea9,9eb8,9eaa,9ead,9761,9ecc,9ece+3,9ed4,9edc,9ede,9edd,9ee0,9ee5,9ee8,9eef,9ef4,9ef6+2,9ef9,9efb+3,9f07+2,76b7,9f15,9f21,9f2c,9f3e,9f4a,9f52,9f54,9f63,9f5f+3,9f66+2,9f6c,9f6a,9f77,9f72,9f76,9f95,9f9c,9fa0', + '74=582f,69c7,9059,7464,51dc,7199', + '79=7e8a,891c,9348,9288,84dc,4fc9,70bb,6631,68c8,92f9,66fb,5f45,4e28,4ee1,4efc,4f00,4f03,4f39,4f56,4f92,4f8a,4f9a,4f94,4fcd,5040,5022,4fff,501e,5046,5070,5042,5094,50f4,50d8,514a,5164,519d,51be,51ec,5215,529c,52a6,52c0,52db,5300,5307,5324,5372,5393,53b2,53dd,fa0e,549c,548a,54a9,54ff,5586,5759,5765,57ac,57c8,57c7,fa0f+2,589e,58b2,590b,5953,595b,595d,5963,59a4,59ba,5b56,5bc0,752f,5bd8,5bec,5c1e,5ca6,5cba,5cf5,5d27,5d53,fa11,5d42,5d6d,5db8+2,5dd0,5f21,5f34,5f67,5fb7', + '7a=5fde,605d,6085,608a,60de,60d5,6120,60f2,6111,6137,6130,6198,6213,62a6,63f5,6460,649d,64ce,654e,6600,6615,663b,6609,662e,661e,6624,6665,6657,6659,fa12,6673,6699,66a0,66b2,66bf,66fa,670e,f929,6766,67bb,6852,67c0,6801,6844,68cf,fa13,6968,fa14,6998,69e2,6a30,6a6b,6a46,6a73,6a7e,6ae2,6ae4,6bd6,6c3f,6c5c,6c86,6c6f,6cda,6d04,6d87,6d6f,6d96,6dac,6dcf,6df8,6df2,6dfc,6e39,6e5c,6e27,6e3c,6ebf,6f88,6fb5,6ff5,7005,7007,7028,7085,70ab,710f,7104,715c,7146+2,fa15,71c1,71fe,72b1', + '7b=72be,7324,fa16,7377,73bd,73c9,73d6,73e3,73d2,7407,73f5,7426,742a,7429,742e,7462,7489,749f,7501,756f,7682,769c,769e,769b,76a6,fa17,7746,52af,7821,784e,7864,787a,7930,fa18+3,7994,fa1b,799b,7ad1,7ae7,fa1c,7aeb,7b9e,fa1d,7d48,7d5c,7db7,7da0,7dd6,7e52,7f47,7fa1,fa1e,8301,8362,837f,83c7,83f6,8448,84b4,8553,8559,856b,fa1f,85b0,fa20+2,8807,88f5,8a12,8a37,8a79,8aa7,8abe,8adf,fa22,8af6,8b53,8b7f,8cf0,8cf4,8d12,8d76,fa23,8ecf,fa24+2,9067,90de,fa26,9115,9127,91da', + '7c=91d7,91de,91ed+2,91e4+2,9206,9210,920a,923a,9240,923c,924e,9259,9251,9239,9267,92a7,9277+2,92e7,92d7,92d9,92d0,fa27,92d5,92e0,92d3,9325,9321,92fb,fa28,931e,92ff,931d,9302,9370,9357,93a4,93c6,93de,93f8,9431,9445,9448,9592,f9dc,fa29,969d,96af,9733,973b,9743,974d,974f,9751,9755,9857,9865,fa2a+2,9927,fa2c,999e,9a4e,9ad9,9adc,9b75,9b72,9b8f,9bb1,9bbb,9c00,9d70,9d6b,fa2d,9e19,9ed1,-2,2170+10,-1,ffe4,ff07,ff02' +].join(','); diff --git a/src/utf8-to-jisx0212-table.js b/src/utf8-to-jisx0212-table.js new file mode 100644 index 0000000..94bb1a6 --- /dev/null +++ b/src/utf8-to-jisx0212-table.js @@ -0,0 +1,81 @@ +/** + * Encoding conversion table for UTF-8 to JIS X 0212:1990 (Hojo-Kanji) + * + * The table is stored in a compressed form and is expanded by + * src/encoding-table.js on first use. + * + * Uncompressed version: tests/utf8-to-jisx0212-table.js + * + * Character mappings based on: + * https://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0212.TXT + */ +module.exports = [ + '22=-14,2d8,2c7,b8,2d9,2dd,af,2db,2da,7e,384+2,-8,a1,a6,bf,-38,ba,aa,a9,ae,2122,a4,2116', + '26=-64,386,388+3,3aa,-1,38c,-1,38e,3ab,-1,38f,-4,3ac+4,3ca,390,3cc,3c2,3cd,3cb,3b0,3ce', + '27=-33,402+11,40e+2,-35,452+11,45e+2', + '29=c6,110,-1,126,-1,132,-1,141,13f,-1,14a,d8,152,-1,166,de,-16,e6,111,f0,127,131,133,138,142,140,149,14b,f8,153,df,167,fe', + '2a=c1,c0,c4,c2,102,1cd,100,104,c5,c3,106,108,10c,c7,10a,10e,c9,c8,cb,ca,11a,116,112,118,-1,11c,11e,122,120,124,cd,cc,cf,ce,1cf,130,12a,12e,128,134,136,139,13d,13b,143,147,145,d1,d3,d2,d6,d4,1d1,150,14c,d5,154,158,156,15a,15c,160,15e,164,162,da,d9,dc,db,16c,1d3,170,16a,172,16e,168,1d7,1db,1d9,1d5,174,dd,178,176,179,17d,17b', + '2b=e1,e0,e4,e2,103,1ce,101,105,e5,e3,107,109,10d,e7,10b,10f,e9,e8,eb,ea,11b,117,113,119,1f5,11d,11f,-1,121,125,ed,ec,ef,ee,1d0,-1,12b,12f,129,135,137,13a,13e,13c,144,148,146,f1,f3,f2,f6,f4,1d2,151,14d,f5,155,159,157,15b,15d,161,15f,165,163,fa,f9,fc,fb,16d,1d4,171,16b,173,16f,169,1d8,1dc,1da,1d6,175,fd,ff,177,17a,17e,17c', + '30=4e02,4e04+2,4e0c,4e12,4e1f,4e23+2,4e28,4e2b,4e2e+3,4e35,4e40+2,4e44,4e47,4e51,4e5a,4e5c,4e63,4e68+2,4e74+2,4e79,4e7f,4e8d,4e96+2,4e9d,4eaf,4eb9,4ec3,4ed0,4eda+2,4ee0+3,4ee8,4eef,4ef1,4ef3,4ef5,4efd+4,4f02+2,4f08,4f0b+2,4f12,4f15+3,4f19,4f2e,4f31,4f60,4f33,4f35,4f37,4f39,4f3b,4f3e,4f40,4f42,4f48+2,4f4b+2,4f52,4f54,4f56,4f58,4f5f,4f63,4f6a,4f6c,4f6e,4f71,4f77+4,4f7d+2,4f81+2,4f84', + '31=4f85,4f89+2,4f8c,4f8e,4f90,4f92+3,4f97,4f99+2,4f9e+2,4fb2,4fb7,4fb9,4fbb+4,4fc0+2,4fc5+2,4fc8+2,4fcb+3,4fcf,4fd2,4fdc,4fe0,4fe2,4ff0,4ff2,4ffc+2,4fff+3,5004,5007,500a,500c,500e,5010,5013,5017+2,501b+4,5022,5027,502e,5030,5032+2,5035,5040+3,5045+2,504a,504c,504e,5051+3,5057,5059,505f+2,5062+2,5066+2,506a,506d,5070+2,503b,5081,5083+2,5086,508a,508e+3', + '32=5092+3,5096,509b+2,509e+5,50aa,50af+2,50b9+2,50bd,50c0,50c3+2,50c7,50cc,50ce,50d0,50d3+2,50d8,50dc+2,50df,50e2,50e4,50e6,50e8+2,50ef,50f1,50f6,50fa,50fe,5103,5106+3,510b+4,50f2,5110,5117,5119,511b+4,5123,5127+2,512c+2,512f,5131,5133+3,5138+2,5142,514a,514f,5153,5155,5157+2,515f,5164,5166,517e,5183+2,518b,518e,5198,519d,51a1,51a3,51ad,51b8,51ba,51bc,51be+2,51c2', + '33=51c8,51cf,51d1+3,51d5,51d8,51de,51e2,51e5,51ee,51f2+3,51f7,5201+2,5205,5212+2,5215+2,5218,5222,5228,5231+2,5235,523c,5245,5249,5255,5257+2,525a,525c,525f+3,5266,526e,5277+3,5280,5282,5285,528a,528c,5293,5295+4,529a,529c,52a4+4,52af+2,52b6+3,52ba+2,52bd,52c0,52c4,52c6,52c8,52cc,52cf,52d1,52d4,52d6,52db+2,52e1,52e5,52e8+3,52ec,52f0+2,52f4,52f6+2,5300,5303,530a+2', + '34=530c,5311,5313,5318,531b+2,531e+2,5325,5327+3,532b+3,5330,5332,5335,533c+3,5342,534c,534b,5359,535b,5361,5363,5365,536c+2,5372,5379,537e,5383,5387+2,538e,5393+2,5399,539d,53a1,53a4,53aa+2,53af,53b2,53b4+2,53b7+2,53ba,53bd,53c0,53c5,53cf,53d2+2,53d5,53da,53dd+2,53e0,53e6+2,53f5,5402,5413,541a,5421,5427+2,542a,542f,5431,5434+2,5443+2,5447,544d,544f,545e,5462,5464,5466+2,5469,546b,546d+2,5474,547f', + '35=5481,5483,5485,5488+2,548d,5491,5495+2,549c,549f,54a1,54a6+2,54a9+2,54ad+2,54b1,54b7,54b9+3,54bf,54c6,54ca,54cd+2,54e0,54ea,54ec,54ef,54f6,54fc,54fe+4,5505,5508+2,550c+3,5515,552a+2,5532,5535+2,553b+3,5541,5547,5549+2,554d,5550+2,5558,555a+2,555e,5560+2,5564,5566,557f,5581+2,5586,5588,558e+2,5591+4,5597,55a3+2,55ad,55b2,55bf,55c1,55c3,55c6,55c9,55cb+2,55ce,55d1+2', + '36=55d3,55d7+2,55db,55de,55e2,55e9,55f6,55ff,5605,5608,560a,560d+6,5619,562c,5630,5633,5635,5637,5639,563b+3,563f+3,5643+2,5646,5649,564b,564d,564f,5654,565e,5660+4,5666,5669,566d,566f,5671+2,5675,5684+2,5688,568b+2,5695,5699+2,569d+3,56a6+4,56ab+3,56b1,56b3,56b7,56be,56c5,56c9+3,56cf+2,56cc+2,56d9,56dc+2,56df,56e1,56e4+5,56f1,56eb,56ed', + '37=56f6+2,5701+2,5707,570a,570c,5711,5715,571a+2,571d,5720,5722+4,5729+2,572c,572e+2,5733+2,573d+3,5745+2,574c+2,5752,5762,5765,5767+2,576b,576d+5,5773+3,5777,5779+4,577e,5781,5783,578c,5794,5797,5799+2,579c+4,57a1,5795,57a7+3,57ac,57b8,57bd,57c7+2,57cc,57cf,57d5,57dd+2,57e4,57e6+2,57e9,57ed,57f0,57f5+2,57f8,57fd+3,5803+2,5808+2,57e1', + '38=580c+2,581b,581e+3,5826+2,582d,5832,5839,583f,5849,584c+2,584f+2,5855,585f,5861,5864,5867+2,5878,587c,587f+3,5887+4,588c+2,588f+2,5894,5896,589d,58a0+3,58a6,58a9,58b1+2,58c4,58bc,58c2,58c8,58cd+2,58d0,58d2,58d4,58d6,58da,58dd,58e1+2,58e9,58f3,5905+2,590b+2,5912+3,8641,591d,5921,5923+2,5928,592f+2,5933,5935+2,593f,5943,5946,5952+2,5959,595b,595d+3,5961,5963,596b,596d', + '39=596f,5972,5975+2,5979,597b+2,598b+2,598e,5992,5995,5997,599f,59a4,59a7,59ad+4,59b3,59b7,59ba,59bc,59c1,59c3+2,59c8,59ca,59cd,59d2,59dd+3,59e3+2,59e7,59ee+2,59f1+2,59f4,59f7,5a00,5a04,5a0c+3,5a12+2,5a1e,5a23+2,5a27+2,5a2a,5a2d,5a30,5a44+2,5a47+2,5a4c,5a50,5a55,5a5e,5a63,5a65,5a67,5a6d,5a77,5a7a+2,5a7e,5a8b,5a90,5a93,5a96,5a99,5a9c,5a9e+3,5aa2,5aa7,5aac,5ab1+3,5ab5,5ab8,5aba+2,5abf', + '3a=5ac4,5ac6,5ac8,5acf,5ada,5adc,5ae0,5ae5,5aea,5aee,5af5+2,5afd,5b00+2,5b08,5b17,5b34,5b19,5b1b,5b1d,5b21,5b25,5b2d,5b38,5b41,5b4b+2,5b52,5b56,5b5e,5b68,5b6e+2,5b7c+4,5b81,5b84,5b86,5b8a,5b8e,5b90+2,5b93+2,5b96,5ba8+2,5bac+2,5baf,5bb1+2,5bb7,5bba,5bbc,5bc0+2,5bcd,5bcf,5bd6+5,5be0,5bef,5bf1,5bf4,5bfd,5c0c,5c17,5c1e+2,5c23,5c26,5c29,5c2b+2,5c2e,5c30,5c32,5c35+2,5c59+2,5c5c,5c62+2,5c67+3', + '3b=5c6d,5c70,5c74+2,5c7a+4,5c87+2,5c8a,5c8f,5c92,5c9d,5c9f+2,5ca2+2,5ca6,5caa,5cb2,5cb4+2,5cba,5cc9,5ccb,5cd2,5cdd,5cd7,5cee,5cf1+2,5cf4,5d01,5d06,5d0d,5d12,5d2b,5d23+2,5d26+2,5d31,5d34,5d39,5d3d,5d3f,5d42+2,5d46,5d48,5d55,5d51,5d59,5d4a,5d5f+4,5d64,5d6a,5d6d,5d70,5d79+2,5d7e+2,5d81,5d83,5d88,5d8a,5d92+4,5d99,5d9b,5d9f+2,5da7,5dab,5db0,5db4,5db8+2,5dc3,5dc7,5dcb,5dd0,5dce,5dd8+2,5de0,5de4', + '3c=5de9,5df8+2,5e00,5e07,5e0d,5e12,5e14+2,5e18,5e1f+2,5e2e,5e28,5e32,5e35,5e3e,5e4b,5e50,5e49,5e51,5e56,5e58,5e5b+2,5e5e,5e68,5e6a+5,5e70,5e80,5e8b,5e8e,5ea2,5ea4+2,5ea8,5eaa,5eac,5eb1,5eb3,5ebd+3,5ec6,5ecc,5ecb,5ece,5ed1+2,5ed4+2,5edc,5ede,5ee5,5eeb,5f02,5f06+3,5f0e,5f19,5f1c+2,5f21+4,5f28,5f2b+2,5f2e,5f30,5f34,5f36,5f3b,5f3d,5f3f+2,5f44+2,5f47,5f4d,5f50,5f54,5f58,5f5b,5f60,5f63+2,5f67', + '3d=5f6f,5f72,5f74+2,5f78,5f7a,5f7d+2,5f89,5f8d,5f8f,5f96,5f9c+2,5fa2,5fa7,5fab,5fa4,5fac,5faf+3,5fb8,5fc4,5fc7+3,5fcb,5fd0+5,5fde,5fe1+2,5fe8+3,5fec+4,5ff2+2,5ff6,5ffa,5ffc,6007,600a,600d,6013+2,6017+2,601a,601f,6024,602d,6033,6035,6040,6047+3,604c,6051,6054,6056+2,605d,6061,6067,6071,607e+2,6082,6086,6088,608a,608e,6091,6093,6095,6098,609d+2,60a2,60a4+2,60a8,60b0+2,60b7', + '3e=60bb,60be,60c2,60c4,60c8+4,60ce+2,60d4+2,60d9,60db,60dd+2,60e2,60e5,60f2,60f5,60f8,60fc+2,6102,6107,610a,610c,6110+5,6116+2,6119,611c,611e,6122,612a+2,6130+2,6135+3,6139,6141,6145+2,6149,615e,6160,616c,6172,6178,617b+2,617f+3,6183+2,618b,618d,6192+2,6197+2,619c+2,619f+2,61a5,61a8,61aa,61ad,61b8+2,61bc,61c0+3,61ce+2,61d5,61dc+4,61e1+2,61e7,61e9,61e5', + '3f=61ec+2,61ef,6201,6203+2,6207,6213,6215,621c,6220,6222+2,6227,6229,622b,6239,623d,6242+3,6246,624c,6250+3,6254,6256,625a,625c,6264,626d,626f,6273,627a,627d,628d+4,62a6,62a8,62b3,62b6+2,62ba,62be+2,62c4,62ce,62d5+2,62da,62ea,62f2,62f4,62fc+2,6303+2,630a+2,630d,6310,6313,6316,6318,6329+2,632d,6335+2,6339,633c,6341+4,6346,634a+2,634e,6352+3,6358,635b,6365+2,636c+2,6371,6374+2', + '40=6378,637c+2,637f,6382,6384,6387,638a,6390,6394+2,6399+2,639e,63a4,63a6,63ad+3,63bd,63c1,63c5,63c8,63ce,63d1,63d3+3,63dc,63e0,63e5,63ea,63ec,63f2+2,63f5,63f8+2,6409+2,6410,6412,6414,6418,641e,6420,6422,6424+2,6429+2,642f+2,6435,643d,643f,644b,644f,6451+4,645a+4,645f+3,6463,646d,6473+2,647b,647d,6485,6487,648f+3,6498+2,649b,649d,649f,64a1,64a3,64a6,64a8,64ac,64b3,64bd+3', + '41=64c4,64c9+4,64ce,64d0+2,64d5,64d7,64e4+2,64e9+2,64ed,64f0,64f5,64f7,64fb,64ff,6501,6504,6508+3,650f,6513+2,6516,6519,651b,651e+2,6522,6526,6529,652e,6531,653a,653c+2,6543,6547,6549,6550,6552,6554,655f+2,6567,656b,657a,657d,6581,6585,658a,6592,6595,6598,659d,65a0,65a3,65a6,65ae,65b2+3,65bf,65c2,65c8+2,65ce,65d0,65d4,65d6,65d8,65df,65f0,65f2,65f4+2,65f9,65fe+3,6604,6608+2,660d,6611+2,6615+2,661d', + '42=661e,6621+4,6626,6629+4,662e,6630+2,6633,6639,6637,6640,6645+2,664a,664c,6651,664e,6657+3,665b+2,6660+2,66fb,666a+3,667e,6673,6675,667f,6677+3,667b,6680,667c,668b+3,6690,6692,6699+4,669f+2,66a4,66ad,66b1+2,66b5,66bb,66bf+2,66c2+2,66c8,66cc,66ce+2,66d4,66db,66df,66e8,66eb+2,66ee,66fa,6705,6707,670e,6713,6719,671c,6720,6722,6733,673e,6745,6747+2,674c,6754+2,675d', + '43=6766,676c,676e,6774,6776,677b,6781,6784,678e+2,6791,6793,6796,6798+2,679b,67b0+3,67b5,67bb+3,67f9,67c0,67c2+2,67c5,67c8+2,67d2,67d7,67d9,67dc,67e1,67e6,67f0,67f2,67f6+2,6852,6814,6819,681d,681f,6828,6827,682c+2,682f+3,6833,683b,683f,6844+2,684a,684c,6855,6857+2,685b,686b,686e+5,6875,6879+4,6882,6884,6886,6888,6896,6898,689a,689c,68a1,68a3,68a5,68a9+2,68ae,68b2,68bb,68c5,68c8,68cc,68cf', + '44=68d0+2,68d3,68d6,68d9,68dc+2,68e5,68e8,68ea+4,68f0+2,68f5+2,68fb+3,6906,6909+2,6910+2,6913,6916+2,6931,6933,6935,6938,693b,6942,6945,6949,694e,6957,695b,6963+4,6968+2,696c,6970+3,697a+2,697f+2,698d,6992,6996,6998,69a1,69a5+2,69a8,69ab,69ad,69af,69b7+2,69ba,69bc,69c5,69c8,69d1,69d6+2,69e2,69e5,69ee+2,69f1,69f3,69f5,69fe,6a00+2,6a03,6a0f,6a11,6a15,6a1a,6a1d,6a20,6a24,6a28,6a30,6a32', + '45=6a34,6a37,6a3b,6a3e+2,6a45+2,6a49+2,6a4e,6a50+3,6a55+2,6a5b,6a64,6a67,6a6a,6a71,6a73,6a7e,6a81,6a83,6a86+2,6a89,6a8b,6a91,6a9b,6a9d+3,6aa5,6aab,6aaf+3,6ab4,6abd+3,6ac6,6ac9,6ac8,6acc,6ad0,6ad4+3,6adc+2,6ae4,6ae7,6aec,6af0+3,6afc+2,6b02+2,6b06+2,6b09,6b0f+3,6b17,6b1b,6b1e,6b24,6b28,6b2b+2,6b2f,6b35+2,6b3b,6b3f,6b46,6b4a,6b4d,6b52,6b56,6b58,6b5d,6b60,6b67,6b6b,6b6e,6b70,6b75,6b7d', + '46=6b7e,6b82,6b85,6b97,6b9b,6b9f+2,6ba2+2,6ba8+2,6bac+3,6bb0,6bb8+2,6bbd+2,6bc3+2,6bc9,6bcc,6bd6,6bda,6be1,6be3,6be6+2,6bee,6bf1,6bf7,6bf9,6bff,6c02,6c04+2,6c09,6c0d+2,6c10,6c12,6c19,6c1f,6c26+3,6c2c,6c2e,6c33,6c35+2,6c3a+2,6c3f,6c4a+2,6c4d,6c4f,6c52,6c54,6c59,6c5b+2,6c6b,6c6d,6c6f,6c74,6c76,6c78+2,6c7b,6c85+3,6c89,6c94+2,6c97+2,6c9c,6c9f,6cb0,6cb2,6cb4,6cc2,6cc6,6ccd,6ccf+4,6cd4,6cd6', + '47=6cda,6cdc,6ce0,6ce7,6ce9,6ceb+2,6cee,6cf2,6cf4,6d04,6d07,6d0a,6d0e+2,6d11,6d13,6d1a,6d26+3,6c67,6d2e+2,6d31,6d39,6d3c,6d3f,6d57,6d5e+2,6d61,6d65,6d67,6d6f+2,6d7c,6d82,6d87,6d91+2,6d94,6d96+3,6daa,6dac,6db4,6db7,6db9,6dbd,6dbf,6dc4,6dc8,6dca,6dce+2,6dd6,6ddb,6ddd,6ddf+2,6de2,6de5,6de9,6def+2,6df4,6df6,6dfc,6e00,6e04,6e1e,6e22,6e27,6e32,6e36,6e39,6e3b+2,6e44+2,6e48+2,6e4b,6e4f,6e51+4,6e57,6e5c+3', + '48=6e62+2,6e68,6e73,6e7b,6e7d,6e8d,6e93,6e99,6ea0,6ea7,6ead+2,6eb1,6eb3,6ebb,6ebf+3,6ec3,6ec7+2,6eca,6ecd+3,6eeb,6eed+2,6ef9,6efb,6efd,6f04,6f08,6f0a,6f0c+2,6f16,6f18,6f1a+2,6f26,6f29+2,6f2f+2,6f33,6f36,6f3b+2,6f2d,6f4f,6f51+3,6f57,6f59+2,6f5d+2,6f61+2,6f68,6f6c,6f7d+2,6f83,6f87+2,6f8b+3,6f90,6f92+3,6f96,6f9a,6f9f+2,6fa5+4,6fae+3,6fb5+2,6fbc,6fc5,6fc7+2,6fca', + '49=6fda,6fde,6fe8+2,6ff0,6ff5,6ff9,6ffc+2,7000,7005+3,700d,7017,7020,7023,702f,7034,7037,7039,703c,7043+2,7048+4,7054+2,705d+2,704e,7064+2,706c,706e,7075+2,707e,7081,7085+2,7094+5,709b,70a4,70ab,70b0+2,70b4,70b7,70ca,70d1,70d3+4,70d8,70dc,70e4,70fa,7103+5,710b+2,710f,711e,7120,712b,712d,712f+3,7138,7141,7145+3,714a+2,7150,7152,7157,715a,715c,715e,7160', + '4a=7168,7179,7180,7185,7187,718c,7192,719a+2,71a0,71a2,71af+2,71b2+2,71ba,71bf+3,71c4,71cb+2,71d3,71d6,71d9+2,71dc,71f8,71fe,7200,7207+3,7213,7217,721a,721d,721f,7224,722b,722f,7234,7238+2,7241+3,7245,724e+3,7253,7255+2,725a,725c,725e,7260,7263,7268,726b,726e+2,7271,7277+2,727b+2,727f,7284,7289,728d+2,7293,729b,72a8,72ad+2,72b1,72b4,72be,72c1,72c7,72c9,72cc,72d5+2,72d8,72df,72e5,72f3+2,72fa+2', + '4b=72fe,7302,7304+2,7307,730b,730d,7312+2,7318+2,731e,7322,7324,7327+2,732c,7331+2,7335,733a+2,733d,7343,734d,7350,7352,7356,7358,735d+4,7366+2,7369,736b+2,736e+2,7371,7377,7379,737c,7380+2,7383,7385+2,738e,7390,7393,7395,7397+2,739c,739e+3,73a2,73a5+2,73aa+2,73ad,73b5,73b7,73b9,73bc+2,73bf,73c5+2,73c9,73cb+2,73cf,73d2+2,73d6,73d9,73dd,73e1,73e3,73e6+2,73e9,73f4+2,73f7,73f9+3,73fd', + '4c=73ff+3,7404,7407,740a,7411,741a+2,7424,7426,7428+10,7439,7440,7443+2,7446+2,744b,744d,7451+2,7457,745d,7462,7466+3,746b,746d+2,7471+2,7480+2,7485+3,7489,748f+4,7498+3,749c,749f+3,74a3,74a6,74a8+4,74ae+2,74b1+2,74b5,74b9,74bb,74bf,74c8+2,74cc,74d0,74d3,74d8,74da+2,74de+2,74e4,74e8,74ea+2,74ef,74f4,74fa+3,74ff,7506', + '4d=7512,7516+2,7520+2,7524,7527,7529+2,752f,7536,7539,753d+4,7543,7547+2,754e,7550,7552,7557,755e+2,7561,756f,7571,7579+6,7581,7585,7590,7592+2,7595,7599,759c,75a2,75a4,75b4,75ba,75bf+3,75c4,75c6,75cc,75ce+2,75d7,75dc,75df+3,75e4,75e7,75ec,75ee+2,75f1,75f9,7600,7602+3,7607+2,760a,760c,760f,7612+2,7615+2,7619,761b+4,7623,7625+2,7629,762d,7632+2,7635,7638+2', + '4e=763a,763c,764a,7640+2,7643+3,7649,764b,7655,7659,765f,7664+2,766d+3,7671,7674,7681,7685,768c+2,7695,769b+3,769f+2,76a2+7,76aa,76ad,76bd,76c1,76c5,76c9,76cb+2,76ce,76d4,76d9,76e0,76e6,76e8,76ec,76f0+2,76f6,76f9,76fc,7700,7706,770a,770e,7712,7714+2,7717,7719+2,771c,7722,7728,772d+3,7734+3,7739,773d+2,7742,7745+2,774a,774d+3,7752,7756+2,775c,775e+3,7762', + '4f=7764,7767,776a,776c,7770,7772+3,777a,777d,7780,7784,778c+2,7794+3,779a,779f,77a2,77a7,77aa,77ae+2,77b1,77b5,77be,77c3,77c9,77d1+2,77d5,77d9,77de+3,77e4,77e6,77ea,77ec,77f0+2,77f4,77f8,77fb,7805+2,7809,780d+2,7811,781d,7821+3,782d+2,7830,7835,7837,7843+2,7847+2,784c,784e,7852,785c,785e,7860+2,7863+2,7868,786a,786e,787a,787e,788a,788f,7894,7898,78a1,789d+3,78a4,78a8,78ac+2,78b0+4', + '50=78bb,78bd,78bf,78c7+3,78cc,78ce,78d2+2,78d5+2,78e4,78db,78df+3,78e6,78ea,78f2+2,7900,78f6+2,78fa+2,78ff,7906,790c,7910,791a,791c,791e+3,7925,7927,7929,792d,7931,7934+2,793b,793d,793f,7944+3,794a+2,794f,7951,7954,7958,795b+2,7967,7969,796b,7972,7979,797b+2,797e,798b+2,7991,7993+4,7998,799b+2,79a1,79a8+2,79ab,79af,79b1,79b4,79b8,79bb,79c2,79c4,79c7+2,79ca,79cf,79d4,79d6,79da,79dd+2', + '51=79e0,79e2,79e5,79ea+2,79ed,79f1,79f8,79fc,7a02+2,7a07,7a09+2,7a0c,7a11,7a15,7a1b,7a1e,7a21,7a27,7a2b,7a2d,7a2f+2,7a34+2,7a38+3,7a44+2,7a47+2,7a4c,7a55+2,7a59,7a5c+2,7a5f+2,7a65,7a67,7a6a,7a6d,7a75,7a78,7a7e,7a80,7a82,7a85+2,7a8a+2,7a90+2,7a94,7a9e,7aa0,7aa3,7aac,7ab3,7ab5,7ab9,7abb+2,7ac6,7ac9,7acc,7ace,7ad1,7adb,7ae8+2,7aeb+2,7af1,7af4,7afb,7afd+2,7b07,7b14,7b1f,7b23,7b27,7b29+3,7b2d+4', + '52=7b31,7b34,7b3d,7b3f+3,7b47,7b4e,7b55,7b60,7b64,7b66,7b69+2,7b6d,7b6f,7b72+2,7b77,7b84,7b89,7b8e,7b90+2,7b96,7b9b,7b9e,7ba0,7ba5,7bac,7baf+2,7bb2,7bb5+2,7bba+4,7bc2,7bc5,7bc8,7bca,7bd4,7bd6+2,7bd9+3,7be8,7bea,7bf2,7bf4+2,7bf8+3,7bfc,7bfe,7c01+4,7c06,7c09,7c0b+2,7c0e+2,7c19,7c1b,7c20,7c25+2,7c28,7c2c,7c31,7c33+2,7c36,7c39+2,7c46,7c4a,7c55,7c51+3,7c59+6', + '53=7c61,7c63,7c67,7c69,7c6d+2,7c70,7c72,7c79,7c7c+2,7c86+2,7c8f,7c94,7c9e,7ca0,7ca6,7cb0,7cb6+2,7cba+3,7cbf,7cc4,7cc7+3,7ccd,7ccf,7cd3+3,7cd7,7cd9+2,7cdd,7ce6,7ce9,7ceb,7cf5,7d03,7d07+3,7d0f,7d11+3,7d16,7d1d+2,7d23,7d26,7d2a,7d2d,7d31,7d3c+3,7d40+2,7d47+2,7d4d,7d51,7d53,7d57,7d59+2,7d5c+2,7d65,7d67,7d6a,7d70,7d78,7d7a+2,7d7f,7d81+3,7d85+2,7d88,7d8b+3,7d91,7d96+2,7d9d', + '54=7d9e,7da6+2,7daa,7db3,7db6+2,7db9,7dc2+5,7dcc+3,7dd7,7dd9,7e00,7de2,7de5+2,7dea+2,7ded,7df1,7df5+2,7df9+2,7e08,7e10+2,7e15,7e17,7e1c+2,7e20,7e27+2,7e2c+2,7e2f,7e33,7e36,7e3f,7e44+2,7e47,7e4e,7e50,7e52,7e58,7e5f,7e61+2,7e65,7e6b,7e6e+2,7e73,7e78,7e7e,7e81,7e86+2,7e8a,7e8d,7e91,7e95,7e98,7e9a,7e9d+2,7f3c,7f3b,7f3d+3,7f43+2,7f47,7f4f,7f52+2,7f5b+3,7f61,7f63+4,7f6d', + '55=7f71,7f7d+4,7f8b,7f8d,7f8f+3,7f96+2,7f9c,7fa1+2,7fa6,7faa,7fad,7fb4,7fbc,7fbf+2,7fc3,7fc8,7fce+2,7fdb,7fdf,7fe3,7fe5,7fe8,7fec,7fee+2,7ff2,7ffa,7ffd+3,8007+2,800a,800d+3,8011,8013+2,8016,801d+4,8024,8026,802c,802e,8030,8034+2,8037,8039+2,803c,803e,8040,8044,8060,8064,8066,806d,8071,8075,8081,8088,808e,809c,809e,80a6+2,80ab,80b8+2,80c8,80cd,80cf,80d2,80d4+2,80d7+2,80e0,80ed+2', + '56=80f0,80f2+2,80f6,80f9+2,80fe,8103,810b,8116+3,811c,811e,8120,8124,8127,812c,8130,8135,813a,813c,8145,8147,814a,814c,8152,8157,8160+2,8167+3,816d,816f,8177,8181,8190,8184+3,818b,818e,8196,8198,819b,819e,81a2,81ae,81b2,81b4,81bb,81cb,81c3,81c5,81ca,81ce+2,81d5,81d7,81db,81dd+2,81e1,81e4,81eb+2,81f0+3,81f5+2,81f8+2,81fd,81ff+2,8203,820f,8213+2,8219+2,821d,8221+2,8228,8232,8234,823a,8243+4', + '57=824b,824e+2,8251,8256,825c,8260,8263,8267,826d,8274,827b,827d,827f+3,8283+2,8287,8289+2,828e,8291,8294,8296,8298,829a+2,82a0+2,82a3+2,82a7+4,82ae,82b0,82b2,82b4,82b7,82ba,82bc,82be+2,82c6,82d0,82d5,82da,82e0,82e2,82e4,82e8,82ea,82ed,82ef,82f6+2,82fd+2,8300+2,8307+2,830a+2,8354,831b,831d+3,8321+2,832c+3,8330,8333,8337,833a,833c+2,8342+3,8347,834d+2,8351,8355+3,8370,8378', + '58=837d,837f+2,8382,8384,8386,838d,8392,8394+2,8398+2,839b+3,83a6+2,83a9,83ac,83be+3,83c7,83c9,83cf+3,83d4,83dd,8353,83e8,83ea,83f6,83f8+2,83fc,8401,8406,840a,840f,8411,8415,8419,83ad,842f,8439,8445,8447+2,844a,844d,844f,8451+2,8456,8458+3,845c,8460,8464+2,8467,846a,8470,8473+2,8476,8478,847c+2,8481,8485,8492+2,8495,849e,84a6,84a8+3,84af,84b1,84b4,84ba,84bd+2,84c0,84c2,84c7+2,84cc,84cf,84d3', + '59=84dc,84e7,84ea,84ef+4,84f7,8532,84fa+2,84fd,8502+2,8507,850c,850e,8510,851c,851e,8522+4,8527,852a+2,852f,8533+2,8536,853f,8546,854f+5,8556,8559,855c+7,8564,856b,856f,8579+3,857d,857f,8581,8585+2,8589,858b+2,858f,8593,8598,859d,859f+2,85a2,85a5,85a7,85b4,85b6+3,85bc+4,85c2,85c7,85ca+2,85ce,85ad,85d8,85da,85df+2,85e6,85e8,85ed,85f3,85f6,85fc', + '5a=85ff+2,8604+2,860d+2,8610+3,8618+2,861b,861e,8621,8627,8629,8636,8638,863a,863c+2,8640,8642,8646,8652+2,8656+4,865d,8660+5,8669,866c,866f,8675+3,867a,868d,8691,8696,8698,869a,869c,86a1,86a6+3,86ad,86b1,86b3+3,86b7+3,86bf+3,86c3,86c5,86d1+2,86d5,86d7,86da,86dc,86e0,86e3,86e5,86e7,8688,86fa,86fc+2,8704+2,8707,870b,870e+3,8713+2,8719,871e+2,8721,8723', + '5b=8728,872e+2,8731+2,8739+2,873c+3,8740,8743,8745,874d,8758,875d,8761,8764+2,876f,8771+2,877b,8783+7,878b+2,8790,8793,8795,8797+3,879e,87a0,87a3,87a7,87ac+3,87b1,87b5,87be+2,87c1,87c8+3,87ce,87d5+2,87d9+2,87dc,87df,87e2+3,87ea+2,87ed,87f1,87f3,87f8,87fa,87ff,8801,8803,8806,8809+3,8810,8819,8812+3,8818,881a+3,881e+2,8828,882d+2,8830,8832,8835', + '5c=883a,883c,8841,8843,8845,8848+4,884e,8851,8855+2,8858,885a,885c,885f+2,8864,8869,8871,8879,887b,8880,8898,889a+3,889f+2,88a8,88aa,88ba,88bd+2,88c0,88ca+5,88d1+3,88db,88de,88e7,88ef+3,88f5,88f7,8901,8906,890d+3,8915+2,8918+3,891c,8920,8926+3,8930+3,8935,8939+2,893e,8940,8942,8945+2,8949,894f,8952,8957,895a+3,8961+3,896b,896e,8970,8973,8975,897a', + '5d=897b+3,8989,898d,8990,8994+2,899b+2,899f+2,89a5,89b0,89b4+4,89bc,89d4+5,89e5,89e9,89eb,89ed,89f1,89f3,89f6,89f9,89fd,89ff,8a04+2,8a07,8a0f,8a11+2,8a14+2,8a1e,8a20,8a22,8a24,8a26,8a2b+2,8a2f,8a35,8a37,8a3d+2,8a40,8a43,8a45,8a47,8a49,8a4d+2,8a53,8a56+3,8a5c+2,8a61,8a65,8a67,8a75+3,8a79+3,8a7e+3,8a83,8a86,8a8b,8a8f+2,8a92,8a96+2,8a99,8a9f,8aa7,8aa9,8aae+2,8ab3', + '5e=8ab6+2,8abb,8abe,8ac3,8ac6,8ac8+3,8ad1,8ad3+3,8ad7,8add,8adf,8aec,8af0,8af4+3,8afc,8aff,8b05+2,8b0b,8b11,8b1c,8b1e+2,8b0a,8b2d,8b30,8b37,8b3c,8b42+5,8b48,8b52+3,8b59,8b4d,8b5e,8b63,8b6d,8b76,8b78+2,8b7c,8b7e,8b81,8b84+2,8b8b,8b8d,8b8f,8b94+2,8b9c,8b9e+2,8c38+2,8c3d+2,8c45,8c47,8c49,8c4b,8c4f,8c51,8c53+2,8c57+2,8c5b,8c5d,8c59,8c63+2,8c66,8c68+2,8c6d,8c73,8c75+2,8c7b,8c7e,8c86', + '5f=8c87,8c8b,8c90,8c92+2,8c99,8c9b+2,8ca4,8cb9+2,8cc5+2,8cc9,8ccb,8ccf,8cd6,8cd5,8cd9,8cdd,8ce1,8ce8,8cec,8cef+2,8cf2,8cf5,8cf7+2,8cfe+2,8d01,8d03,8d09,8d12,8d17,8d1b,8d65,8d69,8d6c,8d6e,8d7f,8d82,8d84,8d88,8d8d,8d90+2,8d95,8d9e+3,8da6,8dab+2,8daf,8db2,8db5,8db7,8db9,8dbb,8dc0,8dc5+4,8dca,8dce,8dd1,8dd4+2,8dd7,8dd9,8de4+2,8de7,8dec,8df0,8dbc,8df1+2,8df4,8dfd,8e01,8e04+3,8e0b,8e11,8e14,8e16,8e20+3', + '60=8e23,8e26+2,8e31,8e33,8e36+4,8e3d,8e40+2,8e4b,8e4d+3,8e54,8e5b+4,8e61+2,8e69,8e6c+2,8e6f+3,8e79+3,8e82+2,8e89,8e90,8e92,8e95,8e9a+2,8e9d+2,8ea2,8ea7,8ea9,8ead+2,8eb3,8eb5,8eba+2,8ec0+2,8ec3+2,8ec7,8ecf,8ed1,8ed4,8edc,8ee8,8eee,8ef0+2,8ef7,8ef9+2,8eed,8f00,8f02,8f07+2,8f0f+2,8f16+3,8f1e,8f20+2,8f23,8f25,8f27+2,8f2c+3,8f34+4,8f3a,8f40+2', + '61=8f43,8f47,8f4f,8f51+5,8f58,8f5d+2,8f65,8f9d,8fa0+2,8fa4+3,8fb5+2,8fb8,8fbe,8fc0+2,8fc6,8fca+2,8fcd,8fd0,8fd2+2,8fd5,8fe0,8fe3+2,8fe8,8fee,8ff1,8ff5+2,8ffb,8ffe,9002,9004,9008,900c,9018,901b,9028+2,902f,902a,902c+2,9033+2,9037,903f,9043+2,904c,905b,905d,9062,9066+2,906c,9070,9074,9079,9085,9088,908b+2,908e,9090,9095,9097+3,909b,90a0+3,90a5,90b0,90b2+3,90b6,90bd,90cc,90be,90c3', + '62=90c4+2,90c7+2,90d5,90d7+3,90dc+2,90df,90e5,90d2,90f6,90eb,90ef+2,90f4,90fe+3,9104+3,9108,910d,9110,9114,9116+3,911a,911c,911e,9120,9125,9122+2,9127,9129,912e+2,9131,9134,9136+2,9139+2,913c+2,9143,9147+2,914f,9153,9157,9159+3,9161,9164,9167,916d,9174,9179+3,9181,9183,9185+2,918a,918e,9191,9193+3,9198,919e,91a1,91a6,91a8,91ac+3,91b0+4,91b6,91bb+3,91bf', + '63=91c2+2,91c5,91d3+2,91d7,91d9+2,91de,91e4+2,91e9+2,91ec+6,91f7,91f9,91fb,91fd,9200+2,9204+4,9209+2,920c,9210,9212+2,9216,9218,921c+2,9223+4,9228,922e+3,9233,9235+2,9238+3,923c,923e,9240,9242+2,9246+2,924a,924d+3,9251,9258+2,925c+2,9260+2,9265,9267+3,926e+3,9275+5,927b+3,927f,9288+3,928d+2,9292,9297', + '64=9299,929f+2,92a4+2,92a7+2,92ab,92af,92b2,92b6,92b8,92ba+4,92bf+5,92c5+4,92cb+4,92d0,92d3,92d5,92d7+3,92dc+2,92df+3,92e3,92e5,92e7+2,92ec,92ee,92f0,92f9,92fb,92ff+2,9302,9308,930d,9311,9314+2,931c+4,9321,9324+2,9327,9329+2,9333+2,9336+2,9347+3,9350+3,9355,9357+2,935a,935e,9364+2,9367,9369+2,936d,936f+3,9373+2,9376', + '65=937a,937d,937f+4,9388,938a+2,938d,938f,9392,9395,9398,939b,939e,93a1,93a3+2,93a6,93a8,93ab,93b4+3,93ba,93a9,93c1,93c4+4,93c9+5,93d3,93d9,93dc,93de+2,93e2,93e6+2,93f9,93f7+2,93fa+2,93fd,9401+2,9404,9408+2,940d+3,9415+3,941f,942e+2,9431+4,943b,943f,943d,9443,9445,9448,944a,944c,9455,9459,945c,945f,9461,9463,9468,946b,946d+3,9471+2,9484,9483,9578+2', + '66=957e,9584,9588,958c+3,959d+3,95a1,95a6,95a9,95ab+2,95b4,95b6,95ba,95bd,95bf,95c6,95c8+2,95cb,95d0+4,95d9+2,95dd+4,95e4,95e6,961d+2,9622,9624+3,962c,9631,9633,9637+4,963c+2,9641,9652,9654,9656+3,9661,966e,9674,967b+2,967e+2,9681+4,9689,9691,9696,969a,969d,969f,96a4+3,96a9,96ae+2,96b3,96ba,96ca,96d2,5db2,96d8,96da,96dd+3,96e9,96ef,96f1,96fa,9702', + '67=9703,9705,9709,971a+2,971d,9721+3,9728,9731,9733,9741,9743,974a,974e+2,9755,9757+2,975a+2,9763,9767,976a,976e,9773,9776+3,977b,977d,977f+2,9789,9795+3,9799+2,979e+2,97a2,97ac,97ae,97b1+2,97b5+2,97b8+3,97bc,97be+2,97c1,97c4+2,97c7,97c9+2,97cc+3,97d0+2,97d4,97d7+3,97dd+2,97e0,97db,97e1,97e4,97ef,97f1,97f4,97f7+2,97fa,9807,980a,9819,980d+2,9814,9816,981c,981e,9820,9823,9826', + '68=982b,982e+3,9832+2,9835,9825,983e,9844,9847,984a,9851+3,9856+2,9859+2,9862+2,9865+2,986a,986c,98ab,98ad+2,98b0,98b4,98b7+2,98ba+2,98bf,98c2,98c5,98c8,98cc,98e1,98e3,98e5+3,98ea,98f3,98f6,9902,9907+2,9911,9915+3,991a+3,991f,9922,9926+2,992b,9931+5,9939+4,9940+2,9946+3,994d+2,9954,9958+2,995b+2,995e+3,999b,999d,999f,99a6,99b0+3,99b5', + '69=99b9+2,99bd,99bf,99c3,99c9,99d3+2,99d9+2,99dc,99de,99e7,99ea+3,99f0,99f4+2,99f9,99fd+2,9a02+3,9a0b+2,9a10+2,9a16,9a1e,9a20,9a22+3,9a27,9a2d+2,9a33,9a35+2,9a38,9a47,9a41,9a44,9a4a+3,9a4e,9a51,9a54,9a56,9a5d,9aaa,9aac,9aae+2,9ab2,9ab4+3,9ab9,9abb,9abe+2,9ac1,9ac3,9ac6,9ac8,9ace,9ad0,9ad2,9ad5+3,9adb+2,9ae0,9ae4+2,9ae7,9ae9,9aec,9af2+2,9af5,9af9+2,9afd,9aff+5', + '6a=9b04+2,9b08+2,9b0b+4,9b10,9b12,9b16,9b19,9b1b+2,9b20,9b26,9b2b,9b2d,9b33+3,9b37,9b39+2,9b3d,9b48,9b4b+2,9b55+3,9b5b,9b5e,9b61,9b63,9b65+2,9b68,9b6a+5,9b73,9b75,9b77+3,9b7f+2,9b84+4,9b89+3,9b8d,9b8f+2,9b94,9b9a,9b9d+2,9ba6+2,9ba9,9bac,9bb0+3,9bb7+2,9bbb+2,9bbe+2,9bc1,9bc7+2,9bce,9bd0,9bd7+2,9bdd,9bdf,9be5,9be7,9bea+2,9bef,9bf3,9bf7+2', + '6b=9bf9+2,9bfd,9bff+2,9c02,9c0b,9c0f,9c11,9c16,9c18+3,9c1c,9c1e,9c22+2,9c26+5,9c31,9c35+3,9c3d,9c41,9c43+3,9c49+2,9c4e+3,9c53+2,9c56,9c58,9c5b,9c5d+3,9c63,9c69+2,9c5c,9c6b,9c68,9c6e,9c70,9c72,9c75,9c77,9c7b,9ce6,9cf2,9cf7,9cf9,9d0b,9d02,9d11,9d17+2,9d1c+3,9d2f+2,9d32+3,9d3a,9d3c,9d45,9d3d,9d42+2,9d47,9d4a,9d53+2,9d5f,9d63,9d62,9d65,9d69+3,9d70,9d76+2,9d7b', + '6c=9d7c,9d7e,9d83+2,9d86,9d8a,9d8d+2,9d92+2,9d95+4,9da1,9daa,9dac,9dae,9db1,9db5,9db9,9dbc,9dbf,9dc3,9dc7,9dc9+2,9dd4+4,9dda,9dde+3,9de5,9de7,9de9,9deb,9dee,9df0,9df3+2,9dfe,9e0a,9e02,9e07,9e0e,9e10+3,9e15+2,9e19,9e1c+2,9e7a+3,9e80,9e82+4,9e87,9e8e+2,9e96,9e98,9e9b,9e9e,9ea4,9ea8,9eac,9eae+3,9eb3+3,9ec6,9ec8,9ecb,9ed5,9edf,9ee4,9ee7,9eec+3,9ef0+3,9ef5', + '6d=9ef8,9eff,9f02+2,9f09,9f0f+4,9f14,9f16+2,9f19+3,9f1f,9f22,9f26,9f2a+2,9f2f,9f31+2,9f34,9f37,9f39+2,9f3c+2,9f3f,9f41,9f43+5,9f53,9f55+4,9f5a,9f5d+2,9f68+2,9f6d+5,9f73,9f75,9f7a,9f7d,9f8f+4,9f94,9f96+2,9f9e,9fa1+3,9fa5' +].join(','); From 69961be9ece99c71f2f322c800721c1aef36267a Mon Sep 17 00:00:00 2001 From: polygonplanet Date: Fri, 2 Oct 2026 21:40:35 +0900 Subject: [PATCH 3/4] refactor: add expandTable to decompress tables on first use --- src/config.js | 31 ----------- src/encoding-convert.js | 12 +++-- src/encoding-table.js | 113 ++++++++++++++++++++++++++++++++++++++-- 3 files changed, 117 insertions(+), 39 deletions(-) diff --git a/src/config.js b/src/config.js index 67dc2d6..7386bde 100644 --- a/src/config.js +++ b/src/config.js @@ -1,5 +1,4 @@ var util = require('./util'); -var EncodingTable = require('./encoding-table'); // Fallback character when a character can't be represented exports.FALLBACK_CHARACTER = 63; // '?' @@ -107,33 +106,3 @@ exports.EncodingOrders = (function() { return orders; }()); - -function init_JIS_TO_UTF8_TABLE() { - if (EncodingTable.JIS_TO_UTF8_TABLE === null) { - EncodingTable.JIS_TO_UTF8_TABLE = {}; - - var keys = util.objectKeys(EncodingTable.UTF8_TO_JIS_TABLE); - var i = 0; - var len = keys.length; - var key, value; - - for (; i < len; i++) { - key = keys[i]; - value = EncodingTable.UTF8_TO_JIS_TABLE[key]; - if (value > 0x5F) { - EncodingTable.JIS_TO_UTF8_TABLE[value] = key | 0; - } - } - - EncodingTable.JISX0212_TO_UTF8_TABLE = {}; - keys = util.objectKeys(EncodingTable.UTF8_TO_JISX0212_TABLE); - len = keys.length; - - for (i = 0; i < len; i++) { - key = keys[i]; - value = EncodingTable.UTF8_TO_JISX0212_TABLE[key]; - EncodingTable.JISX0212_TO_UTF8_TABLE[value] = key | 0; - } - } -} -exports.init_JIS_TO_UTF8_TABLE = init_JIS_TO_UTF8_TABLE; diff --git a/src/encoding-convert.js b/src/encoding-convert.js index 83d5833..ebb3865 100644 --- a/src/encoding-convert.js +++ b/src/encoding-convert.js @@ -404,7 +404,7 @@ exports.EUCJPToSJIS = EUCJPToSJIS; * SJIS To UTF-8 */ function SJISToUTF8(data) { - config.init_JIS_TO_UTF8_TABLE(); + EncodingTable.initConversionTables(); var results = []; var i = 0; @@ -485,7 +485,7 @@ exports.SJISToUTF8 = SJISToUTF8; * EUC-JP to UTF-8 */ function EUCJPToUTF8(data) { - config.init_JIS_TO_UTF8_TABLE(); + EncodingTable.initConversionTables(); var results = []; var i = 0; @@ -551,7 +551,7 @@ exports.EUCJPToUTF8 = EUCJPToUTF8; * JIS to UTF-8 */ function JISToUTF8(data) { - config.init_JIS_TO_UTF8_TABLE(); + EncodingTable.initConversionTables(); var results = []; var index = 0; @@ -635,6 +635,8 @@ exports.JISToUTF8 = JISToUTF8; * UTF-8 to SJIS */ function UTF8ToSJIS(data, options) { + EncodingTable.initConversionTables(); + var results = []; var i = 0; var len = data && data.length; @@ -717,6 +719,8 @@ exports.UTF8ToSJIS = UTF8ToSJIS; * UTF-8 to EUC-JP */ function UTF8ToEUCJP(data, options) { + EncodingTable.initConversionTables(); + var results = []; var i = 0; var len = data && data.length; @@ -784,6 +788,8 @@ exports.UTF8ToEUCJP = UTF8ToEUCJP; * UTF-8 to JIS */ function UTF8ToJIS(data, options) { + EncodingTable.initConversionTables(); + var results = []; var index = 0; var len = data && data.length; diff --git a/src/encoding-table.js b/src/encoding-table.js index 8823e8c..0e65805 100644 --- a/src/encoding-table.js +++ b/src/encoding-table.js @@ -1,5 +1,108 @@ -exports.UTF8_TO_JIS_TABLE = require('./utf8-to-jis-table'); -exports.UTF8_TO_JIS_ALIAS_TABLE = require('./utf8-to-jis-alias-table'); -exports.UTF8_TO_JISX0212_TABLE = require('./utf8-to-jisx0212-table'); -exports.JIS_TO_UTF8_TABLE = require('./jis-to-utf8-table'); -exports.JISX0212_TO_UTF8_TABLE = require('./jisx0212-to-utf8-table'); +/** + * Conversion tables between UTF-8 and JIS + * + * The tables are stored in a compressed text format + * (see `src/utf8-to-jis-table.js`) and expanded into the *_TABLE objects. + */ +var jisTableData = require('./utf8-to-jis-table'); +var jisx0212TableData = require('./utf8-to-jisx0212-table'); +var UTF8_TO_JIS_ALIAS_TABLE = require('./utf8-to-jis-alias-table'); + +var UTF8_TO_JIS_TABLE = {}; +var JIS_TO_UTF8_TABLE = {}; +var UTF8_TO_JISX0212_TABLE = {}; +var JISX0212_TO_UTF8_TABLE = {}; + +// Unicode code point (BMP only) -> UTF-8 bytes packed into a number +// Same encoding as UNICODEToUTF8, but returns a number instead of an array +function toUTF8(c) { + if (c < 0x80) { + return c; + } + if (c < 0x800) { + return (0xC0 | (c >> 6)) << 8 | + (0x80 | (c & 0x3F)); + } + return (0xE0 | (c >> 12)) << 16 | + (0x80 | ((c >> 6) & 0x3F)) << 8 | + (0x80 | (c & 0x3F)); +} + +/** + * Expand the compressed table data into the forward and reverse tables. + * + * Tokens are separated by ",": + * "LB=" start of lead byte 0xLB (hex): the trail byte restarts at 0x21 + * "UUUU" Unicode code point (hex) for the current trail byte + * "UUUU+N" N consecutive code points starting at UUUU + * "-N" skip N trail bytes (unassigned) + * + * Example of compressed table data: + * '21=3000+3,ff0c,ff0e,30fb, ...' : lead byte 0x21 + * '22=25c6,25a1,25a0,25b3,25b2, ...' : lead byte 0x22 + * '23=-15,ff10+10,-7,ff21+26,-6, ...' : lead byte 0x23 + */ +function expandTable(data, utf8ToJisTable, jisToUtf8Table) { + var tokens = data.split(','); + var lead, trail, token, pos, cp, n, jis, utf8; + + for (var i = 0, len = tokens.length; i < len; i++) { + token = tokens[i]; + + // The first token always contains "LB=" + pos = token.indexOf('='); + if (pos !== -1) { + lead = parseInt(token.slice(0, pos), 16); + trail = 0x21; // the trail byte restarts at 0x21 + token = token.slice(pos + 1); + } + + if (token.charAt(0) === '-') { + // skip N trail bytes (e.g., "23=-15,ff10+10,-7, ...") + trail += parseInt(token.slice(1), 10); + continue; + } + + // "UUUU" or "UUUU+N" + pos = token.indexOf('+'); + if (pos === -1) { + cp = parseInt(token, 16); + n = 1; + } else { + cp = parseInt(token.slice(0, pos), 16); + n = parseInt(token.slice(pos + 1), 10); + } + + while (n-- > 0) { + jis = (lead << 8) | trail++; + utf8 = toUTF8(cp++); + utf8ToJisTable[utf8] = jis; + jisToUtf8Table[jis] = utf8; + } + } +} + +var expanded = false; + +function initConversionTables() { + if (expanded) { + return; + } + + expandTable(jisTableData, UTF8_TO_JIS_TABLE, JIS_TO_UTF8_TABLE); + expandTable(jisx0212TableData, UTF8_TO_JISX0212_TABLE, JISX0212_TO_UTF8_TABLE); + + // Add Half-width katakana (not stored in the compressed data) + // U+FF61..U+FF9F -> 0x21..0x5F (forward table only) + for (var kana = 0xFF61, jisKana = 0x21; jisKana <= 0x5F; kana++, jisKana++) { + UTF8_TO_JIS_TABLE[toUTF8(kana)] = jisKana; + } + expanded = true; +} +exports.initConversionTables = initConversionTables; + +exports.UTF8_TO_JIS_TABLE = UTF8_TO_JIS_TABLE; +exports.UTF8_TO_JIS_ALIAS_TABLE = UTF8_TO_JIS_ALIAS_TABLE; +exports.UTF8_TO_JISX0212_TABLE = UTF8_TO_JISX0212_TABLE; +exports.JIS_TO_UTF8_TABLE = JIS_TO_UTF8_TABLE; +exports.JISX0212_TO_UTF8_TABLE = JISX0212_TO_UTF8_TABLE; From d4be8e2b0524e60e54ba7edb63f887696d069dec Mon Sep 17 00:00:00 2001 From: polygonplanet Date: Sat, 3 Oct 2026 02:18:07 +0900 Subject: [PATCH 4/4] test: add tests for expanding the compressed tables --- tests/test.js | 96 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 92 insertions(+), 4 deletions(-) diff --git a/tests/test.js b/tests/test.js index 0440ab0..e0068a1 100644 --- a/tests/test.js +++ b/tests/test.js @@ -1048,8 +1048,8 @@ describe('encoding', function() { }); it('encodes JIS X 0212 with the 3-byte SS3 form, not JIS X 0208 unassigned rows', function() { - var jisTable = require('../src/utf8-to-jis-table'); - var jisx0212Table = require('../src/utf8-to-jisx0212-table'); + var jisTable = require('./utf8-to-jis-table'); + var jisx0212Table = require('./utf8-to-jisx0212-table'); var keyToCode = function(key) { var bytes = []; var n = parseInt(key, 10); @@ -1209,7 +1209,11 @@ describe('encoding', function() { { input: [0x00A3], sjis: [0x81, 0x92], decoded: [0xFFE1] }, // £ -> £ { input: [0xFFE1], sjis: [0x81, 0x92], decoded: [0xFFE1] }, // £ -> £ { input: [0x2212], sjis: [0x81, 0x7C], decoded: [0xFF0D] }, // − -> - - { input: [0xFF0D], sjis: [0x81, 0x7C], decoded: [0xFF0D] } // - -> - + { input: [0xFF0D], sjis: [0x81, 0x7C], decoded: [0xFF0D] }, // - -> - + { input: [0x2016], sjis: [0x81, 0x61], decoded: [0x2225] }, // ‖ -> ∥ + { input: [0x2225], sjis: [0x81, 0x61], decoded: [0x2225] }, // ∥ -> ∥ + { input: [0x00AC], sjis: [0x81, 0xCA], decoded: [0xFFE2] }, // ¬ -> ¬ + { input: [0xFFE2], sjis: [0x81, 0xCA], decoded: [0xFFE2] } // ¬ -> ¬ ]; aliasMaps.forEach(function(alias) { @@ -1226,7 +1230,9 @@ describe('encoding', function() { { input: [0x301C], eucjp: [0xA1, 0xC1], jis: [0x21, 0x41], decoded: [0xFF5E] }, // 〜 -> ~ { input: [0x00A2], eucjp: [0xA1, 0xF1], jis: [0x21, 0x71], decoded: [0xFFE0] }, // ¢ -> ¢ { input: [0x00A3], eucjp: [0xA1, 0xF2], jis: [0x21, 0x72], decoded: [0xFFE1] }, // £ -> £ - { input: [0x2212], eucjp: [0xA1, 0xDD], jis: [0x21, 0x5D], decoded: [0xFF0D] } // − -> - + { input: [0x2212], eucjp: [0xA1, 0xDD], jis: [0x21, 0x5D], decoded: [0xFF0D] }, // − -> - + { input: [0x2016], eucjp: [0xA1, 0xC2], jis: [0x21, 0x42], decoded: [0x2225] }, // ‖ -> ∥ + { input: [0x00AC], eucjp: [0xA2, 0xCC], jis: [0x22, 0x4C], decoded: [0xFFE2] } // ¬ -> ¬ ]; aliasMaps.forEach(function(alias) { @@ -1906,4 +1912,86 @@ describe('encoding', function() { assert.deepEqual(code, longArray); }); }); + + describe('conversion table expansion', function() { + var EncodingTable = require('../src/encoding-table'); + var UTF8_TO_JIS_ALIAS_TABLE = require('../src/utf8-to-jis-alias-table'); + + // initConversionTables() expands the tables on the first call only + it('expands the tables only once', function() { + var utf8jisTable = EncodingTable.UTF8_TO_JIS_TABLE; + assert.strictEqual(Object.keys(utf8jisTable).length, 0); + + EncodingTable.initConversionTables(); + assert(Object.keys(utf8jisTable).length > 0); + + var key = Object.keys(utf8jisTable)[0]; + var originalValue = utf8jisTable[key]; + var overwrittenValue = -1; + utf8jisTable[key] = overwrittenValue; + + try { + EncodingTable.initConversionTables(); + assert.strictEqual(utf8jisTable[key], overwrittenValue); + } finally { + utf8jisTable[key] = originalValue; + } + }); + + var tables = [ + { + name: 'JIS X 0208', + source: require('./utf8-to-jis-table'), + utf8ToJis: EncodingTable.UTF8_TO_JIS_TABLE, + jisToUtf8: EncodingTable.JIS_TO_UTF8_TABLE, + // Lowest JIS value to check in the JIS to UTF-8 table + // Half-width kana (JIS 0x21-0x5F) are only in the UTF-8 to JIS table + minJisValue: 0x60 + }, + { + name: 'JIS X 0212', + source: require('./utf8-to-jisx0212-table'), + utf8ToJis: EncodingTable.UTF8_TO_JISX0212_TABLE, + jisToUtf8: EncodingTable.JISX0212_TO_UTF8_TABLE, + minJisValue: 0 + } + ]; + + tables.forEach(function(table) { + it(table.name + ': expanded UTF-8 to JIS table matches the source table', function() { + var sourceKeys = Object.keys(table.source); + var expandedKeys = Object.keys(table.utf8ToJis); + assert(sourceKeys.length > 0); + assert(expandedKeys.length > 0); + + var aliased = 0; + sourceKeys.forEach(function(key) { + var jis = table.utf8ToJis[key]; + if (jis == null) { + jis = UTF8_TO_JIS_ALIAS_TABLE[key]; + aliased++; + } + assert.strictEqual(jis, table.source[key], 'UTF-8 key: ' + key); + }); + + expandedKeys.forEach(function(key) { + assert.strictEqual(table.utf8ToJis[key], table.source[key], 'UTF-8 key: ' + key); + }); + assert.strictEqual(expandedKeys.length + aliased, sourceKeys.length); + }); + + it(table.name + ': expanded JIS to UTF-8 table matches the source table', function() { + var expected = {}; + // For duplicate JIS values, keep the last key in key order + Object.keys(table.source).forEach(function(key) { + var jis = table.source[key]; + if (jis >= table.minJisValue) { + expected[jis] = key | 0; + } + }); + assert(Object.keys(expected).length > 0); + assert.deepStrictEqual(table.jisToUtf8, expected); + }); + }); + }); });