Home Reference Source

src/encode/SJIS2004.js

/**
 * The script is part of Mojix.
 *
 * AUTHOR:
 *  natade (http://twitter.com/natadea)
 *
 * LICENSE:
 *  The MIT license https://opensource.org/licenses/MIT
 */

import Unicode from "./Unicode.js";
import SJIS from "./SJIS.js";

/**
 * Shift_JIS-2004 の変換マップ作成用クラス
 * @ignore
 */
class SJIS2004MAP {
	/**
	 * 変換マップを初期化
	 */
	static init() {
		if (SJIS2004MAP.is_initmap) {
			return;
		}
		SJIS2004MAP.is_initmap = true;

		/**
		 * 変換マップを作成
		 *
		 *
		 * @returns {Object<number, number|number[]>}
		 */
		const getSJIS2004ToUnicodeMap = function () {
			/* eslint-disable max-len */
			/* eslint-disable object-property-newline */
			/**
			 * 変換マップ
			 * - 2文字に変換される場合もあるので注意
			 *
			 *
			 * 参考:JIS X 0213 - Wikipedia (2019/1/1)
			 * https://ja.wikipedia.org/wiki/JIS_X_0213
			 * @type {Object<number, number|number[]>}
			 */
			// prettier-ignore
			const sjis2004_to_unicode_map = {
				// ASCII コード部分は CP932 を参考
				0x00: 0x00,
				0x01: 0x01, 0x02: 0x02, 0x03: 0x03, 0x04: 0x04, 0x05: 0x05, 0x06: 0x06, 0x07: 0x07, 0x08: 0x08,
				0x09: 0x09, 0x0A: 0x0A, 0x0B: 0x0B, 0x0C: 0x0C, 0x0D: 0x0D, 0x0E: 0x0E, 0x0F: 0x0F, 0x10: 0x10,
				0x11: 0x11, 0x12: 0x12, 0x13: 0x13, 0x14: 0x14, 0x15: 0x15, 0x16: 0x16, 0x17: 0x17, 0x18: 0x18,
				0x19: 0x19, 0x1A: 0x1A, 0x1B: 0x1B, 0x1C: 0x1C, 0x1D: 0x1D, 0x1E: 0x1E, 0x1F: 0x1F, 0x20: 0x20,
				0x21: 0x21, 0x22: 0x22, 0x23: 0x23, 0x24: 0x24, 0x25: 0x25, 0x26: 0x26, 0x27: 0x27, 0x28: 0x28,
				0x29: 0x29, 0x2A: 0x2A, 0x2B: 0x2B, 0x2C: 0x2C, 0x2D: 0x2D, 0x2E: 0x2E, 0x2F: 0x2F, 0x30: 0x30,
				0x31: 0x31, 0x32: 0x32, 0x33: 0x33, 0x34: 0x34, 0x35: 0x35, 0x36: 0x36, 0x37: 0x37, 0x38: 0x38,
				0x39: 0x39, 0x3A: 0x3A, 0x3B: 0x3B, 0x3C: 0x3C, 0x3D: 0x3D, 0x3E: 0x3E, 0x3F: 0x3F, 0x40: 0x40,
				0x41: 0x41, 0x42: 0x42, 0x43: 0x43, 0x44: 0x44, 0x45: 0x45, 0x46: 0x46, 0x47: 0x47, 0x48: 0x48,
				0x49: 0x49, 0x4A: 0x4A, 0x4B: 0x4B, 0x4C: 0x4C, 0x4D: 0x4D, 0x4E: 0x4E, 0x4F: 0x4F, 0x50: 0x50,
				0x51: 0x51, 0x52: 0x52, 0x53: 0x53, 0x54: 0x54, 0x55: 0x55, 0x56: 0x56, 0x57: 0x57, 0x58: 0x58,
				0x59: 0x59, 0x5A: 0x5A, 0x5B: 0x5B, 0x5C: 0x5C, 0x5D: 0x5D, 0x5E: 0x5E, 0x5F: 0x5F, 0x60: 0x60,
				0x61: 0x61, 0x62: 0x62, 0x63: 0x63, 0x64: 0x64, 0x65: 0x65, 0x66: 0x66, 0x67: 0x67, 0x68: 0x68,
				0x69: 0x69, 0x6A: 0x6A, 0x6B: 0x6B, 0x6C: 0x6C, 0x6D: 0x6D, 0x6E: 0x6E, 0x6F: 0x6F, 0x70: 0x70,
				0x71: 0x71, 0x72: 0x72, 0x73: 0x73, 0x74: 0x74, 0x75: 0x75, 0x76: 0x76, 0x77: 0x77, 0x78: 0x78,
				0x79: 0x79, 0x7A: 0x7A, 0x7B: 0x7B, 0x7C: 0x7C, 0x7D: 0x7D, 0x7E: 0x7E, 0x7F: 0x7F, 0x80: 0x80,
				0xA0: 0xF8F0, 0xA1: 0xFF61, 0xA2: 0xFF62, 0xA3: 0xFF63, 0xA4: 0xFF64, 0xA5: 0xFF65, 0xA6: 0xFF66, 0xA7: 0xFF67,
				0xA8: 0xFF68, 0xA9: 0xFF69, 0xAA: 0xFF6A, 0xAB: 0xFF6B, 0xAC: 0xFF6C, 0xAD: 0xFF6D, 0xAE: 0xFF6E, 0xAF: 0xFF6F,
				0xB0: 0xFF70, 0xB1: 0xFF71, 0xB2: 0xFF72, 0xB3: 0xFF73, 0xB4: 0xFF74, 0xB5: 0xFF75, 0xB6: 0xFF76, 0xB7: 0xFF77,
				0xB8: 0xFF78, 0xB9: 0xFF79, 0xBA: 0xFF7A, 0xBB: 0xFF7B, 0xBC: 0xFF7C, 0xBD: 0xFF7D, 0xBE: 0xFF7E, 0xBF: 0xFF7F,
				0xC0: 0xFF80, 0xC1: 0xFF81, 0xC2: 0xFF82, 0xC3: 0xFF83, 0xC4: 0xFF84, 0xC5: 0xFF85, 0xC6: 0xFF86, 0xC7: 0xFF87,
				0xC8: 0xFF88, 0xC9: 0xFF89, 0xCA: 0xFF8A, 0xCB: 0xFF8B, 0xCC: 0xFF8C, 0xCD: 0xFF8D, 0xCE: 0xFF8E, 0xCF: 0xFF8F,
				0xD0: 0xFF90, 0xD1: 0xFF91, 0xD2: 0xFF92, 0xD3: 0xFF93, 0xD4: 0xFF94, 0xD5: 0xFF95, 0xD6: 0xFF96, 0xD7: 0xFF97,
				0xD8: 0xFF98, 0xD9: 0xFF99, 0xDA: 0xFF9A, 0xDB: 0xFF9B, 0xDC: 0xFF9C, 0xDD: 0xFF9D, 0xDE: 0xFF9E, 0xDF: 0xFF9F,
				0xFD: 0xF8F1, 0xFE: 0xF8F2, 0xFF: 0xF8F3,
				// 以下、数字記号部分の変換マップ
				0x8140: 0x3000, 0x8141: 0x3001, 0x8142: 0x3002, 0x8143: 0x002C, 0x8144: 0x002E, 0x8145: 0x30FB, 0x8146: 0x003A, 0x8147: 0x003B,
				0x8148: 0x003F, 0x8149: 0x0021, 0x814A: 0x309B, 0x814B: 0x309C, 0x814C: 0x00B4, 0x814D: 0x0060, 0x814E: 0x00A8, 0x814F: 0x005E,
				0x8150: 0x203E, 0x8151: 0x005F, 0x8152: 0x30FD, 0x8153: 0x30FE, 0x8154: 0x309D, 0x8155: 0x309E, 0x8156: 0x3003, 0x8157: 0x4EDD,
				0x8158: 0x3005, 0x8159: 0x3006, 0x815A: 0x3007, 0x815B: 0x30FC, 0x815C: 0x2014, 0x815D: 0x2010, 0x815E: 0x002F, 0x815F: 0x005C,
				0x8160: 0x301C, 0x8161: 0x2016, 0x8162: 0x007C, 0x8163: 0x2026, 0x8164: 0x2025, 0x8165: 0x2018, 0x8166: 0x2019, 0x8167: 0x201C,
				0x8168: 0x201D, 0x8169: 0x0028, 0x816A: 0x0029, 0x816B: 0x3014, 0x816C: 0x3015, 0x816D: 0x005B, 0x816E: 0x005D, 0x816F: 0x007B,
				0x8170: 0x007D, 0x8171: 0x3008, 0x8172: 0x3009, 0x8173: 0x300A, 0x8174: 0x300B, 0x8175: 0x300C, 0x8176: 0x300D, 0x8177: 0x300E,
				0x8178: 0x300F, 0x8179: 0x3010, 0x817A: 0x3011, 0x817B: 0x002B, 0x817C: 0x2212, 0x817D: 0x00B1, 0x817E: 0x00D7, 0x8180: 0x00F7,
				0x8181: 0x003D, 0x8182: 0x2260, 0x8183: 0x003C, 0x8184: 0x003E, 0x8185: 0x2266, 0x8186: 0x2267, 0x8187: 0x221E, 0x8188: 0x2234,
				0x8189: 0x2642, 0x818A: 0x2640, 0x818B: 0x00B0, 0x818C: 0x2032, 0x818D: 0x2033, 0x818E: 0x2103, 0x818F: 0x00A5, 0x8190: 0x0024,
				0x8191: 0x00A2, 0x8192: 0x00A3, 0x8193: 0x0025, 0x8194: 0x0023, 0x8195: 0x0026, 0x8196: 0x002A, 0x8197: 0x0040, 0x8198: 0x00A7,
				0x8199: 0x2606, 0x819A: 0x2605, 0x819B: 0x25CB, 0x819C: 0x25CF, 0x819D: 0x25CE, 0x819E: 0x25C7, 0x819F: 0x25C6, 0x81A0: 0x25A1,
				0x81A1: 0x25A0, 0x81A2: 0x25B3, 0x81A3: 0x25B2, 0x81A4: 0x25BD, 0x81A5: 0x25BC, 0x81A6: 0x203B, 0x81A7: 0x3012, 0x81A8: 0x2192,
				0x81A9: 0x2190, 0x81AA: 0x2191, 0x81AB: 0x2193, 0x81AC: 0x3013, 0x81AD: 0x0027, 0x81AE: 0x0022, 0x81AF: 0x002D, 0x81B0: 0x007E,
				0x81B1: 0x3033, 0x81B2: 0x3034, 0x81B3: 0x3035, 0x81B4: 0x303B, 0x81B5: 0x303C, 0x81B6: 0x30FF, 0x81B7: 0x309F, 0x81B8: 0x2208,
				0x81B9: 0x220B, 0x81BA: 0x2286, 0x81BB: 0x2287, 0x81BC: 0x2282, 0x81BD: 0x2283, 0x81BE: 0x222A, 0x81BF: 0x2229, 0x81C0: 0x2284,
				0x81C1: 0x2285, 0x81C2: 0x228A, 0x81C3: 0x228B, 0x81C4: 0x2209, 0x81C5: 0x2205, 0x81C6: 0x2305, 0x81C7: 0x2306, 0x81C8: 0x2227,
				0x81C9: 0x2228, 0x81CA: 0x00AC, 0x81CB: 0x21D2, 0x81CC: 0x21D4, 0x81CD: 0x2200, 0x81CE: 0x2203, 0x81CF: 0x2295, 0x81D0: 0x2296,
				0x81D1: 0x2297, 0x81D2: 0x2225, 0x81D3: 0x2226, 0x81D4: 0xFF5F, 0x81D5: 0xFF60, 0x81D6: 0x3018, 0x81D7: 0x3019, 0x81D8: 0x3016,
				0x81D9: 0x3017, 0x81DA: 0x2220, 0x81DB: 0x22A5, 0x81DC: 0x2312, 0x81DD: 0x2202, 0x81DE: 0x2207, 0x81DF: 0x2261, 0x81E0: 0x2252,
				0x81E1: 0x226A, 0x81E2: 0x226B, 0x81E3: 0x221A, 0x81E4: 0x223D, 0x81E5: 0x221D, 0x81E6: 0x2235, 0x81E7: 0x222B, 0x81E8: 0x222C,
				0x81E9: 0x2262, 0x81EA: 0x2243, 0x81EB: 0x2245, 0x81EC: 0x2248, 0x81ED: 0x2276, 0x81EE: 0x2277, 0x81EF: 0x2194, 0x81F0: 0x212B,
				0x81F1: 0x2030, 0x81F2: 0x266F, 0x81F3: 0x266D, 0x81F4: 0x266A, 0x81F5: 0x2020, 0x81F6: 0x2021, 0x81F7: 0x00B6, 0x81F8: 0x266E,
				0x81F9: 0x266B, 0x81FA: 0x266C, 0x81FB: 0x2669, 0x81FC: 0x25EF, 0x8240: 0x25B7, 0x8241: 0x25B6, 0x8242: 0x25C1, 0x8243: 0x25C0,
				0x8244: 0x2197, 0x8245: 0x2198, 0x8246: 0x2196, 0x8247: 0x2199, 0x8248: 0x21C4, 0x8249: 0x21E8, 0x824A: 0x21E6, 0x824B: 0x21E7,
				0x824C: 0x21E9, 0x824D: 0x2934, 0x824E: 0x2935, 0x824F: 0x0030, 0x8250: 0x0031, 0x8251: 0x0032, 0x8252: 0x0033, 0x8253: 0x0034,
				0x8254: 0x0035, 0x8255: 0x0036, 0x8256: 0x0037, 0x8257: 0x0038, 0x8258: 0x0039, 0x8259: 0x29BF, 0x825A: 0x25C9, 0x825B: 0x303D,
				0x825C: 0xFE46, 0x825D: 0xFE45, 0x825E: 0x25E6, 0x825F: 0x2022, 0x8260: 0x0041, 0x8261: 0x0042, 0x8262: 0x0043, 0x8263: 0x0044,
				0x8264: 0x0045, 0x8265: 0x0046, 0x8266: 0x0047, 0x8267: 0x0048, 0x8268: 0x0049, 0x8269: 0x004A, 0x826A: 0x004B, 0x826B: 0x004C,
				0x826C: 0x004D, 0x826D: 0x004E, 0x826E: 0x004F, 0x826F: 0x0050, 0x8270: 0x0051, 0x8271: 0x0052, 0x8272: 0x0053, 0x8273: 0x0054,
				0x8274: 0x0055, 0x8275: 0x0056, 0x8276: 0x0057, 0x8277: 0x0058, 0x8278: 0x0059, 0x8279: 0x005A, 0x827A: 0x2213, 0x827B: 0x2135,
				0x827C: 0x210F, 0x827D: 0x33CB, 0x827E: 0x2113, 0x8280: 0x2127, 0x8281: 0x0061, 0x8282: 0x0062, 0x8283: 0x0063, 0x8284: 0x0064,
				0x8285: 0x0065, 0x8286: 0x0066, 0x8287: 0x0067, 0x8288: 0x0068, 0x8289: 0x0069, 0x828A: 0x006A, 0x828B: 0x006B, 0x828C: 0x006C,
				0x828D: 0x006D, 0x828E: 0x006E, 0x828F: 0x006F, 0x8290: 0x0070, 0x8291: 0x0071, 0x8292: 0x0072, 0x8293: 0x0073, 0x8294: 0x0074,
				0x8295: 0x0075, 0x8296: 0x0076, 0x8297: 0x0077, 0x8298: 0x0078, 0x8299: 0x0079, 0x829A: 0x007A, 0x829B: 0x30A0, 0x829C: 0x2013,
				0x829D: 0x29FA, 0x829E: 0x29FB, 0x829F: 0x3041, 0x82A0: 0x3042, 0x82A1: 0x3043, 0x82A2: 0x3044, 0x82A3: 0x3045, 0x82A4: 0x3046,
				0x82A5: 0x3047, 0x82A6: 0x3048, 0x82A7: 0x3049, 0x82A8: 0x304A, 0x82A9: 0x304B, 0x82AA: 0x304C, 0x82AB: 0x304D, 0x82AC: 0x304E,
				0x82AD: 0x304F, 0x82AE: 0x3050, 0x82AF: 0x3051, 0x82B0: 0x3052, 0x82B1: 0x3053, 0x82B2: 0x3054, 0x82B3: 0x3055, 0x82B4: 0x3056,
				0x82B5: 0x3057, 0x82B6: 0x3058, 0x82B7: 0x3059, 0x82B8: 0x305A, 0x82B9: 0x305B, 0x82BA: 0x305C, 0x82BB: 0x305D, 0x82BC: 0x305E,
				0x82BD: 0x305F, 0x82BE: 0x3060, 0x82BF: 0x3061, 0x82C0: 0x3062, 0x82C1: 0x3063, 0x82C2: 0x3064, 0x82C3: 0x3065, 0x82C4: 0x3066,
				0x82C5: 0x3067, 0x82C6: 0x3068, 0x82C7: 0x3069, 0x82C8: 0x306A, 0x82C9: 0x306B, 0x82CA: 0x306C, 0x82CB: 0x306D, 0x82CC: 0x306E,
				0x82CD: 0x306F, 0x82CE: 0x3070, 0x82CF: 0x3071, 0x82D0: 0x3072, 0x82D1: 0x3073, 0x82D2: 0x3074, 0x82D3: 0x3075, 0x82D4: 0x3076,
				0x82D5: 0x3077, 0x82D6: 0x3078, 0x82D7: 0x3079, 0x82D8: 0x307A, 0x82D9: 0x307B, 0x82DA: 0x307C, 0x82DB: 0x307D, 0x82DC: 0x307E,
				0x82DD: 0x307F, 0x82DE: 0x3080, 0x82DF: 0x3081, 0x82E0: 0x3082, 0x82E1: 0x3083, 0x82E2: 0x3084, 0x82E3: 0x3085, 0x82E4: 0x3086,
				0x82E5: 0x3087, 0x82E6: 0x3088, 0x82E7: 0x3089, 0x82E8: 0x308A, 0x82E9: 0x308B, 0x82EA: 0x308C, 0x82EB: 0x308D, 0x82EC: 0x308E,
				0x82ED: 0x308F, 0x82EE: 0x3090, 0x82EF: 0x3091, 0x82F0: 0x3092, 0x82F1: 0x3093, 0x82F2: 0x3094, 0x82F3: 0x3095, 0x82F4: 0x3096,
				0x82F5: [0x304B, 0x309A], 0x82F6: [0x304D, 0x309A], 0x82F7: [0x304F, 0x309A], 0x82F8: [0x3051, 0x309A], 0x82F9: [0x3053, 0x309A], 0x8340: 0x30A1, 0x8341: 0x30A2, 0x8342: 0x30A3,
				0x8343: 0x30A4, 0x8344: 0x30A5, 0x8345: 0x30A6, 0x8346: 0x30A7, 0x8347: 0x30A8, 0x8348: 0x30A9, 0x8349: 0x30AA, 0x834A: 0x30AB,
				0x834B: 0x30AC, 0x834C: 0x30AD, 0x834D: 0x30AE, 0x834E: 0x30AF, 0x834F: 0x30B0, 0x8350: 0x30B1, 0x8351: 0x30B2, 0x8352: 0x30B3,
				0x8353: 0x30B4, 0x8354: 0x30B5, 0x8355: 0x30B6, 0x8356: 0x30B7, 0x8357: 0x30B8, 0x8358: 0x30B9, 0x8359: 0x30BA, 0x835A: 0x30BB,
				0x835B: 0x30BC, 0x835C: 0x30BD, 0x835D: 0x30BE, 0x835E: 0x30BF, 0x835F: 0x30C0, 0x8360: 0x30C1, 0x8361: 0x30C2, 0x8362: 0x30C3,
				0x8363: 0x30C4, 0x8364: 0x30C5, 0x8365: 0x30C6, 0x8366: 0x30C7, 0x8367: 0x30C8, 0x8368: 0x30C9, 0x8369: 0x30CA, 0x836A: 0x30CB,
				0x836B: 0x30CC, 0x836C: 0x30CD, 0x836D: 0x30CE, 0x836E: 0x30CF, 0x836F: 0x30D0, 0x8370: 0x30D1, 0x8371: 0x30D2, 0x8372: 0x30D3,
				0x8373: 0x30D4, 0x8374: 0x30D5, 0x8375: 0x30D6, 0x8376: 0x30D7, 0x8377: 0x30D8, 0x8378: 0x30D9, 0x8379: 0x30DA, 0x837A: 0x30DB,
				0x837B: 0x30DC, 0x837C: 0x30DD, 0x837D: 0x30DE, 0x837E: 0x30DF, 0x8380: 0x30E0, 0x8381: 0x30E1, 0x8382: 0x30E2, 0x8383: 0x30E3,
				0x8384: 0x30E4, 0x8385: 0x30E5, 0x8386: 0x30E6, 0x8387: 0x30E7, 0x8388: 0x30E8, 0x8389: 0x30E9, 0x838A: 0x30EA, 0x838B: 0x30EB,
				0x838C: 0x30EC, 0x838D: 0x30ED, 0x838E: 0x30EE, 0x838F: 0x30EF, 0x8390: 0x30F0, 0x8391: 0x30F1, 0x8392: 0x30F2, 0x8393: 0x30F3,
				0x8394: 0x30F4, 0x8395: 0x30F5, 0x8396: 0x30F6, 0x8397: [0x30AB, 0x309A], 0x8398: [0x30AD, 0x309A], 0x8399: [0x30AF, 0x309A], 0x839A: [0x30B1, 0x309A], 0x839B: [0x30B3, 0x309A],
				0x839C: [0x30BB, 0x309A], 0x839D: [0x30C4, 0x309A], 0x839E: [0x30C8, 0x309A], 0x839F: 0x0391, 0x83A0: 0x0392, 0x83A1: 0x0393, 0x83A2: 0x0394, 0x83A3: 0x0395,
				0x83A4: 0x0396, 0x83A5: 0x0397, 0x83A6: 0x0398, 0x83A7: 0x0399, 0x83A8: 0x039A, 0x83A9: 0x039B, 0x83AA: 0x039C, 0x83AB: 0x039D,
				0x83AC: 0x039E, 0x83AD: 0x039F, 0x83AE: 0x03A0, 0x83AF: 0x03A1, 0x83B0: 0x03A3, 0x83B1: 0x03A4, 0x83B2: 0x03A5, 0x83B3: 0x03A6,
				0x83B4: 0x03A7, 0x83B5: 0x03A8, 0x83B6: 0x03A9, 0x83B7: 0x2664, 0x83B8: 0x2660, 0x83B9: 0x2662, 0x83BA: 0x2666, 0x83BB: 0x2661,
				0x83BC: 0x2665, 0x83BD: 0x2667, 0x83BE: 0x2663, 0x83BF: 0x03B1, 0x83C0: 0x03B2, 0x83C1: 0x03B3, 0x83C2: 0x03B4, 0x83C3: 0x03B5,
				0x83C4: 0x03B6, 0x83C5: 0x03B7, 0x83C6: 0x03B8, 0x83C7: 0x03B9, 0x83C8: 0x03BA, 0x83C9: 0x03BB, 0x83CA: 0x03BC, 0x83CB: 0x03BD,
				0x83CC: 0x03BE, 0x83CD: 0x03BF, 0x83CE: 0x03C0, 0x83CF: 0x03C1, 0x83D0: 0x03C3, 0x83D1: 0x03C4, 0x83D2: 0x03C5, 0x83D3: 0x03C6,
				0x83D4: 0x03C7, 0x83D5: 0x03C8, 0x83D6: 0x03C9, 0x83D7: 0x03C2, 0x83D8: 0x24F5, 0x83D9: 0x24F6, 0x83DA: 0x24F7, 0x83DB: 0x24F8,
				0x83DC: 0x24F9, 0x83DD: 0x24FA, 0x83DE: 0x24FB, 0x83DF: 0x24FC, 0x83E0: 0x24FD, 0x83E1: 0x24FE, 0x83E2: 0x2616, 0x83E3: 0x2617,
				0x83E4: 0x3020, 0x83E5: 0x260E, 0x83E6: 0x2600, 0x83E7: 0x2601, 0x83E8: 0x2602, 0x83E9: 0x2603, 0x83EA: 0x2668, 0x83EB: 0x25B1,
				0x83EC: 0x31F0, 0x83ED: 0x31F1, 0x83EE: 0x31F2, 0x83EF: 0x31F3, 0x83F0: 0x31F4, 0x83F1: 0x31F5, 0x83F2: 0x31F6, 0x83F3: 0x31F7,
				0x83F4: 0x31F8, 0x83F5: 0x31F9, 0x83F6: [0x31F7, 0x309A], 0x83F7: 0x31FA, 0x83F8: 0x31FB, 0x83F9: 0x31FC, 0x83FA: 0x31FD, 0x83FB: 0x31FE,
				0x83FC: 0x31FF, 0x8440: 0x0410, 0x8441: 0x0411, 0x8442: 0x0412, 0x8443: 0x0413, 0x8444: 0x0414, 0x8445: 0x0415, 0x8446: 0x0401,
				0x8447: 0x0416, 0x8448: 0x0417, 0x8449: 0x0418, 0x844A: 0x0419, 0x844B: 0x041A, 0x844C: 0x041B, 0x844D: 0x041C, 0x844E: 0x041D,
				0x844F: 0x041E, 0x8450: 0x041F, 0x8451: 0x0420, 0x8452: 0x0421, 0x8453: 0x0422, 0x8454: 0x0423, 0x8455: 0x0424, 0x8456: 0x0425,
				0x8457: 0x0426, 0x8458: 0x0427, 0x8459: 0x0428, 0x845A: 0x0429, 0x845B: 0x042A, 0x845C: 0x042B, 0x845D: 0x042C, 0x845E: 0x042D,
				0x845F: 0x042E, 0x8460: 0x042F, 0x8461: 0x23BE, 0x8462: 0x23BF, 0x8463: 0x23C0, 0x8464: 0x23C1, 0x8465: 0x23C2, 0x8466: 0x23C3,
				0x8467: 0x23C4, 0x8468: 0x23C5, 0x8469: 0x23C6, 0x846A: 0x23C7, 0x846B: 0x23C8, 0x846C: 0x23C9, 0x846D: 0x23CA, 0x846E: 0x23CB,
				0x846F: 0x23CC, 0x8470: 0x0430, 0x8471: 0x0431, 0x8472: 0x0432, 0x8473: 0x0433, 0x8474: 0x0434, 0x8475: 0x0435, 0x8476: 0x0451,
				0x8477: 0x0436, 0x8478: 0x0437, 0x8479: 0x0438, 0x847A: 0x0439, 0x847B: 0x043A, 0x847C: 0x043B, 0x847D: 0x043C, 0x847E: 0x043D,
				0x8480: 0x043E, 0x8481: 0x043F, 0x8482: 0x0440, 0x8483: 0x0441, 0x8484: 0x0442, 0x8485: 0x0443, 0x8486: 0x0444, 0x8487: 0x0445,
				0x8488: 0x0446, 0x8489: 0x0447, 0x848A: 0x0448, 0x848B: 0x0449, 0x848C: 0x044A, 0x848D: 0x044B, 0x848E: 0x044C, 0x848F: 0x044D,
				0x8490: 0x044E, 0x8491: 0x044F, 0x8492: 0x30F7, 0x8493: 0x30F8, 0x8494: 0x30F9, 0x8495: 0x30FA, 0x8496: 0x22DA, 0x8497: 0x22DB,
				0x8498: 0x2153, 0x8499: 0x2154, 0x849A: 0x2155, 0x849B: 0x2713, 0x849C: 0x2318, 0x849D: 0x2423, 0x849E: 0x23CE, 0x849F: 0x2500,
				0x84A0: 0x2502, 0x84A1: 0x250C, 0x84A2: 0x2510, 0x84A3: 0x2518, 0x84A4: 0x2514, 0x84A5: 0x251C, 0x84A6: 0x252C, 0x84A7: 0x2524,
				0x84A8: 0x2534, 0x84A9: 0x253C, 0x84AA: 0x2501, 0x84AB: 0x2503, 0x84AC: 0x250F, 0x84AD: 0x2513, 0x84AE: 0x251B, 0x84AF: 0x2517,
				0x84B0: 0x2523, 0x84B1: 0x2533, 0x84B2: 0x252B, 0x84B3: 0x253B, 0x84B4: 0x254B, 0x84B5: 0x2520, 0x84B6: 0x252F, 0x84B7: 0x2528,
				0x84B8: 0x2537, 0x84B9: 0x253F, 0x84BA: 0x251D, 0x84BB: 0x2530, 0x84BC: 0x2525, 0x84BD: 0x2538, 0x84BE: 0x2542, 0x84BF: 0x3251,
				0x84C0: 0x3252, 0x84C1: 0x3253, 0x84C2: 0x3254, 0x84C3: 0x3255, 0x84C4: 0x3256, 0x84C5: 0x3257, 0x84C6: 0x3258, 0x84C7: 0x3259,
				0x84C8: 0x325A, 0x84C9: 0x325B, 0x84CA: 0x325C, 0x84CB: 0x325D, 0x84CC: 0x325E, 0x84CD: 0x325F, 0x84CE: 0x32B1, 0x84CF: 0x32B2,
				0x84D0: 0x32B3, 0x84D1: 0x32B4, 0x84D2: 0x32B5, 0x84D3: 0x32B6, 0x84D4: 0x32B7, 0x84D5: 0x32B8, 0x84D6: 0x32B9, 0x84D7: 0x32BA,
				0x84D8: 0x32BB, 0x84D9: 0x32BC, 0x84DA: 0x32BD, 0x84DB: 0x32BE, 0x84DC: 0x32BF, 0x84E5: 0x25D0, 0x84E6: 0x25D1, 0x84E7: 0x25D2,
				0x84E8: 0x25D3, 0x84E9: 0x203C, 0x84EA: 0x2047, 0x84EB: 0x2048, 0x84EC: 0x2049, 0x84ED: 0x01CD, 0x84EE: 0x01CE, 0x84EF: 0x01D0,
				0x84F0: 0x1E3E, 0x84F1: 0x1E3F, 0x84F2: 0x01F8, 0x84F3: 0x01F9, 0x84F4: 0x01D1, 0x84F5: 0x01D2, 0x84F6: 0x01D4, 0x84F7: 0x01D6,
				0x84F8: 0x01D8, 0x84F9: 0x01DA, 0x84FA: 0x01DC, 0x8540: 0x20AC, 0x8541: 0x00A0, 0x8542: 0x00A1, 0x8543: 0x00A4, 0x8544: 0x00A6,
				0x8545: 0x00A9, 0x8546: 0x00AA, 0x8547: 0x00AB, 0x8548: 0x00AD, 0x8549: 0x00AE, 0x854A: 0x00AF, 0x854B: 0x00B2, 0x854C: 0x00B3,
				0x854D: 0x00B7, 0x854E: 0x00B8, 0x854F: 0x00B9, 0x8550: 0x00BA, 0x8551: 0x00BB, 0x8552: 0x00BC, 0x8553: 0x00BD, 0x8554: 0x00BE,
				0x8555: 0x00BF, 0x8556: 0x00C0, 0x8557: 0x00C1, 0x8558: 0x00C2, 0x8559: 0x00C3, 0x855A: 0x00C4, 0x855B: 0x00C5, 0x855C: 0x00C6,
				0x855D: 0x00C7, 0x855E: 0x00C8, 0x855F: 0x00C9, 0x8560: 0x00CA, 0x8561: 0x00CB, 0x8562: 0x00CC, 0x8563: 0x00CD, 0x8564: 0x00CE,
				0x8565: 0x00CF, 0x8566: 0x00D0, 0x8567: 0x00D1, 0x8568: 0x00D2, 0x8569: 0x00D3, 0x856A: 0x00D4, 0x856B: 0x00D5, 0x856C: 0x00D6,
				0x856D: 0x00D8, 0x856E: 0x00D9, 0x856F: 0x00DA, 0x8570: 0x00DB, 0x8571: 0x00DC, 0x8572: 0x00DD, 0x8573: 0x00DE, 0x8574: 0x00DF,
				0x8575: 0x00E0, 0x8576: 0x00E1, 0x8577: 0x00E2, 0x8578: 0x00E3, 0x8579: 0x00E4, 0x857A: 0x00E5, 0x857B: 0x00E6, 0x857C: 0x00E7,
				0x857D: 0x00E8, 0x857E: 0x00E9, 0x8580: 0x00EA, 0x8581: 0x00EB, 0x8582: 0x00EC, 0x8583: 0x00ED, 0x8584: 0x00EE, 0x8585: 0x00EF,
				0x8586: 0x00F0, 0x8587: 0x00F1, 0x8588: 0x00F2, 0x8589: 0x00F3, 0x858A: 0x00F4, 0x858B: 0x00F5, 0x858C: 0x00F6, 0x858D: 0x00F8,
				0x858E: 0x00F9, 0x858F: 0x00FA, 0x8590: 0x00FB, 0x8591: 0x00FC, 0x8592: 0x00FD, 0x8593: 0x00FE, 0x8594: 0x00FF, 0x8595: 0x0100,
				0x8596: 0x012A, 0x8597: 0x016A, 0x8598: 0x0112, 0x8599: 0x014C, 0x859A: 0x0101, 0x859B: 0x012B, 0x859C: 0x016B, 0x859D: 0x0113,
				0x859E: 0x014D, 0x859F: 0x0104, 0x85A0: 0x02D8, 0x85A1: 0x0141, 0x85A2: 0x013D, 0x85A3: 0x015A, 0x85A4: 0x0160, 0x85A5: 0x015E,
				0x85A6: 0x0164, 0x85A7: 0x0179, 0x85A8: 0x017D, 0x85A9: 0x017B, 0x85AA: 0x0105, 0x85AB: 0x02DB, 0x85AC: 0x0142, 0x85AD: 0x013E,
				0x85AE: 0x015B, 0x85AF: 0x02C7, 0x85B0: 0x0161, 0x85B1: 0x015F, 0x85B2: 0x0165, 0x85B3: 0x017A, 0x85B4: 0x02DD, 0x85B5: 0x017E,
				0x85B6: 0x017C, 0x85B7: 0x0154, 0x85B8: 0x0102, 0x85B9: 0x0139, 0x85BA: 0x0106, 0x85BB: 0x010C, 0x85BC: 0x0118, 0x85BD: 0x011A,
				0x85BE: 0x010E, 0x85BF: 0x0143, 0x85C0: 0x0147, 0x85C1: 0x0150, 0x85C2: 0x0158, 0x85C3: 0x016E, 0x85C4: 0x0170, 0x85C5: 0x0162,
				0x85C6: 0x0155, 0x85C7: 0x0103, 0x85C8: 0x013A, 0x85C9: 0x0107, 0x85CA: 0x010D, 0x85CB: 0x0119, 0x85CC: 0x011B, 0x85CD: 0x010F,
				0x85CE: 0x0111, 0x85CF: 0x0144, 0x85D0: 0x0148, 0x85D1: 0x0151, 0x85D2: 0x0159, 0x85D3: 0x016F, 0x85D4: 0x0171, 0x85D5: 0x0163,
				0x85D6: 0x02D9, 0x85D7: 0x0108, 0x85D8: 0x011C, 0x85D9: 0x0124, 0x85DA: 0x0134, 0x85DB: 0x015C, 0x85DC: 0x016C, 0x85DD: 0x0109,
				0x85DE: 0x011D, 0x85DF: 0x0125, 0x85E0: 0x0135, 0x85E1: 0x015D, 0x85E2: 0x016D, 0x85E3: 0x0271, 0x85E4: 0x028B, 0x85E5: 0x027E,
				0x85E6: 0x0283, 0x85E7: 0x0292, 0x85E8: 0x026C, 0x85E9: 0x026E, 0x85EA: 0x0279, 0x85EB: 0x0288, 0x85EC: 0x0256, 0x85ED: 0x0273,
				0x85EE: 0x027D, 0x85EF: 0x0282, 0x85F0: 0x0290, 0x85F1: 0x027B, 0x85F2: 0x026D, 0x85F3: 0x025F, 0x85F4: 0x0272, 0x85F5: 0x029D,
				0x85F6: 0x028E, 0x85F7: 0x0261, 0x85F8: 0x014B, 0x85F9: 0x0270, 0x85FA: 0x0281, 0x85FB: 0x0127, 0x85FC: 0x0295, 0x8640: 0x0294,
				0x8641: 0x0266, 0x8642: 0x0298, 0x8643: 0x01C2, 0x8644: 0x0253, 0x8645: 0x0257, 0x8646: 0x0284, 0x8647: 0x0260, 0x8648: 0x0193,
				0x8649: 0x0153, 0x864A: 0x0152, 0x864B: 0x0268, 0x864C: 0x0289, 0x864D: 0x0258, 0x864E: 0x0275, 0x864F: 0x0259, 0x8650: 0x025C,
				0x8651: 0x025E, 0x8652: 0x0250, 0x8653: 0x026F, 0x8654: 0x028A, 0x8655: 0x0264, 0x8656: 0x028C, 0x8657: 0x0254, 0x8658: 0x0251,
				0x8659: 0x0252, 0x865A: 0x028D, 0x865B: 0x0265, 0x865C: 0x02A2, 0x865D: 0x02A1, 0x865E: 0x0255, 0x865F: 0x0291, 0x8660: 0x027A,
				0x8661: 0x0267, 0x8662: 0x025A, 0x8663: [0x00E6, 0x0300], 0x8664: 0x01FD, 0x8665: [0x0251, 0x0300], 0x8666: [0x0251, 0x0301], 0x8667: [0x0254, 0x0300], 0x8668: [0x0254, 0x0301],
				0x8669: [0x028C, 0x0300], 0x866A: [0x028C, 0x0301], 0x866B: [0x0259, 0x0300], 0x866C: [0x0259, 0x0301], 0x866D: [0x025A, 0x0300], 0x866E: [0x025A, 0x0301], 0x866F: [0x025B, 0x0300], 0x8670: [0x025B, 0x0301],
				0x8671: 0x0361, 0x8672: 0x02C8, 0x8673: 0x02CC, 0x8674: 0x02D0, 0x8675: 0x02D1, 0x8676: 0x0306, 0x8677: 0x203F, 0x8678: 0x030B,
				0x8679: 0x0301, 0x867A: 0x0304, 0x867B: 0x0300, 0x867C: 0x030F, 0x867D: 0x030C, 0x867E: 0x0302, 0x8680: 0x02E5, 0x8681: 0x02E6,
				0x8682: 0x02E7, 0x8683: 0x02E8, 0x8684: 0x02E9, 0x8685: [0x02E9, 0x02E5], 0x8686: [0x02E5, 0x02E9], 0x8687: 0x0325, 0x8688: 0x032C, 0x8689: 0x0339,
				0x868A: 0x031C, 0x868B: 0x031F, 0x868C: 0x0320, 0x868D: 0x0308, 0x868E: 0x033D, 0x868F: 0x0329, 0x8690: 0x032F, 0x8691: 0x02DE,
				0x8692: 0x0324, 0x8693: 0x0330, 0x8694: 0x033C, 0x8695: 0x0334, 0x8696: 0x031D, 0x8697: 0x031E, 0x8698: 0x0318, 0x8699: 0x0319,
				0x869A: 0x032A, 0x869B: 0x033A, 0x869C: 0x033B, 0x869D: 0x0303, 0x869E: 0x031A, 0x869F: 0x2776, 0x86A0: 0x2777, 0x86A1: 0x2778,
				0x86A2: 0x2779, 0x86A3: 0x277A, 0x86A4: 0x277B, 0x86A5: 0x277C, 0x86A6: 0x277D, 0x86A7: 0x277E, 0x86A8: 0x277F, 0x86A9: 0x24EB,
				0x86AA: 0x24EC, 0x86AB: 0x24ED, 0x86AC: 0x24EE, 0x86AD: 0x24EF, 0x86AE: 0x24F0, 0x86AF: 0x24F1, 0x86B0: 0x24F2, 0x86B1: 0x24F3,
				0x86B2: 0x24F4, 0x86B3: 0x2170, 0x86B4: 0x2171, 0x86B5: 0x2172, 0x86B6: 0x2173, 0x86B7: 0x2174, 0x86B8: 0x2175, 0x86B9: 0x2176,
				0x86BA: 0x2177, 0x86BB: 0x2178, 0x86BC: 0x2179, 0x86BD: 0x217A, 0x86BE: 0x217B, 0x86BF: 0x24D0, 0x86C0: 0x24D1, 0x86C1: 0x24D2,
				0x86C2: 0x24D3, 0x86C3: 0x24D4, 0x86C4: 0x24D5, 0x86C5: 0x24D6, 0x86C6: 0x24D7, 0x86C7: 0x24D8, 0x86C8: 0x24D9, 0x86C9: 0x24DA,
				0x86CA: 0x24DB, 0x86CB: 0x24DC, 0x86CC: 0x24DD, 0x86CD: 0x24DE, 0x86CE: 0x24DF, 0x86CF: 0x24E0, 0x86D0: 0x24E1, 0x86D1: 0x24E2,
				0x86D2: 0x24E3, 0x86D3: 0x24E4, 0x86D4: 0x24E5, 0x86D5: 0x24E6, 0x86D6: 0x24E7, 0x86D7: 0x24E8, 0x86D8: 0x24E9, 0x86D9: 0x32D0,
				0x86DA: 0x32D1, 0x86DB: 0x32D2, 0x86DC: 0x32D3, 0x86DD: 0x32D4, 0x86DE: 0x32D5, 0x86DF: 0x32D6, 0x86E0: 0x32D7, 0x86E1: 0x32D8,
				0x86E2: 0x32D9, 0x86E3: 0x32DA, 0x86E4: 0x32DB, 0x86E5: 0x32DC, 0x86E6: 0x32DD, 0x86E7: 0x32DE, 0x86E8: 0x32DF, 0x86E9: 0x32E0,
				0x86EA: 0x32E1, 0x86EB: 0x32E2, 0x86EC: 0x32E3, 0x86ED: 0x32FA, 0x86EE: 0x32E9, 0x86EF: 0x32E5, 0x86F0: 0x32ED, 0x86F1: 0x32EC,
				0x86FB: 0x2051, 0x86FC: 0x2042, 0x8740: 0x2460, 0x8741: 0x2461, 0x8742: 0x2462, 0x8743: 0x2463, 0x8744: 0x2464, 0x8745: 0x2465,
				0x8746: 0x2466, 0x8747: 0x2467, 0x8748: 0x2468, 0x8749: 0x2469, 0x874A: 0x246A, 0x874B: 0x246B, 0x874C: 0x246C, 0x874D: 0x246D,
				0x874E: 0x246E, 0x874F: 0x246F, 0x8750: 0x2470, 0x8751: 0x2471, 0x8752: 0x2472, 0x8753: 0x2473, 0x8754: 0x2160, 0x8755: 0x2161,
				0x8756: 0x2162, 0x8757: 0x2163, 0x8758: 0x2164, 0x8759: 0x2165, 0x875A: 0x2166, 0x875B: 0x2167, 0x875C: 0x2168, 0x875D: 0x2169,
				0x875E: 0x216A, 0x875F: 0x3349, 0x8760: 0x3314, 0x8761: 0x3322, 0x8762: 0x334D, 0x8763: 0x3318, 0x8764: 0x3327, 0x8765: 0x3303,
				0x8766: 0x3336, 0x8767: 0x3351, 0x8768: 0x3357, 0x8769: 0x330D, 0x876A: 0x3326, 0x876B: 0x3323, 0x876C: 0x332B, 0x876D: 0x334A,
				0x876E: 0x333B, 0x876F: 0x339C, 0x8770: 0x339D, 0x8771: 0x339E, 0x8772: 0x338E, 0x8773: 0x338F, 0x8774: 0x33C4, 0x8775: 0x33A1,
				0x8776: 0x216B, 0x877E: 0x337B, 0x8780: 0x301D, 0x8781: 0x301F, 0x8782: 0x2116, 0x8783: 0x33CD, 0x8784: 0x2121, 0x8785: 0x32A4,
				0x8786: 0x32A5, 0x8787: 0x32A6, 0x8788: 0x32A7, 0x8789: 0x32A8, 0x878A: 0x3231, 0x878B: 0x3232, 0x878C: 0x3239, 0x878D: 0x337E,
				0x878E: 0x337D, 0x878F: 0x337C, 0x8793: 0x222E, 0x8798: 0x221F, 0x8799: 0x22BF, 0x879D: 0x2756, 0x879E: 0x261E
			};
			/* eslint-enable object-property-newline */
			/* eslint-enable max-len */

			/**
			 * 漢字の2バイト文字(0x879f-0xffff)の変換マップ作成用の文字列
			 *
			 * @type {string}
			 */
			// prettier-ignore
			const map = [
				"俱𠀋㐂丨丯丰亍仡份仿伃伋你佈佉佖佟佪佬佾侊侔侗侮俉俠倁倂倎倘倧倮偀倻偁傔僌僲僐僦僧儆儃儋儞儵兊免兕兗㒵冝凃凊凞凢凮刁㓛刓刕剉剗剡劓勈勉勌勐勖勛勤勰勻匀匇匜卑卡卣卽厓厝厲吒吧呍咜呫呴呿咈咖咡67",
				"咩哆哿唎唫唵啐啞喁喆喎喝喭嗎嘆嘈嘎嘻噉噶噦器噯噱噲嚙嚞嚩嚬嚳囉囊圊𡈽圡圯圳圴坰坷坼垜﨏𡌛垸埇埈埏埤埭埵埶埿堉塚塡塤塀塼墉增墨墩1𡑮壒壎壔壚壠壩夌虁奝奭妋妒妤姃姒姝娓娣婧婭婷婾媄媞媧嫄𡢽嬙嬥剝亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭67",
				"院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円1園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改67",
				"魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫1橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄67",
				"機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救1朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈67",
				"掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨1劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向67",
				"后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降1項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷67",
				"察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止1死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周67",
				"宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳1準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾67",
				"拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨1逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線67",
				"繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻1操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只67",
				"叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄1逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓67",
				"邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬1凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入67",
				"如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅1楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美67",
				"鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷1斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋67",
				"法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆1摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒67",
				"諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲1沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯67",
				"蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕𠮟孁孖孽宓寘寬尒尞尣尫㞍1屢層屮𡚴屺岏岟岣岪岺峋峐峒峴𡸴㟢崍崧﨑嵆嵇嵓嵊嵭嶁嶠嶤嶧嶸巋吞弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲67",
				"僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭1凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨67",
				"咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸1噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩67",
				"奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀1它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏67",
				"廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠1怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛67",
				"戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫1捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼67",
				"曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎1梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣67",
				"檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯1麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌16451",
				"漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝1烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱67",
				"瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿1痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬67",
				"磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰1窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆67",
				"紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷1縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋67",
				"隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤1艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈67",
				"蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬1蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞67",
				"襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧1諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊67",
				"蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜1轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮67",
				"錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙1閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰67",
				"顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃1騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈67",
				"鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯1黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙噓巢帔帘幘幞庾廊廋廹开异弇弝弣弴弶弽彀彅彔彘彤彧彽徉徜徧徯徵德忉忞忡忩怍怔怘怳怵恇悔悝悞惋惔惕惝惸愜愫愰愷慨憍憎憼憹懲戢戾扃扖扚扯抅拄拖拼挊挘挹捃捥捼揥揭揵搐搔搢摹摑摠摭擎撾撿67",
				"擄擊擐擷擻攢攩敏敧斝既昀昉昕昞昺昢昤昫昰昱昳曻晈晌𣇄晙晚晡晥晳晷晸暍暑暠暲暻曆曈㬢曛曨曺朓朗朳杦杇杈杻极枓枘枛枻柹柀柗柼栁桒栝1栬栱桛桲桵梅梣梥梲棈棐棨棭棰棱棼椊楉𣗄椵楂楗楣楤楨榀﨔榥榭槏㮶㯃槢槩槪槵槶樏樕𣜿樻樾橅橐橖橛橫橳𣝣檉檔檝檞檥櫤櫧㰏欄欛欞欬欵歆歖歠步歧歷殂殩殭殺每毖毗毿氅氐氳汙汜沪汴汶沅沆沘沜泻泆泔泠泫泮𣳾洄洎洮洱洹洿浘浥海涂涇涉涔涪涬涿淄淖淚淛淝淼渚渴湄湜湞溫溱滁67",
				"滇滎漐漚漢漪漯漳潑潙潞潡潢潾澈澌澍澔澠澧澶澼濇濊濹濰濵瀅瀆瀨灊灝灞灎灤灵炅炤炫炷烔烘烤焏焫焞焠焮焰煆煇煑煮煒煜煠煨凞熅熇熒燁熺1燄燾爀爕牕牖㸿犍犛犾狀狻𤟱猧猨猪獐獦獼玕玟玠玢玦玫珉珏珖珙珣珩琇琊琚琛琢琦琨琪琫琬琮琯琰瑄瑆瑇瑋瑗瑢瑫瑭璆璇璉璘璜璟璣璐璦璨璩璵璿瓈瓉瓚瓿甁甗甯畯畹疒㽲痎痤瘀瘂瘈瘕瘖瘙瘞瘭瘵癃癋癤癥癭癯癱皁皛皝皞皦皪皶盅盌盎盔盦盱盼眊眙眴眶睆睍睎睜睟睢睺瞀瞔瞪矠砭𥒎67",
				"硃硎硏硑硨确碑碰𥔎碭磤磲礀磷礜礮礱礴社祉祅祆祈祐祖祜祝神祥祹禍禎福禘禱禸秈秊𥝱秔秞秫秭稃穀稹穝穭突窅窠𥧄窳窻竎竫竽笒笭笻筇筎筠1筭筯筲箞節篗篙簁簱簞簠簳簶䉤𥶡籙籭籹粏粔粠粼糕糙糝紇紈紓紝紣紱絁絈絓絜絺綃綋綠綦緂緌緖緣練縨縈縑縕繁繇繒繡纊纍罇署羑羗羿翎翛翟翬翮翺者耔耦耵耷耼胊胗胠胳脘腊腠腧腨腭膻臊臏臗臭䑓䑛艠艴𦫿芎芡芣芤芩芮芷芾芿苆苕苽苾茀茁荢茢茭茺荃荇荑荕荽莆莒莘莧莩莿菀菇菏67",
				"菑菡菪萁萆萊著葈葟葰葳蒅蒞蒯蒴蒺蓀蓂𦹀蔲蔞蔣蔯蕙蕤﨟薭蕺薌薏薢薰藋藎藭蘒藿蘄蘅蘐𧃴蘘蘩蘸虗虛虜虢䖝虬虵蚘蚸蛺蛼蛽蜋蝱螇螈螬螭螵1䗪蟖蟬蠆蠊蠐蠔蠟袘袪裊裎𧚄裵褜褐褘褙褚褧褰褲褹襀覔視觔觥觶訒訕訢訷詇詎詝詡詵詹誧諐諟諴諶諸謁謹譆譔譙譩讝豉豨賓賡賴賸賾贈贒贛趯跎跑跗踠踣踽蹰蹻𨉷軀䡄軺輞輭輶轔𨏍辦辵迤迨迮逈逭逸邈邕邗邙邛邢邳邾郄郅郇郗郝郞郯郴都鄔鄕鄖鄢鄣鄧鄯鄱鄴鄽酈酛醃醞醬醱醼釗釻釤67",
				"釥釭釱鈇鈐鈸鈹鈺鈼鉀鉃鉏鉸銈鋂鋋鋌鋓鋠鋿錄錟錡錥鍈鍉鍊鍤鍥鍪鍰鎛鎣鎺鏆鏞鏟鐄鏽鐳鑊鑣鑫鑱鑲閎閟閦閩閬閶閽闋闐闓䦰闚闞陘隄隆隝隤1隥雒雞難雩雯霳霻靍靎靏靚靮靳鞕鞮鞺韁韉韞韛韴響頊頞頫頰頻顒顓顖顗顙顚類顥顬颺飈飧饘馞騂騃騤騭騮騸驊驎驒骶髁髃髎髖髹鬂鬈鬠䰗鬭魞魹魦魲魵鮄鮊鮏鮞鮧鯁鯎鯥鯸鯽鰀鰣鱁鱏鱐鱓鱣鱥鱷鴝鴞鵃鵇鵒鵣鵰鵼鶊鶖鷀鶬鶼鷗𪆐鷧鸇鸕鹼麞麤麬麯麴麵黃黑鼐鼹齗龐龔龗龢姸屛幷瘦繫67",
				"𠂉丂丏丒丩丫丮乀乇么𠂢乑㐆𠂤乚乩亝㐬㐮亹亻𠆢亼仃仈仐仫仚仱仵伀伖佤伷伾佔佘𠈓佷佸佺佽侂侅侒侚俦侲侾俅俋俏俒㑪俲倀倐倓倜倞倢㑨偂1偆偎偓偗偣偦偪偰傣傈傒傓傕傖傜傪𠌫傱傺傻僄僇僳𠎁僎𠍱僔僙僡僩㒒宖宬㝡寀㝢寎寖㝬㝫寱寽㝵尃尩尰𡱖屟屣屧屨屩屰𡴭𡵅屼𡵸𡵢岈岊㟁𡶡𡶜岠岢岦岧𡶒岭岵𡶷峉𡷠𡸳崆崐崫崝崠崤崦崱崹嵂㟨嵡嵪㟴嵰𡼞㟽嶈㠀嶒嶔嶗嶙嶰嶲嶴𡽶嶹巑巗巘巠𡿺巤巩㠯帀㠶帒帕㡀帟帮帾幉㡜幖㡡幫幬幭67",
				"儈𠏹儗儛𠑊兠𠔉关冃冋㒼冘冣冭㓇冼𠗖𠘨凳凴刂划刖𠝏剕剜剬剷劄劂𠠇劘𠠺劤劦劯劺劻勊㔟勑𠢹勷匊匋匤匵匾卂𠥼𠦝卧卬卺厤厴𠫓厷叀𠬝㕝㕞叕1叚㕣叴叵呕吤吨㕮呃呢呦呬咊咍咕咠咦咭咮咷咺咿哃𠵅哬哯哱哳唀唁唉唼啁㖦啇啊㖨啠啡啤𠷡啽喂喈喑㗅嗒𠺕𠹭喿嗉嗌嗑嗝㗚嗢𠹤嗩嘨𠽟嘇嘐嘰嘷㗴嘽嘿噀噇噞噠噭㘅嚈嚌嚕嚚嚝嚨嚭嚲囅囍囟囨囶囷𡈁圕圣𡉕圩𡉻坅坆坌坍𡉴坨坯坳坴坵坻𡋤𡋗垬垚垝垞垨埗𡋽埌𡌶𡍄埞埦埰㙊埸埻埽堄堞67",
				"堠堧堲堹𡏄塉塌塧墊墋墍墏墐墔墝墪墱𡑭壃壍壢壳壴夅夆夋复夔夤𡗗㚑夽㚙奆㚖𦰩奛奟𡙇奵奶奼妟妮妼姈姍姞姣姤姧姮𡜆𡝂㛏娌娍娗娧娭婕婥婺1媋媜媟媠媢媱媳媵媺媿嫚嫜嫠嫥嫰嫮嫵嬀嬈嬗嬴嬭孌孒孨孯孼孿宁宄𡧃幮𢅻庥庪庬庹庿廆廒廙𢌞廽弈弎弜𢎭弞彇彣彲彾徏徢徤徸忄㣺忇忋忒忓忔忢忮忯忳忼㤗怗怢怤㤚恌恿悊悕您𢛳悰悱悾惈惙惛惮惲惵愐愒愓愙愞愺㥯慁慆慠慼𢡛憒憓憗憘憥憨憭𢢫懕懝懟懵𢦏戕戣戩扆扌扑扒扡扤扻扭扳67",
				"抙抦拕𢪸拽挃挍挐𢭏𢭐挲挵挻挼捁捄捎𢭆捙𢰝𢮦捬掄掙𢰤掔掽揷揔揕揜揠揫揬揲搉搞搥搩搯摚摛摝摳摽撇撑撝撟擋擌擕擗𢷡擤擥擿攄㩮攏攔攖㩳1攞攲敄敔敫敺斁斄斅斊斲斵斸斿旂旉旔㫖旲旹旼昄昈昡昪晅晑晎㫪𣇃晗晛晣𣇵𣆶晪晫晬晭晻暀暐暒暙㬎暭暱暵㬚暿㬜曬㫗朁朅朒𣍲朙𣏓𣏒杌杍杔杝𣏐𣏤𣏕杴杶𣏚枒𣏟荣栐枰枲柃柈柒柙柛柰柷𣑊𣑑𣑋栘栟栭𣑥栳栻栾桄桅桉桌桕桗㭷桫桮桺桼梂梐梖㭭梘梙梚梜梪梫梴梻棻𣓤𣕚﨓棃棅棌棏棖67",
				"棙棤棥棬棷椃椇㮇㮈𣖔椻㮍楆楩楬楲楺楿榒㮤榖榘榦榰榷榺榼槀槑槖𣘹𣙇樰𣘸𣘺槣槮槯槳㯍槴槾樑樚樝𣜜樲樳樴樿橆橉橺橎橒橤𣜌橾檃檋㯰檑檟1檡𣝤檫檽櫆櫔櫐櫜櫝𣟿𣟧櫬櫱櫲櫳櫽𣠤欋欏欐欑𣠽欗㰦欯歊歘歬歵歺殁殛殮𣪘殽殾毇毈毉毚毦毧毮毱氂氊氎氵氶氺𣱿氿汍汛汭沄沉㳃沔沕沗沭泂泐㳒泖泚泜泩泬泭𣴀洀洊洤洦洧汧洯洼浛浞浠浰涀涁涊涍涑涘𣵀渗𣷺𣷹𣷓涫涮涴淂洴淈淎淏淐淟淩淶渶渞渢渧㴑渲渼湈湉湋湌湏湑湓湔湗湣㴞67",
				"溓溧溴溿滃滊滙漵滫滹滻漊漌漘漥漶漼𣽾潒潗潚潠潨澘潽澐澖澾澟澥澯㵤澵濈濉濚濞濩𤂖濼瀀瀇瀊瀣𤄃瀹瀺瀼灃灇灋㶚灔灥灩灬灮灶灾炁炆炕炗1炻𤇆炟炱𤇾烬烊烑烓烜焃焄焆焇焈焌㷀焯焱煐煊煓煞㷔熖熀熛熠熢熮熯熳𤎼燋燓燙燜爇㸅爫爫爴爸爹丬牂牓牗牣𤘩牮牯牸牿犎𤚥犭犮犰犱狁㹠狌㹦㹨狳狺猇猒猘猙㺃猹猬猱猳猽獒㺔獫獬𤢖獮獯獱獷玁玅玊玔玘玜玞玥玨玵玷玹玼玿珅珋珡珧珹琓珺琁琤琱琹瑓瑀瑃瑍瑒瑝瑱璁璅璈𤩍璒璗璙67",
				"璠璡璥璪璫璹璻璺瓖瓘瓞瓯瓫𤭖瓺𤭯甠甤甪㽗𤰖甽甾畀畈畎畐畒畬畲畱畺畽畾疁𤴔疌㽵疢㽷疰疷疿痀痆痏痓痝痟痠痧痬痮痱痹瘃瘘瘇瘏㾮𤸎瘓瘛1瘜𤸷瘥瘨瘼瘳𤹪㿉癁𤺋癉癕㿗癮皕皜皡皠皧皨皯𥁊盉𥁕盨盬𥄢眗眚眭眵𥆩䀹𥇥𥇍睘睠睪𥈞睲睼睽𥉌䁘瞚瞟瞢瞤瞩矞矟矤矦矪矬䂓矰矴矻𥐮砅砆砉砍砙砡砬硇硤硪𥓙碊碔碤碝碞碟碻磈磌磎磕磠磡磦磹磺磻磾𥖧礐礛礰礥礻祊祘祛䄅祧祲禔禕禖禛禡禩禴离秂秇秌种秖䅈𥞩𥞴䅏稊稑稕稛稞䅣稭67",
				"稸穇穌穖穙穜穟穠穧穪穵穸窂窊窐窣窬𥧔䆴窹窼窾䆿竌竑竧竨竴𥫤𥫣笇𥫱笽笧笪笮笯笱䇦䇳筿筁䇮筕筹筤筦筩筳𥮲䈇箐箑箛䈎箯箵箼篅篊𥱋𥱤篔1篖篚篪篰簃簋簎簏簦籅籊籑籗籞籡籩籮籯籰𥸮𥹖𥹥粦𥹢粶粷粿𥻘糄𥻂糈糍𥻨糗𥼣糦糫𥽜糵紃紉䋆紒紞𥿠𥿔紽紾絀絇𦀌𥿻䋖絙絚絪絰䋝絿𦀗綆綈綌綗𦁠綝綧綪綶綷緀緗緙緦緱緹䌂𦃭縉縐縗縝縠縧縬繅繳繵繾纆纇䌫纑纘纚䍃缼缻缾罃罄罏㓁𦉰罒𦊆罡罣罤罭罽罾𦍌羐养𣴎羖羜羭𦐂翃翏翣翥翯67",
				"翲耂耊耈耎耑耖耤耬耰聃聦聱聵聻肙肜肤肧肸𦙾胅胕胘胦𦚰脍胵胻䏮脵脖脞䏰脤脧脬𦜝脽䐈腩䐗膁䐜膄膅䐢膘膲臁臃臖臛𦣝臤𦣪臬𦥑臽臿𦥯舄𦧝1舙舡舢𦨞舲舴舼艆艉艅𦩘艋䑶艏䑺艗𦪌艜艣𦪷艹艹艹䒑艽艿芃芊芓芧芨芲芴芺芼苢苨苷茇茈茌荔茛茝茰茼荄荗䒾荿䓔䒳莍莔莕莛莝菉菐菔菝菥菹萏萑萕𦱳萗萹葊葏葑葒葙葚葜𦳝葥葶葸葼蒁䔍蓜蒗蒦蒾䔈蓎蓏蓓𦹥蓧蓪蓯蓰蓱蓺蓽蔌蔛蔤蔥蔫蔴蕏蕯䔥䕃蔾蕑蕓蕞蕡蕢𦾔蕻蕽蕿薁薆薓薝薟𦿸67",
				"𦿶𦿷薷薼藇藊藘藙藟藡藦藶蘀蘑蘞蘡蘤蘧𧄍蘹蘼𧄹虀蘒虓虖虯虷虺蚇蚉蚍蚑蚜蚝蚨﨡蚱蚳蛁蛃蛑蛕蛗蛣蛦䖸蜅蜇蜎蜐蜓蜙蜟蜡蜣蜱蜺蜾蝀蝃蝑蝘1蝤蝥蝲蝼𧏛𧏚螧螉螋螓螠𧏾䗥螾𧐐蟁蟎蟵蟟𧑉蟣蟥蟦蟪蟫蟭蠁蠃蠋蠓蠨蠮蠲蠼䘏衊衘衟衤𧘕𧘔衩𧘱衯袠袼袽袾裀裒𧚓裑裓裛裰裱䙁褁𧜎褷𧜣襂襅襉𧝒䙥襢覀覉覐覟覰覷觖觘觫䚡觱觳觽觿䚯訑訔𧦅訡訵訾詅詍詘誮誐誷誾諗諼𧪄謊謅謍謜謟謭譃䜌譑譞譶譿讁讋讔讕讜讞谹𧮳谽𧮾𧯇豅豇豏豔67",
				"豗豩豭豳𧲸貓貒貙䝤貛貤賖賕賙𧶠賰賱𧸐贉贎赬趄趕趦𧾷跆跈跙跬踌䟽跽踆𨂊踔踖踡踢踧𨂻䠖踶踹蹋蹔蹢蹬蹭蹯躘躞躮躳躵躶躻𨊂軑軔䡎軹𨋳輀1輈輗輫轀轊轘𨐌辤辴辶辶𨑕迁迆﨤迊迍迓迕迠迱迵迻适逌逷𨕫遃遄遝𨗈𨗉邅邌邐阝邡䢵邰邶郃郈𨛗郜郟𨛺郶郲鄀郫郾郿鄄鄆鄘鄜鄞鄷鄹鄺酆酇酗酙酡酤酴酹醅醎醨醮醳醶釃釄釚𨥉𨥆釬釮鈁鈊鈖鈗𨥫鈳鉂鉇鉊鉎鉑鉖鉙鉠鉡鉥鉧鉨𨦇𨦈鉼鉽鉿銉銍銗銙銟銧銫𨦺𨦻銲銿鋀鋆鋎鋐鋗鋙鋥鋧錑𨨞67",
				"𨨩鋷鋹鋻錂錍錕錝錞錧錩𨩱𨩃鍇鍑鍗鍚鍫鍱鍳鎡𨪙𨫍鎈鎋鎏鎞鏵𨫤𨫝鏱鏁鏇鏜鏢鏧鐉鐏鐖鐗鏻鐲鐴鐻鑅𨯁𨯯鑭鑯镸镹閆閌閍𨴐閫閴𨵱闈𨷻𨸟阬阳1阴𨸶阼陁陡𨺉隂𨻫隚𨼲䧧隩隯隳隺隽䧺𨿸雘雚雝䨄霔霣䨩霶靁靇靕靗靛靪𩊠𩊱鞖鞚鞞鞢鞱鞲鞾韌韑韔韘韙韡韱頄頍頎頔頖䪼𩒐頣頲頳頥顇顦颫颭颰𩗏颷颸颻颼颿飂飇飋飠𩙿飡飣飥飪飰飱飳餈䬻𩛰餖餗𩜙餚餛餜𩝐餱餲餳餺餻餼饀饁饆饍饎饜饟饠馣馦馹馽馿駃駉駔駙駞𩣆駰駹駼騊騑騖騚騠67",
				"騱騶驄驌驘䯂骯䯊骷䯒骹𩩲髆髐髒髕䯨髜髠髥髩鬃鬌鬐鬒鬖鬜鬫鬳鬽䰠魋魣魥魫魬魳魶魷鮦鮬鮱𩷛𩸽鮲鮸鮾鯇鯳鯘鯝鯧鯪鯫鯯鯮𩸕鯺𩺊鯷𩹉鰖鰘1鰙鰚鰝鰢鰧鰩鰪𩻄鰱鰶鰷鱅鱜𩻩鱉鱊𩻛鱔鱘鱛鱝鱟鱩鱪鱫鱭鱮鱰鱲鱵鱺鳦鳲鴋鴂𩿎鴑鴗鴘𪀯䳄𪀚鴲䳑鵂鵊鵟鵢𪃹鵩鵫𪂂鵳鵶鵷鵾鶄鶍鶙鶡鶿鶵鶹鶽鷃鷇鷉鷖鷚鷟鷠鷣鷴䴇鸊鸂鸍鸙鸜鸝鹻𢈘麀麅麛麨𪎌麽𪐷黟黧黮黿鼂䵷鼃鼗鼙鼯鼷鼺鼽齁齅齆齓齕齘𪗱齝𪘂齩𪘚齭齰齵𪚲"
			].join("");

			/*
			上の変換マップ作成用の文字列は数値が入った変換マップのコードから作成している
			let output = "";
			let nul_count = 0;
			for(i = 0x879f; i <= 0xffff; i++) {
				if(map[i]) {
					if(nul_count !== 0){
						output += nul_count;
						nul_count = 0;
					}
					output += MojiJS.fromCodePoint(map[i]);
				}
				else {
					nul_count++;
				}
			}
			*/

			/**
			 * UTF16へ変換
			 */
			const utf32_array = Unicode.toUTF32Array(map);

			// マップ展開
			let is_num = false;
			let num_array = [];
			let key = 0x879F;
			for (let i = 0; i < utf32_array.length; i++) {
				const x = utf32_array[i];
				if (0x30 <= x && x <= 0x39) {
					if (!is_num) {
						is_num = true;
						num_array = [];
					}
					num_array.push(x);
				} else {
					if (is_num) {
						key += parseFloat(Unicode.fromUTF16Array(num_array));
						is_num = false;
					}
					sjis2004_to_unicode_map[key] = x;
					key++;
				}
			}

			return sjis2004_to_unicode_map;
		};

		/* eslint-disable max-len */
		/**
		 * 変換マップ
		 * - 2文字に変換される場合もあるので注意
		 *
		 * @returns {Object<number, number|number[]>}
		 */
		const sjis2004_to_unicode_map = getSJIS2004ToUnicodeMap();

		/* eslint-disable object-property-newline */
		/**
		 * 全角用の文字がある場合は、全角へ変換できるようにする。
		 * 以下のリストは、上記のマッピングデータのUnicodeのコードポイントが0x100未満のデータを抜き出して、
		 * 全角になっていない部分をCP932を参考に直したものです。
		 *
		 * メモ:今回は使っていませんが、以下の文献も参考になるかもしれません。
		 * ftp://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0208.TXT
		 * @type {Record<number, number>}
		 */
		// prettier-ignore
		const sjis2004_to_unicode_map_2 = {
			0x8143: 0xFF0C, 0x8144: 0xFF0E, 0x8146: 0xFF1A, 0x8147: 0xFF1B, 0x8148: 0xFF1F, 0x8149: 0xFF01, 0x814C: 0x00B4, 0x814D: 0xFF40,
			0x814E: 0x00A8, 0x814F: 0xFF3E, 0x8151: 0xFF3F, 0x815E: 0xFF0F, 0x815F: 0xFF3C, 0x8162: 0xFF5C, 0x8169: 0xFF08, 0x816A: 0xFF09,
			0x816D: 0xFF3B, 0x816E: 0xFF3D, 0x816F: 0xFF5B, 0x8170: 0xFF5D, 0x817B: 0xFF0B, 0x817D: 0x00B1, 0x817E: 0x00D7, 0x8180: 0x00F7,
			0x8181: 0xFF1D, 0x8183: 0xFF1C, 0x8184: 0xFF1E, 0x818B: 0x00B0, 0x818F: 0xFFE5, 0x8190: 0xFF04, 0x8191: 0xFFE0, 0x8192: 0xFFE1,
			0x8193: 0xFF05, 0x8194: 0xFF03, 0x8195: 0xFF06, 0x8196: 0xFF0A, 0x8197: 0xFF20, 0x8198: 0x00A7, 0x81AD: 0xFF07, 0x81AE: 0xFF02,
			0x81AF: 0xFF0D, 0x81B0: 0xFF5E, 0x81CA: 0xFFE2, 0x81F7: 0x00B6, 0x824F: 0xFF10, 0x8250: 0xFF11, 0x8251: 0xFF12, 0x8252: 0xFF13,
			0x8253: 0xFF14, 0x8254: 0xFF15, 0x8255: 0xFF16, 0x8256: 0xFF17, 0x8257: 0xFF18, 0x8258: 0xFF19, 0x8260: 0xFF21, 0x8261: 0xFF22,
			0x8262: 0xFF23, 0x8263: 0xFF24, 0x8264: 0xFF25, 0x8265: 0xFF26, 0x8266: 0xFF27, 0x8267: 0xFF28, 0x8268: 0xFF29, 0x8269: 0xFF2A,
			0x826A: 0xFF2B, 0x826B: 0xFF2C, 0x826C: 0xFF2D, 0x826D: 0xFF2E, 0x826E: 0xFF2F, 0x826F: 0xFF30, 0x8270: 0xFF31, 0x8271: 0xFF32,
			0x8272: 0xFF33, 0x8273: 0xFF34, 0x8274: 0xFF35, 0x8275: 0xFF36, 0x8276: 0xFF37, 0x8277: 0xFF38, 0x8278: 0xFF39, 0x8279: 0xFF3A,
			0x8281: 0xFF41, 0x8282: 0xFF42, 0x8283: 0xFF43, 0x8284: 0xFF44, 0x8285: 0xFF45, 0x8286: 0xFF46, 0x8287: 0xFF47, 0x8288: 0xFF48,
			0x8289: 0xFF49, 0x828A: 0xFF4A, 0x828B: 0xFF4B, 0x828C: 0xFF4C, 0x828D: 0xFF4D, 0x828E: 0xFF4E, 0x828F: 0xFF4F, 0x8290: 0xFF50,
			0x8291: 0xFF51, 0x8292: 0xFF52, 0x8293: 0xFF53, 0x8294: 0xFF54, 0x8295: 0xFF55, 0x8296: 0xFF56, 0x8297: 0xFF57, 0x8298: 0xFF58,
			0x8299: 0xFF59, 0x829A: 0xFF5A
		};
		/* eslint-enable object-property-newline */
		/* eslint-enable max-len */

		// 「sjis2004_to_unicode_map_2」の中の特殊な文字について
		// 一部CP932とShift_JIS-2004とでコードが一致していない文字がある
		// 全角,CP932,Shift_JIS-2004,半角Unicode,全角Unicode
		// ',0xfa56,0x81ad,0x0027,0xff07 (CP932は、IBM拡張文字での定義)
		// ",0xfa57,0x81ae,0x0022,0xff02 (CP932は、IBM拡張文字での定義)
		// -,0x817c,0x81af,0x002d,0xff0d
		// ~,0x8160,0x81b0,0x007e,0xff5e

		// マップデータを上書きする
		for (const key in sjis2004_to_unicode_map_2) {
			sjis2004_to_unicode_map[key] = sjis2004_to_unicode_map_2[key];
		}

		/**
		 * 逆引きマップ作成。重複がある場合は、小さい数値を優先させる。
		 * @type {Record<number, number>}
		 */
		const unicode_to_sjis2004_map = {};
		for (const key in sjis2004_to_unicode_map) {
			const x = sjis2004_to_unicode_map[key];
			const key_num = parseInt(key, 10);
			if (!(Array.isArray(x))) {
				if (unicode_to_sjis2004_map[x]) {
					if (x > key_num) {
						unicode_to_sjis2004_map[x] = key_num;
					}
				} else {
					unicode_to_sjis2004_map[x] = key_num;
				}
			}
		}

		// 逆引きの注意点についてはCP932のソースコードのコメントに記載
		unicode_to_sjis2004_map[0xA5] = 0x5C;

		SJIS2004MAP.sjis2004_to_unicode_map = sjis2004_to_unicode_map;
		SJIS2004MAP.unicode_to_sjis2004_map = unicode_to_sjis2004_map;
	}

	/**
	 * @returns {Record<number, number|number[]>}
	 */
	static SJIS2004_TO_UNICODE() {
		SJIS2004MAP.init();
		return SJIS2004MAP.sjis2004_to_unicode_map;
	}

	/**
	 * @returns {Record<number, number>}
	 */
	static UNICODE_TO_SJIS2004() {
		SJIS2004MAP.init();
		return SJIS2004MAP.unicode_to_sjis2004_map;
	}
}

/**
 * 変換マップを初期化したかどうか
 * @type {boolean}
 */
SJIS2004MAP.is_initmap = false;

/**
 * 変換用マップ
 * @type {Record<number, number|number[]>}
 */
SJIS2004MAP.sjis2004_to_unicode_map = null;

/**
 * 変換用マップ
 * @type {Record<number, number>}
 */
SJIS2004MAP.unicode_to_sjis2004_map = null;

/**
 * Shift_JIS-2004 を扱うクラス
 * @ignore
 */
export default class SJIS2004 {
	/**
	 * Unicode のコードから Shift_JIS-2004 のコードに変換
	 * @param {number} unicode_codepoint - Unicode のコードポイント
	 * @returns {number} Shift_JIS-2004 のコードポイント (存在しない場合は undefined)
	 */
	static toSJIS2004FromUnicode(unicode_codepoint) {
		return SJIS2004MAP.UNICODE_TO_SJIS2004()[unicode_codepoint];
	}

	/**
	 * Shift_JIS-2004 のコードから Unicode のコードに変換
	 * @param {number} sjis2004_codepoint - Shift_JIS-2004 のコードポイント
	 * @returns {number|number[]} Unicode のコードポイント (存在しない場合は undefined)
	 */
	static toUnicodeFromSJIS2004(sjis2004_codepoint) {
		return SJIS2004MAP.SJIS2004_TO_UNICODE()[sjis2004_codepoint];
	}

	/**
	 * 文字列を Shift_JIS-2004 の配列に変換
	 * @param {string} text - 変換したいテキスト
	 * @returns {number[]} Shift_JIS-2004 のデータが入った配列
	 */
	static toSJIS2004Array(text) {
		return SJIS.toSJISArray(text, SJIS2004MAP.UNICODE_TO_SJIS2004());
	}

	/**
	 * 文字列を Shift_JIS-2004 のバイナリ配列に変換
	 * - 日本語文字は2バイトとして、配列も2つ分、使用します。
	 * @param {string} text - 変換したいテキスト
	 * @returns {number[]} Shift_JIS-2004 のデータが入ったバイナリ配列
	 */
	static toSJIS2004Binary(text) {
		return SJIS.toSJISBinary(text, SJIS2004MAP.UNICODE_TO_SJIS2004());
	}

	/**
	 * Shift_JIS-2004 の配列から文字列に変換
	 * @param {number[]} sjis2004 - 変換したいテキスト
	 * @returns {string} 変換後のテキスト
	 */
	static fromSJIS2004Array(sjis2004) {
		return SJIS.fromSJISArray(sjis2004, SJIS2004MAP.SJIS2004_TO_UNICODE());
	}

	/**
	 * 指定した文字から Shift_JIS-2004 上の面区点番号に変換
	 * - 2文字以上を指定した場合は、1文字目のみを変換する
	 * @param {string} text - 変換したいテキスト
	 * @returns {import('./SJIS.js').MenKuTen} 面区点番号(存在しない場合(1バイトのJISコードなど)はnullを返す)
	 */
	static toMenKuTen(text) {
		if (text.length === 0) {
			return null;
		}
		const sjis2004_code = SJIS2004.toSJIS2004FromUnicode(Unicode.toUTF32Array(text)[0]);
		return sjis2004_code ? SJIS.toMenKuTenFromSJIS2004Code(sjis2004_code) : null;
	}

	/**
	 * Shift_JIS-2004 上の面区点番号から文字列に変換
	 * @param {import('./SJIS.js').MenKuTen|string} menkuten - 面区点番号
	 * @returns {string} 変換後のテキスト
	 */
	static fromMenKuTen(menkuten) {
		const code = SJIS.toUnicodeCodeFromKuTen(menkuten, SJIS2004MAP.SJIS2004_TO_UNICODE());
		return code ? Unicode.fromUTF32Array(code) : "";
	}
}