');
+ }
+
+ return $message;
+ }
+}
diff --git a/plugins/vendor/symfony/mime/Test/Constraint/EmailTextBodyContains.php b/plugins/vendor/symfony/mime/Test/Constraint/EmailTextBodyContains.php
new file mode 100644
index 00000000..c2a23838
--- /dev/null
+++ b/plugins/vendor/symfony/mime/Test/Constraint/EmailTextBodyContains.php
@@ -0,0 +1,49 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Mime\Test\Constraint;
+
+use PHPUnit\Framework\Constraint\Constraint;
+use Symfony\Component\Mime\Message;
+use Symfony\Component\Mime\RawMessage;
+
+final class EmailTextBodyContains extends Constraint
+{
+ public function __construct(
+ private string $expectedText,
+ ) {
+ }
+
+ public function toString(): string
+ {
+ return \sprintf('contains "%s"', $this->expectedText);
+ }
+
+ /**
+ * @param RawMessage $message
+ */
+ protected function matches($message): bool
+ {
+ if (RawMessage::class === $message::class || Message::class === $message::class) {
+ throw new \LogicException('Unable to test a message text body on a RawMessage or Message instance.');
+ }
+
+ return str_contains($message->getTextBody(), $this->expectedText);
+ }
+
+ /**
+ * @param RawMessage $message
+ */
+ protected function failureDescription($message): string
+ {
+ return 'the Email text body '.$this->toString();
+ }
+}
diff --git a/plugins/vendor/symfony/mime/composer.json b/plugins/vendor/symfony/mime/composer.json
new file mode 100644
index 00000000..069d6070
--- /dev/null
+++ b/plugins/vendor/symfony/mime/composer.json
@@ -0,0 +1,45 @@
+{
+ "name": "symfony/mime",
+ "type": "library",
+ "description": "Allows manipulating MIME messages",
+ "keywords": ["mime", "mime-type"],
+ "homepage": "https://symfony.com",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "require": {
+ "php": ">=8.4",
+ "symfony/polyfill-intl-idn": "^1.10",
+ "symfony/polyfill-mbstring": "^1.0"
+ },
+ "require-dev": {
+ "egulias/email-validator": "^2.1.10|^3.1|^4",
+ "league/html-to-markdown": "^5.0",
+ "phpdocumentor/reflection-docblock": "^5.2|^6.0",
+ "symfony/dependency-injection": "^7.4|^8.0",
+ "symfony/process": "^7.4|^8.0",
+ "symfony/property-access": "^7.4|^8.0",
+ "symfony/property-info": "^7.4|^8.0",
+ "symfony/serializer": "^7.4|^8.0"
+ },
+ "conflict": {
+ "egulias/email-validator": "~3.0.0",
+ "phpdocumentor/reflection-docblock": "<5.2|>=7",
+ "phpdocumentor/type-resolver": "<1.5.1"
+ },
+ "autoload": {
+ "psr-4": { "Symfony\\Component\\Mime\\": "" },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "minimum-stability": "dev"
+}
diff --git a/plugins/vendor/symfony/polyfill-iconv/Iconv.php b/plugins/vendor/symfony/polyfill-iconv/Iconv.php
new file mode 100644
index 00000000..b4421449
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-iconv/Iconv.php
@@ -0,0 +1,718 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Iconv;
+
+/**
+ * iconv implementation in pure PHP, UTF-8 centric.
+ *
+ * Implemented:
+ * - iconv - Convert string to requested character encoding
+ * - iconv_mime_decode - Decodes a MIME header field
+ * - iconv_mime_decode_headers - Decodes multiple MIME header fields at once
+ * - iconv_get_encoding - Retrieve internal configuration variables of iconv extension
+ * - iconv_set_encoding - Set current setting for character encoding conversion
+ * - iconv_mime_encode - Composes a MIME header field
+ * - iconv_strlen - Returns the character count of string
+ * - iconv_strpos - Finds position of first occurrence of a needle within a haystack
+ * - iconv_strrpos - Finds the last occurrence of a needle within a haystack
+ * - iconv_substr - Cut out part of a string
+ *
+ * Charsets available for conversion are defined by files
+ * in the charset/ directory and by Iconv::$alias below.
+ * You're welcome to send back any addition you make.
+ *
+ * @author Nicolas Grekas
+ *
+ * @internal
+ */
+final class Iconv
+{
+ public const ERROR_ILLEGAL_CHARACTER = 'iconv(): Detected an illegal character in input string';
+ public const ERROR_WRONG_CHARSET = 'iconv(): Wrong charset, conversion from `%s\' to `%s\' is not allowed';
+
+ public static $inputEncoding = 'utf-8';
+ public static $outputEncoding = 'utf-8';
+ public static $internalEncoding = 'utf-8';
+
+ private static $alias = [
+ 'utf8' => 'utf-8',
+ 'ascii' => 'us-ascii',
+ 'tis-620' => 'iso-8859-11',
+ 'cp1250' => 'windows-1250',
+ 'cp1251' => 'windows-1251',
+ 'cp1252' => 'windows-1252',
+ 'cp1253' => 'windows-1253',
+ 'cp1254' => 'windows-1254',
+ 'cp1255' => 'windows-1255',
+ 'cp1256' => 'windows-1256',
+ 'cp1257' => 'windows-1257',
+ 'cp1258' => 'windows-1258',
+ 'shift-jis' => 'cp932',
+ 'shift_jis' => 'cp932',
+ 'latin1' => 'iso-8859-1',
+ 'latin2' => 'iso-8859-2',
+ 'latin3' => 'iso-8859-3',
+ 'latin4' => 'iso-8859-4',
+ 'latin5' => 'iso-8859-9',
+ 'latin6' => 'iso-8859-10',
+ 'latin7' => 'iso-8859-13',
+ 'latin8' => 'iso-8859-14',
+ 'latin9' => 'iso-8859-15',
+ 'latin10' => 'iso-8859-16',
+ 'iso8859-1' => 'iso-8859-1',
+ 'iso8859-2' => 'iso-8859-2',
+ 'iso8859-3' => 'iso-8859-3',
+ 'iso8859-4' => 'iso-8859-4',
+ 'iso8859-5' => 'iso-8859-5',
+ 'iso8859-6' => 'iso-8859-6',
+ 'iso8859-7' => 'iso-8859-7',
+ 'iso8859-8' => 'iso-8859-8',
+ 'iso8859-9' => 'iso-8859-9',
+ 'iso8859-10' => 'iso-8859-10',
+ 'iso8859-11' => 'iso-8859-11',
+ 'iso8859-12' => 'iso-8859-12',
+ 'iso8859-13' => 'iso-8859-13',
+ 'iso8859-14' => 'iso-8859-14',
+ 'iso8859-15' => 'iso-8859-15',
+ 'iso8859-16' => 'iso-8859-16',
+ 'iso_8859-1' => 'iso-8859-1',
+ 'iso_8859-2' => 'iso-8859-2',
+ 'iso_8859-3' => 'iso-8859-3',
+ 'iso_8859-4' => 'iso-8859-4',
+ 'iso_8859-5' => 'iso-8859-5',
+ 'iso_8859-6' => 'iso-8859-6',
+ 'iso_8859-7' => 'iso-8859-7',
+ 'iso_8859-8' => 'iso-8859-8',
+ 'iso_8859-9' => 'iso-8859-9',
+ 'iso_8859-10' => 'iso-8859-10',
+ 'iso_8859-11' => 'iso-8859-11',
+ 'iso_8859-12' => 'iso-8859-12',
+ 'iso_8859-13' => 'iso-8859-13',
+ 'iso_8859-14' => 'iso-8859-14',
+ 'iso_8859-15' => 'iso-8859-15',
+ 'iso_8859-16' => 'iso-8859-16',
+ 'iso88591' => 'iso-8859-1',
+ 'iso88592' => 'iso-8859-2',
+ 'iso88593' => 'iso-8859-3',
+ 'iso88594' => 'iso-8859-4',
+ 'iso88595' => 'iso-8859-5',
+ 'iso88596' => 'iso-8859-6',
+ 'iso88597' => 'iso-8859-7',
+ 'iso88598' => 'iso-8859-8',
+ 'iso88599' => 'iso-8859-9',
+ 'iso885910' => 'iso-8859-10',
+ 'iso885911' => 'iso-8859-11',
+ 'iso885912' => 'iso-8859-12',
+ 'iso885913' => 'iso-8859-13',
+ 'iso885914' => 'iso-8859-14',
+ 'iso885915' => 'iso-8859-15',
+ 'iso885916' => 'iso-8859-16',
+ ];
+ private static $translitMap = [];
+ private static $convertMap = [];
+ private static $errorHandler;
+ private static $lastError;
+
+ private static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4];
+ private static $isValidUtf8;
+
+ public static function iconv($inCharset, $outCharset, $str)
+ {
+ $str = (string) $str;
+ if ('' === $str) {
+ return '';
+ }
+
+ // Prepare for //IGNORE and //TRANSLIT
+
+ $translit = $ignore = '';
+
+ $outCharset = strtolower($outCharset);
+ $inCharset = strtolower($inCharset);
+
+ if ('' === $outCharset) {
+ $outCharset = 'iso-8859-1';
+ }
+ if ('' === $inCharset) {
+ $inCharset = 'iso-8859-1';
+ }
+
+ do {
+ $loop = false;
+
+ if ('//translit' === substr($outCharset, -10)) {
+ $loop = $translit = true;
+ $outCharset = substr($outCharset, 0, -10);
+ }
+
+ if ('//ignore' === substr($outCharset, -8)) {
+ $loop = $ignore = true;
+ $outCharset = substr($outCharset, 0, -8);
+ }
+ } while ($loop);
+
+ do {
+ $loop = false;
+
+ if ('//translit' === substr($inCharset, -10)) {
+ $loop = true;
+ $inCharset = substr($inCharset, 0, -10);
+ }
+
+ if ('//ignore' === substr($inCharset, -8)) {
+ $loop = true;
+ $inCharset = substr($inCharset, 0, -8);
+ }
+ } while ($loop);
+
+ if (isset(self::$alias[$inCharset])) {
+ $inCharset = self::$alias[$inCharset];
+ }
+ if (isset(self::$alias[$outCharset])) {
+ $outCharset = self::$alias[$outCharset];
+ }
+
+ // Load charset maps
+
+ if (('utf-8' !== $inCharset && !self::loadMap('from.', $inCharset, $inMap))
+ || ('utf-8' !== $outCharset && !self::loadMap('to.', $outCharset, $outMap))) {
+ trigger_error(sprintf(self::ERROR_WRONG_CHARSET, $inCharset, $outCharset));
+
+ return false;
+ }
+
+ if ('utf-8' !== $inCharset) {
+ // Convert input to UTF-8
+ $result = '';
+ if (self::mapToUtf8($result, $inMap, $str, $ignore)) {
+ $str = $result;
+ } else {
+ $str = false;
+ }
+ self::$isValidUtf8 = true;
+ } else {
+ self::$isValidUtf8 = preg_match('//u', $str);
+
+ if (!self::$isValidUtf8 && !$ignore) {
+ trigger_error(self::ERROR_ILLEGAL_CHARACTER);
+
+ return false;
+ }
+
+ if ('utf-8' === $outCharset) {
+ // UTF-8 validation
+ $str = self::utf8ToUtf8($str, $ignore);
+ }
+ }
+
+ if ('utf-8' !== $outCharset && false !== $str) {
+ // Convert output to UTF-8
+ $result = '';
+ if (self::mapFromUtf8($result, $outMap, $str, $ignore, $translit)) {
+ return $result;
+ }
+
+ return false;
+ }
+
+ return $str;
+ }
+
+ public static function iconv_mime_decode_headers($str, $mode = 0, $charset = null)
+ {
+ if (null === $charset) {
+ $charset = self::$internalEncoding;
+ }
+
+ if (false !== strpos($str, "\r")) {
+ $str = strtr(str_replace("\r\n", "\n", $str), "\r", "\n");
+ }
+ $str = explode("\n\n", $str, 2);
+
+ $headers = [];
+
+ $str = preg_split('/\n(?![ \t])/', $str[0]);
+ foreach ($str as $str) {
+ $str = self::iconv_mime_decode($str, $mode, $charset);
+ if (false === $str) {
+ return false;
+ }
+ $str = explode(':', $str, 2);
+
+ if (2 === \count($str)) {
+ if (isset($headers[$str[0]])) {
+ if (!\is_array($headers[$str[0]])) {
+ $headers[$str[0]] = [$headers[$str[0]]];
+ }
+ $headers[$str[0]][] = ltrim($str[1]);
+ } else {
+ $headers[$str[0]] = ltrim($str[1]);
+ }
+ }
+ }
+
+ return $headers;
+ }
+
+ public static function iconv_mime_decode($str, $mode = 0, $charset = null)
+ {
+ if (null === $charset) {
+ $charset = self::$internalEncoding;
+ }
+ if (\ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) {
+ $charset .= '//IGNORE';
+ }
+
+ if (false !== strpos($str, "\r")) {
+ $str = strtr(str_replace("\r\n", "\n", $str), "\r", "\n");
+ }
+ $str = preg_split('/\n(?![ \t])/', rtrim($str), 2);
+ $str = preg_replace('/[ \t]*\n[ \t]+/', ' ', rtrim($str[0]));
+ $str = preg_split('/=\?([^?]+)\?([bqBQ])\?(.*?)\?=/', $str, -1, \PREG_SPLIT_DELIM_CAPTURE);
+
+ $result = self::iconv('utf-8', $charset, $str[0]);
+ if (false === $result) {
+ return false;
+ }
+
+ $i = 1;
+ $len = \count($str);
+
+ while ($i < $len) {
+ $c = strtolower($str[$i]);
+ if ((\ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode)
+ && 'utf-8' !== $c
+ && !isset(self::$alias[$c])
+ && !self::loadMap('from.', $c, $d)) {
+ $d = false;
+ } elseif ('B' === strtoupper($str[$i + 1])) {
+ $d = base64_decode($str[$i + 2]);
+ } else {
+ $d = rawurldecode(strtr(str_replace('%', '%25', $str[$i + 2]), '=_', '% '));
+ }
+
+ if (false !== $d) {
+ if ('' !== $d) {
+ if ('' === $d = self::iconv($c, $charset, $d)) {
+ $str[$i + 3] = substr($str[$i + 3], 1);
+ } else {
+ $result .= $d;
+ }
+ }
+ $d = self::iconv('utf-8', $charset, $str[$i + 3]);
+ if ('' !== trim($d)) {
+ $result .= $d;
+ }
+ } elseif (\ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) {
+ $result .= "=?{$str[$i]}?{$str[$i + 1]}?{$str[$i + 2]}?={$str[$i + 3]}";
+ } else {
+ $result = false;
+ break;
+ }
+
+ $i += 4;
+ }
+
+ return $result;
+ }
+
+ public static function iconv_get_encoding($type = 'all')
+ {
+ switch ($type) {
+ case 'input_encoding': return self::$inputEncoding;
+ case 'output_encoding': return self::$outputEncoding;
+ case 'internal_encoding': return self::$internalEncoding;
+ }
+
+ return [
+ 'input_encoding' => self::$inputEncoding,
+ 'output_encoding' => self::$outputEncoding,
+ 'internal_encoding' => self::$internalEncoding,
+ ];
+ }
+
+ public static function iconv_set_encoding($type, $charset)
+ {
+ switch ($type) {
+ case 'input_encoding': self::$inputEncoding = $charset; break;
+ case 'output_encoding': self::$outputEncoding = $charset; break;
+ case 'internal_encoding': self::$internalEncoding = $charset; break;
+ default: return false;
+ }
+
+ return true;
+ }
+
+ public static function iconv_mime_encode($fieldName, $fieldValue, $pref = null)
+ {
+ if (!\is_array($pref)) {
+ $pref = [];
+ }
+
+ $pref += [
+ 'scheme' => 'B',
+ 'input-charset' => self::$internalEncoding,
+ 'output-charset' => self::$internalEncoding,
+ 'line-length' => 76,
+ 'line-break-chars' => "\r\n",
+ ];
+
+ if (preg_match('/[\x80-\xFF]/', $fieldName)) {
+ $fieldName = '';
+ }
+
+ $scheme = strtoupper(substr($pref['scheme'], 0, 1));
+ $in = strtolower($pref['input-charset']);
+ $out = strtolower($pref['output-charset']);
+
+ if ('utf-8' !== $in && false === $fieldValue = self::iconv($in, 'utf-8', $fieldValue)) {
+ return false;
+ }
+
+ preg_match_all('/./us', $fieldValue, $chars);
+
+ $chars = $chars[0] ?? [];
+
+ $lineBreak = (int) $pref['line-length'];
+ $lineStart = "=?{$pref['output-charset']}?{$scheme}?";
+ $lineLength = \strlen($fieldName) + 2 + \strlen($lineStart) + 2;
+ $lineOffset = \strlen($lineStart) + 3;
+ $lineData = '';
+
+ $fieldValue = [];
+
+ $Q = 'Q' === $scheme;
+
+ foreach ($chars as $c) {
+ if ('utf-8' !== $out && false === $c = self::iconv('utf-8', $out, $c)) {
+ return false;
+ }
+
+ $o = $Q
+ ? $c = preg_replace_callback(
+ '/[=_\?\x00-\x1F\x80-\xFF]/',
+ [__CLASS__, 'qpByteCallback'],
+ $c
+ )
+ : base64_encode($lineData.$c);
+
+ if (isset($o[$lineBreak - $lineLength])) {
+ if (!$Q) {
+ $lineData = base64_encode($lineData);
+ }
+ $fieldValue[] = $lineStart.$lineData.'?=';
+ $lineLength = $lineOffset;
+ $lineData = '';
+ }
+
+ $lineData .= $c;
+ $Q && $lineLength += \strlen($c);
+ }
+
+ if ('' !== $lineData) {
+ if (!$Q) {
+ $lineData = base64_encode($lineData);
+ }
+ $fieldValue[] = $lineStart.$lineData.'?=';
+ }
+
+ return $fieldName.': '.implode($pref['line-break-chars'].' ', $fieldValue);
+ }
+
+ public static function iconv_strlen($s, $encoding = null)
+ {
+ if (null === $encoding) {
+ $encoding = self::$internalEncoding;
+ }
+ if (0 !== stripos($encoding, 'utf-8') && false === $s = self::iconv($encoding, 'utf-8', $s)) {
+ return false;
+ }
+
+ $ulenMask = self::$ulenMask;
+
+ $i = 0;
+ $j = 0;
+ $len = \strlen($s);
+
+ while ($i < $len) {
+ $u = $s[$i] & "\xF0";
+ $i += $ulenMask[$u] ?? 1;
+ ++$j;
+ }
+
+ return $j;
+ }
+
+ public static function iconv_strpos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ if (null === $encoding) {
+ $encoding = self::$internalEncoding;
+ }
+
+ if (0 !== stripos($encoding, 'utf-8')) {
+ if (false === $haystack = self::iconv($encoding, 'utf-8', $haystack)) {
+ return false;
+ }
+ if (false === $needle = self::iconv($encoding, 'utf-8', $needle)) {
+ return false;
+ }
+ }
+
+ if ($offset = (int) $offset) {
+ $haystack = self::iconv_substr($haystack, $offset, 2147483647, 'utf-8');
+ }
+ $pos = strpos($haystack, $needle);
+
+ return false === $pos ? false : ($offset + ($pos ? self::iconv_strlen(substr($haystack, 0, $pos), 'utf-8') : 0));
+ }
+
+ public static function iconv_strrpos($haystack, $needle, $encoding = null)
+ {
+ if (null === $encoding) {
+ $encoding = self::$internalEncoding;
+ }
+
+ if (0 !== stripos($encoding, 'utf-8')) {
+ if (false === $haystack = self::iconv($encoding, 'utf-8', $haystack)) {
+ return false;
+ }
+ if (false === $needle = self::iconv($encoding, 'utf-8', $needle)) {
+ return false;
+ }
+ }
+
+ $pos = isset($needle[0]) ? strrpos($haystack, $needle) : false;
+
+ return false === $pos ? false : self::iconv_strlen($pos ? substr($haystack, 0, $pos) : $haystack, 'utf-8');
+ }
+
+ public static function iconv_substr($s, $start, $length = 2147483647, $encoding = null)
+ {
+ if (null === $encoding) {
+ $encoding = self::$internalEncoding;
+ }
+ if (0 !== stripos($encoding, 'utf-8')) {
+ $encoding = null;
+ } elseif (false === $s = self::iconv($encoding, 'utf-8', $s)) {
+ return false;
+ }
+
+ $s = (string) $s;
+ $slen = self::iconv_strlen($s, 'utf-8');
+ $start = (int) $start;
+
+ if (0 > $start) {
+ $start += $slen;
+ }
+ if (0 > $start) {
+ if (\PHP_VERSION_ID < 80000) {
+ return false;
+ }
+
+ $start = 0;
+ }
+ if ($start >= $slen) {
+ return \PHP_VERSION_ID >= 80000 ? '' : false;
+ }
+
+ $rx = $slen - $start;
+
+ if (0 > $length) {
+ $length += $rx;
+ }
+ if (0 === $length) {
+ return '';
+ }
+ if (0 > $length) {
+ return \PHP_VERSION_ID >= 80000 ? '' : false;
+ }
+
+ if ($length > $rx) {
+ $length = $rx;
+ }
+
+ $rx = '/^'.($start ? self::pregOffset($start) : '').'('.self::pregOffset($length).')/u';
+
+ $s = preg_match($rx, $s, $s) ? $s[1] : '';
+
+ if (null === $encoding) {
+ return $s;
+ }
+
+ return self::iconv('utf-8', $encoding, $s);
+ }
+
+ private static function loadMap($type, $charset, &$map)
+ {
+ if (!isset(self::$convertMap[$type.$charset])) {
+ if (false === $map = self::getData($type.$charset)) {
+ if ('to.' === $type && self::loadMap('from.', $charset, $map)) {
+ $map = array_flip($map);
+ } else {
+ return false;
+ }
+ }
+
+ self::$convertMap[$type.$charset] = $map;
+ } else {
+ $map = self::$convertMap[$type.$charset];
+ }
+
+ return true;
+ }
+
+ private static function utf8ToUtf8($str, $ignore)
+ {
+ $ulenMask = self::$ulenMask;
+ $valid = self::$isValidUtf8;
+
+ $u = $str;
+ $i = $j = 0;
+ $len = \strlen($str);
+
+ while ($i < $len) {
+ if ($str[$i] < "\x80") {
+ $u[$j++] = $str[$i++];
+ } else {
+ $ulen = $str[$i] & "\xF0";
+ $ulen = $ulenMask[$ulen] ?? 1;
+ $uchr = substr($str, $i, $ulen);
+
+ if (1 === $ulen || !($valid || preg_match('/^.$/us', $uchr))) {
+ if ($ignore) {
+ ++$i;
+ continue;
+ }
+
+ trigger_error(self::ERROR_ILLEGAL_CHARACTER);
+
+ return false;
+ }
+
+ $i += $ulen;
+
+ $u[$j++] = $uchr[0];
+
+ isset($uchr[1]) && 0 !== ($u[$j++] = $uchr[1])
+ && isset($uchr[2]) && 0 !== ($u[$j++] = $uchr[2])
+ && isset($uchr[3]) && 0 !== ($u[$j++] = $uchr[3]);
+ }
+ }
+
+ return substr($u, 0, $j);
+ }
+
+ private static function mapToUtf8(&$result, array $map, $str, $ignore)
+ {
+ $len = \strlen($str);
+ for ($i = 0; $i < $len; ++$i) {
+ if (isset($str[$i + 1], $map[$str[$i].$str[$i + 1]])) {
+ $result .= $map[$str[$i].$str[++$i]];
+ } elseif (isset($map[$str[$i]])) {
+ $result .= $map[$str[$i]];
+ } elseif (!$ignore) {
+ trigger_error(self::ERROR_ILLEGAL_CHARACTER);
+
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private static function mapFromUtf8(&$result, array $map, $str, $ignore, $translit)
+ {
+ $ulenMask = self::$ulenMask;
+ $valid = self::$isValidUtf8;
+
+ if ($translit && !self::$translitMap) {
+ self::$translitMap = self::getData('translit');
+ }
+
+ $i = 0;
+ $len = \strlen($str);
+
+ while ($i < $len) {
+ if ($str[$i] < "\x80") {
+ $uchr = $str[$i++];
+ } else {
+ $ulen = $str[$i] & "\xF0";
+ $ulen = $ulenMask[$ulen] ?? 1;
+ $uchr = substr($str, $i, $ulen);
+
+ if ($ignore && (1 === $ulen || !($valid || preg_match('/^.$/us', $uchr)))) {
+ ++$i;
+ continue;
+ }
+
+ $i += $ulen;
+ }
+
+ if (isset($map[$uchr])) {
+ $result .= $map[$uchr];
+ } elseif ($translit) {
+ if (isset(self::$translitMap[$uchr])) {
+ $uchr = self::$translitMap[$uchr];
+ } elseif ($uchr >= "\xC3\x80") {
+ $uchr = \Normalizer::normalize($uchr, \Normalizer::NFD);
+
+ if ($uchr[0] < "\x80") {
+ $uchr = $uchr[0];
+ } elseif ($ignore) {
+ continue;
+ } else {
+ return false;
+ }
+ } elseif ($ignore) {
+ continue;
+ } else {
+ return false;
+ }
+
+ $str = $uchr.substr($str, $i);
+ $len = \strlen($str);
+ $i = 0;
+ } elseif (!$ignore) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private static function qpByteCallback(array $m)
+ {
+ return '='.strtoupper(dechex(\ord($m[0])));
+ }
+
+ private static function pregOffset($offset)
+ {
+ $rx = [];
+ $offset = (int) $offset;
+
+ while ($offset > 65535) {
+ $rx[] = '.{65535}';
+ $offset -= 65535;
+ }
+
+ return implode('', $rx).'.{'.$offset.'}';
+ }
+
+ private static function getData($file)
+ {
+ if (file_exists($file = __DIR__.'/Resources/charset/'.$file.'.php')) {
+ return require $file;
+ }
+
+ return false;
+ }
+}
diff --git a/plugins/vendor/symfony/polyfill-iconv/LICENSE b/plugins/vendor/symfony/polyfill-iconv/LICENSE
new file mode 100644
index 00000000..6e3afce6
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-iconv/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2015-present Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/plugins/vendor/symfony/polyfill-iconv/README.md b/plugins/vendor/symfony/polyfill-iconv/README.md
new file mode 100644
index 00000000..b089088b
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-iconv/README.md
@@ -0,0 +1,14 @@
+Symfony Polyfill / Iconv
+========================
+
+This component provides a native PHP implementation of the
+[php.net/iconv](https://php.net/iconv) functions
+(short of [`ob_iconv_handler`](https://php.net/ob-iconv-handler)).
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php
new file mode 100644
index 00000000..b1198549
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php
@@ -0,0 +1,13719 @@
+ ' ',
+ 'A' => ',',
+ 'B' => '、',
+ 'C' => '。',
+ 'D' => '.',
+ 'E' => '•',
+ 'F' => ';',
+ 'G' => ':',
+ 'H' => '?',
+ 'I' => '!',
+ 'J' => '︰',
+ 'K' => '…',
+ 'L' => '‥',
+ 'M' => '﹐',
+ 'N' => '、',
+ 'O' => '﹒',
+ 'P' => '·',
+ 'Q' => '﹔',
+ 'R' => '﹕',
+ 'S' => '﹖',
+ 'T' => '﹗',
+ 'U' => '|',
+ 'V' => '–',
+ 'W' => '︱',
+ 'X' => '—',
+ 'Y' => '︳',
+ 'Z' => '�',
+ '[' => '︴',
+ '\\' => '﹏',
+ ']' => '(',
+ '^' => ')',
+ '_' => '︵',
+ '`' => '︶',
+ 'a' => '{',
+ 'b' => '}',
+ 'c' => '︷',
+ 'd' => '︸',
+ 'e' => '〔',
+ 'f' => '〕',
+ 'g' => '︹',
+ 'h' => '︺',
+ 'i' => '【',
+ 'j' => '】',
+ 'k' => '︻',
+ 'l' => '︼',
+ 'm' => '《',
+ 'n' => '》',
+ 'o' => '︽',
+ 'p' => '︾',
+ 'q' => '〈',
+ 'r' => '〉',
+ 's' => '︿',
+ 't' => '﹀',
+ 'u' => '「',
+ 'v' => '」',
+ 'w' => '﹁',
+ 'x' => '﹂',
+ 'y' => '『',
+ 'z' => '』',
+ '{' => '﹃',
+ '|' => '﹄',
+ '}' => '﹙',
+ '~' => '﹚',
+ '' => '﹛',
+ '' => '﹜',
+ '' => '﹝',
+ '' => '﹞',
+ '' => '‘',
+ '' => '’',
+ '' => '“',
+ '' => '”',
+ '' => '〝',
+ '' => '〞',
+ '' => '‵',
+ '' => '′',
+ '' => '#',
+ '' => '&',
+ '' => '*',
+ '' => '※',
+ '' => '§',
+ '' => '〃',
+ '' => '○',
+ '' => '●',
+ '' => '△',
+ '' => '▲',
+ '' => '◎',
+ '' => '☆',
+ '' => '★',
+ '' => '◇',
+ '' => '◆',
+ '' => '□',
+ '' => '■',
+ '' => '▽',
+ '' => '▼',
+ '' => '㊣',
+ '' => '℅',
+ '' => '‾',
+ '' => '�',
+ '' => '_',
+ '' => '�',
+ '' => '﹉',
+ '' => '﹊',
+ '' => '﹍',
+ '' => '﹎',
+ '' => '﹋',
+ '' => '﹌',
+ '' => '﹟',
+ '' => '﹠',
+ '' => '﹡',
+ '' => '+',
+ '' => '-',
+ '' => '×',
+ '' => '÷',
+ '' => '±',
+ '' => '√',
+ '' => '<',
+ '' => '>',
+ '' => '=',
+ '' => '≦',
+ '' => '≧',
+ '' => '≠',
+ '' => '∞',
+ '' => '≒',
+ '' => '≡',
+ '' => '﹢',
+ '' => '﹣',
+ '' => '﹤',
+ '' => '﹥',
+ '' => '﹦',
+ '' => '∼',
+ '' => '∩',
+ '' => '∪',
+ '' => '⊥',
+ '' => '∠',
+ '' => '∟',
+ '' => '⊿',
+ '' => '㏒',
+ '' => '㏑',
+ '' => '∫',
+ '' => '∮',
+ '' => '∵',
+ '' => '∴',
+ '' => '♀',
+ '' => '♂',
+ '' => '♁',
+ '' => '☉',
+ '' => '↑',
+ '' => '↓',
+ '' => '←',
+ '' => '→',
+ '' => '↖',
+ '' => '↗',
+ '' => '↙',
+ '' => '↘',
+ '' => '∥',
+ '' => '∣',
+ '' => '�',
+ '@' => '�',
+ 'A' => '/',
+ 'B' => '\',
+ 'C' => '$',
+ 'D' => '¥',
+ 'E' => '〒',
+ 'F' => '¢',
+ 'G' => '£',
+ 'H' => '%',
+ 'I' => '@',
+ 'J' => '℃',
+ 'K' => '℉',
+ 'L' => '﹩',
+ 'M' => '﹪',
+ 'N' => '﹫',
+ 'O' => '㏕',
+ 'P' => '㎜',
+ 'Q' => '㎝',
+ 'R' => '㎞',
+ 'S' => '㏎',
+ 'T' => '㎡',
+ 'U' => '㎎',
+ 'V' => '㎏',
+ 'W' => '㏄',
+ 'X' => '°',
+ 'Y' => '兙',
+ 'Z' => '兛',
+ '[' => '兞',
+ '\\' => '兝',
+ ']' => '兡',
+ '^' => '兣',
+ '_' => '嗧',
+ '`' => '瓩',
+ 'a' => '糎',
+ 'b' => '▁',
+ 'c' => '▂',
+ 'd' => '▃',
+ 'e' => '▄',
+ 'f' => '▅',
+ 'g' => '▆',
+ 'h' => '▇',
+ 'i' => '█',
+ 'j' => '▏',
+ 'k' => '▎',
+ 'l' => '▍',
+ 'm' => '▌',
+ 'n' => '▋',
+ 'o' => '▊',
+ 'p' => '▉',
+ 'q' => '┼',
+ 'r' => '┴',
+ 's' => '┬',
+ 't' => '┤',
+ 'u' => '├',
+ 'v' => '▔',
+ 'w' => '─',
+ 'x' => '│',
+ 'y' => '▕',
+ 'z' => '┌',
+ '{' => '┐',
+ '|' => '└',
+ '}' => '┘',
+ '~' => '╭',
+ '' => '╮',
+ '' => '╰',
+ '' => '╯',
+ '' => '═',
+ '' => '╞',
+ '' => '╪',
+ '' => '╡',
+ '' => '◢',
+ '' => '◣',
+ '' => '◥',
+ '' => '◤',
+ '' => '╱',
+ '' => '╲',
+ '' => '╳',
+ '' => '0',
+ '' => '1',
+ '' => '2',
+ '' => '3',
+ '' => '4',
+ '' => '5',
+ '' => '6',
+ '' => '7',
+ '' => '8',
+ '' => '9',
+ '' => 'Ⅰ',
+ '' => 'Ⅱ',
+ '' => 'Ⅲ',
+ '' => 'Ⅳ',
+ '' => 'Ⅴ',
+ '' => 'Ⅵ',
+ '' => 'Ⅶ',
+ '' => 'Ⅷ',
+ '' => 'Ⅸ',
+ '' => 'Ⅹ',
+ '' => '〡',
+ '' => '〢',
+ '' => '〣',
+ '' => '〤',
+ '' => '〥',
+ '' => '〦',
+ '' => '〧',
+ '' => '〨',
+ '' => '〩',
+ '' => '�',
+ '' => '卄',
+ '' => '�',
+ '' => 'A',
+ '' => 'B',
+ '' => 'C',
+ '' => 'D',
+ '' => 'E',
+ '' => 'F',
+ '' => 'G',
+ '' => 'H',
+ '' => 'I',
+ '' => 'J',
+ '' => 'K',
+ '' => 'L',
+ '' => 'M',
+ '' => 'N',
+ '' => 'O',
+ '' => 'P',
+ '' => 'Q',
+ '' => 'R',
+ '' => 'S',
+ '' => 'T',
+ '' => 'U',
+ '' => 'V',
+ '' => 'W',
+ '' => 'X',
+ '' => 'Y',
+ '' => 'Z',
+ '' => 'a',
+ '' => 'b',
+ '' => 'c',
+ '' => 'd',
+ '' => 'e',
+ '' => 'f',
+ '' => 'g',
+ '' => 'h',
+ '' => 'i',
+ '' => 'j',
+ '' => 'k',
+ '' => 'l',
+ '' => 'm',
+ '' => 'n',
+ '' => 'o',
+ '' => 'p',
+ '' => 'q',
+ '' => 'r',
+ '' => 's',
+ '' => 't',
+ '' => 'u',
+ '' => 'v',
+ '@' => 'w',
+ 'A' => 'x',
+ 'B' => 'y',
+ 'C' => 'z',
+ 'D' => 'Α',
+ 'E' => 'Β',
+ 'F' => 'Γ',
+ 'G' => 'Δ',
+ 'H' => 'Ε',
+ 'I' => 'Ζ',
+ 'J' => 'Η',
+ 'K' => 'Θ',
+ 'L' => 'Ι',
+ 'M' => 'Κ',
+ 'N' => 'Λ',
+ 'O' => 'Μ',
+ 'P' => 'Ν',
+ 'Q' => 'Ξ',
+ 'R' => 'Ο',
+ 'S' => 'Π',
+ 'T' => 'Ρ',
+ 'U' => 'Σ',
+ 'V' => 'Τ',
+ 'W' => 'Υ',
+ 'X' => 'Φ',
+ 'Y' => 'Χ',
+ 'Z' => 'Ψ',
+ '[' => 'Ω',
+ '\\' => 'α',
+ ']' => 'β',
+ '^' => 'γ',
+ '_' => 'δ',
+ '`' => 'ε',
+ 'a' => 'ζ',
+ 'b' => 'η',
+ 'c' => 'θ',
+ 'd' => 'ι',
+ 'e' => 'κ',
+ 'f' => 'λ',
+ 'g' => 'μ',
+ 'h' => 'ν',
+ 'i' => 'ξ',
+ 'j' => 'ο',
+ 'k' => 'π',
+ 'l' => 'ρ',
+ 'm' => 'σ',
+ 'n' => 'τ',
+ 'o' => 'υ',
+ 'p' => 'φ',
+ 'q' => 'χ',
+ 'r' => 'ψ',
+ 's' => 'ω',
+ 't' => 'ㄅ',
+ 'u' => 'ㄆ',
+ 'v' => 'ㄇ',
+ 'w' => 'ㄈ',
+ 'x' => 'ㄉ',
+ 'y' => 'ㄊ',
+ 'z' => 'ㄋ',
+ '{' => 'ㄌ',
+ '|' => 'ㄍ',
+ '}' => 'ㄎ',
+ '~' => 'ㄏ',
+ '' => 'ㄐ',
+ '' => 'ㄑ',
+ '' => 'ㄒ',
+ '' => 'ㄓ',
+ '' => 'ㄔ',
+ '' => 'ㄕ',
+ '' => 'ㄖ',
+ '' => 'ㄗ',
+ '' => 'ㄘ',
+ '' => 'ㄙ',
+ '' => 'ㄚ',
+ '' => 'ㄛ',
+ '' => 'ㄜ',
+ '' => 'ㄝ',
+ '' => 'ㄞ',
+ '' => 'ㄟ',
+ '' => 'ㄠ',
+ '' => 'ㄡ',
+ '' => 'ㄢ',
+ '' => 'ㄣ',
+ '' => 'ㄤ',
+ '' => 'ㄥ',
+ '' => 'ㄦ',
+ '' => 'ㄧ',
+ '' => 'ㄨ',
+ '' => 'ㄩ',
+ '' => '˙',
+ '' => 'ˉ',
+ '' => 'ˊ',
+ '' => 'ˇ',
+ '' => 'ˋ',
+ '@' => '一',
+ 'A' => '乙',
+ 'B' => '丁',
+ 'C' => '七',
+ 'D' => '乃',
+ 'E' => '九',
+ 'F' => '了',
+ 'G' => '二',
+ 'H' => '人',
+ 'I' => '儿',
+ 'J' => '入',
+ 'K' => '八',
+ 'L' => '几',
+ 'M' => '刀',
+ 'N' => '刁',
+ 'O' => '力',
+ 'P' => '匕',
+ 'Q' => '十',
+ 'R' => '卜',
+ 'S' => '又',
+ 'T' => '三',
+ 'U' => '下',
+ 'V' => '丈',
+ 'W' => '上',
+ 'X' => '丫',
+ 'Y' => '丸',
+ 'Z' => '凡',
+ '[' => '久',
+ '\\' => '么',
+ ']' => '也',
+ '^' => '乞',
+ '_' => '于',
+ '`' => '亡',
+ 'a' => '兀',
+ 'b' => '刃',
+ 'c' => '勺',
+ 'd' => '千',
+ 'e' => '叉',
+ 'f' => '口',
+ 'g' => '土',
+ 'h' => '士',
+ 'i' => '夕',
+ 'j' => '大',
+ 'k' => '女',
+ 'l' => '子',
+ 'm' => '孑',
+ 'n' => '孓',
+ 'o' => '寸',
+ 'p' => '小',
+ 'q' => '尢',
+ 'r' => '尸',
+ 's' => '山',
+ 't' => '川',
+ 'u' => '工',
+ 'v' => '己',
+ 'w' => '已',
+ 'x' => '巳',
+ 'y' => '巾',
+ 'z' => '干',
+ '{' => '廾',
+ '|' => '弋',
+ '}' => '弓',
+ '~' => '才',
+ '' => '丑',
+ '' => '丐',
+ '' => '不',
+ '' => '中',
+ '' => '丰',
+ '' => '丹',
+ '' => '之',
+ '' => '尹',
+ '' => '予',
+ '' => '云',
+ '' => '井',
+ '' => '互',
+ '' => '五',
+ '' => '亢',
+ '' => '仁',
+ '' => '什',
+ '' => '仃',
+ '' => '仆',
+ '' => '仇',
+ '' => '仍',
+ '' => '今',
+ '' => '介',
+ '' => '仄',
+ '' => '元',
+ '' => '允',
+ '' => '內',
+ '' => '六',
+ '' => '兮',
+ '' => '公',
+ '' => '冗',
+ '' => '凶',
+ '' => '分',
+ '' => '切',
+ '' => '刈',
+ '' => '勻',
+ '' => '勾',
+ '' => '勿',
+ '' => '化',
+ '' => '匹',
+ '' => '午',
+ '' => '升',
+ '' => '卅',
+ '' => '卞',
+ '' => '厄',
+ '' => '友',
+ '' => '及',
+ '' => '反',
+ '' => '壬',
+ '' => '天',
+ '' => '夫',
+ '' => '太',
+ '' => '夭',
+ '' => '孔',
+ '' => '少',
+ '' => '尤',
+ '' => '尺',
+ '' => '屯',
+ '' => '巴',
+ '' => '幻',
+ '' => '廿',
+ '' => '弔',
+ '' => '引',
+ '' => '心',
+ '' => '戈',
+ '' => '戶',
+ '' => '手',
+ '' => '扎',
+ '' => '支',
+ '' => '文',
+ '' => '斗',
+ '' => '斤',
+ '' => '方',
+ '' => '日',
+ '' => '曰',
+ '' => '月',
+ '' => '木',
+ '' => '欠',
+ '' => '止',
+ '' => '歹',
+ '' => '毋',
+ '' => '比',
+ '' => '毛',
+ '' => '氏',
+ '' => '水',
+ '' => '火',
+ '' => '爪',
+ '' => '父',
+ '' => '爻',
+ '' => '片',
+ '' => '牙',
+ '' => '牛',
+ '' => '犬',
+ '' => '王',
+ '' => '丙',
+ '@' => '世',
+ 'A' => '丕',
+ 'B' => '且',
+ 'C' => '丘',
+ 'D' => '主',
+ 'E' => '乍',
+ 'F' => '乏',
+ 'G' => '乎',
+ 'H' => '以',
+ 'I' => '付',
+ 'J' => '仔',
+ 'K' => '仕',
+ 'L' => '他',
+ 'M' => '仗',
+ 'N' => '代',
+ 'O' => '令',
+ 'P' => '仙',
+ 'Q' => '仞',
+ 'R' => '充',
+ 'S' => '兄',
+ 'T' => '冉',
+ 'U' => '冊',
+ 'V' => '冬',
+ 'W' => '凹',
+ 'X' => '出',
+ 'Y' => '凸',
+ 'Z' => '刊',
+ '[' => '加',
+ '\\' => '功',
+ ']' => '包',
+ '^' => '匆',
+ '_' => '北',
+ '`' => '匝',
+ 'a' => '仟',
+ 'b' => '半',
+ 'c' => '卉',
+ 'd' => '卡',
+ 'e' => '占',
+ 'f' => '卯',
+ 'g' => '卮',
+ 'h' => '去',
+ 'i' => '可',
+ 'j' => '古',
+ 'k' => '右',
+ 'l' => '召',
+ 'm' => '叮',
+ 'n' => '叩',
+ 'o' => '叨',
+ 'p' => '叼',
+ 'q' => '司',
+ 'r' => '叵',
+ 's' => '叫',
+ 't' => '另',
+ 'u' => '只',
+ 'v' => '史',
+ 'w' => '叱',
+ 'x' => '台',
+ 'y' => '句',
+ 'z' => '叭',
+ '{' => '叻',
+ '|' => '四',
+ '}' => '囚',
+ '~' => '外',
+ '' => '央',
+ '' => '失',
+ '' => '奴',
+ '' => '奶',
+ '' => '孕',
+ '' => '它',
+ '' => '尼',
+ '' => '巨',
+ '' => '巧',
+ '' => '左',
+ '' => '市',
+ '' => '布',
+ '' => '平',
+ '' => '幼',
+ '' => '弁',
+ '' => '弘',
+ '' => '弗',
+ '' => '必',
+ '' => '戊',
+ '' => '打',
+ '' => '扔',
+ '' => '扒',
+ '' => '扑',
+ '' => '斥',
+ '' => '旦',
+ '' => '朮',
+ '' => '本',
+ '' => '未',
+ '' => '末',
+ '' => '札',
+ '' => '正',
+ '' => '母',
+ '' => '民',
+ '' => '氐',
+ '' => '永',
+ '' => '汁',
+ '' => '汀',
+ '' => '氾',
+ '' => '犯',
+ '' => '玄',
+ '' => '玉',
+ '' => '瓜',
+ '' => '瓦',
+ '' => '甘',
+ '' => '生',
+ '' => '用',
+ '' => '甩',
+ '' => '田',
+ '' => '由',
+ '' => '甲',
+ '' => '申',
+ '' => '疋',
+ '' => '白',
+ '' => '皮',
+ '' => '皿',
+ '' => '目',
+ '' => '矛',
+ '' => '矢',
+ '' => '石',
+ '' => '示',
+ '' => '禾',
+ '' => '穴',
+ '' => '立',
+ '' => '丞',
+ '' => '丟',
+ '' => '乒',
+ '' => '乓',
+ '' => '乩',
+ '' => '亙',
+ '' => '交',
+ '' => '亦',
+ '' => '亥',
+ '' => '仿',
+ '' => '伉',
+ '' => '伙',
+ '' => '伊',
+ '' => '伕',
+ '' => '伍',
+ '' => '伐',
+ '' => '休',
+ '' => '伏',
+ '' => '仲',
+ '' => '件',
+ '' => '任',
+ '' => '仰',
+ '' => '仳',
+ '' => '份',
+ '' => '企',
+ '' => '伋',
+ '' => '光',
+ '' => '兇',
+ '' => '兆',
+ '' => '先',
+ '' => '全',
+ '@' => '共',
+ 'A' => '再',
+ 'B' => '冰',
+ 'C' => '列',
+ 'D' => '刑',
+ 'E' => '划',
+ 'F' => '刎',
+ 'G' => '刖',
+ 'H' => '劣',
+ 'I' => '匈',
+ 'J' => '匡',
+ 'K' => '匠',
+ 'L' => '印',
+ 'M' => '危',
+ 'N' => '吉',
+ 'O' => '吏',
+ 'P' => '同',
+ 'Q' => '吊',
+ 'R' => '吐',
+ 'S' => '吁',
+ 'T' => '吋',
+ 'U' => '各',
+ 'V' => '向',
+ 'W' => '名',
+ 'X' => '合',
+ 'Y' => '吃',
+ 'Z' => '后',
+ '[' => '吆',
+ '\\' => '吒',
+ ']' => '因',
+ '^' => '回',
+ '_' => '囝',
+ '`' => '圳',
+ 'a' => '地',
+ 'b' => '在',
+ 'c' => '圭',
+ 'd' => '圬',
+ 'e' => '圯',
+ 'f' => '圩',
+ 'g' => '夙',
+ 'h' => '多',
+ 'i' => '夷',
+ 'j' => '夸',
+ 'k' => '妄',
+ 'l' => '奸',
+ 'm' => '妃',
+ 'n' => '好',
+ 'o' => '她',
+ 'p' => '如',
+ 'q' => '妁',
+ 'r' => '字',
+ 's' => '存',
+ 't' => '宇',
+ 'u' => '守',
+ 'v' => '宅',
+ 'w' => '安',
+ 'x' => '寺',
+ 'y' => '尖',
+ 'z' => '屹',
+ '{' => '州',
+ '|' => '帆',
+ '}' => '并',
+ '~' => '年',
+ '' => '式',
+ '' => '弛',
+ '' => '忙',
+ '' => '忖',
+ '' => '戎',
+ '' => '戌',
+ '' => '戍',
+ '' => '成',
+ '' => '扣',
+ '' => '扛',
+ '' => '托',
+ '' => '收',
+ '' => '早',
+ '' => '旨',
+ '' => '旬',
+ '' => '旭',
+ '' => '曲',
+ '' => '曳',
+ '' => '有',
+ '' => '朽',
+ '' => '朴',
+ '' => '朱',
+ '' => '朵',
+ '' => '次',
+ '' => '此',
+ '' => '死',
+ '' => '氖',
+ '' => '汝',
+ '' => '汗',
+ '' => '汙',
+ '' => '江',
+ '' => '池',
+ '' => '汐',
+ '' => '汕',
+ '' => '污',
+ '' => '汛',
+ '' => '汍',
+ '' => '汎',
+ '' => '灰',
+ '' => '牟',
+ '' => '牝',
+ '' => '百',
+ '' => '竹',
+ '' => '米',
+ '' => '糸',
+ '' => '缶',
+ '' => '羊',
+ '' => '羽',
+ '' => '老',
+ '' => '考',
+ '' => '而',
+ '' => '耒',
+ '' => '耳',
+ '' => '聿',
+ '' => '肉',
+ '' => '肋',
+ '' => '肌',
+ '' => '臣',
+ '' => '自',
+ '' => '至',
+ '' => '臼',
+ '' => '舌',
+ '' => '舛',
+ '' => '舟',
+ '' => '艮',
+ '' => '色',
+ '' => '艾',
+ '' => '虫',
+ '' => '血',
+ '' => '行',
+ '' => '衣',
+ '' => '西',
+ '' => '阡',
+ '' => '串',
+ '' => '亨',
+ '' => '位',
+ '' => '住',
+ '' => '佇',
+ '' => '佗',
+ '' => '佞',
+ '' => '伴',
+ '' => '佛',
+ '' => '何',
+ '' => '估',
+ '' => '佐',
+ '' => '佑',
+ '' => '伽',
+ '' => '伺',
+ '' => '伸',
+ '' => '佃',
+ '' => '佔',
+ '' => '似',
+ '' => '但',
+ '' => '佣',
+ '@' => '作',
+ 'A' => '你',
+ 'B' => '伯',
+ 'C' => '低',
+ 'D' => '伶',
+ 'E' => '余',
+ 'F' => '佝',
+ 'G' => '佈',
+ 'H' => '佚',
+ 'I' => '兌',
+ 'J' => '克',
+ 'K' => '免',
+ 'L' => '兵',
+ 'M' => '冶',
+ 'N' => '冷',
+ 'O' => '別',
+ 'P' => '判',
+ 'Q' => '利',
+ 'R' => '刪',
+ 'S' => '刨',
+ 'T' => '劫',
+ 'U' => '助',
+ 'V' => '努',
+ 'W' => '劬',
+ 'X' => '匣',
+ 'Y' => '即',
+ 'Z' => '卵',
+ '[' => '吝',
+ '\\' => '吭',
+ ']' => '吞',
+ '^' => '吾',
+ '_' => '否',
+ '`' => '呎',
+ 'a' => '吧',
+ 'b' => '呆',
+ 'c' => '呃',
+ 'd' => '吳',
+ 'e' => '呈',
+ 'f' => '呂',
+ 'g' => '君',
+ 'h' => '吩',
+ 'i' => '告',
+ 'j' => '吹',
+ 'k' => '吻',
+ 'l' => '吸',
+ 'm' => '吮',
+ 'n' => '吵',
+ 'o' => '吶',
+ 'p' => '吠',
+ 'q' => '吼',
+ 'r' => '呀',
+ 's' => '吱',
+ 't' => '含',
+ 'u' => '吟',
+ 'v' => '听',
+ 'w' => '囪',
+ 'x' => '困',
+ 'y' => '囤',
+ 'z' => '囫',
+ '{' => '坊',
+ '|' => '坑',
+ '}' => '址',
+ '~' => '坍',
+ '' => '均',
+ '' => '坎',
+ '' => '圾',
+ '' => '坐',
+ '' => '坏',
+ '' => '圻',
+ '' => '壯',
+ '' => '夾',
+ '' => '妝',
+ '' => '妒',
+ '' => '妨',
+ '' => '妞',
+ '' => '妣',
+ '' => '妙',
+ '' => '妖',
+ '' => '妍',
+ '' => '妤',
+ '' => '妓',
+ '' => '妊',
+ '' => '妥',
+ '' => '孝',
+ '' => '孜',
+ '' => '孚',
+ '' => '孛',
+ '' => '完',
+ '' => '宋',
+ '' => '宏',
+ '' => '尬',
+ '' => '局',
+ '' => '屁',
+ '' => '尿',
+ '' => '尾',
+ '' => '岐',
+ '' => '岑',
+ '' => '岔',
+ '' => '岌',
+ '' => '巫',
+ '' => '希',
+ '' => '序',
+ '' => '庇',
+ '' => '床',
+ '' => '廷',
+ '' => '弄',
+ '' => '弟',
+ '' => '彤',
+ '' => '形',
+ '' => '彷',
+ '' => '役',
+ '' => '忘',
+ '' => '忌',
+ '' => '志',
+ '' => '忍',
+ '' => '忱',
+ '' => '快',
+ '' => '忸',
+ '' => '忪',
+ '' => '戒',
+ '' => '我',
+ '' => '抄',
+ '' => '抗',
+ '' => '抖',
+ '' => '技',
+ '' => '扶',
+ '' => '抉',
+ '' => '扭',
+ '' => '把',
+ '' => '扼',
+ '' => '找',
+ '' => '批',
+ '' => '扳',
+ '' => '抒',
+ '' => '扯',
+ '' => '折',
+ '' => '扮',
+ '' => '投',
+ '' => '抓',
+ '' => '抑',
+ '' => '抆',
+ '' => '改',
+ '' => '攻',
+ '' => '攸',
+ '' => '旱',
+ '' => '更',
+ '' => '束',
+ '' => '李',
+ '' => '杏',
+ '' => '材',
+ '' => '村',
+ '' => '杜',
+ '' => '杖',
+ '' => '杞',
+ '' => '杉',
+ '' => '杆',
+ '' => '杠',
+ '@' => '杓',
+ 'A' => '杗',
+ 'B' => '步',
+ 'C' => '每',
+ 'D' => '求',
+ 'E' => '汞',
+ 'F' => '沙',
+ 'G' => '沁',
+ 'H' => '沈',
+ 'I' => '沉',
+ 'J' => '沅',
+ 'K' => '沛',
+ 'L' => '汪',
+ 'M' => '決',
+ 'N' => '沐',
+ 'O' => '汰',
+ 'P' => '沌',
+ 'Q' => '汨',
+ 'R' => '沖',
+ 'S' => '沒',
+ 'T' => '汽',
+ 'U' => '沃',
+ 'V' => '汲',
+ 'W' => '汾',
+ 'X' => '汴',
+ 'Y' => '沆',
+ 'Z' => '汶',
+ '[' => '沍',
+ '\\' => '沔',
+ ']' => '沘',
+ '^' => '沂',
+ '_' => '灶',
+ '`' => '灼',
+ 'a' => '災',
+ 'b' => '灸',
+ 'c' => '牢',
+ 'd' => '牡',
+ 'e' => '牠',
+ 'f' => '狄',
+ 'g' => '狂',
+ 'h' => '玖',
+ 'i' => '甬',
+ 'j' => '甫',
+ 'k' => '男',
+ 'l' => '甸',
+ 'm' => '皂',
+ 'n' => '盯',
+ 'o' => '矣',
+ 'p' => '私',
+ 'q' => '秀',
+ 'r' => '禿',
+ 's' => '究',
+ 't' => '系',
+ 'u' => '罕',
+ 'v' => '肖',
+ 'w' => '肓',
+ 'x' => '肝',
+ 'y' => '肘',
+ 'z' => '肛',
+ '{' => '肚',
+ '|' => '育',
+ '}' => '良',
+ '~' => '芒',
+ '' => '芋',
+ '' => '芍',
+ '' => '見',
+ '' => '角',
+ '' => '言',
+ '' => '谷',
+ '' => '豆',
+ '' => '豕',
+ '' => '貝',
+ '' => '赤',
+ '' => '走',
+ '' => '足',
+ '' => '身',
+ '' => '車',
+ '' => '辛',
+ '' => '辰',
+ '' => '迂',
+ '' => '迆',
+ '' => '迅',
+ '' => '迄',
+ '' => '巡',
+ '' => '邑',
+ '' => '邢',
+ '' => '邪',
+ '' => '邦',
+ '' => '那',
+ '' => '酉',
+ '' => '釆',
+ '' => '里',
+ '' => '防',
+ '' => '阮',
+ '' => '阱',
+ '' => '阪',
+ '' => '阬',
+ '' => '並',
+ '' => '乖',
+ '' => '乳',
+ '' => '事',
+ '' => '些',
+ '' => '亞',
+ '' => '享',
+ '' => '京',
+ '' => '佯',
+ '' => '依',
+ '' => '侍',
+ '' => '佳',
+ '' => '使',
+ '' => '佬',
+ '' => '供',
+ '' => '例',
+ '' => '來',
+ '' => '侃',
+ '' => '佰',
+ '' => '併',
+ '' => '侈',
+ '' => '佩',
+ '' => '佻',
+ '' => '侖',
+ '' => '佾',
+ '' => '侏',
+ '' => '侑',
+ '' => '佺',
+ '' => '兔',
+ '' => '兒',
+ '' => '兕',
+ '' => '兩',
+ '' => '具',
+ '' => '其',
+ '' => '典',
+ '' => '冽',
+ '' => '函',
+ '' => '刻',
+ '' => '券',
+ '' => '刷',
+ '' => '刺',
+ '' => '到',
+ '' => '刮',
+ '' => '制',
+ '' => '剁',
+ '' => '劾',
+ '' => '劻',
+ '' => '卒',
+ '' => '協',
+ '' => '卓',
+ '' => '卑',
+ '' => '卦',
+ '' => '卷',
+ '' => '卸',
+ '' => '卹',
+ '' => '取',
+ '' => '叔',
+ '' => '受',
+ '' => '味',
+ '' => '呵',
+ '@' => '咖',
+ 'A' => '呸',
+ 'B' => '咕',
+ 'C' => '咀',
+ 'D' => '呻',
+ 'E' => '呷',
+ 'F' => '咄',
+ 'G' => '咒',
+ 'H' => '咆',
+ 'I' => '呼',
+ 'J' => '咐',
+ 'K' => '呱',
+ 'L' => '呶',
+ 'M' => '和',
+ 'N' => '咚',
+ 'O' => '呢',
+ 'P' => '周',
+ 'Q' => '咋',
+ 'R' => '命',
+ 'S' => '咎',
+ 'T' => '固',
+ 'U' => '垃',
+ 'V' => '坷',
+ 'W' => '坪',
+ 'X' => '坩',
+ 'Y' => '坡',
+ 'Z' => '坦',
+ '[' => '坤',
+ '\\' => '坼',
+ ']' => '夜',
+ '^' => '奉',
+ '_' => '奇',
+ '`' => '奈',
+ 'a' => '奄',
+ 'b' => '奔',
+ 'c' => '妾',
+ 'd' => '妻',
+ 'e' => '委',
+ 'f' => '妹',
+ 'g' => '妮',
+ 'h' => '姑',
+ 'i' => '姆',
+ 'j' => '姐',
+ 'k' => '姍',
+ 'l' => '始',
+ 'm' => '姓',
+ 'n' => '姊',
+ 'o' => '妯',
+ 'p' => '妳',
+ 'q' => '姒',
+ 'r' => '姅',
+ 's' => '孟',
+ 't' => '孤',
+ 'u' => '季',
+ 'v' => '宗',
+ 'w' => '定',
+ 'x' => '官',
+ 'y' => '宜',
+ 'z' => '宙',
+ '{' => '宛',
+ '|' => '尚',
+ '}' => '屈',
+ '~' => '居',
+ '' => '屆',
+ '' => '岷',
+ '' => '岡',
+ '' => '岸',
+ '' => '岩',
+ '' => '岫',
+ '' => '岱',
+ '' => '岳',
+ '' => '帘',
+ '' => '帚',
+ '' => '帖',
+ '' => '帕',
+ '' => '帛',
+ '' => '帑',
+ '' => '幸',
+ '' => '庚',
+ '' => '店',
+ '' => '府',
+ '' => '底',
+ '' => '庖',
+ '' => '延',
+ '' => '弦',
+ '' => '弧',
+ '' => '弩',
+ '' => '往',
+ '' => '征',
+ '' => '彿',
+ '' => '彼',
+ '' => '忝',
+ '' => '忠',
+ '' => '忽',
+ '' => '念',
+ '' => '忿',
+ '' => '怏',
+ '' => '怔',
+ '' => '怯',
+ '' => '怵',
+ '' => '怖',
+ '' => '怪',
+ '' => '怕',
+ '' => '怡',
+ '' => '性',
+ '' => '怩',
+ '' => '怫',
+ '' => '怛',
+ '' => '或',
+ '' => '戕',
+ '' => '房',
+ '' => '戾',
+ '' => '所',
+ '' => '承',
+ '' => '拉',
+ '' => '拌',
+ '' => '拄',
+ '' => '抿',
+ '' => '拂',
+ '' => '抹',
+ '' => '拒',
+ '' => '招',
+ '' => '披',
+ '' => '拓',
+ '' => '拔',
+ '' => '拋',
+ '' => '拈',
+ '' => '抨',
+ '' => '抽',
+ '' => '押',
+ '' => '拐',
+ '' => '拙',
+ '' => '拇',
+ '' => '拍',
+ '' => '抵',
+ '' => '拚',
+ '' => '抱',
+ '' => '拘',
+ '' => '拖',
+ '' => '拗',
+ '' => '拆',
+ '' => '抬',
+ '' => '拎',
+ '' => '放',
+ '' => '斧',
+ '' => '於',
+ '' => '旺',
+ '' => '昔',
+ '' => '易',
+ '' => '昌',
+ '' => '昆',
+ '' => '昂',
+ '' => '明',
+ '' => '昀',
+ '' => '昏',
+ '' => '昕',
+ '' => '昊',
+ '@' => '昇',
+ 'A' => '服',
+ 'B' => '朋',
+ 'C' => '杭',
+ 'D' => '枋',
+ 'E' => '枕',
+ 'F' => '東',
+ 'G' => '果',
+ 'H' => '杳',
+ 'I' => '杷',
+ 'J' => '枇',
+ 'K' => '枝',
+ 'L' => '林',
+ 'M' => '杯',
+ 'N' => '杰',
+ 'O' => '板',
+ 'P' => '枉',
+ 'Q' => '松',
+ 'R' => '析',
+ 'S' => '杵',
+ 'T' => '枚',
+ 'U' => '枓',
+ 'V' => '杼',
+ 'W' => '杪',
+ 'X' => '杲',
+ 'Y' => '欣',
+ 'Z' => '武',
+ '[' => '歧',
+ '\\' => '歿',
+ ']' => '氓',
+ '^' => '氛',
+ '_' => '泣',
+ '`' => '注',
+ 'a' => '泳',
+ 'b' => '沱',
+ 'c' => '泌',
+ 'd' => '泥',
+ 'e' => '河',
+ 'f' => '沽',
+ 'g' => '沾',
+ 'h' => '沼',
+ 'i' => '波',
+ 'j' => '沫',
+ 'k' => '法',
+ 'l' => '泓',
+ 'm' => '沸',
+ 'n' => '泄',
+ 'o' => '油',
+ 'p' => '況',
+ 'q' => '沮',
+ 'r' => '泗',
+ 's' => '泅',
+ 't' => '泱',
+ 'u' => '沿',
+ 'v' => '治',
+ 'w' => '泡',
+ 'x' => '泛',
+ 'y' => '泊',
+ 'z' => '沬',
+ '{' => '泯',
+ '|' => '泜',
+ '}' => '泖',
+ '~' => '泠',
+ '' => '炕',
+ '' => '炎',
+ '' => '炒',
+ '' => '炊',
+ '' => '炙',
+ '' => '爬',
+ '' => '爭',
+ '' => '爸',
+ '' => '版',
+ '' => '牧',
+ '' => '物',
+ '' => '狀',
+ '' => '狎',
+ '' => '狙',
+ '' => '狗',
+ '' => '狐',
+ '' => '玩',
+ '' => '玨',
+ '' => '玟',
+ '' => '玫',
+ '' => '玥',
+ '' => '甽',
+ '' => '疝',
+ '' => '疙',
+ '' => '疚',
+ '' => '的',
+ '' => '盂',
+ '' => '盲',
+ '' => '直',
+ '' => '知',
+ '' => '矽',
+ '' => '社',
+ '' => '祀',
+ '' => '祁',
+ '' => '秉',
+ '' => '秈',
+ '' => '空',
+ '' => '穹',
+ '' => '竺',
+ '' => '糾',
+ '' => '罔',
+ '' => '羌',
+ '' => '羋',
+ '' => '者',
+ '' => '肺',
+ '' => '肥',
+ '' => '肢',
+ '' => '肱',
+ '' => '股',
+ '' => '肫',
+ '' => '肩',
+ '' => '肴',
+ '' => '肪',
+ '' => '肯',
+ '' => '臥',
+ '' => '臾',
+ '' => '舍',
+ '' => '芳',
+ '' => '芝',
+ '' => '芙',
+ '' => '芭',
+ '' => '芽',
+ '' => '芟',
+ '' => '芹',
+ '' => '花',
+ '' => '芬',
+ '' => '芥',
+ '' => '芯',
+ '' => '芸',
+ '' => '芣',
+ '' => '芰',
+ '' => '芾',
+ '' => '芷',
+ '' => '虎',
+ '' => '虱',
+ '' => '初',
+ '' => '表',
+ '' => '軋',
+ '' => '迎',
+ '' => '返',
+ '' => '近',
+ '' => '邵',
+ '' => '邸',
+ '' => '邱',
+ '' => '邶',
+ '' => '采',
+ '' => '金',
+ '' => '長',
+ '' => '門',
+ '' => '阜',
+ '' => '陀',
+ '' => '阿',
+ '' => '阻',
+ '' => '附',
+ '@' => '陂',
+ 'A' => '隹',
+ 'B' => '雨',
+ 'C' => '青',
+ 'D' => '非',
+ 'E' => '亟',
+ 'F' => '亭',
+ 'G' => '亮',
+ 'H' => '信',
+ 'I' => '侵',
+ 'J' => '侯',
+ 'K' => '便',
+ 'L' => '俠',
+ 'M' => '俑',
+ 'N' => '俏',
+ 'O' => '保',
+ 'P' => '促',
+ 'Q' => '侶',
+ 'R' => '俘',
+ 'S' => '俟',
+ 'T' => '俊',
+ 'U' => '俗',
+ 'V' => '侮',
+ 'W' => '俐',
+ 'X' => '俄',
+ 'Y' => '係',
+ 'Z' => '俚',
+ '[' => '俎',
+ '\\' => '俞',
+ ']' => '侷',
+ '^' => '兗',
+ '_' => '冒',
+ '`' => '冑',
+ 'a' => '冠',
+ 'b' => '剎',
+ 'c' => '剃',
+ 'd' => '削',
+ 'e' => '前',
+ 'f' => '剌',
+ 'g' => '剋',
+ 'h' => '則',
+ 'i' => '勇',
+ 'j' => '勉',
+ 'k' => '勃',
+ 'l' => '勁',
+ 'm' => '匍',
+ 'n' => '南',
+ 'o' => '卻',
+ 'p' => '厚',
+ 'q' => '叛',
+ 'r' => '咬',
+ 's' => '哀',
+ 't' => '咨',
+ 'u' => '哎',
+ 'v' => '哉',
+ 'w' => '咸',
+ 'x' => '咦',
+ 'y' => '咳',
+ 'z' => '哇',
+ '{' => '哂',
+ '|' => '咽',
+ '}' => '咪',
+ '~' => '品',
+ '' => '哄',
+ '' => '哈',
+ '' => '咯',
+ '' => '咫',
+ '' => '咱',
+ '' => '咻',
+ '' => '咩',
+ '' => '咧',
+ '' => '咿',
+ '' => '囿',
+ '' => '垂',
+ '' => '型',
+ '' => '垠',
+ '' => '垣',
+ '' => '垢',
+ '' => '城',
+ '' => '垮',
+ '' => '垓',
+ '' => '奕',
+ '' => '契',
+ '' => '奏',
+ '' => '奎',
+ '' => '奐',
+ '' => '姜',
+ '' => '姘',
+ '' => '姿',
+ '' => '姣',
+ '' => '姨',
+ '' => '娃',
+ '' => '姥',
+ '' => '姪',
+ '' => '姚',
+ '' => '姦',
+ '' => '威',
+ '' => '姻',
+ '' => '孩',
+ '' => '宣',
+ '' => '宦',
+ '' => '室',
+ '' => '客',
+ '' => '宥',
+ '' => '封',
+ '' => '屎',
+ '' => '屏',
+ '' => '屍',
+ '' => '屋',
+ '' => '峙',
+ '' => '峒',
+ '' => '巷',
+ '' => '帝',
+ '' => '帥',
+ '' => '帟',
+ '' => '幽',
+ '' => '庠',
+ '' => '度',
+ '' => '建',
+ '' => '弈',
+ '' => '弭',
+ '' => '彥',
+ '' => '很',
+ '' => '待',
+ '' => '徊',
+ '' => '律',
+ '' => '徇',
+ '' => '後',
+ '' => '徉',
+ '' => '怒',
+ '' => '思',
+ '' => '怠',
+ '' => '急',
+ '' => '怎',
+ '' => '怨',
+ '' => '恍',
+ '' => '恰',
+ '' => '恨',
+ '' => '恢',
+ '' => '恆',
+ '' => '恃',
+ '' => '恬',
+ '' => '恫',
+ '' => '恪',
+ '' => '恤',
+ '' => '扁',
+ '' => '拜',
+ '' => '挖',
+ '' => '按',
+ '' => '拼',
+ '' => '拭',
+ '' => '持',
+ '' => '拮',
+ '' => '拽',
+ '' => '指',
+ '' => '拱',
+ '' => '拷',
+ '@' => '拯',
+ 'A' => '括',
+ 'B' => '拾',
+ 'C' => '拴',
+ 'D' => '挑',
+ 'E' => '挂',
+ 'F' => '政',
+ 'G' => '故',
+ 'H' => '斫',
+ 'I' => '施',
+ 'J' => '既',
+ 'K' => '春',
+ 'L' => '昭',
+ 'M' => '映',
+ 'N' => '昧',
+ 'O' => '是',
+ 'P' => '星',
+ 'Q' => '昨',
+ 'R' => '昱',
+ 'S' => '昤',
+ 'T' => '曷',
+ 'U' => '柿',
+ 'V' => '染',
+ 'W' => '柱',
+ 'X' => '柔',
+ 'Y' => '某',
+ 'Z' => '柬',
+ '[' => '架',
+ '\\' => '枯',
+ ']' => '柵',
+ '^' => '柩',
+ '_' => '柯',
+ '`' => '柄',
+ 'a' => '柑',
+ 'b' => '枴',
+ 'c' => '柚',
+ 'd' => '查',
+ 'e' => '枸',
+ 'f' => '柏',
+ 'g' => '柞',
+ 'h' => '柳',
+ 'i' => '枰',
+ 'j' => '柙',
+ 'k' => '柢',
+ 'l' => '柝',
+ 'm' => '柒',
+ 'n' => '歪',
+ 'o' => '殃',
+ 'p' => '殆',
+ 'q' => '段',
+ 'r' => '毒',
+ 's' => '毗',
+ 't' => '氟',
+ 'u' => '泉',
+ 'v' => '洋',
+ 'w' => '洲',
+ 'x' => '洪',
+ 'y' => '流',
+ 'z' => '津',
+ '{' => '洌',
+ '|' => '洱',
+ '}' => '洞',
+ '~' => '洗',
+ '' => '活',
+ '' => '洽',
+ '' => '派',
+ '' => '洶',
+ '' => '洛',
+ '' => '泵',
+ '' => '洹',
+ '' => '洧',
+ '' => '洸',
+ '' => '洩',
+ '' => '洮',
+ '' => '洵',
+ '' => '洎',
+ '' => '洫',
+ '' => '炫',
+ '' => '為',
+ '' => '炳',
+ '' => '炬',
+ '' => '炯',
+ '' => '炭',
+ '' => '炸',
+ '' => '炮',
+ '' => '炤',
+ '' => '爰',
+ '' => '牲',
+ '' => '牯',
+ '' => '牴',
+ '' => '狩',
+ '' => '狠',
+ '' => '狡',
+ '' => '玷',
+ '' => '珊',
+ '' => '玻',
+ '' => '玲',
+ '' => '珍',
+ '' => '珀',
+ '' => '玳',
+ '' => '甚',
+ '' => '甭',
+ '' => '畏',
+ '' => '界',
+ '' => '畎',
+ '' => '畋',
+ '' => '疫',
+ '' => '疤',
+ '' => '疥',
+ '' => '疢',
+ '' => '疣',
+ '' => '癸',
+ '' => '皆',
+ '' => '皇',
+ '' => '皈',
+ '' => '盈',
+ '' => '盆',
+ '' => '盃',
+ '' => '盅',
+ '' => '省',
+ '' => '盹',
+ '' => '相',
+ '' => '眉',
+ '' => '看',
+ '' => '盾',
+ '' => '盼',
+ '' => '眇',
+ '' => '矜',
+ '' => '砂',
+ '' => '研',
+ '' => '砌',
+ '' => '砍',
+ '' => '祆',
+ '' => '祉',
+ '' => '祈',
+ '' => '祇',
+ '' => '禹',
+ '' => '禺',
+ '' => '科',
+ '' => '秒',
+ '' => '秋',
+ '' => '穿',
+ '' => '突',
+ '' => '竿',
+ '' => '竽',
+ '' => '籽',
+ '' => '紂',
+ '' => '紅',
+ '' => '紀',
+ '' => '紉',
+ '' => '紇',
+ '' => '約',
+ '' => '紆',
+ '' => '缸',
+ '' => '美',
+ '' => '羿',
+ '' => '耄',
+ '@' => '耐',
+ 'A' => '耍',
+ 'B' => '耑',
+ 'C' => '耶',
+ 'D' => '胖',
+ 'E' => '胥',
+ 'F' => '胚',
+ 'G' => '胃',
+ 'H' => '胄',
+ 'I' => '背',
+ 'J' => '胡',
+ 'K' => '胛',
+ 'L' => '胎',
+ 'M' => '胞',
+ 'N' => '胤',
+ 'O' => '胝',
+ 'P' => '致',
+ 'Q' => '舢',
+ 'R' => '苧',
+ 'S' => '范',
+ 'T' => '茅',
+ 'U' => '苣',
+ 'V' => '苛',
+ 'W' => '苦',
+ 'X' => '茄',
+ 'Y' => '若',
+ 'Z' => '茂',
+ '[' => '茉',
+ '\\' => '苒',
+ ']' => '苗',
+ '^' => '英',
+ '_' => '茁',
+ '`' => '苜',
+ 'a' => '苔',
+ 'b' => '苑',
+ 'c' => '苞',
+ 'd' => '苓',
+ 'e' => '苟',
+ 'f' => '苯',
+ 'g' => '茆',
+ 'h' => '虐',
+ 'i' => '虹',
+ 'j' => '虻',
+ 'k' => '虺',
+ 'l' => '衍',
+ 'm' => '衫',
+ 'n' => '要',
+ 'o' => '觔',
+ 'p' => '計',
+ 'q' => '訂',
+ 'r' => '訃',
+ 's' => '貞',
+ 't' => '負',
+ 'u' => '赴',
+ 'v' => '赳',
+ 'w' => '趴',
+ 'x' => '軍',
+ 'y' => '軌',
+ 'z' => '述',
+ '{' => '迦',
+ '|' => '迢',
+ '}' => '迪',
+ '~' => '迥',
+ '' => '迭',
+ '' => '迫',
+ '' => '迤',
+ '' => '迨',
+ '' => '郊',
+ '' => '郎',
+ '' => '郁',
+ '' => '郃',
+ '' => '酋',
+ '' => '酊',
+ '' => '重',
+ '' => '閂',
+ '' => '限',
+ '' => '陋',
+ '' => '陌',
+ '' => '降',
+ '' => '面',
+ '' => '革',
+ '' => '韋',
+ '' => '韭',
+ '' => '音',
+ '' => '頁',
+ '' => '風',
+ '' => '飛',
+ '' => '食',
+ '' => '首',
+ '' => '香',
+ '' => '乘',
+ '' => '亳',
+ '' => '倌',
+ '' => '倍',
+ '' => '倣',
+ '' => '俯',
+ '' => '倦',
+ '' => '倥',
+ '' => '俸',
+ '' => '倩',
+ '' => '倖',
+ '' => '倆',
+ '' => '值',
+ '' => '借',
+ '' => '倚',
+ '' => '倒',
+ '' => '們',
+ '' => '俺',
+ '' => '倀',
+ '' => '倔',
+ '' => '倨',
+ '' => '俱',
+ '' => '倡',
+ '' => '個',
+ '' => '候',
+ '' => '倘',
+ '' => '俳',
+ '' => '修',
+ '' => '倭',
+ '' => '倪',
+ '' => '俾',
+ '' => '倫',
+ '' => '倉',
+ '' => '兼',
+ '' => '冤',
+ '' => '冥',
+ '' => '冢',
+ '' => '凍',
+ '' => '凌',
+ '' => '准',
+ '' => '凋',
+ '' => '剖',
+ '' => '剜',
+ '' => '剔',
+ '' => '剛',
+ '' => '剝',
+ '' => '匪',
+ '' => '卿',
+ '' => '原',
+ '' => '厝',
+ '' => '叟',
+ '' => '哨',
+ '' => '唐',
+ '' => '唁',
+ '' => '唷',
+ '' => '哼',
+ '' => '哥',
+ '' => '哲',
+ '' => '唆',
+ '' => '哺',
+ '' => '唔',
+ '' => '哩',
+ '' => '哭',
+ '' => '員',
+ '' => '唉',
+ '' => '哮',
+ '' => '哪',
+ '@' => '哦',
+ 'A' => '唧',
+ 'B' => '唇',
+ 'C' => '哽',
+ 'D' => '唏',
+ 'E' => '圃',
+ 'F' => '圄',
+ 'G' => '埂',
+ 'H' => '埔',
+ 'I' => '埋',
+ 'J' => '埃',
+ 'K' => '堉',
+ 'L' => '夏',
+ 'M' => '套',
+ 'N' => '奘',
+ 'O' => '奚',
+ 'P' => '娑',
+ 'Q' => '娘',
+ 'R' => '娜',
+ 'S' => '娟',
+ 'T' => '娛',
+ 'U' => '娓',
+ 'V' => '姬',
+ 'W' => '娠',
+ 'X' => '娣',
+ 'Y' => '娩',
+ 'Z' => '娥',
+ '[' => '娌',
+ '\\' => '娉',
+ ']' => '孫',
+ '^' => '屘',
+ '_' => '宰',
+ '`' => '害',
+ 'a' => '家',
+ 'b' => '宴',
+ 'c' => '宮',
+ 'd' => '宵',
+ 'e' => '容',
+ 'f' => '宸',
+ 'g' => '射',
+ 'h' => '屑',
+ 'i' => '展',
+ 'j' => '屐',
+ 'k' => '峭',
+ 'l' => '峽',
+ 'm' => '峻',
+ 'n' => '峪',
+ 'o' => '峨',
+ 'p' => '峰',
+ 'q' => '島',
+ 'r' => '崁',
+ 's' => '峴',
+ 't' => '差',
+ 'u' => '席',
+ 'v' => '師',
+ 'w' => '庫',
+ 'x' => '庭',
+ 'y' => '座',
+ 'z' => '弱',
+ '{' => '徒',
+ '|' => '徑',
+ '}' => '徐',
+ '~' => '恙',
+ '' => '恣',
+ '' => '恥',
+ '' => '恐',
+ '' => '恕',
+ '' => '恭',
+ '' => '恩',
+ '' => '息',
+ '' => '悄',
+ '' => '悟',
+ '' => '悚',
+ '' => '悍',
+ '' => '悔',
+ '' => '悌',
+ '' => '悅',
+ '' => '悖',
+ '' => '扇',
+ '' => '拳',
+ '' => '挈',
+ '' => '拿',
+ '' => '捎',
+ '' => '挾',
+ '' => '振',
+ '' => '捕',
+ '' => '捂',
+ '' => '捆',
+ '' => '捏',
+ '' => '捉',
+ '' => '挺',
+ '' => '捐',
+ '' => '挽',
+ '' => '挪',
+ '' => '挫',
+ '' => '挨',
+ '' => '捍',
+ '' => '捌',
+ '' => '效',
+ '' => '敉',
+ '' => '料',
+ '' => '旁',
+ '' => '旅',
+ '' => '時',
+ '' => '晉',
+ '' => '晏',
+ '' => '晃',
+ '' => '晒',
+ '' => '晌',
+ '' => '晅',
+ '' => '晁',
+ '' => '書',
+ '' => '朔',
+ '' => '朕',
+ '' => '朗',
+ '' => '校',
+ '' => '核',
+ '' => '案',
+ '' => '框',
+ '' => '桓',
+ '' => '根',
+ '' => '桂',
+ '' => '桔',
+ '' => '栩',
+ '' => '梳',
+ '' => '栗',
+ '' => '桌',
+ '' => '桑',
+ '' => '栽',
+ '' => '柴',
+ '' => '桐',
+ '' => '桀',
+ '' => '格',
+ '' => '桃',
+ '' => '株',
+ '' => '桅',
+ '' => '栓',
+ '' => '栘',
+ '' => '桁',
+ '' => '殊',
+ '' => '殉',
+ '' => '殷',
+ '' => '氣',
+ '' => '氧',
+ '' => '氨',
+ '' => '氦',
+ '' => '氤',
+ '' => '泰',
+ '' => '浪',
+ '' => '涕',
+ '' => '消',
+ '' => '涇',
+ '' => '浦',
+ '' => '浸',
+ '' => '海',
+ '' => '浙',
+ '' => '涓',
+ '@' => '浬',
+ 'A' => '涉',
+ 'B' => '浮',
+ 'C' => '浚',
+ 'D' => '浴',
+ 'E' => '浩',
+ 'F' => '涌',
+ 'G' => '涊',
+ 'H' => '浹',
+ 'I' => '涅',
+ 'J' => '浥',
+ 'K' => '涔',
+ 'L' => '烊',
+ 'M' => '烘',
+ 'N' => '烤',
+ 'O' => '烙',
+ 'P' => '烈',
+ 'Q' => '烏',
+ 'R' => '爹',
+ 'S' => '特',
+ 'T' => '狼',
+ 'U' => '狹',
+ 'V' => '狽',
+ 'W' => '狸',
+ 'X' => '狷',
+ 'Y' => '玆',
+ 'Z' => '班',
+ '[' => '琉',
+ '\\' => '珮',
+ ']' => '珠',
+ '^' => '珪',
+ '_' => '珞',
+ '`' => '畔',
+ 'a' => '畝',
+ 'b' => '畜',
+ 'c' => '畚',
+ 'd' => '留',
+ 'e' => '疾',
+ 'f' => '病',
+ 'g' => '症',
+ 'h' => '疲',
+ 'i' => '疳',
+ 'j' => '疽',
+ 'k' => '疼',
+ 'l' => '疹',
+ 'm' => '痂',
+ 'n' => '疸',
+ 'o' => '皋',
+ 'p' => '皰',
+ 'q' => '益',
+ 'r' => '盍',
+ 's' => '盎',
+ 't' => '眩',
+ 'u' => '真',
+ 'v' => '眠',
+ 'w' => '眨',
+ 'x' => '矩',
+ 'y' => '砰',
+ 'z' => '砧',
+ '{' => '砸',
+ '|' => '砝',
+ '}' => '破',
+ '~' => '砷',
+ '' => '砥',
+ '' => '砭',
+ '' => '砠',
+ '' => '砟',
+ '' => '砲',
+ '' => '祕',
+ '' => '祐',
+ '' => '祠',
+ '' => '祟',
+ '' => '祖',
+ '' => '神',
+ '' => '祝',
+ '' => '祗',
+ '' => '祚',
+ '' => '秤',
+ '' => '秣',
+ '' => '秧',
+ '' => '租',
+ '' => '秦',
+ '' => '秩',
+ '' => '秘',
+ '' => '窄',
+ '' => '窈',
+ '' => '站',
+ '' => '笆',
+ '' => '笑',
+ '' => '粉',
+ '' => '紡',
+ '' => '紗',
+ '' => '紋',
+ '' => '紊',
+ '' => '素',
+ '' => '索',
+ '' => '純',
+ '' => '紐',
+ '' => '紕',
+ '' => '級',
+ '' => '紜',
+ '' => '納',
+ '' => '紙',
+ '' => '紛',
+ '' => '缺',
+ '' => '罟',
+ '' => '羔',
+ '' => '翅',
+ '' => '翁',
+ '' => '耆',
+ '' => '耘',
+ '' => '耕',
+ '' => '耙',
+ '' => '耗',
+ '' => '耽',
+ '' => '耿',
+ '' => '胱',
+ '' => '脂',
+ '' => '胰',
+ '' => '脅',
+ '' => '胭',
+ '' => '胴',
+ '' => '脆',
+ '' => '胸',
+ '' => '胳',
+ '' => '脈',
+ '' => '能',
+ '' => '脊',
+ '' => '胼',
+ '' => '胯',
+ '' => '臭',
+ '' => '臬',
+ '' => '舀',
+ '' => '舐',
+ '' => '航',
+ '' => '舫',
+ '' => '舨',
+ '' => '般',
+ '' => '芻',
+ '' => '茫',
+ '' => '荒',
+ '' => '荔',
+ '' => '荊',
+ '' => '茸',
+ '' => '荐',
+ '' => '草',
+ '' => '茵',
+ '' => '茴',
+ '' => '荏',
+ '' => '茲',
+ '' => '茹',
+ '' => '茶',
+ '' => '茗',
+ '' => '荀',
+ '' => '茱',
+ '' => '茨',
+ '' => '荃',
+ '@' => '虔',
+ 'A' => '蚊',
+ 'B' => '蚪',
+ 'C' => '蚓',
+ 'D' => '蚤',
+ 'E' => '蚩',
+ 'F' => '蚌',
+ 'G' => '蚣',
+ 'H' => '蚜',
+ 'I' => '衰',
+ 'J' => '衷',
+ 'K' => '袁',
+ 'L' => '袂',
+ 'M' => '衽',
+ 'N' => '衹',
+ 'O' => '記',
+ 'P' => '訐',
+ 'Q' => '討',
+ 'R' => '訌',
+ 'S' => '訕',
+ 'T' => '訊',
+ 'U' => '託',
+ 'V' => '訓',
+ 'W' => '訖',
+ 'X' => '訏',
+ 'Y' => '訑',
+ 'Z' => '豈',
+ '[' => '豺',
+ '\\' => '豹',
+ ']' => '財',
+ '^' => '貢',
+ '_' => '起',
+ '`' => '躬',
+ 'a' => '軒',
+ 'b' => '軔',
+ 'c' => '軏',
+ 'd' => '辱',
+ 'e' => '送',
+ 'f' => '逆',
+ 'g' => '迷',
+ 'h' => '退',
+ 'i' => '迺',
+ 'j' => '迴',
+ 'k' => '逃',
+ 'l' => '追',
+ 'm' => '逅',
+ 'n' => '迸',
+ 'o' => '邕',
+ 'p' => '郡',
+ 'q' => '郝',
+ 'r' => '郢',
+ 's' => '酒',
+ 't' => '配',
+ 'u' => '酌',
+ 'v' => '釘',
+ 'w' => '針',
+ 'x' => '釗',
+ 'y' => '釜',
+ 'z' => '釙',
+ '{' => '閃',
+ '|' => '院',
+ '}' => '陣',
+ '~' => '陡',
+ '' => '陛',
+ '' => '陝',
+ '' => '除',
+ '' => '陘',
+ '' => '陞',
+ '' => '隻',
+ '' => '飢',
+ '' => '馬',
+ '' => '骨',
+ '' => '高',
+ '' => '鬥',
+ '' => '鬲',
+ '' => '鬼',
+ '' => '乾',
+ '' => '偺',
+ '' => '偽',
+ '' => '停',
+ '' => '假',
+ '' => '偃',
+ '' => '偌',
+ '' => '做',
+ '' => '偉',
+ '' => '健',
+ '' => '偶',
+ '' => '偎',
+ '' => '偕',
+ '' => '偵',
+ '' => '側',
+ '' => '偷',
+ '' => '偏',
+ '' => '倏',
+ '' => '偯',
+ '' => '偭',
+ '' => '兜',
+ '' => '冕',
+ '' => '凰',
+ '' => '剪',
+ '' => '副',
+ '' => '勒',
+ '' => '務',
+ '' => '勘',
+ '' => '動',
+ '' => '匐',
+ '' => '匏',
+ '' => '匙',
+ '' => '匿',
+ '' => '區',
+ '' => '匾',
+ '' => '參',
+ '' => '曼',
+ '' => '商',
+ '' => '啪',
+ '' => '啦',
+ '' => '啄',
+ '' => '啞',
+ '' => '啡',
+ '' => '啃',
+ '' => '啊',
+ '' => '唱',
+ '' => '啖',
+ '' => '問',
+ '' => '啕',
+ '' => '唯',
+ '' => '啤',
+ '' => '唸',
+ '' => '售',
+ '' => '啜',
+ '' => '唬',
+ '' => '啣',
+ '' => '唳',
+ '' => '啁',
+ '' => '啗',
+ '' => '圈',
+ '' => '國',
+ '' => '圉',
+ '' => '域',
+ '' => '堅',
+ '' => '堊',
+ '' => '堆',
+ '' => '埠',
+ '' => '埤',
+ '' => '基',
+ '' => '堂',
+ '' => '堵',
+ '' => '執',
+ '' => '培',
+ '' => '夠',
+ '' => '奢',
+ '' => '娶',
+ '' => '婁',
+ '' => '婉',
+ '' => '婦',
+ '' => '婪',
+ '' => '婀',
+ '@' => '娼',
+ 'A' => '婢',
+ 'B' => '婚',
+ 'C' => '婆',
+ 'D' => '婊',
+ 'E' => '孰',
+ 'F' => '寇',
+ 'G' => '寅',
+ 'H' => '寄',
+ 'I' => '寂',
+ 'J' => '宿',
+ 'K' => '密',
+ 'L' => '尉',
+ 'M' => '專',
+ 'N' => '將',
+ 'O' => '屠',
+ 'P' => '屜',
+ 'Q' => '屝',
+ 'R' => '崇',
+ 'S' => '崆',
+ 'T' => '崎',
+ 'U' => '崛',
+ 'V' => '崖',
+ 'W' => '崢',
+ 'X' => '崑',
+ 'Y' => '崩',
+ 'Z' => '崔',
+ '[' => '崙',
+ '\\' => '崤',
+ ']' => '崧',
+ '^' => '崗',
+ '_' => '巢',
+ '`' => '常',
+ 'a' => '帶',
+ 'b' => '帳',
+ 'c' => '帷',
+ 'd' => '康',
+ 'e' => '庸',
+ 'f' => '庶',
+ 'g' => '庵',
+ 'h' => '庾',
+ 'i' => '張',
+ 'j' => '強',
+ 'k' => '彗',
+ 'l' => '彬',
+ 'm' => '彩',
+ 'n' => '彫',
+ 'o' => '得',
+ 'p' => '徙',
+ 'q' => '從',
+ 'r' => '徘',
+ 's' => '御',
+ 't' => '徠',
+ 'u' => '徜',
+ 'v' => '恿',
+ 'w' => '患',
+ 'x' => '悉',
+ 'y' => '悠',
+ 'z' => '您',
+ '{' => '惋',
+ '|' => '悴',
+ '}' => '惦',
+ '~' => '悽',
+ '' => '情',
+ '' => '悻',
+ '' => '悵',
+ '' => '惜',
+ '' => '悼',
+ '' => '惘',
+ '' => '惕',
+ '' => '惆',
+ '' => '惟',
+ '' => '悸',
+ '' => '惚',
+ '' => '惇',
+ '' => '戚',
+ '' => '戛',
+ '' => '扈',
+ '' => '掠',
+ '' => '控',
+ '' => '捲',
+ '' => '掖',
+ '' => '探',
+ '' => '接',
+ '' => '捷',
+ '' => '捧',
+ '' => '掘',
+ '' => '措',
+ '' => '捱',
+ '' => '掩',
+ '' => '掉',
+ '' => '掃',
+ '' => '掛',
+ '' => '捫',
+ '' => '推',
+ '' => '掄',
+ '' => '授',
+ '' => '掙',
+ '' => '採',
+ '' => '掬',
+ '' => '排',
+ '' => '掏',
+ '' => '掀',
+ '' => '捻',
+ '' => '捩',
+ '' => '捨',
+ '' => '捺',
+ '' => '敝',
+ '' => '敖',
+ '' => '救',
+ '' => '教',
+ '' => '敗',
+ '' => '啟',
+ '' => '敏',
+ '' => '敘',
+ '' => '敕',
+ '' => '敔',
+ '' => '斜',
+ '' => '斛',
+ '' => '斬',
+ '' => '族',
+ '' => '旋',
+ '' => '旌',
+ '' => '旎',
+ '' => '晝',
+ '' => '晚',
+ '' => '晤',
+ '' => '晨',
+ '' => '晦',
+ '' => '晞',
+ '' => '曹',
+ '' => '勗',
+ '' => '望',
+ '' => '梁',
+ '' => '梯',
+ '' => '梢',
+ '' => '梓',
+ '' => '梵',
+ '' => '桿',
+ '' => '桶',
+ '' => '梱',
+ '' => '梧',
+ '' => '梗',
+ '' => '械',
+ '' => '梃',
+ '' => '棄',
+ '' => '梭',
+ '' => '梆',
+ '' => '梅',
+ '' => '梔',
+ '' => '條',
+ '' => '梨',
+ '' => '梟',
+ '' => '梡',
+ '' => '梂',
+ '' => '欲',
+ '' => '殺',
+ '@' => '毫',
+ 'A' => '毬',
+ 'B' => '氫',
+ 'C' => '涎',
+ 'D' => '涼',
+ 'E' => '淳',
+ 'F' => '淙',
+ 'G' => '液',
+ 'H' => '淡',
+ 'I' => '淌',
+ 'J' => '淤',
+ 'K' => '添',
+ 'L' => '淺',
+ 'M' => '清',
+ 'N' => '淇',
+ 'O' => '淋',
+ 'P' => '涯',
+ 'Q' => '淑',
+ 'R' => '涮',
+ 'S' => '淞',
+ 'T' => '淹',
+ 'U' => '涸',
+ 'V' => '混',
+ 'W' => '淵',
+ 'X' => '淅',
+ 'Y' => '淒',
+ 'Z' => '渚',
+ '[' => '涵',
+ '\\' => '淚',
+ ']' => '淫',
+ '^' => '淘',
+ '_' => '淪',
+ '`' => '深',
+ 'a' => '淮',
+ 'b' => '淨',
+ 'c' => '淆',
+ 'd' => '淄',
+ 'e' => '涪',
+ 'f' => '淬',
+ 'g' => '涿',
+ 'h' => '淦',
+ 'i' => '烹',
+ 'j' => '焉',
+ 'k' => '焊',
+ 'l' => '烽',
+ 'm' => '烯',
+ 'n' => '爽',
+ 'o' => '牽',
+ 'p' => '犁',
+ 'q' => '猜',
+ 'r' => '猛',
+ 's' => '猖',
+ 't' => '猓',
+ 'u' => '猙',
+ 'v' => '率',
+ 'w' => '琅',
+ 'x' => '琊',
+ 'y' => '球',
+ 'z' => '理',
+ '{' => '現',
+ '|' => '琍',
+ '}' => '瓠',
+ '~' => '瓶',
+ '' => '瓷',
+ '' => '甜',
+ '' => '產',
+ '' => '略',
+ '' => '畦',
+ '' => '畢',
+ '' => '異',
+ '' => '疏',
+ '' => '痔',
+ '' => '痕',
+ '' => '疵',
+ '' => '痊',
+ '' => '痍',
+ '' => '皎',
+ '' => '盔',
+ '' => '盒',
+ '' => '盛',
+ '' => '眷',
+ '' => '眾',
+ '' => '眼',
+ '' => '眶',
+ '' => '眸',
+ '' => '眺',
+ '' => '硫',
+ '' => '硃',
+ '' => '硎',
+ '' => '祥',
+ '' => '票',
+ '' => '祭',
+ '' => '移',
+ '' => '窒',
+ '' => '窕',
+ '' => '笠',
+ '' => '笨',
+ '' => '笛',
+ '' => '第',
+ '' => '符',
+ '' => '笙',
+ '' => '笞',
+ '' => '笮',
+ '' => '粒',
+ '' => '粗',
+ '' => '粕',
+ '' => '絆',
+ '' => '絃',
+ '' => '統',
+ '' => '紮',
+ '' => '紹',
+ '' => '紼',
+ '' => '絀',
+ '' => '細',
+ '' => '紳',
+ '' => '組',
+ '' => '累',
+ '' => '終',
+ '' => '紲',
+ '' => '紱',
+ '' => '缽',
+ '' => '羞',
+ '' => '羚',
+ '' => '翌',
+ '' => '翎',
+ '' => '習',
+ '' => '耜',
+ '' => '聊',
+ '' => '聆',
+ '' => '脯',
+ '' => '脖',
+ '' => '脣',
+ '' => '脫',
+ '' => '脩',
+ '' => '脰',
+ '' => '脤',
+ '' => '舂',
+ '' => '舵',
+ '' => '舷',
+ '' => '舶',
+ '' => '船',
+ '' => '莎',
+ '' => '莞',
+ '' => '莘',
+ '' => '荸',
+ '' => '莢',
+ '' => '莖',
+ '' => '莽',
+ '' => '莫',
+ '' => '莒',
+ '' => '莊',
+ '' => '莓',
+ '' => '莉',
+ '' => '莠',
+ '' => '荷',
+ '' => '荻',
+ '' => '荼',
+ '@' => '莆',
+ 'A' => '莧',
+ 'B' => '處',
+ 'C' => '彪',
+ 'D' => '蛇',
+ 'E' => '蛀',
+ 'F' => '蚶',
+ 'G' => '蛄',
+ 'H' => '蚵',
+ 'I' => '蛆',
+ 'J' => '蛋',
+ 'K' => '蚱',
+ 'L' => '蚯',
+ 'M' => '蛉',
+ 'N' => '術',
+ 'O' => '袞',
+ 'P' => '袈',
+ 'Q' => '被',
+ 'R' => '袒',
+ 'S' => '袖',
+ 'T' => '袍',
+ 'U' => '袋',
+ 'V' => '覓',
+ 'W' => '規',
+ 'X' => '訪',
+ 'Y' => '訝',
+ 'Z' => '訣',
+ '[' => '訥',
+ '\\' => '許',
+ ']' => '設',
+ '^' => '訟',
+ '_' => '訛',
+ '`' => '訢',
+ 'a' => '豉',
+ 'b' => '豚',
+ 'c' => '販',
+ 'd' => '責',
+ 'e' => '貫',
+ 'f' => '貨',
+ 'g' => '貪',
+ 'h' => '貧',
+ 'i' => '赧',
+ 'j' => '赦',
+ 'k' => '趾',
+ 'l' => '趺',
+ 'm' => '軛',
+ 'n' => '軟',
+ 'o' => '這',
+ 'p' => '逍',
+ 'q' => '通',
+ 'r' => '逗',
+ 's' => '連',
+ 't' => '速',
+ 'u' => '逝',
+ 'v' => '逐',
+ 'w' => '逕',
+ 'x' => '逞',
+ 'y' => '造',
+ 'z' => '透',
+ '{' => '逢',
+ '|' => '逖',
+ '}' => '逛',
+ '~' => '途',
+ '' => '部',
+ '' => '郭',
+ '' => '都',
+ '' => '酗',
+ '' => '野',
+ '' => '釵',
+ '' => '釦',
+ '' => '釣',
+ '' => '釧',
+ '' => '釭',
+ '' => '釩',
+ '' => '閉',
+ '' => '陪',
+ '' => '陵',
+ '' => '陳',
+ '' => '陸',
+ '' => '陰',
+ '' => '陴',
+ '' => '陶',
+ '' => '陷',
+ '' => '陬',
+ '' => '雀',
+ '' => '雪',
+ '' => '雩',
+ '' => '章',
+ '' => '竟',
+ '' => '頂',
+ '' => '頃',
+ '' => '魚',
+ '' => '鳥',
+ '' => '鹵',
+ '' => '鹿',
+ '' => '麥',
+ '' => '麻',
+ '' => '傢',
+ '' => '傍',
+ '' => '傅',
+ '' => '備',
+ '' => '傑',
+ '' => '傀',
+ '' => '傖',
+ '' => '傘',
+ '' => '傚',
+ '' => '最',
+ '' => '凱',
+ '' => '割',
+ '' => '剴',
+ '' => '創',
+ '' => '剩',
+ '' => '勞',
+ '' => '勝',
+ '' => '勛',
+ '' => '博',
+ '' => '厥',
+ '' => '啻',
+ '' => '喀',
+ '' => '喧',
+ '' => '啼',
+ '' => '喊',
+ '' => '喝',
+ '' => '喘',
+ '' => '喂',
+ '' => '喜',
+ '' => '喪',
+ '' => '喔',
+ '' => '喇',
+ '' => '喋',
+ '' => '喃',
+ '' => '喳',
+ '' => '單',
+ '' => '喟',
+ '' => '唾',
+ '' => '喲',
+ '' => '喚',
+ '' => '喻',
+ '' => '喬',
+ '' => '喱',
+ '' => '啾',
+ '' => '喉',
+ '' => '喫',
+ '' => '喙',
+ '' => '圍',
+ '' => '堯',
+ '' => '堪',
+ '' => '場',
+ '' => '堤',
+ '' => '堰',
+ '' => '報',
+ '' => '堡',
+ '' => '堝',
+ '' => '堠',
+ '' => '壹',
+ '' => '壺',
+ '' => '奠',
+ '@' => '婷',
+ 'A' => '媚',
+ 'B' => '婿',
+ 'C' => '媒',
+ 'D' => '媛',
+ 'E' => '媧',
+ 'F' => '孳',
+ 'G' => '孱',
+ 'H' => '寒',
+ 'I' => '富',
+ 'J' => '寓',
+ 'K' => '寐',
+ 'L' => '尊',
+ 'M' => '尋',
+ 'N' => '就',
+ 'O' => '嵌',
+ 'P' => '嵐',
+ 'Q' => '崴',
+ 'R' => '嵇',
+ 'S' => '巽',
+ 'T' => '幅',
+ 'U' => '帽',
+ 'V' => '幀',
+ 'W' => '幃',
+ 'X' => '幾',
+ 'Y' => '廊',
+ 'Z' => '廁',
+ '[' => '廂',
+ '\\' => '廄',
+ ']' => '弼',
+ '^' => '彭',
+ '_' => '復',
+ '`' => '循',
+ 'a' => '徨',
+ 'b' => '惑',
+ 'c' => '惡',
+ 'd' => '悲',
+ 'e' => '悶',
+ 'f' => '惠',
+ 'g' => '愜',
+ 'h' => '愣',
+ 'i' => '惺',
+ 'j' => '愕',
+ 'k' => '惰',
+ 'l' => '惻',
+ 'm' => '惴',
+ 'n' => '慨',
+ 'o' => '惱',
+ 'p' => '愎',
+ 'q' => '惶',
+ 'r' => '愉',
+ 's' => '愀',
+ 't' => '愒',
+ 'u' => '戟',
+ 'v' => '扉',
+ 'w' => '掣',
+ 'x' => '掌',
+ 'y' => '描',
+ 'z' => '揀',
+ '{' => '揩',
+ '|' => '揉',
+ '}' => '揆',
+ '~' => '揍',
+ '' => '插',
+ '' => '揣',
+ '' => '提',
+ '' => '握',
+ '' => '揖',
+ '' => '揭',
+ '' => '揮',
+ '' => '捶',
+ '' => '援',
+ '' => '揪',
+ '' => '換',
+ '' => '摒',
+ '' => '揚',
+ '' => '揹',
+ '' => '敞',
+ '' => '敦',
+ '' => '敢',
+ '' => '散',
+ '' => '斑',
+ '' => '斐',
+ '' => '斯',
+ '' => '普',
+ '' => '晰',
+ '' => '晴',
+ '' => '晶',
+ '' => '景',
+ '' => '暑',
+ '' => '智',
+ '' => '晾',
+ '' => '晷',
+ '' => '曾',
+ '' => '替',
+ '' => '期',
+ '' => '朝',
+ '' => '棺',
+ '' => '棕',
+ '' => '棠',
+ '' => '棘',
+ '' => '棗',
+ '' => '椅',
+ '' => '棟',
+ '' => '棵',
+ '' => '森',
+ '' => '棧',
+ '' => '棹',
+ '' => '棒',
+ '' => '棲',
+ '' => '棣',
+ '' => '棋',
+ '' => '棍',
+ '' => '植',
+ '' => '椒',
+ '' => '椎',
+ '' => '棉',
+ '' => '棚',
+ '' => '楮',
+ '' => '棻',
+ '' => '款',
+ '' => '欺',
+ '' => '欽',
+ '' => '殘',
+ '' => '殖',
+ '' => '殼',
+ '' => '毯',
+ '' => '氮',
+ '' => '氯',
+ '' => '氬',
+ '' => '港',
+ '' => '游',
+ '' => '湔',
+ '' => '渡',
+ '' => '渲',
+ '' => '湧',
+ '' => '湊',
+ '' => '渠',
+ '' => '渥',
+ '' => '渣',
+ '' => '減',
+ '' => '湛',
+ '' => '湘',
+ '' => '渤',
+ '' => '湖',
+ '' => '湮',
+ '' => '渭',
+ '' => '渦',
+ '' => '湯',
+ '' => '渴',
+ '' => '湍',
+ '' => '渺',
+ '' => '測',
+ '' => '湃',
+ '' => '渝',
+ '' => '渾',
+ '' => '滋',
+ '@' => '溉',
+ 'A' => '渙',
+ 'B' => '湎',
+ 'C' => '湣',
+ 'D' => '湄',
+ 'E' => '湲',
+ 'F' => '湩',
+ 'G' => '湟',
+ 'H' => '焙',
+ 'I' => '焚',
+ 'J' => '焦',
+ 'K' => '焰',
+ 'L' => '無',
+ 'M' => '然',
+ 'N' => '煮',
+ 'O' => '焜',
+ 'P' => '牌',
+ 'Q' => '犄',
+ 'R' => '犀',
+ 'S' => '猶',
+ 'T' => '猥',
+ 'U' => '猴',
+ 'V' => '猩',
+ 'W' => '琺',
+ 'X' => '琪',
+ 'Y' => '琳',
+ 'Z' => '琢',
+ '[' => '琥',
+ '\\' => '琵',
+ ']' => '琶',
+ '^' => '琴',
+ '_' => '琯',
+ '`' => '琛',
+ 'a' => '琦',
+ 'b' => '琨',
+ 'c' => '甥',
+ 'd' => '甦',
+ 'e' => '畫',
+ 'f' => '番',
+ 'g' => '痢',
+ 'h' => '痛',
+ 'i' => '痣',
+ 'j' => '痙',
+ 'k' => '痘',
+ 'l' => '痞',
+ 'm' => '痠',
+ 'n' => '登',
+ 'o' => '發',
+ 'p' => '皖',
+ 'q' => '皓',
+ 'r' => '皴',
+ 's' => '盜',
+ 't' => '睏',
+ 'u' => '短',
+ 'v' => '硝',
+ 'w' => '硬',
+ 'x' => '硯',
+ 'y' => '稍',
+ 'z' => '稈',
+ '{' => '程',
+ '|' => '稅',
+ '}' => '稀',
+ '~' => '窘',
+ '' => '窗',
+ '' => '窖',
+ '' => '童',
+ '' => '竣',
+ '' => '等',
+ '' => '策',
+ '' => '筆',
+ '' => '筐',
+ '' => '筒',
+ '' => '答',
+ '' => '筍',
+ '' => '筋',
+ '' => '筏',
+ '' => '筑',
+ '' => '粟',
+ '' => '粥',
+ '' => '絞',
+ '' => '結',
+ '' => '絨',
+ '' => '絕',
+ '' => '紫',
+ '' => '絮',
+ '' => '絲',
+ '' => '絡',
+ '' => '給',
+ '' => '絢',
+ '' => '絰',
+ '' => '絳',
+ '' => '善',
+ '' => '翔',
+ '' => '翕',
+ '' => '耋',
+ '' => '聒',
+ '' => '肅',
+ '' => '腕',
+ '' => '腔',
+ '' => '腋',
+ '' => '腑',
+ '' => '腎',
+ '' => '脹',
+ '' => '腆',
+ '' => '脾',
+ '' => '腌',
+ '' => '腓',
+ '' => '腴',
+ '' => '舒',
+ '' => '舜',
+ '' => '菩',
+ '' => '萃',
+ '' => '菸',
+ '' => '萍',
+ '' => '菠',
+ '' => '菅',
+ '' => '萋',
+ '' => '菁',
+ '' => '華',
+ '' => '菱',
+ '' => '菴',
+ '' => '著',
+ '' => '萊',
+ '' => '菰',
+ '' => '萌',
+ '' => '菌',
+ '' => '菽',
+ '' => '菲',
+ '' => '菊',
+ '' => '萸',
+ '' => '萎',
+ '' => '萄',
+ '' => '菜',
+ '' => '萇',
+ '' => '菔',
+ '' => '菟',
+ '' => '虛',
+ '' => '蛟',
+ '' => '蛙',
+ '' => '蛭',
+ '' => '蛔',
+ '' => '蛛',
+ '' => '蛤',
+ '' => '蛐',
+ '' => '蛞',
+ '' => '街',
+ '' => '裁',
+ '' => '裂',
+ '' => '袱',
+ '' => '覃',
+ '' => '視',
+ '' => '註',
+ '' => '詠',
+ '' => '評',
+ '' => '詞',
+ '' => '証',
+ '' => '詁',
+ '@' => '詔',
+ 'A' => '詛',
+ 'B' => '詐',
+ 'C' => '詆',
+ 'D' => '訴',
+ 'E' => '診',
+ 'F' => '訶',
+ 'G' => '詖',
+ 'H' => '象',
+ 'I' => '貂',
+ 'J' => '貯',
+ 'K' => '貼',
+ 'L' => '貳',
+ 'M' => '貽',
+ 'N' => '賁',
+ 'O' => '費',
+ 'P' => '賀',
+ 'Q' => '貴',
+ 'R' => '買',
+ 'S' => '貶',
+ 'T' => '貿',
+ 'U' => '貸',
+ 'V' => '越',
+ 'W' => '超',
+ 'X' => '趁',
+ 'Y' => '跎',
+ 'Z' => '距',
+ '[' => '跋',
+ '\\' => '跚',
+ ']' => '跑',
+ '^' => '跌',
+ '_' => '跛',
+ '`' => '跆',
+ 'a' => '軻',
+ 'b' => '軸',
+ 'c' => '軼',
+ 'd' => '辜',
+ 'e' => '逮',
+ 'f' => '逵',
+ 'g' => '週',
+ 'h' => '逸',
+ 'i' => '進',
+ 'j' => '逶',
+ 'k' => '鄂',
+ 'l' => '郵',
+ 'm' => '鄉',
+ 'n' => '郾',
+ 'o' => '酣',
+ 'p' => '酥',
+ 'q' => '量',
+ 'r' => '鈔',
+ 's' => '鈕',
+ 't' => '鈣',
+ 'u' => '鈉',
+ 'v' => '鈞',
+ 'w' => '鈍',
+ 'x' => '鈐',
+ 'y' => '鈇',
+ 'z' => '鈑',
+ '{' => '閔',
+ '|' => '閏',
+ '}' => '開',
+ '~' => '閑',
+ '' => '間',
+ '' => '閒',
+ '' => '閎',
+ '' => '隊',
+ '' => '階',
+ '' => '隋',
+ '' => '陽',
+ '' => '隅',
+ '' => '隆',
+ '' => '隍',
+ '' => '陲',
+ '' => '隄',
+ '' => '雁',
+ '' => '雅',
+ '' => '雄',
+ '' => '集',
+ '' => '雇',
+ '' => '雯',
+ '' => '雲',
+ '' => '韌',
+ '' => '項',
+ '' => '順',
+ '' => '須',
+ '' => '飧',
+ '' => '飪',
+ '' => '飯',
+ '' => '飩',
+ '' => '飲',
+ '' => '飭',
+ '' => '馮',
+ '' => '馭',
+ '' => '黃',
+ '' => '黍',
+ '' => '黑',
+ '' => '亂',
+ '' => '傭',
+ '' => '債',
+ '' => '傲',
+ '' => '傳',
+ '' => '僅',
+ '' => '傾',
+ '' => '催',
+ '' => '傷',
+ '' => '傻',
+ '' => '傯',
+ '' => '僇',
+ '' => '剿',
+ '' => '剷',
+ '' => '剽',
+ '' => '募',
+ '' => '勦',
+ '' => '勤',
+ '' => '勢',
+ '' => '勣',
+ '' => '匯',
+ '' => '嗟',
+ '' => '嗨',
+ '' => '嗓',
+ '' => '嗦',
+ '' => '嗎',
+ '' => '嗜',
+ '' => '嗇',
+ '' => '嗑',
+ '' => '嗣',
+ '' => '嗤',
+ '' => '嗯',
+ '' => '嗚',
+ '' => '嗡',
+ '' => '嗅',
+ '' => '嗆',
+ '' => '嗥',
+ '' => '嗉',
+ '' => '園',
+ '' => '圓',
+ '' => '塞',
+ '' => '塑',
+ '' => '塘',
+ '' => '塗',
+ '' => '塚',
+ '' => '塔',
+ '' => '填',
+ '' => '塌',
+ '' => '塭',
+ '' => '塊',
+ '' => '塢',
+ '' => '塒',
+ '' => '塋',
+ '' => '奧',
+ '' => '嫁',
+ '' => '嫉',
+ '' => '嫌',
+ '' => '媾',
+ '' => '媽',
+ '' => '媼',
+ '@' => '媳',
+ 'A' => '嫂',
+ 'B' => '媲',
+ 'C' => '嵩',
+ 'D' => '嵯',
+ 'E' => '幌',
+ 'F' => '幹',
+ 'G' => '廉',
+ 'H' => '廈',
+ 'I' => '弒',
+ 'J' => '彙',
+ 'K' => '徬',
+ 'L' => '微',
+ 'M' => '愚',
+ 'N' => '意',
+ 'O' => '慈',
+ 'P' => '感',
+ 'Q' => '想',
+ 'R' => '愛',
+ 'S' => '惹',
+ 'T' => '愁',
+ 'U' => '愈',
+ 'V' => '慎',
+ 'W' => '慌',
+ 'X' => '慄',
+ 'Y' => '慍',
+ 'Z' => '愾',
+ '[' => '愴',
+ '\\' => '愧',
+ ']' => '愍',
+ '^' => '愆',
+ '_' => '愷',
+ '`' => '戡',
+ 'a' => '戢',
+ 'b' => '搓',
+ 'c' => '搾',
+ 'd' => '搞',
+ 'e' => '搪',
+ 'f' => '搭',
+ 'g' => '搽',
+ 'h' => '搬',
+ 'i' => '搏',
+ 'j' => '搜',
+ 'k' => '搔',
+ 'l' => '損',
+ 'm' => '搶',
+ 'n' => '搖',
+ 'o' => '搗',
+ 'p' => '搆',
+ 'q' => '敬',
+ 'r' => '斟',
+ 's' => '新',
+ 't' => '暗',
+ 'u' => '暉',
+ 'v' => '暇',
+ 'w' => '暈',
+ 'x' => '暖',
+ 'y' => '暄',
+ 'z' => '暘',
+ '{' => '暍',
+ '|' => '會',
+ '}' => '榔',
+ '~' => '業',
+ '' => '楚',
+ '' => '楷',
+ '' => '楠',
+ '' => '楔',
+ '' => '極',
+ '' => '椰',
+ '' => '概',
+ '' => '楊',
+ '' => '楨',
+ '' => '楫',
+ '' => '楞',
+ '' => '楓',
+ '' => '楹',
+ '' => '榆',
+ '' => '楝',
+ '' => '楣',
+ '' => '楛',
+ '' => '歇',
+ '' => '歲',
+ '' => '毀',
+ '' => '殿',
+ '' => '毓',
+ '' => '毽',
+ '' => '溢',
+ '' => '溯',
+ '' => '滓',
+ '' => '溶',
+ '' => '滂',
+ '' => '源',
+ '' => '溝',
+ '' => '滇',
+ '' => '滅',
+ '' => '溥',
+ '' => '溘',
+ '' => '溼',
+ '' => '溺',
+ '' => '溫',
+ '' => '滑',
+ '' => '準',
+ '' => '溜',
+ '' => '滄',
+ '' => '滔',
+ '' => '溪',
+ '' => '溧',
+ '' => '溴',
+ '' => '煎',
+ '' => '煙',
+ '' => '煩',
+ '' => '煤',
+ '' => '煉',
+ '' => '照',
+ '' => '煜',
+ '' => '煬',
+ '' => '煦',
+ '' => '煌',
+ '' => '煥',
+ '' => '煞',
+ '' => '煆',
+ '' => '煨',
+ '' => '煖',
+ '' => '爺',
+ '' => '牒',
+ '' => '猷',
+ '' => '獅',
+ '' => '猿',
+ '' => '猾',
+ '' => '瑯',
+ '' => '瑚',
+ '' => '瑕',
+ '' => '瑟',
+ '' => '瑞',
+ '' => '瑁',
+ '' => '琿',
+ '' => '瑙',
+ '' => '瑛',
+ '' => '瑜',
+ '' => '當',
+ '' => '畸',
+ '' => '瘀',
+ '' => '痰',
+ '' => '瘁',
+ '' => '痲',
+ '' => '痱',
+ '' => '痺',
+ '' => '痿',
+ '' => '痴',
+ '' => '痳',
+ '' => '盞',
+ '' => '盟',
+ '' => '睛',
+ '' => '睫',
+ '' => '睦',
+ '' => '睞',
+ '' => '督',
+ '@' => '睹',
+ 'A' => '睪',
+ 'B' => '睬',
+ 'C' => '睜',
+ 'D' => '睥',
+ 'E' => '睨',
+ 'F' => '睢',
+ 'G' => '矮',
+ 'H' => '碎',
+ 'I' => '碰',
+ 'J' => '碗',
+ 'K' => '碘',
+ 'L' => '碌',
+ 'M' => '碉',
+ 'N' => '硼',
+ 'O' => '碑',
+ 'P' => '碓',
+ 'Q' => '硿',
+ 'R' => '祺',
+ 'S' => '祿',
+ 'T' => '禁',
+ 'U' => '萬',
+ 'V' => '禽',
+ 'W' => '稜',
+ 'X' => '稚',
+ 'Y' => '稠',
+ 'Z' => '稔',
+ '[' => '稟',
+ '\\' => '稞',
+ ']' => '窟',
+ '^' => '窠',
+ '_' => '筷',
+ '`' => '節',
+ 'a' => '筠',
+ 'b' => '筮',
+ 'c' => '筧',
+ 'd' => '粱',
+ 'e' => '粳',
+ 'f' => '粵',
+ 'g' => '經',
+ 'h' => '絹',
+ 'i' => '綑',
+ 'j' => '綁',
+ 'k' => '綏',
+ 'l' => '絛',
+ 'm' => '置',
+ 'n' => '罩',
+ 'o' => '罪',
+ 'p' => '署',
+ 'q' => '義',
+ 'r' => '羨',
+ 's' => '群',
+ 't' => '聖',
+ 'u' => '聘',
+ 'v' => '肆',
+ 'w' => '肄',
+ 'x' => '腱',
+ 'y' => '腰',
+ 'z' => '腸',
+ '{' => '腥',
+ '|' => '腮',
+ '}' => '腳',
+ '~' => '腫',
+ '' => '腹',
+ '' => '腺',
+ '' => '腦',
+ '' => '舅',
+ '' => '艇',
+ '' => '蒂',
+ '' => '葷',
+ '' => '落',
+ '' => '萱',
+ '' => '葵',
+ '' => '葦',
+ '' => '葫',
+ '' => '葉',
+ '' => '葬',
+ '' => '葛',
+ '' => '萼',
+ '' => '萵',
+ '' => '葡',
+ '' => '董',
+ '' => '葩',
+ '' => '葭',
+ '' => '葆',
+ '' => '虞',
+ '' => '虜',
+ '' => '號',
+ '' => '蛹',
+ '' => '蜓',
+ '' => '蜈',
+ '' => '蜇',
+ '' => '蜀',
+ '' => '蛾',
+ '' => '蛻',
+ '' => '蜂',
+ '' => '蜃',
+ '' => '蜆',
+ '' => '蜊',
+ '' => '衙',
+ '' => '裟',
+ '' => '裔',
+ '' => '裙',
+ '' => '補',
+ '' => '裘',
+ '' => '裝',
+ '' => '裡',
+ '' => '裊',
+ '' => '裕',
+ '' => '裒',
+ '' => '覜',
+ '' => '解',
+ '' => '詫',
+ '' => '該',
+ '' => '詳',
+ '' => '試',
+ '' => '詩',
+ '' => '詰',
+ '' => '誇',
+ '' => '詼',
+ '' => '詣',
+ '' => '誠',
+ '' => '話',
+ '' => '誅',
+ '' => '詭',
+ '' => '詢',
+ '' => '詮',
+ '' => '詬',
+ '' => '詹',
+ '' => '詻',
+ '' => '訾',
+ '' => '詨',
+ '' => '豢',
+ '' => '貊',
+ '' => '貉',
+ '' => '賊',
+ '' => '資',
+ '' => '賈',
+ '' => '賄',
+ '' => '貲',
+ '' => '賃',
+ '' => '賂',
+ '' => '賅',
+ '' => '跡',
+ '' => '跟',
+ '' => '跨',
+ '' => '路',
+ '' => '跳',
+ '' => '跺',
+ '' => '跪',
+ '' => '跤',
+ '' => '跦',
+ '' => '躲',
+ '' => '較',
+ '' => '載',
+ '' => '軾',
+ '' => '輊',
+ '@' => '辟',
+ 'A' => '農',
+ 'B' => '運',
+ 'C' => '遊',
+ 'D' => '道',
+ 'E' => '遂',
+ 'F' => '達',
+ 'G' => '逼',
+ 'H' => '違',
+ 'I' => '遐',
+ 'J' => '遇',
+ 'K' => '遏',
+ 'L' => '過',
+ 'M' => '遍',
+ 'N' => '遑',
+ 'O' => '逾',
+ 'P' => '遁',
+ 'Q' => '鄒',
+ 'R' => '鄗',
+ 'S' => '酬',
+ 'T' => '酪',
+ 'U' => '酩',
+ 'V' => '釉',
+ 'W' => '鈷',
+ 'X' => '鉗',
+ 'Y' => '鈸',
+ 'Z' => '鈽',
+ '[' => '鉀',
+ '\\' => '鈾',
+ ']' => '鉛',
+ '^' => '鉋',
+ '_' => '鉤',
+ '`' => '鉑',
+ 'a' => '鈴',
+ 'b' => '鉉',
+ 'c' => '鉍',
+ 'd' => '鉅',
+ 'e' => '鈹',
+ 'f' => '鈿',
+ 'g' => '鉚',
+ 'h' => '閘',
+ 'i' => '隘',
+ 'j' => '隔',
+ 'k' => '隕',
+ 'l' => '雍',
+ 'm' => '雋',
+ 'n' => '雉',
+ 'o' => '雊',
+ 'p' => '雷',
+ 'q' => '電',
+ 'r' => '雹',
+ 's' => '零',
+ 't' => '靖',
+ 'u' => '靴',
+ 'v' => '靶',
+ 'w' => '預',
+ 'x' => '頑',
+ 'y' => '頓',
+ 'z' => '頊',
+ '{' => '頒',
+ '|' => '頌',
+ '}' => '飼',
+ '~' => '飴',
+ '' => '飽',
+ '' => '飾',
+ '' => '馳',
+ '' => '馱',
+ '' => '馴',
+ '' => '髡',
+ '' => '鳩',
+ '' => '麂',
+ '' => '鼎',
+ '' => '鼓',
+ '' => '鼠',
+ '' => '僧',
+ '' => '僮',
+ '' => '僥',
+ '' => '僖',
+ '' => '僭',
+ '' => '僚',
+ '' => '僕',
+ '' => '像',
+ '' => '僑',
+ '' => '僱',
+ '' => '僎',
+ '' => '僩',
+ '' => '兢',
+ '' => '凳',
+ '' => '劃',
+ '' => '劂',
+ '' => '匱',
+ '' => '厭',
+ '' => '嗾',
+ '' => '嘀',
+ '' => '嘛',
+ '' => '嘗',
+ '' => '嗽',
+ '' => '嘔',
+ '' => '嘆',
+ '' => '嘉',
+ '' => '嘍',
+ '' => '嘎',
+ '' => '嗷',
+ '' => '嘖',
+ '' => '嘟',
+ '' => '嘈',
+ '' => '嘐',
+ '' => '嗶',
+ '' => '團',
+ '' => '圖',
+ '' => '塵',
+ '' => '塾',
+ '' => '境',
+ '' => '墓',
+ '' => '墊',
+ '' => '塹',
+ '' => '墅',
+ '' => '塽',
+ '' => '壽',
+ '' => '夥',
+ '' => '夢',
+ '' => '夤',
+ '' => '奪',
+ '' => '奩',
+ '' => '嫡',
+ '' => '嫦',
+ '' => '嫩',
+ '' => '嫗',
+ '' => '嫖',
+ '' => '嫘',
+ '' => '嫣',
+ '' => '孵',
+ '' => '寞',
+ '' => '寧',
+ '' => '寡',
+ '' => '寥',
+ '' => '實',
+ '' => '寨',
+ '' => '寢',
+ '' => '寤',
+ '' => '察',
+ '' => '對',
+ '' => '屢',
+ '' => '嶄',
+ '' => '嶇',
+ '' => '幛',
+ '' => '幣',
+ '' => '幕',
+ '' => '幗',
+ '' => '幔',
+ '' => '廓',
+ '' => '廖',
+ '' => '弊',
+ '' => '彆',
+ '' => '彰',
+ '' => '徹',
+ '' => '慇',
+ '@' => '愿',
+ 'A' => '態',
+ 'B' => '慷',
+ 'C' => '慢',
+ 'D' => '慣',
+ 'E' => '慟',
+ 'F' => '慚',
+ 'G' => '慘',
+ 'H' => '慵',
+ 'I' => '截',
+ 'J' => '撇',
+ 'K' => '摘',
+ 'L' => '摔',
+ 'M' => '撤',
+ 'N' => '摸',
+ 'O' => '摟',
+ 'P' => '摺',
+ 'Q' => '摑',
+ 'R' => '摧',
+ 'S' => '搴',
+ 'T' => '摭',
+ 'U' => '摻',
+ 'V' => '敲',
+ 'W' => '斡',
+ 'X' => '旗',
+ 'Y' => '旖',
+ 'Z' => '暢',
+ '[' => '暨',
+ '\\' => '暝',
+ ']' => '榜',
+ '^' => '榨',
+ '_' => '榕',
+ '`' => '槁',
+ 'a' => '榮',
+ 'b' => '槓',
+ 'c' => '構',
+ 'd' => '榛',
+ 'e' => '榷',
+ 'f' => '榻',
+ 'g' => '榫',
+ 'h' => '榴',
+ 'i' => '槐',
+ 'j' => '槍',
+ 'k' => '榭',
+ 'l' => '槌',
+ 'm' => '榦',
+ 'n' => '槃',
+ 'o' => '榣',
+ 'p' => '歉',
+ 'q' => '歌',
+ 'r' => '氳',
+ 's' => '漳',
+ 't' => '演',
+ 'u' => '滾',
+ 'v' => '漓',
+ 'w' => '滴',
+ 'x' => '漩',
+ 'y' => '漾',
+ 'z' => '漠',
+ '{' => '漬',
+ '|' => '漏',
+ '}' => '漂',
+ '~' => '漢',
+ '' => '滿',
+ '' => '滯',
+ '' => '漆',
+ '' => '漱',
+ '' => '漸',
+ '' => '漲',
+ '' => '漣',
+ '' => '漕',
+ '' => '漫',
+ '' => '漯',
+ '' => '澈',
+ '' => '漪',
+ '' => '滬',
+ '' => '漁',
+ '' => '滲',
+ '' => '滌',
+ '' => '滷',
+ '' => '熔',
+ '' => '熙',
+ '' => '煽',
+ '' => '熊',
+ '' => '熄',
+ '' => '熒',
+ '' => '爾',
+ '' => '犒',
+ '' => '犖',
+ '' => '獄',
+ '' => '獐',
+ '' => '瑤',
+ '' => '瑣',
+ '' => '瑪',
+ '' => '瑰',
+ '' => '瑭',
+ '' => '甄',
+ '' => '疑',
+ '' => '瘧',
+ '' => '瘍',
+ '' => '瘋',
+ '' => '瘉',
+ '' => '瘓',
+ '' => '盡',
+ '' => '監',
+ '' => '瞄',
+ '' => '睽',
+ '' => '睿',
+ '' => '睡',
+ '' => '磁',
+ '' => '碟',
+ '' => '碧',
+ '' => '碳',
+ '' => '碩',
+ '' => '碣',
+ '' => '禎',
+ '' => '福',
+ '' => '禍',
+ '' => '種',
+ '' => '稱',
+ '' => '窪',
+ '' => '窩',
+ '' => '竭',
+ '' => '端',
+ '' => '管',
+ '' => '箕',
+ '' => '箋',
+ '' => '筵',
+ '' => '算',
+ '' => '箝',
+ '' => '箔',
+ '' => '箏',
+ '' => '箸',
+ '' => '箇',
+ '' => '箄',
+ '' => '粹',
+ '' => '粽',
+ '' => '精',
+ '' => '綻',
+ '' => '綰',
+ '' => '綜',
+ '' => '綽',
+ '' => '綾',
+ '' => '綠',
+ '' => '緊',
+ '' => '綴',
+ '' => '網',
+ '' => '綱',
+ '' => '綺',
+ '' => '綢',
+ '' => '綿',
+ '' => '綵',
+ '' => '綸',
+ '' => '維',
+ '' => '緒',
+ '' => '緇',
+ '' => '綬',
+ '@' => '罰',
+ 'A' => '翠',
+ 'B' => '翡',
+ 'C' => '翟',
+ 'D' => '聞',
+ 'E' => '聚',
+ 'F' => '肇',
+ 'G' => '腐',
+ 'H' => '膀',
+ 'I' => '膏',
+ 'J' => '膈',
+ 'K' => '膊',
+ 'L' => '腿',
+ 'M' => '膂',
+ 'N' => '臧',
+ 'O' => '臺',
+ 'P' => '與',
+ 'Q' => '舔',
+ 'R' => '舞',
+ 'S' => '艋',
+ 'T' => '蓉',
+ 'U' => '蒿',
+ 'V' => '蓆',
+ 'W' => '蓄',
+ 'X' => '蒙',
+ 'Y' => '蒞',
+ 'Z' => '蒲',
+ '[' => '蒜',
+ '\\' => '蓋',
+ ']' => '蒸',
+ '^' => '蓀',
+ '_' => '蓓',
+ '`' => '蒐',
+ 'a' => '蒼',
+ 'b' => '蓑',
+ 'c' => '蓊',
+ 'd' => '蜿',
+ 'e' => '蜜',
+ 'f' => '蜻',
+ 'g' => '蜢',
+ 'h' => '蜥',
+ 'i' => '蜴',
+ 'j' => '蜘',
+ 'k' => '蝕',
+ 'l' => '蜷',
+ 'm' => '蜩',
+ 'n' => '裳',
+ 'o' => '褂',
+ 'p' => '裴',
+ 'q' => '裹',
+ 'r' => '裸',
+ 's' => '製',
+ 't' => '裨',
+ 'u' => '褚',
+ 'v' => '裯',
+ 'w' => '誦',
+ 'x' => '誌',
+ 'y' => '語',
+ 'z' => '誣',
+ '{' => '認',
+ '|' => '誡',
+ '}' => '誓',
+ '~' => '誤',
+ '' => '說',
+ '' => '誥',
+ '' => '誨',
+ '' => '誘',
+ '' => '誑',
+ '' => '誚',
+ '' => '誧',
+ '' => '豪',
+ '' => '貍',
+ '' => '貌',
+ '' => '賓',
+ '' => '賑',
+ '' => '賒',
+ '' => '赫',
+ '' => '趙',
+ '' => '趕',
+ '' => '跼',
+ '' => '輔',
+ '' => '輒',
+ '' => '輕',
+ '' => '輓',
+ '' => '辣',
+ '' => '遠',
+ '' => '遘',
+ '' => '遜',
+ '' => '遣',
+ '' => '遙',
+ '' => '遞',
+ '' => '遢',
+ '' => '遝',
+ '' => '遛',
+ '' => '鄙',
+ '' => '鄘',
+ '' => '鄞',
+ '' => '酵',
+ '' => '酸',
+ '' => '酷',
+ '' => '酴',
+ '' => '鉸',
+ '' => '銀',
+ '' => '銅',
+ '' => '銘',
+ '' => '銖',
+ '' => '鉻',
+ '' => '銓',
+ '' => '銜',
+ '' => '銨',
+ '' => '鉼',
+ '' => '銑',
+ '' => '閡',
+ '' => '閨',
+ '' => '閩',
+ '' => '閣',
+ '' => '閥',
+ '' => '閤',
+ '' => '隙',
+ '' => '障',
+ '' => '際',
+ '' => '雌',
+ '' => '雒',
+ '' => '需',
+ '' => '靼',
+ '' => '鞅',
+ '' => '韶',
+ '' => '頗',
+ '' => '領',
+ '' => '颯',
+ '' => '颱',
+ '' => '餃',
+ '' => '餅',
+ '' => '餌',
+ '' => '餉',
+ '' => '駁',
+ '' => '骯',
+ '' => '骰',
+ '' => '髦',
+ '' => '魁',
+ '' => '魂',
+ '' => '鳴',
+ '' => '鳶',
+ '' => '鳳',
+ '' => '麼',
+ '' => '鼻',
+ '' => '齊',
+ '' => '億',
+ '' => '儀',
+ '' => '僻',
+ '' => '僵',
+ '' => '價',
+ '' => '儂',
+ '' => '儈',
+ '' => '儉',
+ '' => '儅',
+ '' => '凜',
+ '@' => '劇',
+ 'A' => '劈',
+ 'B' => '劉',
+ 'C' => '劍',
+ 'D' => '劊',
+ 'E' => '勰',
+ 'F' => '厲',
+ 'G' => '嘮',
+ 'H' => '嘻',
+ 'I' => '嘹',
+ 'J' => '嘲',
+ 'K' => '嘿',
+ 'L' => '嘴',
+ 'M' => '嘩',
+ 'N' => '噓',
+ 'O' => '噎',
+ 'P' => '噗',
+ 'Q' => '噴',
+ 'R' => '嘶',
+ 'S' => '嘯',
+ 'T' => '嘰',
+ 'U' => '墀',
+ 'V' => '墟',
+ 'W' => '增',
+ 'X' => '墳',
+ 'Y' => '墜',
+ 'Z' => '墮',
+ '[' => '墩',
+ '\\' => '墦',
+ ']' => '奭',
+ '^' => '嬉',
+ '_' => '嫻',
+ '`' => '嬋',
+ 'a' => '嫵',
+ 'b' => '嬌',
+ 'c' => '嬈',
+ 'd' => '寮',
+ 'e' => '寬',
+ 'f' => '審',
+ 'g' => '寫',
+ 'h' => '層',
+ 'i' => '履',
+ 'j' => '嶝',
+ 'k' => '嶔',
+ 'l' => '幢',
+ 'm' => '幟',
+ 'n' => '幡',
+ 'o' => '廢',
+ 'p' => '廚',
+ 'q' => '廟',
+ 'r' => '廝',
+ 's' => '廣',
+ 't' => '廠',
+ 'u' => '彈',
+ 'v' => '影',
+ 'w' => '德',
+ 'x' => '徵',
+ 'y' => '慶',
+ 'z' => '慧',
+ '{' => '慮',
+ '|' => '慝',
+ '}' => '慕',
+ '~' => '憂',
+ '' => '慼',
+ '' => '慰',
+ '' => '慫',
+ '' => '慾',
+ '' => '憧',
+ '' => '憐',
+ '' => '憫',
+ '' => '憎',
+ '' => '憬',
+ '' => '憚',
+ '' => '憤',
+ '' => '憔',
+ '' => '憮',
+ '' => '戮',
+ '' => '摩',
+ '' => '摯',
+ '' => '摹',
+ '' => '撞',
+ '' => '撲',
+ '' => '撈',
+ '' => '撐',
+ '' => '撰',
+ '' => '撥',
+ '' => '撓',
+ '' => '撕',
+ '' => '撩',
+ '' => '撒',
+ '' => '撮',
+ '' => '播',
+ '' => '撫',
+ '' => '撚',
+ '' => '撬',
+ '' => '撙',
+ '' => '撢',
+ '' => '撳',
+ '' => '敵',
+ '' => '敷',
+ '' => '數',
+ '' => '暮',
+ '' => '暫',
+ '' => '暴',
+ '' => '暱',
+ '' => '樣',
+ '' => '樟',
+ '' => '槨',
+ '' => '樁',
+ '' => '樞',
+ '' => '標',
+ '' => '槽',
+ '' => '模',
+ '' => '樓',
+ '' => '樊',
+ '' => '槳',
+ '' => '樂',
+ '' => '樅',
+ '' => '槭',
+ '' => '樑',
+ '' => '歐',
+ '' => '歎',
+ '' => '殤',
+ '' => '毅',
+ '' => '毆',
+ '' => '漿',
+ '' => '潼',
+ '' => '澄',
+ '' => '潑',
+ '' => '潦',
+ '' => '潔',
+ '' => '澆',
+ '' => '潭',
+ '' => '潛',
+ '' => '潸',
+ '' => '潮',
+ '' => '澎',
+ '' => '潺',
+ '' => '潰',
+ '' => '潤',
+ '' => '澗',
+ '' => '潘',
+ '' => '滕',
+ '' => '潯',
+ '' => '潠',
+ '' => '潟',
+ '' => '熟',
+ '' => '熬',
+ '' => '熱',
+ '' => '熨',
+ '' => '牖',
+ '' => '犛',
+ '' => '獎',
+ '' => '獗',
+ '' => '瑩',
+ '' => '璋',
+ '' => '璃',
+ '@' => '瑾',
+ 'A' => '璀',
+ 'B' => '畿',
+ 'C' => '瘠',
+ 'D' => '瘩',
+ 'E' => '瘟',
+ 'F' => '瘤',
+ 'G' => '瘦',
+ 'H' => '瘡',
+ 'I' => '瘢',
+ 'J' => '皚',
+ 'K' => '皺',
+ 'L' => '盤',
+ 'M' => '瞎',
+ 'N' => '瞇',
+ 'O' => '瞌',
+ 'P' => '瞑',
+ 'Q' => '瞋',
+ 'R' => '磋',
+ 'S' => '磅',
+ 'T' => '確',
+ 'U' => '磊',
+ 'V' => '碾',
+ 'W' => '磕',
+ 'X' => '碼',
+ 'Y' => '磐',
+ 'Z' => '稿',
+ '[' => '稼',
+ '\\' => '穀',
+ ']' => '稽',
+ '^' => '稷',
+ '_' => '稻',
+ '`' => '窯',
+ 'a' => '窮',
+ 'b' => '箭',
+ 'c' => '箱',
+ 'd' => '範',
+ 'e' => '箴',
+ 'f' => '篆',
+ 'g' => '篇',
+ 'h' => '篁',
+ 'i' => '箠',
+ 'j' => '篌',
+ 'k' => '糊',
+ 'l' => '締',
+ 'm' => '練',
+ 'n' => '緯',
+ 'o' => '緻',
+ 'p' => '緘',
+ 'q' => '緬',
+ 'r' => '緝',
+ 's' => '編',
+ 't' => '緣',
+ 'u' => '線',
+ 'v' => '緞',
+ 'w' => '緩',
+ 'x' => '綞',
+ 'y' => '緙',
+ 'z' => '緲',
+ '{' => '緹',
+ '|' => '罵',
+ '}' => '罷',
+ '~' => '羯',
+ '' => '翩',
+ '' => '耦',
+ '' => '膛',
+ '' => '膜',
+ '' => '膝',
+ '' => '膠',
+ '' => '膚',
+ '' => '膘',
+ '' => '蔗',
+ '' => '蔽',
+ '' => '蔚',
+ '' => '蓮',
+ '' => '蔬',
+ '' => '蔭',
+ '' => '蔓',
+ '' => '蔑',
+ '' => '蔣',
+ '' => '蔡',
+ '' => '蔔',
+ '' => '蓬',
+ '' => '蔥',
+ '' => '蓿',
+ '' => '蔆',
+ '' => '螂',
+ '' => '蝴',
+ '' => '蝶',
+ '' => '蝠',
+ '' => '蝦',
+ '' => '蝸',
+ '' => '蝨',
+ '' => '蝙',
+ '' => '蝗',
+ '' => '蝌',
+ '' => '蝓',
+ '' => '衛',
+ '' => '衝',
+ '' => '褐',
+ '' => '複',
+ '' => '褒',
+ '' => '褓',
+ '' => '褕',
+ '' => '褊',
+ '' => '誼',
+ '' => '諒',
+ '' => '談',
+ '' => '諄',
+ '' => '誕',
+ '' => '請',
+ '' => '諸',
+ '' => '課',
+ '' => '諉',
+ '' => '諂',
+ '' => '調',
+ '' => '誰',
+ '' => '論',
+ '' => '諍',
+ '' => '誶',
+ '' => '誹',
+ '' => '諛',
+ '' => '豌',
+ '' => '豎',
+ '' => '豬',
+ '' => '賠',
+ '' => '賞',
+ '' => '賦',
+ '' => '賤',
+ '' => '賬',
+ '' => '賭',
+ '' => '賢',
+ '' => '賣',
+ '' => '賜',
+ '' => '質',
+ '' => '賡',
+ '' => '赭',
+ '' => '趟',
+ '' => '趣',
+ '' => '踫',
+ '' => '踐',
+ '' => '踝',
+ '' => '踢',
+ '' => '踏',
+ '' => '踩',
+ '' => '踟',
+ '' => '踡',
+ '' => '踞',
+ '' => '躺',
+ '' => '輝',
+ '' => '輛',
+ '' => '輟',
+ '' => '輩',
+ '' => '輦',
+ '' => '輪',
+ '' => '輜',
+ '' => '輞',
+ '@' => '輥',
+ 'A' => '適',
+ 'B' => '遮',
+ 'C' => '遨',
+ 'D' => '遭',
+ 'E' => '遷',
+ 'F' => '鄰',
+ 'G' => '鄭',
+ 'H' => '鄧',
+ 'I' => '鄱',
+ 'J' => '醇',
+ 'K' => '醉',
+ 'L' => '醋',
+ 'M' => '醃',
+ 'N' => '鋅',
+ 'O' => '銻',
+ 'P' => '銷',
+ 'Q' => '鋪',
+ 'R' => '銬',
+ 'S' => '鋤',
+ 'T' => '鋁',
+ 'U' => '銳',
+ 'V' => '銼',
+ 'W' => '鋒',
+ 'X' => '鋇',
+ 'Y' => '鋰',
+ 'Z' => '銲',
+ '[' => '閭',
+ '\\' => '閱',
+ ']' => '霄',
+ '^' => '霆',
+ '_' => '震',
+ '`' => '霉',
+ 'a' => '靠',
+ 'b' => '鞍',
+ 'c' => '鞋',
+ 'd' => '鞏',
+ 'e' => '頡',
+ 'f' => '頫',
+ 'g' => '頜',
+ 'h' => '颳',
+ 'i' => '養',
+ 'j' => '餓',
+ 'k' => '餒',
+ 'l' => '餘',
+ 'm' => '駝',
+ 'n' => '駐',
+ 'o' => '駟',
+ 'p' => '駛',
+ 'q' => '駑',
+ 'r' => '駕',
+ 's' => '駒',
+ 't' => '駙',
+ 'u' => '骷',
+ 'v' => '髮',
+ 'w' => '髯',
+ 'x' => '鬧',
+ 'y' => '魅',
+ 'z' => '魄',
+ '{' => '魷',
+ '|' => '魯',
+ '}' => '鴆',
+ '~' => '鴉',
+ '' => '鴃',
+ '' => '麩',
+ '' => '麾',
+ '' => '黎',
+ '' => '墨',
+ '' => '齒',
+ '' => '儒',
+ '' => '儘',
+ '' => '儔',
+ '' => '儐',
+ '' => '儕',
+ '' => '冀',
+ '' => '冪',
+ '' => '凝',
+ '' => '劑',
+ '' => '劓',
+ '' => '勳',
+ '' => '噙',
+ '' => '噫',
+ '' => '噹',
+ '' => '噩',
+ '' => '噤',
+ '' => '噸',
+ '' => '噪',
+ '' => '器',
+ '' => '噥',
+ '' => '噱',
+ '' => '噯',
+ '' => '噬',
+ '' => '噢',
+ '' => '噶',
+ '' => '壁',
+ '' => '墾',
+ '' => '壇',
+ '' => '壅',
+ '' => '奮',
+ '' => '嬝',
+ '' => '嬴',
+ '' => '學',
+ '' => '寰',
+ '' => '導',
+ '' => '彊',
+ '' => '憲',
+ '' => '憑',
+ '' => '憩',
+ '' => '憊',
+ '' => '懍',
+ '' => '憶',
+ '' => '憾',
+ '' => '懊',
+ '' => '懈',
+ '' => '戰',
+ '' => '擅',
+ '' => '擁',
+ '' => '擋',
+ '' => '撻',
+ '' => '撼',
+ '' => '據',
+ '' => '擄',
+ '' => '擇',
+ '' => '擂',
+ '' => '操',
+ '' => '撿',
+ '' => '擒',
+ '' => '擔',
+ '' => '撾',
+ '' => '整',
+ '' => '曆',
+ '' => '曉',
+ '' => '暹',
+ '' => '曄',
+ '' => '曇',
+ '' => '暸',
+ '' => '樽',
+ '' => '樸',
+ '' => '樺',
+ '' => '橙',
+ '' => '橫',
+ '' => '橘',
+ '' => '樹',
+ '' => '橄',
+ '' => '橢',
+ '' => '橡',
+ '' => '橋',
+ '' => '橇',
+ '' => '樵',
+ '' => '機',
+ '' => '橈',
+ '' => '歙',
+ '' => '歷',
+ '' => '氅',
+ '' => '濂',
+ '' => '澱',
+ '' => '澡',
+ '@' => '濃',
+ 'A' => '澤',
+ 'B' => '濁',
+ 'C' => '澧',
+ 'D' => '澳',
+ 'E' => '激',
+ 'F' => '澹',
+ 'G' => '澶',
+ 'H' => '澦',
+ 'I' => '澠',
+ 'J' => '澴',
+ 'K' => '熾',
+ 'L' => '燉',
+ 'M' => '燐',
+ 'N' => '燒',
+ 'O' => '燈',
+ 'P' => '燕',
+ 'Q' => '熹',
+ 'R' => '燎',
+ 'S' => '燙',
+ 'T' => '燜',
+ 'U' => '燃',
+ 'V' => '燄',
+ 'W' => '獨',
+ 'X' => '璜',
+ 'Y' => '璣',
+ 'Z' => '璘',
+ '[' => '璟',
+ '\\' => '璞',
+ ']' => '瓢',
+ '^' => '甌',
+ '_' => '甍',
+ '`' => '瘴',
+ 'a' => '瘸',
+ 'b' => '瘺',
+ 'c' => '盧',
+ 'd' => '盥',
+ 'e' => '瞠',
+ 'f' => '瞞',
+ 'g' => '瞟',
+ 'h' => '瞥',
+ 'i' => '磨',
+ 'j' => '磚',
+ 'k' => '磬',
+ 'l' => '磧',
+ 'm' => '禦',
+ 'n' => '積',
+ 'o' => '穎',
+ 'p' => '穆',
+ 'q' => '穌',
+ 'r' => '穋',
+ 's' => '窺',
+ 't' => '篙',
+ 'u' => '簑',
+ 'v' => '築',
+ 'w' => '篤',
+ 'x' => '篛',
+ 'y' => '篡',
+ 'z' => '篩',
+ '{' => '篦',
+ '|' => '糕',
+ '}' => '糖',
+ '~' => '縊',
+ '' => '縑',
+ '' => '縈',
+ '' => '縛',
+ '' => '縣',
+ '' => '縞',
+ '' => '縝',
+ '' => '縉',
+ '' => '縐',
+ '' => '罹',
+ '' => '羲',
+ '' => '翰',
+ '' => '翱',
+ '' => '翮',
+ '' => '耨',
+ '' => '膳',
+ '' => '膩',
+ '' => '膨',
+ '' => '臻',
+ '' => '興',
+ '' => '艘',
+ '' => '艙',
+ '' => '蕊',
+ '' => '蕙',
+ '' => '蕈',
+ '' => '蕨',
+ '' => '蕩',
+ '' => '蕃',
+ '' => '蕉',
+ '' => '蕭',
+ '' => '蕪',
+ '' => '蕞',
+ '' => '螃',
+ '' => '螟',
+ '' => '螞',
+ '' => '螢',
+ '' => '融',
+ '' => '衡',
+ '' => '褪',
+ '' => '褲',
+ '' => '褥',
+ '' => '褫',
+ '' => '褡',
+ '' => '親',
+ '' => '覦',
+ '' => '諦',
+ '' => '諺',
+ '' => '諫',
+ '' => '諱',
+ '' => '謀',
+ '' => '諜',
+ '' => '諧',
+ '' => '諮',
+ '' => '諾',
+ '' => '謁',
+ '' => '謂',
+ '' => '諷',
+ '' => '諭',
+ '' => '諳',
+ '' => '諶',
+ '' => '諼',
+ '' => '豫',
+ '' => '豭',
+ '' => '貓',
+ '' => '賴',
+ '' => '蹄',
+ '' => '踱',
+ '' => '踴',
+ '' => '蹂',
+ '' => '踹',
+ '' => '踵',
+ '' => '輻',
+ '' => '輯',
+ '' => '輸',
+ '' => '輳',
+ '' => '辨',
+ '' => '辦',
+ '' => '遵',
+ '' => '遴',
+ '' => '選',
+ '' => '遲',
+ '' => '遼',
+ '' => '遺',
+ '' => '鄴',
+ '' => '醒',
+ '' => '錠',
+ '' => '錶',
+ '' => '鋸',
+ '' => '錳',
+ '' => '錯',
+ '' => '錢',
+ '' => '鋼',
+ '' => '錫',
+ '' => '錄',
+ '' => '錚',
+ '@' => '錐',
+ 'A' => '錦',
+ 'B' => '錡',
+ 'C' => '錕',
+ 'D' => '錮',
+ 'E' => '錙',
+ 'F' => '閻',
+ 'G' => '隧',
+ 'H' => '隨',
+ 'I' => '險',
+ 'J' => '雕',
+ 'K' => '霎',
+ 'L' => '霑',
+ 'M' => '霖',
+ 'N' => '霍',
+ 'O' => '霓',
+ 'P' => '霏',
+ 'Q' => '靛',
+ 'R' => '靜',
+ 'S' => '靦',
+ 'T' => '鞘',
+ 'U' => '頰',
+ 'V' => '頸',
+ 'W' => '頻',
+ 'X' => '頷',
+ 'Y' => '頭',
+ 'Z' => '頹',
+ '[' => '頤',
+ '\\' => '餐',
+ ']' => '館',
+ '^' => '餞',
+ '_' => '餛',
+ '`' => '餡',
+ 'a' => '餚',
+ 'b' => '駭',
+ 'c' => '駢',
+ 'd' => '駱',
+ 'e' => '骸',
+ 'f' => '骼',
+ 'g' => '髻',
+ 'h' => '髭',
+ 'i' => '鬨',
+ 'j' => '鮑',
+ 'k' => '鴕',
+ 'l' => '鴣',
+ 'm' => '鴦',
+ 'n' => '鴨',
+ 'o' => '鴒',
+ 'p' => '鴛',
+ 'q' => '默',
+ 'r' => '黔',
+ 's' => '龍',
+ 't' => '龜',
+ 'u' => '優',
+ 'v' => '償',
+ 'w' => '儡',
+ 'x' => '儲',
+ 'y' => '勵',
+ 'z' => '嚎',
+ '{' => '嚀',
+ '|' => '嚐',
+ '}' => '嚅',
+ '~' => '嚇',
+ '' => '嚏',
+ '' => '壕',
+ '' => '壓',
+ '' => '壑',
+ '' => '壎',
+ '' => '嬰',
+ '' => '嬪',
+ '' => '嬤',
+ '' => '孺',
+ '' => '尷',
+ '' => '屨',
+ '' => '嶼',
+ '' => '嶺',
+ '' => '嶽',
+ '' => '嶸',
+ '' => '幫',
+ '' => '彌',
+ '' => '徽',
+ '' => '應',
+ '' => '懂',
+ '' => '懇',
+ '' => '懦',
+ '' => '懋',
+ '' => '戲',
+ '' => '戴',
+ '' => '擎',
+ '' => '擊',
+ '' => '擘',
+ '' => '擠',
+ '' => '擰',
+ '' => '擦',
+ '' => '擬',
+ '' => '擱',
+ '' => '擢',
+ '' => '擭',
+ '' => '斂',
+ '' => '斃',
+ '' => '曙',
+ '' => '曖',
+ '' => '檀',
+ '' => '檔',
+ '' => '檄',
+ '' => '檢',
+ '' => '檜',
+ '' => '櫛',
+ '' => '檣',
+ '' => '橾',
+ '' => '檗',
+ '' => '檐',
+ '' => '檠',
+ '' => '歜',
+ '' => '殮',
+ '' => '毚',
+ '' => '氈',
+ '' => '濘',
+ '' => '濱',
+ '' => '濟',
+ '' => '濠',
+ '' => '濛',
+ '' => '濤',
+ '' => '濫',
+ '' => '濯',
+ '' => '澀',
+ '' => '濬',
+ '' => '濡',
+ '' => '濩',
+ '' => '濕',
+ '' => '濮',
+ '' => '濰',
+ '' => '燧',
+ '' => '營',
+ '' => '燮',
+ '' => '燦',
+ '' => '燥',
+ '' => '燭',
+ '' => '燬',
+ '' => '燴',
+ '' => '燠',
+ '' => '爵',
+ '' => '牆',
+ '' => '獰',
+ '' => '獲',
+ '' => '璩',
+ '' => '環',
+ '' => '璦',
+ '' => '璨',
+ '' => '癆',
+ '' => '療',
+ '' => '癌',
+ '' => '盪',
+ '' => '瞳',
+ '' => '瞪',
+ '' => '瞰',
+ '' => '瞬',
+ '@' => '瞧',
+ 'A' => '瞭',
+ 'B' => '矯',
+ 'C' => '磷',
+ 'D' => '磺',
+ 'E' => '磴',
+ 'F' => '磯',
+ 'G' => '礁',
+ 'H' => '禧',
+ 'I' => '禪',
+ 'J' => '穗',
+ 'K' => '窿',
+ 'L' => '簇',
+ 'M' => '簍',
+ 'N' => '篾',
+ 'O' => '篷',
+ 'P' => '簌',
+ 'Q' => '篠',
+ 'R' => '糠',
+ 'S' => '糜',
+ 'T' => '糞',
+ 'U' => '糢',
+ 'V' => '糟',
+ 'W' => '糙',
+ 'X' => '糝',
+ 'Y' => '縮',
+ 'Z' => '績',
+ '[' => '繆',
+ '\\' => '縷',
+ ']' => '縲',
+ '^' => '繃',
+ '_' => '縫',
+ '`' => '總',
+ 'a' => '縱',
+ 'b' => '繅',
+ 'c' => '繁',
+ 'd' => '縴',
+ 'e' => '縹',
+ 'f' => '繈',
+ 'g' => '縵',
+ 'h' => '縿',
+ 'i' => '縯',
+ 'j' => '罄',
+ 'k' => '翳',
+ 'l' => '翼',
+ 'm' => '聱',
+ 'n' => '聲',
+ 'o' => '聰',
+ 'p' => '聯',
+ 'q' => '聳',
+ 'r' => '臆',
+ 's' => '臃',
+ 't' => '膺',
+ 'u' => '臂',
+ 'v' => '臀',
+ 'w' => '膿',
+ 'x' => '膽',
+ 'y' => '臉',
+ 'z' => '膾',
+ '{' => '臨',
+ '|' => '舉',
+ '}' => '艱',
+ '~' => '薪',
+ '' => '薄',
+ '' => '蕾',
+ '' => '薜',
+ '' => '薑',
+ '' => '薔',
+ '' => '薯',
+ '' => '薛',
+ '' => '薇',
+ '' => '薨',
+ '' => '薊',
+ '' => '虧',
+ '' => '蟀',
+ '' => '蟑',
+ '' => '螳',
+ '' => '蟒',
+ '' => '蟆',
+ '' => '螫',
+ '' => '螻',
+ '' => '螺',
+ '' => '蟈',
+ '' => '蟋',
+ '' => '褻',
+ '' => '褶',
+ '' => '襄',
+ '' => '褸',
+ '' => '褽',
+ '' => '覬',
+ '' => '謎',
+ '' => '謗',
+ '' => '謙',
+ '' => '講',
+ '' => '謊',
+ '' => '謠',
+ '' => '謝',
+ '' => '謄',
+ '' => '謐',
+ '' => '豁',
+ '' => '谿',
+ '' => '豳',
+ '' => '賺',
+ '' => '賽',
+ '' => '購',
+ '' => '賸',
+ '' => '賻',
+ '' => '趨',
+ '' => '蹉',
+ '' => '蹋',
+ '' => '蹈',
+ '' => '蹊',
+ '' => '轄',
+ '' => '輾',
+ '' => '轂',
+ '' => '轅',
+ '' => '輿',
+ '' => '避',
+ '' => '遽',
+ '' => '還',
+ '' => '邁',
+ '' => '邂',
+ '' => '邀',
+ '' => '鄹',
+ '' => '醣',
+ '' => '醞',
+ '' => '醜',
+ '' => '鍍',
+ '' => '鎂',
+ '' => '錨',
+ '' => '鍵',
+ '' => '鍊',
+ '' => '鍥',
+ '' => '鍋',
+ '' => '錘',
+ '' => '鍾',
+ '' => '鍬',
+ '' => '鍛',
+ '' => '鍰',
+ '' => '鍚',
+ '' => '鍔',
+ '' => '闊',
+ '' => '闋',
+ '' => '闌',
+ '' => '闈',
+ '' => '闆',
+ '' => '隱',
+ '' => '隸',
+ '' => '雖',
+ '' => '霜',
+ '' => '霞',
+ '' => '鞠',
+ '' => '韓',
+ '' => '顆',
+ '' => '颶',
+ '' => '餵',
+ '' => '騁',
+ '@' => '駿',
+ 'A' => '鮮',
+ 'B' => '鮫',
+ 'C' => '鮪',
+ 'D' => '鮭',
+ 'E' => '鴻',
+ 'F' => '鴿',
+ 'G' => '麋',
+ 'H' => '黏',
+ 'I' => '點',
+ 'J' => '黜',
+ 'K' => '黝',
+ 'L' => '黛',
+ 'M' => '鼾',
+ 'N' => '齋',
+ 'O' => '叢',
+ 'P' => '嚕',
+ 'Q' => '嚮',
+ 'R' => '壙',
+ 'S' => '壘',
+ 'T' => '嬸',
+ 'U' => '彝',
+ 'V' => '懣',
+ 'W' => '戳',
+ 'X' => '擴',
+ 'Y' => '擲',
+ 'Z' => '擾',
+ '[' => '攆',
+ '\\' => '擺',
+ ']' => '擻',
+ '^' => '擷',
+ '_' => '斷',
+ '`' => '曜',
+ 'a' => '朦',
+ 'b' => '檳',
+ 'c' => '檬',
+ 'd' => '櫃',
+ 'e' => '檻',
+ 'f' => '檸',
+ 'g' => '櫂',
+ 'h' => '檮',
+ 'i' => '檯',
+ 'j' => '歟',
+ 'k' => '歸',
+ 'l' => '殯',
+ 'm' => '瀉',
+ 'n' => '瀋',
+ 'o' => '濾',
+ 'p' => '瀆',
+ 'q' => '濺',
+ 'r' => '瀑',
+ 's' => '瀏',
+ 't' => '燻',
+ 'u' => '燼',
+ 'v' => '燾',
+ 'w' => '燸',
+ 'x' => '獷',
+ 'y' => '獵',
+ 'z' => '璧',
+ '{' => '璿',
+ '|' => '甕',
+ '}' => '癖',
+ '~' => '癘',
+ '¡' => '癒',
+ '¢' => '瞽',
+ '£' => '瞿',
+ '¤' => '瞻',
+ '¥' => '瞼',
+ '¦' => '礎',
+ '§' => '禮',
+ '¨' => '穡',
+ '©' => '穢',
+ 'ª' => '穠',
+ '«' => '竄',
+ '¬' => '竅',
+ '' => '簫',
+ '®' => '簧',
+ '¯' => '簪',
+ '°' => '簞',
+ '±' => '簣',
+ '²' => '簡',
+ '³' => '糧',
+ '´' => '織',
+ 'µ' => '繕',
+ '¶' => '繞',
+ '·' => '繚',
+ '¸' => '繡',
+ '¹' => '繒',
+ 'º' => '繙',
+ '»' => '罈',
+ '¼' => '翹',
+ '½' => '翻',
+ '¾' => '職',
+ '¿' => '聶',
+ '' => '臍',
+ '' => '臏',
+ '' => '舊',
+ '' => '藏',
+ '' => '薩',
+ '' => '藍',
+ '' => '藐',
+ '' => '藉',
+ '' => '薰',
+ '' => '薺',
+ '' => '薹',
+ '' => '薦',
+ '' => '蟯',
+ '' => '蟬',
+ '' => '蟲',
+ '' => '蟠',
+ '' => '覆',
+ '' => '覲',
+ '' => '觴',
+ '' => '謨',
+ '' => '謹',
+ '' => '謬',
+ '' => '謫',
+ '' => '豐',
+ '' => '贅',
+ '' => '蹙',
+ '' => '蹣',
+ '' => '蹦',
+ '' => '蹤',
+ '' => '蹟',
+ '' => '蹕',
+ '' => '軀',
+ '' => '轉',
+ '' => '轍',
+ '' => '邇',
+ '' => '邃',
+ '' => '邈',
+ '' => '醫',
+ '' => '醬',
+ '' => '釐',
+ '' => '鎔',
+ '' => '鎊',
+ '' => '鎖',
+ '' => '鎢',
+ '' => '鎳',
+ '' => '鎮',
+ '' => '鎬',
+ '' => '鎰',
+ '' => '鎘',
+ '' => '鎚',
+ '' => '鎗',
+ '' => '闔',
+ '' => '闖',
+ '' => '闐',
+ '' => '闕',
+ '' => '離',
+ '' => '雜',
+ '' => '雙',
+ '' => '雛',
+ '' => '雞',
+ '' => '霤',
+ '' => '鞣',
+ '' => '鞦',
+ '@' => '鞭',
+ 'A' => '韹',
+ 'B' => '額',
+ 'C' => '顏',
+ 'D' => '題',
+ 'E' => '顎',
+ 'F' => '顓',
+ 'G' => '颺',
+ 'H' => '餾',
+ 'I' => '餿',
+ 'J' => '餽',
+ 'K' => '餮',
+ 'L' => '馥',
+ 'M' => '騎',
+ 'N' => '髁',
+ 'O' => '鬃',
+ 'P' => '鬆',
+ 'Q' => '魏',
+ 'R' => '魎',
+ 'S' => '魍',
+ 'T' => '鯊',
+ 'U' => '鯉',
+ 'V' => '鯽',
+ 'W' => '鯈',
+ 'X' => '鯀',
+ 'Y' => '鵑',
+ 'Z' => '鵝',
+ '[' => '鵠',
+ '\\' => '黠',
+ ']' => '鼕',
+ '^' => '鼬',
+ '_' => '儳',
+ '`' => '嚥',
+ 'a' => '壞',
+ 'b' => '壟',
+ 'c' => '壢',
+ 'd' => '寵',
+ 'e' => '龐',
+ 'f' => '廬',
+ 'g' => '懲',
+ 'h' => '懷',
+ 'i' => '懶',
+ 'j' => '懵',
+ 'k' => '攀',
+ 'l' => '攏',
+ 'm' => '曠',
+ 'n' => '曝',
+ 'o' => '櫥',
+ 'p' => '櫝',
+ 'q' => '櫚',
+ 'r' => '櫓',
+ 's' => '瀛',
+ 't' => '瀟',
+ 'u' => '瀨',
+ 'v' => '瀚',
+ 'w' => '瀝',
+ 'x' => '瀕',
+ 'y' => '瀘',
+ 'z' => '爆',
+ '{' => '爍',
+ '|' => '牘',
+ '}' => '犢',
+ '~' => '獸',
+ 'á' => '獺',
+ 'â' => '璽',
+ 'ã' => '瓊',
+ 'ä' => '瓣',
+ 'å' => '疇',
+ 'æ' => '疆',
+ 'ç' => '癟',
+ 'è' => '癡',
+ 'é' => '矇',
+ 'ê' => '礙',
+ 'ë' => '禱',
+ 'ì' => '穫',
+ 'í' => '穩',
+ 'î' => '簾',
+ 'ï' => '簿',
+ 'ð' => '簸',
+ 'ñ' => '簽',
+ 'ò' => '簷',
+ 'ó' => '籀',
+ 'ô' => '繫',
+ 'õ' => '繭',
+ 'ö' => '繹',
+ '÷' => '繩',
+ 'ø' => '繪',
+ 'ù' => '羅',
+ 'ú' => '繳',
+ 'û' => '羶',
+ 'ü' => '羹',
+ 'ý' => '羸',
+ 'þ' => '臘',
+ 'ÿ' => '藩',
+ '' => '藝',
+ '' => '藪',
+ '' => '藕',
+ '' => '藤',
+ '' => '藥',
+ '' => '藷',
+ '' => '蟻',
+ '' => '蠅',
+ '' => '蠍',
+ '' => '蟹',
+ '' => '蟾',
+ '' => '襠',
+ '' => '襟',
+ '' => '襖',
+ '' => '襞',
+ '' => '譁',
+ '' => '譜',
+ '' => '識',
+ '' => '證',
+ '' => '譚',
+ '' => '譎',
+ '' => '譏',
+ '' => '譆',
+ '' => '譙',
+ '' => '贈',
+ '' => '贊',
+ '' => '蹼',
+ '' => '蹲',
+ '' => '躇',
+ '' => '蹶',
+ '' => '蹬',
+ '' => '蹺',
+ '' => '蹴',
+ '' => '轔',
+ '' => '轎',
+ '' => '辭',
+ '' => '邊',
+ '' => '邋',
+ '' => '醱',
+ '' => '醮',
+ '' => '鏡',
+ '' => '鏑',
+ '' => '鏟',
+ '' => '鏃',
+ '' => '鏈',
+ '' => '鏜',
+ '' => '鏝',
+ '' => '鏖',
+ '' => '鏢',
+ '' => '鏍',
+ '' => '鏘',
+ '' => '鏤',
+ '' => '鏗',
+ '' => '鏨',
+ '' => '關',
+ '' => '隴',
+ '' => '難',
+ '' => '霪',
+ '' => '霧',
+ '' => '靡',
+ '' => '韜',
+ '' => '韻',
+ '' => '類',
+ '@' => '願',
+ 'A' => '顛',
+ 'B' => '颼',
+ 'C' => '饅',
+ 'D' => '饉',
+ 'E' => '騖',
+ 'F' => '騙',
+ 'G' => '鬍',
+ 'H' => '鯨',
+ 'I' => '鯧',
+ 'J' => '鯖',
+ 'K' => '鯛',
+ 'L' => '鶉',
+ 'M' => '鵡',
+ 'N' => '鵲',
+ 'O' => '鵪',
+ 'P' => '鵬',
+ 'Q' => '麒',
+ 'R' => '麗',
+ 'S' => '麓',
+ 'T' => '麴',
+ 'U' => '勸',
+ 'V' => '嚨',
+ 'W' => '嚷',
+ 'X' => '嚶',
+ 'Y' => '嚴',
+ 'Z' => '嚼',
+ '[' => '壤',
+ '\\' => '孀',
+ ']' => '孃',
+ '^' => '孽',
+ '_' => '寶',
+ '`' => '巉',
+ 'a' => '懸',
+ 'b' => '懺',
+ 'c' => '攘',
+ 'd' => '攔',
+ 'e' => '攙',
+ 'f' => '曦',
+ 'g' => '朧',
+ 'h' => '櫬',
+ 'i' => '瀾',
+ 'j' => '瀰',
+ 'k' => '瀲',
+ 'l' => '爐',
+ 'm' => '獻',
+ 'n' => '瓏',
+ 'o' => '癢',
+ 'p' => '癥',
+ 'q' => '礦',
+ 'r' => '礪',
+ 's' => '礬',
+ 't' => '礫',
+ 'u' => '竇',
+ 'v' => '競',
+ 'w' => '籌',
+ 'x' => '籃',
+ 'y' => '籍',
+ 'z' => '糯',
+ '{' => '糰',
+ '|' => '辮',
+ '}' => '繽',
+ '~' => '繼',
+ 'ġ' => '纂',
+ 'Ģ' => '罌',
+ 'ģ' => '耀',
+ 'Ĥ' => '臚',
+ 'ĥ' => '艦',
+ 'Ħ' => '藻',
+ 'ħ' => '藹',
+ 'Ĩ' => '蘑',
+ 'ĩ' => '藺',
+ 'Ī' => '蘆',
+ 'ī' => '蘋',
+ 'Ĭ' => '蘇',
+ 'ĭ' => '蘊',
+ 'Į' => '蠔',
+ 'į' => '蠕',
+ 'İ' => '襤',
+ 'ı' => '覺',
+ 'IJ' => '觸',
+ 'ij' => '議',
+ 'Ĵ' => '譬',
+ 'ĵ' => '警',
+ 'Ķ' => '譯',
+ 'ķ' => '譟',
+ 'ĸ' => '譫',
+ 'Ĺ' => '贏',
+ 'ĺ' => '贍',
+ 'Ļ' => '躉',
+ 'ļ' => '躁',
+ 'Ľ' => '躅',
+ 'ľ' => '躂',
+ 'Ŀ' => '醴',
+ '' => '釋',
+ '' => '鐘',
+ '' => '鐃',
+ '' => '鏽',
+ '' => '闡',
+ '' => '霰',
+ '' => '飄',
+ '' => '饒',
+ '' => '饑',
+ '' => '馨',
+ '' => '騫',
+ '' => '騰',
+ '' => '騷',
+ '' => '騵',
+ '' => '鰓',
+ '' => '鰍',
+ '' => '鹹',
+ '' => '麵',
+ '' => '黨',
+ '' => '鼯',
+ '' => '齟',
+ '' => '齣',
+ '' => '齡',
+ '' => '儷',
+ '' => '儸',
+ '' => '囁',
+ '' => '囀',
+ '' => '囂',
+ '' => '夔',
+ '' => '屬',
+ '' => '巍',
+ '' => '懼',
+ '' => '懾',
+ '' => '攝',
+ '' => '攜',
+ '' => '斕',
+ '' => '曩',
+ '' => '櫻',
+ '' => '欄',
+ '' => '櫺',
+ '' => '殲',
+ '' => '灌',
+ '' => '爛',
+ '' => '犧',
+ '' => '瓖',
+ '' => '瓔',
+ '' => '癩',
+ '' => '矓',
+ '' => '籐',
+ '' => '纏',
+ '' => '續',
+ '' => '羼',
+ '' => '蘗',
+ '' => '蘭',
+ '' => '蘚',
+ '' => '蠣',
+ '' => '蠢',
+ '' => '蠡',
+ '' => '蠟',
+ '' => '襪',
+ '' => '襬',
+ '' => '覽',
+ '' => '譴',
+ '@' => '護',
+ 'A' => '譽',
+ 'B' => '贓',
+ 'C' => '躊',
+ 'D' => '躍',
+ 'E' => '躋',
+ 'F' => '轟',
+ 'G' => '辯',
+ 'H' => '醺',
+ 'I' => '鐮',
+ 'J' => '鐳',
+ 'K' => '鐵',
+ 'L' => '鐺',
+ 'M' => '鐸',
+ 'N' => '鐲',
+ 'O' => '鐫',
+ 'P' => '闢',
+ 'Q' => '霸',
+ 'R' => '霹',
+ 'S' => '露',
+ 'T' => '響',
+ 'U' => '顧',
+ 'V' => '顥',
+ 'W' => '饗',
+ 'X' => '驅',
+ 'Y' => '驃',
+ 'Z' => '驀',
+ '[' => '騾',
+ '\\' => '髏',
+ ']' => '魔',
+ '^' => '魑',
+ '_' => '鰭',
+ '`' => '鰥',
+ 'a' => '鶯',
+ 'b' => '鶴',
+ 'c' => '鷂',
+ 'd' => '鶸',
+ 'e' => '麝',
+ 'f' => '黯',
+ 'g' => '鼙',
+ 'h' => '齜',
+ 'i' => '齦',
+ 'j' => '齧',
+ 'k' => '儼',
+ 'l' => '儻',
+ 'm' => '囈',
+ 'n' => '囊',
+ 'o' => '囉',
+ 'p' => '孿',
+ 'q' => '巔',
+ 'r' => '巒',
+ 's' => '彎',
+ 't' => '懿',
+ 'u' => '攤',
+ 'v' => '權',
+ 'w' => '歡',
+ 'x' => '灑',
+ 'y' => '灘',
+ 'z' => '玀',
+ '{' => '瓤',
+ '|' => '疊',
+ '}' => '癮',
+ '~' => '癬',
+ 'š' => '禳',
+ 'Ţ' => '籠',
+ 'ţ' => '籟',
+ 'Ť' => '聾',
+ 'ť' => '聽',
+ 'Ŧ' => '臟',
+ 'ŧ' => '襲',
+ 'Ũ' => '襯',
+ 'ũ' => '觼',
+ 'Ū' => '讀',
+ 'ū' => '贖',
+ 'Ŭ' => '贗',
+ 'ŭ' => '躑',
+ 'Ů' => '躓',
+ 'ů' => '轡',
+ 'Ű' => '酈',
+ 'ű' => '鑄',
+ 'Ų' => '鑑',
+ 'ų' => '鑒',
+ 'Ŵ' => '霽',
+ 'ŵ' => '霾',
+ 'Ŷ' => '韃',
+ 'ŷ' => '韁',
+ 'Ÿ' => '顫',
+ 'Ź' => '饕',
+ 'ź' => '驕',
+ 'Ż' => '驍',
+ 'ż' => '髒',
+ 'Ž' => '鬚',
+ 'ž' => '鱉',
+ 'ſ' => '鰱',
+ '' => '鰾',
+ '' => '鰻',
+ '' => '鷓',
+ '' => '鷗',
+ '' => '鼴',
+ '' => '齬',
+ '' => '齪',
+ '' => '龔',
+ '' => '囌',
+ '' => '巖',
+ '' => '戀',
+ '' => '攣',
+ '' => '攫',
+ '' => '攪',
+ '' => '曬',
+ '' => '欐',
+ '' => '瓚',
+ '' => '竊',
+ '' => '籤',
+ '' => '籣',
+ '' => '籥',
+ '' => '纓',
+ '' => '纖',
+ '' => '纔',
+ '' => '臢',
+ '' => '蘸',
+ '' => '蘿',
+ '' => '蠱',
+ '' => '變',
+ '' => '邐',
+ '' => '邏',
+ '' => '鑣',
+ '' => '鑠',
+ '' => '鑤',
+ '' => '靨',
+ '' => '顯',
+ '' => '饜',
+ '' => '驚',
+ '' => '驛',
+ '' => '驗',
+ '' => '髓',
+ '' => '體',
+ '' => '髑',
+ '' => '鱔',
+ '' => '鱗',
+ '' => '鱖',
+ '' => '鷥',
+ '' => '麟',
+ '' => '黴',
+ '' => '囑',
+ '' => '壩',
+ '' => '攬',
+ '' => '灞',
+ '' => '癱',
+ '' => '癲',
+ '' => '矗',
+ '' => '罐',
+ '' => '羈',
+ '' => '蠶',
+ '' => '蠹',
+ '' => '衢',
+ '' => '讓',
+ '' => '讒',
+ '@' => '讖',
+ 'A' => '艷',
+ 'B' => '贛',
+ 'C' => '釀',
+ 'D' => '鑪',
+ 'E' => '靂',
+ 'F' => '靈',
+ 'G' => '靄',
+ 'H' => '韆',
+ 'I' => '顰',
+ 'J' => '驟',
+ 'K' => '鬢',
+ 'L' => '魘',
+ 'M' => '鱟',
+ 'N' => '鷹',
+ 'O' => '鷺',
+ 'P' => '鹼',
+ 'Q' => '鹽',
+ 'R' => '鼇',
+ 'S' => '齷',
+ 'T' => '齲',
+ 'U' => '廳',
+ 'V' => '欖',
+ 'W' => '灣',
+ 'X' => '籬',
+ 'Y' => '籮',
+ 'Z' => '蠻',
+ '[' => '觀',
+ '\\' => '躡',
+ ']' => '釁',
+ '^' => '鑲',
+ '_' => '鑰',
+ '`' => '顱',
+ 'a' => '饞',
+ 'b' => '髖',
+ 'c' => '鬣',
+ 'd' => '黌',
+ 'e' => '灤',
+ 'f' => '矚',
+ 'g' => '讚',
+ 'h' => '鑷',
+ 'i' => '韉',
+ 'j' => '驢',
+ 'k' => '驥',
+ 'l' => '纜',
+ 'm' => '讜',
+ 'n' => '躪',
+ 'o' => '釅',
+ 'p' => '鑽',
+ 'q' => '鑾',
+ 'r' => '鑼',
+ 's' => '鱷',
+ 't' => '鱸',
+ 'u' => '黷',
+ 'v' => '豔',
+ 'w' => '鑿',
+ 'x' => '鸚',
+ 'y' => '爨',
+ 'z' => '驪',
+ '{' => '鬱',
+ '|' => '鸛',
+ '}' => '鸞',
+ '~' => '籲',
+ 'ơ' => 'ヾ',
+ 'Ƣ' => 'ゝ',
+ 'ƣ' => 'ゞ',
+ 'Ƥ' => '々',
+ 'ƥ' => 'ぁ',
+ 'Ʀ' => 'あ',
+ 'Ƨ' => 'ぃ',
+ 'ƨ' => 'い',
+ 'Ʃ' => 'ぅ',
+ 'ƪ' => 'う',
+ 'ƫ' => 'ぇ',
+ 'Ƭ' => 'え',
+ 'ƭ' => 'ぉ',
+ 'Ʈ' => 'お',
+ 'Ư' => 'か',
+ 'ư' => 'が',
+ 'Ʊ' => 'き',
+ 'Ʋ' => 'ぎ',
+ 'Ƴ' => 'く',
+ 'ƴ' => 'ぐ',
+ 'Ƶ' => 'け',
+ 'ƶ' => 'げ',
+ 'Ʒ' => 'こ',
+ 'Ƹ' => 'ご',
+ 'ƹ' => 'さ',
+ 'ƺ' => 'ざ',
+ 'ƻ' => 'し',
+ 'Ƽ' => 'じ',
+ 'ƽ' => 'す',
+ 'ƾ' => 'ず',
+ 'ƿ' => 'せ',
+ '' => 'ぜ',
+ '' => 'そ',
+ '' => 'ぞ',
+ '' => 'た',
+ '' => 'だ',
+ '' => 'ち',
+ '' => 'ぢ',
+ '' => 'っ',
+ '' => 'つ',
+ '' => 'づ',
+ '' => 'て',
+ '' => 'で',
+ '' => 'と',
+ '' => 'ど',
+ '' => 'な',
+ '' => 'に',
+ '' => 'ぬ',
+ '' => 'ね',
+ '' => 'の',
+ '' => 'は',
+ '' => 'ば',
+ '' => 'ぱ',
+ '' => 'ひ',
+ '' => 'び',
+ '' => 'ぴ',
+ '' => 'ふ',
+ '' => 'ぶ',
+ '' => 'ぷ',
+ '' => 'へ',
+ '' => 'べ',
+ '' => 'ぺ',
+ '' => 'ほ',
+ '' => 'ぼ',
+ '' => 'ぽ',
+ '' => 'ま',
+ '' => 'み',
+ '' => 'む',
+ '' => 'め',
+ '' => 'も',
+ '' => 'ゃ',
+ '' => 'や',
+ '' => 'ゅ',
+ '' => 'ゆ',
+ '' => 'ょ',
+ '' => 'よ',
+ '' => 'ら',
+ '' => 'り',
+ '' => 'る',
+ '' => 'れ',
+ '' => 'ろ',
+ '' => 'ゎ',
+ '' => 'わ',
+ '' => 'ゐ',
+ '' => 'ゑ',
+ '' => 'を',
+ '' => 'ん',
+ '' => 'ァ',
+ '' => 'ア',
+ '' => 'ィ',
+ '' => 'イ',
+ '' => 'ゥ',
+ '' => 'ウ',
+ '' => 'ェ',
+ '@' => 'エ',
+ 'A' => 'ォ',
+ 'B' => 'オ',
+ 'C' => 'カ',
+ 'D' => 'ガ',
+ 'E' => 'キ',
+ 'F' => 'ギ',
+ 'G' => 'ク',
+ 'H' => 'グ',
+ 'I' => 'ケ',
+ 'J' => 'ゲ',
+ 'K' => 'コ',
+ 'L' => 'ゴ',
+ 'M' => 'サ',
+ 'N' => 'ザ',
+ 'O' => 'シ',
+ 'P' => 'ジ',
+ 'Q' => 'ス',
+ 'R' => 'ズ',
+ 'S' => 'セ',
+ 'T' => 'ゼ',
+ 'U' => 'ソ',
+ 'V' => 'ゾ',
+ 'W' => 'タ',
+ 'X' => 'ダ',
+ 'Y' => 'チ',
+ 'Z' => 'ヂ',
+ '[' => 'ッ',
+ '\\' => 'ツ',
+ ']' => 'ヅ',
+ '^' => 'テ',
+ '_' => 'デ',
+ '`' => 'ト',
+ 'a' => 'ド',
+ 'b' => 'ナ',
+ 'c' => 'ニ',
+ 'd' => 'ヌ',
+ 'e' => 'ネ',
+ 'f' => 'ノ',
+ 'g' => 'ハ',
+ 'h' => 'バ',
+ 'i' => 'パ',
+ 'j' => 'ヒ',
+ 'k' => 'ビ',
+ 'l' => 'ピ',
+ 'm' => 'フ',
+ 'n' => 'ブ',
+ 'o' => 'プ',
+ 'p' => 'ヘ',
+ 'q' => 'ベ',
+ 'r' => 'ペ',
+ 's' => 'ホ',
+ 't' => 'ボ',
+ 'u' => 'ポ',
+ 'v' => 'マ',
+ 'w' => 'ミ',
+ 'x' => 'ム',
+ 'y' => 'メ',
+ 'z' => 'モ',
+ '{' => 'ャ',
+ '|' => 'ヤ',
+ '}' => 'ュ',
+ '~' => 'ユ',
+ 'ǡ' => 'ョ',
+ 'Ǣ' => 'ヨ',
+ 'ǣ' => 'ラ',
+ 'Ǥ' => 'リ',
+ 'ǥ' => 'ル',
+ 'Ǧ' => 'レ',
+ 'ǧ' => 'ロ',
+ 'Ǩ' => 'ヮ',
+ 'ǩ' => 'ワ',
+ 'Ǫ' => 'ヰ',
+ 'ǫ' => 'ヱ',
+ 'Ǭ' => 'ヲ',
+ 'ǭ' => 'ン',
+ 'Ǯ' => 'ヴ',
+ 'ǯ' => 'ヵ',
+ 'ǰ' => 'ヶ',
+ 'DZ' => 'Д',
+ 'Dz' => 'Е',
+ 'dz' => 'Ё',
+ 'Ǵ' => 'Ж',
+ 'ǵ' => 'З',
+ 'Ƕ' => 'И',
+ 'Ƿ' => 'Й',
+ 'Ǹ' => 'К',
+ 'ǹ' => 'Л',
+ 'Ǻ' => 'М',
+ 'ǻ' => 'У',
+ 'Ǽ' => 'Ф',
+ 'ǽ' => 'Х',
+ 'Ǿ' => 'Ц',
+ 'ǿ' => 'Ч',
+ '' => 'Ш',
+ '' => 'Щ',
+ '' => 'Ъ',
+ '' => 'Ы',
+ '' => 'Ь',
+ '' => 'Э',
+ '' => 'Ю',
+ '' => 'Я',
+ '' => 'а',
+ '' => 'б',
+ '' => 'в',
+ '' => 'г',
+ '' => 'д',
+ '' => 'е',
+ '' => 'ё',
+ '' => 'ж',
+ '' => 'з',
+ '' => 'и',
+ '' => 'й',
+ '' => 'к',
+ '' => 'л',
+ '' => 'м',
+ '' => 'н',
+ '' => 'о',
+ '' => 'п',
+ '' => 'р',
+ '' => 'с',
+ '' => 'т',
+ '' => 'у',
+ '' => 'ф',
+ '' => 'х',
+ '' => 'ц',
+ '' => 'ч',
+ '' => 'ш',
+ '' => 'щ',
+ '' => 'ъ',
+ '' => 'ы',
+ '' => 'ь',
+ '' => 'э',
+ '' => 'ю',
+ '' => 'я',
+ '' => '①',
+ '' => '②',
+ '' => '③',
+ '' => '④',
+ '' => '⑤',
+ '' => '⑥',
+ '' => '⑦',
+ '' => '⑧',
+ '' => '⑨',
+ '' => '⑩',
+ '' => '⑴',
+ '' => '⑵',
+ '' => '⑶',
+ '' => '⑷',
+ '' => '⑸',
+ '' => '⑹',
+ '' => '⑺',
+ '' => '⑻',
+ '' => '⑼',
+ '' => '⑽',
+ '@' => '乂',
+ 'A' => '乜',
+ 'B' => '凵',
+ 'C' => '匚',
+ 'D' => '厂',
+ 'E' => '万',
+ 'F' => '丌',
+ 'G' => '乇',
+ 'H' => '亍',
+ 'I' => '囗',
+ 'J' => '兀',
+ 'K' => '屮',
+ 'L' => '彳',
+ 'M' => '丏',
+ 'N' => '冇',
+ 'O' => '与',
+ 'P' => '丮',
+ 'Q' => '亓',
+ 'R' => '仂',
+ 'S' => '仉',
+ 'T' => '仈',
+ 'U' => '冘',
+ 'V' => '勼',
+ 'W' => '卬',
+ 'X' => '厹',
+ 'Y' => '圠',
+ 'Z' => '夃',
+ '[' => '夬',
+ '\\' => '尐',
+ ']' => '巿',
+ '^' => '旡',
+ '_' => '殳',
+ '`' => '毌',
+ 'a' => '气',
+ 'b' => '爿',
+ 'c' => '丱',
+ 'd' => '丼',
+ 'e' => '仨',
+ 'f' => '仜',
+ 'g' => '仩',
+ 'h' => '仡',
+ 'i' => '仝',
+ 'j' => '仚',
+ 'k' => '刌',
+ 'l' => '匜',
+ 'm' => '卌',
+ 'n' => '圢',
+ 'o' => '圣',
+ 'p' => '夗',
+ 'q' => '夯',
+ 'r' => '宁',
+ 's' => '宄',
+ 't' => '尒',
+ 'u' => '尻',
+ 'v' => '屴',
+ 'w' => '屳',
+ 'x' => '帄',
+ 'y' => '庀',
+ 'z' => '庂',
+ '{' => '忉',
+ '|' => '戉',
+ '}' => '扐',
+ '~' => '氕',
+ 'ɡ' => '氶',
+ 'ɢ' => '汃',
+ 'ɣ' => '氿',
+ 'ɤ' => '氻',
+ 'ɥ' => '犮',
+ 'ɦ' => '犰',
+ 'ɧ' => '玊',
+ 'ɨ' => '禸',
+ 'ɩ' => '肊',
+ 'ɪ' => '阞',
+ 'ɫ' => '伎',
+ 'ɬ' => '优',
+ 'ɭ' => '伬',
+ 'ɮ' => '仵',
+ 'ɯ' => '伔',
+ 'ɰ' => '仱',
+ 'ɱ' => '伀',
+ 'ɲ' => '价',
+ 'ɳ' => '伈',
+ 'ɴ' => '伝',
+ 'ɵ' => '伂',
+ 'ɶ' => '伅',
+ 'ɷ' => '伢',
+ 'ɸ' => '伓',
+ 'ɹ' => '伄',
+ 'ɺ' => '仴',
+ 'ɻ' => '伒',
+ 'ɼ' => '冱',
+ 'ɽ' => '刓',
+ 'ɾ' => '刉',
+ 'ɿ' => '刐',
+ '' => '劦',
+ '' => '匢',
+ '' => '匟',
+ '' => '卍',
+ '' => '厊',
+ '' => '吇',
+ '' => '囡',
+ '' => '囟',
+ '' => '圮',
+ '' => '圪',
+ '' => '圴',
+ '' => '夼',
+ '' => '妀',
+ '' => '奼',
+ '' => '妅',
+ '' => '奻',
+ '' => '奾',
+ '' => '奷',
+ '' => '奿',
+ '' => '孖',
+ '' => '尕',
+ '' => '尥',
+ '' => '屼',
+ '' => '屺',
+ '' => '屻',
+ '' => '屾',
+ '' => '巟',
+ '' => '幵',
+ '' => '庄',
+ '' => '异',
+ '' => '弚',
+ '' => '彴',
+ '' => '忕',
+ '' => '忔',
+ '' => '忏',
+ '' => '扜',
+ '' => '扞',
+ '' => '扤',
+ '' => '扡',
+ '' => '扦',
+ '' => '扢',
+ '' => '扙',
+ '' => '扠',
+ '' => '扚',
+ '' => '扥',
+ '' => '旯',
+ '' => '旮',
+ '' => '朾',
+ '' => '朹',
+ '' => '朸',
+ '' => '朻',
+ '' => '机',
+ '' => '朿',
+ '' => '朼',
+ '' => '朳',
+ '' => '氘',
+ '' => '汆',
+ '' => '汒',
+ '' => '汜',
+ '' => '汏',
+ '' => '汊',
+ '' => '汔',
+ '' => '汋',
+ '@' => '汌',
+ 'A' => '灱',
+ 'B' => '牞',
+ 'C' => '犴',
+ 'D' => '犵',
+ 'E' => '玎',
+ 'F' => '甪',
+ 'G' => '癿',
+ 'H' => '穵',
+ 'I' => '网',
+ 'J' => '艸',
+ 'K' => '艼',
+ 'L' => '芀',
+ 'M' => '艽',
+ 'N' => '艿',
+ 'O' => '虍',
+ 'P' => '襾',
+ 'Q' => '邙',
+ 'R' => '邗',
+ 'S' => '邘',
+ 'T' => '邛',
+ 'U' => '邔',
+ 'V' => '阢',
+ 'W' => '阤',
+ 'X' => '阠',
+ 'Y' => '阣',
+ 'Z' => '佖',
+ '[' => '伻',
+ '\\' => '佢',
+ ']' => '佉',
+ '^' => '体',
+ '_' => '佤',
+ '`' => '伾',
+ 'a' => '佧',
+ 'b' => '佒',
+ 'c' => '佟',
+ 'd' => '佁',
+ 'e' => '佘',
+ 'f' => '伭',
+ 'g' => '伳',
+ 'h' => '伿',
+ 'i' => '佡',
+ 'j' => '冏',
+ 'k' => '冹',
+ 'l' => '刜',
+ 'm' => '刞',
+ 'n' => '刡',
+ 'o' => '劭',
+ 'p' => '劮',
+ 'q' => '匉',
+ 'r' => '卣',
+ 's' => '卲',
+ 't' => '厎',
+ 'u' => '厏',
+ 'v' => '吰',
+ 'w' => '吷',
+ 'x' => '吪',
+ 'y' => '呔',
+ 'z' => '呅',
+ '{' => '吙',
+ '|' => '吜',
+ '}' => '吥',
+ '~' => '吘',
+ 'ʡ' => '吽',
+ 'ʢ' => '呏',
+ 'ʣ' => '呁',
+ 'ʤ' => '吨',
+ 'ʥ' => '吤',
+ 'ʦ' => '呇',
+ 'ʧ' => '囮',
+ 'ʨ' => '囧',
+ 'ʩ' => '囥',
+ 'ʪ' => '坁',
+ 'ʫ' => '坅',
+ 'ʬ' => '坌',
+ 'ʭ' => '坉',
+ 'ʮ' => '坋',
+ 'ʯ' => '坒',
+ 'ʰ' => '夆',
+ 'ʱ' => '奀',
+ 'ʲ' => '妦',
+ 'ʳ' => '妘',
+ 'ʴ' => '妠',
+ 'ʵ' => '妗',
+ 'ʶ' => '妎',
+ 'ʷ' => '妢',
+ 'ʸ' => '妐',
+ 'ʹ' => '妏',
+ 'ʺ' => '妧',
+ 'ʻ' => '妡',
+ 'ʼ' => '宎',
+ 'ʽ' => '宒',
+ 'ʾ' => '尨',
+ 'ʿ' => '尪',
+ '' => '岍',
+ '' => '岏',
+ '' => '岈',
+ '' => '岋',
+ '' => '岉',
+ '' => '岒',
+ '' => '岊',
+ '' => '岆',
+ '' => '岓',
+ '' => '岕',
+ '' => '巠',
+ '' => '帊',
+ '' => '帎',
+ '' => '庋',
+ '' => '庉',
+ '' => '庌',
+ '' => '庈',
+ '' => '庍',
+ '' => '弅',
+ '' => '弝',
+ '' => '彸',
+ '' => '彶',
+ '' => '忒',
+ '' => '忑',
+ '' => '忐',
+ '' => '忭',
+ '' => '忨',
+ '' => '忮',
+ '' => '忳',
+ '' => '忡',
+ '' => '忤',
+ '' => '忣',
+ '' => '忺',
+ '' => '忯',
+ '' => '忷',
+ '' => '忻',
+ '' => '怀',
+ '' => '忴',
+ '' => '戺',
+ '' => '抃',
+ '' => '抌',
+ '' => '抎',
+ '' => '抏',
+ '' => '抔',
+ '' => '抇',
+ '' => '扱',
+ '' => '扻',
+ '' => '扺',
+ '' => '扰',
+ '' => '抁',
+ '' => '抈',
+ '' => '扷',
+ '' => '扽',
+ '' => '扲',
+ '' => '扴',
+ '' => '攷',
+ '' => '旰',
+ '' => '旴',
+ '' => '旳',
+ '' => '旲',
+ '' => '旵',
+ '' => '杅',
+ '' => '杇',
+ '@' => '杙',
+ 'A' => '杕',
+ 'B' => '杌',
+ 'C' => '杈',
+ 'D' => '杝',
+ 'E' => '杍',
+ 'F' => '杚',
+ 'G' => '杋',
+ 'H' => '毐',
+ 'I' => '氙',
+ 'J' => '氚',
+ 'K' => '汸',
+ 'L' => '汧',
+ 'M' => '汫',
+ 'N' => '沄',
+ 'O' => '沋',
+ 'P' => '沏',
+ 'Q' => '汱',
+ 'R' => '汯',
+ 'S' => '汩',
+ 'T' => '沚',
+ 'U' => '汭',
+ 'V' => '沇',
+ 'W' => '沕',
+ 'X' => '沜',
+ 'Y' => '汦',
+ 'Z' => '汳',
+ '[' => '汥',
+ '\\' => '汻',
+ ']' => '沎',
+ '^' => '灴',
+ '_' => '灺',
+ '`' => '牣',
+ 'a' => '犿',
+ 'b' => '犽',
+ 'c' => '狃',
+ 'd' => '狆',
+ 'e' => '狁',
+ 'f' => '犺',
+ 'g' => '狅',
+ 'h' => '玕',
+ 'i' => '玗',
+ 'j' => '玓',
+ 'k' => '玔',
+ 'l' => '玒',
+ 'm' => '町',
+ 'n' => '甹',
+ 'o' => '疔',
+ 'p' => '疕',
+ 'q' => '皁',
+ 'r' => '礽',
+ 's' => '耴',
+ 't' => '肕',
+ 'u' => '肙',
+ 'v' => '肐',
+ 'w' => '肒',
+ 'x' => '肜',
+ 'y' => '芐',
+ 'z' => '芏',
+ '{' => '芅',
+ '|' => '芎',
+ '}' => '芑',
+ '~' => '芓',
+ 'ˡ' => '芊',
+ 'ˢ' => '芃',
+ 'ˣ' => '芄',
+ 'ˤ' => '豸',
+ '˥' => '迉',
+ '˦' => '辿',
+ '˧' => '邟',
+ '˨' => '邡',
+ '˩' => '邥',
+ '˪' => '邞',
+ '˫' => '邧',
+ 'ˬ' => '邠',
+ '˭' => '阰',
+ 'ˮ' => '阨',
+ '˯' => '阯',
+ '˰' => '阭',
+ '˱' => '丳',
+ '˲' => '侘',
+ '˳' => '佼',
+ '˴' => '侅',
+ '˵' => '佽',
+ '˶' => '侀',
+ '˷' => '侇',
+ '˸' => '佶',
+ '˹' => '佴',
+ '˺' => '侉',
+ '˻' => '侄',
+ '˼' => '佷',
+ '˽' => '佌',
+ '˾' => '侗',
+ '˿' => '佪',
+ '' => '侚',
+ '' => '佹',
+ '' => '侁',
+ '' => '佸',
+ '' => '侐',
+ '' => '侜',
+ '' => '侔',
+ '' => '侞',
+ '' => '侒',
+ '' => '侂',
+ '' => '侕',
+ '' => '佫',
+ '' => '佮',
+ '' => '冞',
+ '' => '冼',
+ '' => '冾',
+ '' => '刵',
+ '' => '刲',
+ '' => '刳',
+ '' => '剆',
+ '' => '刱',
+ '' => '劼',
+ '' => '匊',
+ '' => '匋',
+ '' => '匼',
+ '' => '厒',
+ '' => '厔',
+ '' => '咇',
+ '' => '呿',
+ '' => '咁',
+ '' => '咑',
+ '' => '咂',
+ '' => '咈',
+ '' => '呫',
+ '' => '呺',
+ '' => '呾',
+ '' => '呥',
+ '' => '呬',
+ '' => '呴',
+ '' => '呦',
+ '' => '咍',
+ '' => '呯',
+ '' => '呡',
+ '' => '呠',
+ '' => '咘',
+ '' => '呣',
+ '' => '呧',
+ '' => '呤',
+ '' => '囷',
+ '' => '囹',
+ '' => '坯',
+ '' => '坲',
+ '' => '坭',
+ '' => '坫',
+ '' => '坱',
+ '' => '坰',
+ '' => '坶',
+ '' => '垀',
+ '' => '坵',
+ '' => '坻',
+ '' => '坳',
+ '' => '坴',
+ '' => '坢',
+ '@' => '坨',
+ 'A' => '坽',
+ 'B' => '夌',
+ 'C' => '奅',
+ 'D' => '妵',
+ 'E' => '妺',
+ 'F' => '姏',
+ 'G' => '姎',
+ 'H' => '妲',
+ 'I' => '姌',
+ 'J' => '姁',
+ 'K' => '妶',
+ 'L' => '妼',
+ 'M' => '姃',
+ 'N' => '姖',
+ 'O' => '妱',
+ 'P' => '妽',
+ 'Q' => '姀',
+ 'R' => '姈',
+ 'S' => '妴',
+ 'T' => '姇',
+ 'U' => '孢',
+ 'V' => '孥',
+ 'W' => '宓',
+ 'X' => '宕',
+ 'Y' => '屄',
+ 'Z' => '屇',
+ '[' => '岮',
+ '\\' => '岤',
+ ']' => '岠',
+ '^' => '岵',
+ '_' => '岯',
+ '`' => '岨',
+ 'a' => '岬',
+ 'b' => '岟',
+ 'c' => '岣',
+ 'd' => '岭',
+ 'e' => '岢',
+ 'f' => '岪',
+ 'g' => '岧',
+ 'h' => '岝',
+ 'i' => '岥',
+ 'j' => '岶',
+ 'k' => '岰',
+ 'l' => '岦',
+ 'm' => '帗',
+ 'n' => '帔',
+ 'o' => '帙',
+ 'p' => '弨',
+ 'q' => '弢',
+ 'r' => '弣',
+ 's' => '弤',
+ 't' => '彔',
+ 'u' => '徂',
+ 'v' => '彾',
+ 'w' => '彽',
+ 'x' => '忞',
+ 'y' => '忥',
+ 'z' => '怭',
+ '{' => '怦',
+ '|' => '怙',
+ '}' => '怲',
+ '~' => '怋',
+ '̡' => '怴',
+ '̢' => '怊',
+ '̣' => '怗',
+ '̤' => '怳',
+ '̥' => '怚',
+ '̦' => '怞',
+ '̧' => '怬',
+ '̨' => '怢',
+ '̩' => '怍',
+ '̪' => '怐',
+ '̫' => '怮',
+ '̬' => '怓',
+ '̭' => '怑',
+ '̮' => '怌',
+ '̯' => '怉',
+ '̰' => '怜',
+ '̱' => '戔',
+ '̲' => '戽',
+ '̳' => '抭',
+ '̴' => '抴',
+ '̵' => '拑',
+ '̶' => '抾',
+ '̷' => '抪',
+ '̸' => '抶',
+ '̹' => '拊',
+ '̺' => '抮',
+ '̻' => '抳',
+ '̼' => '抯',
+ '̽' => '抻',
+ '̾' => '抩',
+ '̿' => '抰',
+ '' => '抸',
+ '' => '攽',
+ '' => '斨',
+ '' => '斻',
+ '' => '昉',
+ '' => '旼',
+ '' => '昄',
+ '' => '昒',
+ '' => '昈',
+ '' => '旻',
+ '' => '昃',
+ '' => '昋',
+ '' => '昍',
+ '' => '昅',
+ '' => '旽',
+ '' => '昑',
+ '' => '昐',
+ '' => '曶',
+ '' => '朊',
+ '' => '枅',
+ '' => '杬',
+ '' => '枎',
+ '' => '枒',
+ '' => '杶',
+ '' => '杻',
+ '' => '枘',
+ '' => '枆',
+ '' => '构',
+ '' => '杴',
+ '' => '枍',
+ '' => '枌',
+ '' => '杺',
+ '' => '枟',
+ '' => '枑',
+ '' => '枙',
+ '' => '枃',
+ '' => '杽',
+ '' => '极',
+ '' => '杸',
+ '' => '杹',
+ '' => '枔',
+ '' => '欥',
+ '' => '殀',
+ '' => '歾',
+ '' => '毞',
+ '' => '氝',
+ '' => '沓',
+ '' => '泬',
+ '' => '泫',
+ '' => '泮',
+ '' => '泙',
+ '' => '沶',
+ '' => '泔',
+ '' => '沭',
+ '' => '泧',
+ '' => '沷',
+ '' => '泐',
+ '' => '泂',
+ '' => '沺',
+ '' => '泃',
+ '' => '泆',
+ '' => '泭',
+ '' => '泲',
+ '@' => '泒',
+ 'A' => '泝',
+ 'B' => '沴',
+ 'C' => '沊',
+ 'D' => '沝',
+ 'E' => '沀',
+ 'F' => '泞',
+ 'G' => '泀',
+ 'H' => '洰',
+ 'I' => '泍',
+ 'J' => '泇',
+ 'K' => '沰',
+ 'L' => '泹',
+ 'M' => '泏',
+ 'N' => '泩',
+ 'O' => '泑',
+ 'P' => '炔',
+ 'Q' => '炘',
+ 'R' => '炅',
+ 'S' => '炓',
+ 'T' => '炆',
+ 'U' => '炄',
+ 'V' => '炑',
+ 'W' => '炖',
+ 'X' => '炂',
+ 'Y' => '炚',
+ 'Z' => '炃',
+ '[' => '牪',
+ '\\' => '狖',
+ ']' => '狋',
+ '^' => '狘',
+ '_' => '狉',
+ '`' => '狜',
+ 'a' => '狒',
+ 'b' => '狔',
+ 'c' => '狚',
+ 'd' => '狌',
+ 'e' => '狑',
+ 'f' => '玤',
+ 'g' => '玡',
+ 'h' => '玭',
+ 'i' => '玦',
+ 'j' => '玢',
+ 'k' => '玠',
+ 'l' => '玬',
+ 'm' => '玝',
+ 'n' => '瓝',
+ 'o' => '瓨',
+ 'p' => '甿',
+ 'q' => '畀',
+ 'r' => '甾',
+ 's' => '疌',
+ 't' => '疘',
+ 'u' => '皯',
+ 'v' => '盳',
+ 'w' => '盱',
+ 'x' => '盰',
+ 'y' => '盵',
+ 'z' => '矸',
+ '{' => '矼',
+ '|' => '矹',
+ '}' => '矻',
+ '~' => '矺',
+ '͡' => '矷',
+ '͢' => '祂',
+ 'ͣ' => '礿',
+ 'ͤ' => '秅',
+ 'ͥ' => '穸',
+ 'ͦ' => '穻',
+ 'ͧ' => '竻',
+ 'ͨ' => '籵',
+ 'ͩ' => '糽',
+ 'ͪ' => '耵',
+ 'ͫ' => '肏',
+ 'ͬ' => '肮',
+ 'ͭ' => '肣',
+ 'ͮ' => '肸',
+ 'ͯ' => '肵',
+ 'Ͱ' => '肭',
+ 'ͱ' => '舠',
+ 'Ͳ' => '芠',
+ 'ͳ' => '苀',
+ 'ʹ' => '芫',
+ '͵' => '芚',
+ 'Ͷ' => '芘',
+ 'ͷ' => '芛',
+ '' => '芵',
+ '' => '芧',
+ 'ͺ' => '芮',
+ 'ͻ' => '芼',
+ 'ͼ' => '芞',
+ 'ͽ' => '芺',
+ ';' => '芴',
+ 'Ϳ' => '芨',
+ '' => '芡',
+ '' => '芩',
+ '' => '苂',
+ '' => '芤',
+ '' => '苃',
+ '' => '芶',
+ '' => '芢',
+ '' => '虰',
+ '' => '虯',
+ '' => '虭',
+ '' => '虮',
+ '' => '豖',
+ '' => '迒',
+ '' => '迋',
+ '' => '迓',
+ '' => '迍',
+ '' => '迖',
+ '' => '迕',
+ '' => '迗',
+ '' => '邲',
+ '' => '邴',
+ '' => '邯',
+ '' => '邳',
+ '' => '邰',
+ '' => '阹',
+ '' => '阽',
+ '' => '阼',
+ '' => '阺',
+ '' => '陃',
+ '' => '俍',
+ '' => '俅',
+ '' => '俓',
+ '' => '侲',
+ '' => '俉',
+ '' => '俋',
+ '' => '俁',
+ '' => '俔',
+ '' => '俜',
+ '' => '俙',
+ '' => '侻',
+ '' => '侳',
+ '' => '俛',
+ '' => '俇',
+ '' => '俖',
+ '' => '侺',
+ '' => '俀',
+ '' => '侹',
+ '' => '俬',
+ '' => '剄',
+ '' => '剉',
+ '' => '勀',
+ '' => '勂',
+ '' => '匽',
+ '' => '卼',
+ '' => '厗',
+ '' => '厖',
+ '' => '厙',
+ '' => '厘',
+ '' => '咺',
+ '' => '咡',
+ '' => '咭',
+ '' => '咥',
+ '' => '哏',
+ '@' => '哃',
+ 'A' => '茍',
+ 'B' => '咷',
+ 'C' => '咮',
+ 'D' => '哖',
+ 'E' => '咶',
+ 'F' => '哅',
+ 'G' => '哆',
+ 'H' => '咠',
+ 'I' => '呰',
+ 'J' => '咼',
+ 'K' => '咢',
+ 'L' => '咾',
+ 'M' => '呲',
+ 'N' => '哞',
+ 'O' => '咰',
+ 'P' => '垵',
+ 'Q' => '垞',
+ 'R' => '垟',
+ 'S' => '垤',
+ 'T' => '垌',
+ 'U' => '垗',
+ 'V' => '垝',
+ 'W' => '垛',
+ 'X' => '垔',
+ 'Y' => '垘',
+ 'Z' => '垏',
+ '[' => '垙',
+ '\\' => '垥',
+ ']' => '垚',
+ '^' => '垕',
+ '_' => '壴',
+ '`' => '复',
+ 'a' => '奓',
+ 'b' => '姡',
+ 'c' => '姞',
+ 'd' => '姮',
+ 'e' => '娀',
+ 'f' => '姱',
+ 'g' => '姝',
+ 'h' => '姺',
+ 'i' => '姽',
+ 'j' => '姼',
+ 'k' => '姶',
+ 'l' => '姤',
+ 'm' => '姲',
+ 'n' => '姷',
+ 'o' => '姛',
+ 'p' => '姩',
+ 'q' => '姳',
+ 'r' => '姵',
+ 's' => '姠',
+ 't' => '姾',
+ 'u' => '姴',
+ 'v' => '姭',
+ 'w' => '宨',
+ 'x' => '屌',
+ 'y' => '峐',
+ 'z' => '峘',
+ '{' => '峌',
+ '|' => '峗',
+ '}' => '峋',
+ '~' => '峛',
+ 'Ρ' => '峞',
+ '' => '峚',
+ 'Σ' => '峉',
+ 'Τ' => '峇',
+ 'Υ' => '峊',
+ 'Φ' => '峖',
+ 'Χ' => '峓',
+ 'Ψ' => '峔',
+ 'Ω' => '峏',
+ 'Ϊ' => '峈',
+ 'Ϋ' => '峆',
+ 'ά' => '峎',
+ 'έ' => '峟',
+ 'ή' => '峸',
+ 'ί' => '巹',
+ 'ΰ' => '帡',
+ 'α' => '帢',
+ 'β' => '帣',
+ 'γ' => '帠',
+ 'δ' => '帤',
+ 'ε' => '庰',
+ 'ζ' => '庤',
+ 'η' => '庢',
+ 'θ' => '庛',
+ 'ι' => '庣',
+ 'κ' => '庥',
+ 'λ' => '弇',
+ 'μ' => '弮',
+ 'ν' => '彖',
+ 'ξ' => '徆',
+ 'ο' => '怷',
+ '' => '怹',
+ '' => '恔',
+ '' => '恲',
+ '' => '恞',
+ '' => '恅',
+ '' => '恓',
+ '' => '恇',
+ '' => '恉',
+ '' => '恛',
+ '' => '恌',
+ '' => '恀',
+ '' => '恂',
+ '' => '恟',
+ '' => '怤',
+ '' => '恄',
+ '' => '恘',
+ '' => '恦',
+ '' => '恮',
+ '' => '扂',
+ '' => '扃',
+ '' => '拏',
+ '' => '挍',
+ '' => '挋',
+ '' => '拵',
+ '' => '挎',
+ '' => '挃',
+ '' => '拫',
+ '' => '拹',
+ '' => '挏',
+ '' => '挌',
+ '' => '拸',
+ '' => '拶',
+ '' => '挀',
+ '' => '挓',
+ '' => '挔',
+ '' => '拺',
+ '' => '挕',
+ '' => '拻',
+ '' => '拰',
+ '' => '敁',
+ '' => '敃',
+ '' => '斪',
+ '' => '斿',
+ '' => '昶',
+ '' => '昡',
+ '' => '昲',
+ '' => '昵',
+ '' => '昜',
+ '' => '昦',
+ '' => '昢',
+ '' => '昳',
+ '' => '昫',
+ '' => '昺',
+ '' => '昝',
+ '' => '昴',
+ '' => '昹',
+ '' => '昮',
+ '' => '朏',
+ '' => '朐',
+ '' => '柁',
+ '' => '柲',
+ '' => '柈',
+ '' => '枺',
+ '@' => '柜',
+ 'A' => '枻',
+ 'B' => '柸',
+ 'C' => '柘',
+ 'D' => '柀',
+ 'E' => '枷',
+ 'F' => '柅',
+ 'G' => '柫',
+ 'H' => '柤',
+ 'I' => '柟',
+ 'J' => '枵',
+ 'K' => '柍',
+ 'L' => '枳',
+ 'M' => '柷',
+ 'N' => '柶',
+ 'O' => '柮',
+ 'P' => '柣',
+ 'Q' => '柂',
+ 'R' => '枹',
+ 'S' => '柎',
+ 'T' => '柧',
+ 'U' => '柰',
+ 'V' => '枲',
+ 'W' => '柼',
+ 'X' => '柆',
+ 'Y' => '柭',
+ 'Z' => '柌',
+ '[' => '枮',
+ '\\' => '柦',
+ ']' => '柛',
+ '^' => '柺',
+ '_' => '柉',
+ '`' => '柊',
+ 'a' => '柃',
+ 'b' => '柪',
+ 'c' => '柋',
+ 'd' => '欨',
+ 'e' => '殂',
+ 'f' => '殄',
+ 'g' => '殶',
+ 'h' => '毖',
+ 'i' => '毘',
+ 'j' => '毠',
+ 'k' => '氠',
+ 'l' => '氡',
+ 'm' => '洨',
+ 'n' => '洴',
+ 'o' => '洭',
+ 'p' => '洟',
+ 'q' => '洼',
+ 'r' => '洿',
+ 's' => '洒',
+ 't' => '洊',
+ 'u' => '泚',
+ 'v' => '洳',
+ 'w' => '洄',
+ 'x' => '洙',
+ 'y' => '洺',
+ 'z' => '洚',
+ '{' => '洑',
+ '|' => '洀',
+ '}' => '洝',
+ '~' => '浂',
+ 'ϡ' => '洁',
+ 'Ϣ' => '洘',
+ 'ϣ' => '洷',
+ 'Ϥ' => '洃',
+ 'ϥ' => '洏',
+ 'Ϧ' => '浀',
+ 'ϧ' => '洇',
+ 'Ϩ' => '洠',
+ 'ϩ' => '洬',
+ 'Ϫ' => '洈',
+ 'ϫ' => '洢',
+ 'Ϭ' => '洉',
+ 'ϭ' => '洐',
+ 'Ϯ' => '炷',
+ 'ϯ' => '炟',
+ 'ϰ' => '炾',
+ 'ϱ' => '炱',
+ 'ϲ' => '炰',
+ 'ϳ' => '炡',
+ 'ϴ' => '炴',
+ 'ϵ' => '炵',
+ '϶' => '炩',
+ 'Ϸ' => '牁',
+ 'ϸ' => '牉',
+ 'Ϲ' => '牊',
+ 'Ϻ' => '牬',
+ 'ϻ' => '牰',
+ 'ϼ' => '牳',
+ 'Ͻ' => '牮',
+ 'Ͼ' => '狊',
+ 'Ͽ' => '狤',
+ '' => '狨',
+ '' => '狫',
+ '' => '狟',
+ '' => '狪',
+ '' => '狦',
+ '' => '狣',
+ '' => '玅',
+ '' => '珌',
+ '' => '珂',
+ '' => '珈',
+ '' => '珅',
+ '' => '玹',
+ '' => '玶',
+ '' => '玵',
+ '' => '玴',
+ '' => '珫',
+ '' => '玿',
+ '' => '珇',
+ '' => '玾',
+ '' => '珃',
+ '' => '珆',
+ '' => '玸',
+ '' => '珋',
+ '' => '瓬',
+ '' => '瓮',
+ '' => '甮',
+ '' => '畇',
+ '' => '畈',
+ '' => '疧',
+ '' => '疪',
+ '' => '癹',
+ '' => '盄',
+ '' => '眈',
+ '' => '眃',
+ '' => '眄',
+ '' => '眅',
+ '' => '眊',
+ '' => '盷',
+ '' => '盻',
+ '' => '盺',
+ '' => '矧',
+ '' => '矨',
+ '' => '砆',
+ '' => '砑',
+ '' => '砒',
+ '' => '砅',
+ '' => '砐',
+ '' => '砏',
+ '' => '砎',
+ '' => '砉',
+ '' => '砃',
+ '' => '砓',
+ '' => '祊',
+ '' => '祌',
+ '' => '祋',
+ '' => '祅',
+ '' => '祄',
+ '' => '秕',
+ '' => '种',
+ '' => '秏',
+ '' => '秖',
+ '' => '秎',
+ '' => '窀',
+ '@' => '穾',
+ 'A' => '竑',
+ 'B' => '笀',
+ 'C' => '笁',
+ 'D' => '籺',
+ 'E' => '籸',
+ 'F' => '籹',
+ 'G' => '籿',
+ 'H' => '粀',
+ 'I' => '粁',
+ 'J' => '紃',
+ 'K' => '紈',
+ 'L' => '紁',
+ 'M' => '罘',
+ 'N' => '羑',
+ 'O' => '羍',
+ 'P' => '羾',
+ 'Q' => '耇',
+ 'R' => '耎',
+ 'S' => '耏',
+ 'T' => '耔',
+ 'U' => '耷',
+ 'V' => '胘',
+ 'W' => '胇',
+ 'X' => '胠',
+ 'Y' => '胑',
+ 'Z' => '胈',
+ '[' => '胂',
+ '\\' => '胐',
+ ']' => '胅',
+ '^' => '胣',
+ '_' => '胙',
+ '`' => '胜',
+ 'a' => '胊',
+ 'b' => '胕',
+ 'c' => '胉',
+ 'd' => '胏',
+ 'e' => '胗',
+ 'f' => '胦',
+ 'g' => '胍',
+ 'h' => '臿',
+ 'i' => '舡',
+ 'j' => '芔',
+ 'k' => '苙',
+ 'l' => '苾',
+ 'm' => '苹',
+ 'n' => '茇',
+ 'o' => '苨',
+ 'p' => '茀',
+ 'q' => '苕',
+ 'r' => '茺',
+ 's' => '苫',
+ 't' => '苖',
+ 'u' => '苴',
+ 'v' => '苬',
+ 'w' => '苡',
+ 'x' => '苲',
+ 'y' => '苵',
+ 'z' => '茌',
+ '{' => '苻',
+ '|' => '苶',
+ '}' => '苰',
+ '~' => '苪',
+ 'С' => '苤',
+ 'Т' => '苠',
+ 'У' => '苺',
+ 'Ф' => '苳',
+ 'Х' => '苭',
+ 'Ц' => '虷',
+ 'Ч' => '虴',
+ 'Ш' => '虼',
+ 'Щ' => '虳',
+ 'Ъ' => '衁',
+ 'Ы' => '衎',
+ 'Ь' => '衧',
+ 'Э' => '衪',
+ 'Ю' => '衩',
+ 'Я' => '觓',
+ 'а' => '訄',
+ 'б' => '訇',
+ 'в' => '赲',
+ 'г' => '迣',
+ 'д' => '迡',
+ 'е' => '迮',
+ 'ж' => '迠',
+ 'з' => '郱',
+ 'и' => '邽',
+ 'й' => '邿',
+ 'к' => '郕',
+ 'л' => '郅',
+ 'м' => '邾',
+ 'н' => '郇',
+ 'о' => '郋',
+ 'п' => '郈',
+ '' => '釔',
+ '' => '釓',
+ '' => '陔',
+ '' => '陏',
+ '' => '陑',
+ '' => '陓',
+ '' => '陊',
+ '' => '陎',
+ '' => '倞',
+ '' => '倅',
+ '' => '倇',
+ '' => '倓',
+ '' => '倢',
+ '' => '倰',
+ '' => '倛',
+ '' => '俵',
+ '' => '俴',
+ '' => '倳',
+ '' => '倷',
+ '' => '倬',
+ '' => '俶',
+ '' => '俷',
+ '' => '倗',
+ '' => '倜',
+ '' => '倠',
+ '' => '倧',
+ '' => '倵',
+ '' => '倯',
+ '' => '倱',
+ '' => '倎',
+ '' => '党',
+ '' => '冔',
+ '' => '冓',
+ '' => '凊',
+ '' => '凄',
+ '' => '凅',
+ '' => '凈',
+ '' => '凎',
+ '' => '剡',
+ '' => '剚',
+ '' => '剒',
+ '' => '剞',
+ '' => '剟',
+ '' => '剕',
+ '' => '剢',
+ '' => '勍',
+ '' => '匎',
+ '' => '厞',
+ '' => '唦',
+ '' => '哢',
+ '' => '唗',
+ '' => '唒',
+ '' => '哧',
+ '' => '哳',
+ '' => '哤',
+ '' => '唚',
+ '' => '哿',
+ '' => '唄',
+ '' => '唈',
+ '' => '哫',
+ '' => '唑',
+ '' => '唅',
+ '' => '哱',
+ '@' => '唊',
+ 'A' => '哻',
+ 'B' => '哷',
+ 'C' => '哸',
+ 'D' => '哠',
+ 'E' => '唎',
+ 'F' => '唃',
+ 'G' => '唋',
+ 'H' => '圁',
+ 'I' => '圂',
+ 'J' => '埌',
+ 'K' => '堲',
+ 'L' => '埕',
+ 'M' => '埒',
+ 'N' => '垺',
+ 'O' => '埆',
+ 'P' => '垽',
+ 'Q' => '垼',
+ 'R' => '垸',
+ 'S' => '垶',
+ 'T' => '垿',
+ 'U' => '埇',
+ 'V' => '埐',
+ 'W' => '垹',
+ 'X' => '埁',
+ 'Y' => '夎',
+ 'Z' => '奊',
+ '[' => '娙',
+ '\\' => '娖',
+ ']' => '娭',
+ '^' => '娮',
+ '_' => '娕',
+ '`' => '娏',
+ 'a' => '娗',
+ 'b' => '娊',
+ 'c' => '娞',
+ 'd' => '娳',
+ 'e' => '孬',
+ 'f' => '宧',
+ 'g' => '宭',
+ 'h' => '宬',
+ 'i' => '尃',
+ 'j' => '屖',
+ 'k' => '屔',
+ 'l' => '峬',
+ 'm' => '峿',
+ 'n' => '峮',
+ 'o' => '峱',
+ 'p' => '峷',
+ 'q' => '崀',
+ 'r' => '峹',
+ 's' => '帩',
+ 't' => '帨',
+ 'u' => '庨',
+ 'v' => '庮',
+ 'w' => '庪',
+ 'x' => '庬',
+ 'y' => '弳',
+ 'z' => '弰',
+ '{' => '彧',
+ '|' => '恝',
+ '}' => '恚',
+ '~' => '恧',
+ 'ѡ' => '恁',
+ 'Ѣ' => '悢',
+ 'ѣ' => '悈',
+ 'Ѥ' => '悀',
+ 'ѥ' => '悒',
+ 'Ѧ' => '悁',
+ 'ѧ' => '悝',
+ 'Ѩ' => '悃',
+ 'ѩ' => '悕',
+ 'Ѫ' => '悛',
+ 'ѫ' => '悗',
+ 'Ѭ' => '悇',
+ 'ѭ' => '悜',
+ 'Ѯ' => '悎',
+ 'ѯ' => '戙',
+ 'Ѱ' => '扆',
+ 'ѱ' => '拲',
+ 'Ѳ' => '挐',
+ 'ѳ' => '捖',
+ 'Ѵ' => '挬',
+ 'ѵ' => '捄',
+ 'Ѷ' => '捅',
+ 'ѷ' => '挶',
+ 'Ѹ' => '捃',
+ 'ѹ' => '揤',
+ 'Ѻ' => '挹',
+ 'ѻ' => '捋',
+ 'Ѽ' => '捊',
+ 'ѽ' => '挼',
+ 'Ѿ' => '挩',
+ 'ѿ' => '捁',
+ '' => '挴',
+ '' => '捘',
+ '' => '捔',
+ '' => '捙',
+ '' => '挭',
+ '' => '捇',
+ '' => '挳',
+ '' => '捚',
+ '' => '捑',
+ '' => '挸',
+ '' => '捗',
+ '' => '捀',
+ '' => '捈',
+ '' => '敊',
+ '' => '敆',
+ '' => '旆',
+ '' => '旃',
+ '' => '旄',
+ '' => '旂',
+ '' => '晊',
+ '' => '晟',
+ '' => '晇',
+ '' => '晑',
+ '' => '朒',
+ '' => '朓',
+ '' => '栟',
+ '' => '栚',
+ '' => '桉',
+ '' => '栲',
+ '' => '栳',
+ '' => '栻',
+ '' => '桋',
+ '' => '桏',
+ '' => '栖',
+ '' => '栱',
+ '' => '栜',
+ '' => '栵',
+ '' => '栫',
+ '' => '栭',
+ '' => '栯',
+ '' => '桎',
+ '' => '桄',
+ '' => '栴',
+ '' => '栝',
+ '' => '栒',
+ '' => '栔',
+ '' => '栦',
+ '' => '栨',
+ '' => '栮',
+ '' => '桍',
+ '' => '栺',
+ '' => '栥',
+ '' => '栠',
+ '' => '欬',
+ '' => '欯',
+ '' => '欭',
+ '' => '欱',
+ '' => '欴',
+ '' => '歭',
+ '' => '肂',
+ '' => '殈',
+ '' => '毦',
+ '' => '毤',
+ '@' => '毨',
+ 'A' => '毣',
+ 'B' => '毢',
+ 'C' => '毧',
+ 'D' => '氥',
+ 'E' => '浺',
+ 'F' => '浣',
+ 'G' => '浤',
+ 'H' => '浶',
+ 'I' => '洍',
+ 'J' => '浡',
+ 'K' => '涒',
+ 'L' => '浘',
+ 'M' => '浢',
+ 'N' => '浭',
+ 'O' => '浯',
+ 'P' => '涑',
+ 'Q' => '涍',
+ 'R' => '淯',
+ 'S' => '浿',
+ 'T' => '涆',
+ 'U' => '浞',
+ 'V' => '浧',
+ 'W' => '浠',
+ 'X' => '涗',
+ 'Y' => '浰',
+ 'Z' => '浼',
+ '[' => '浟',
+ '\\' => '涂',
+ ']' => '涘',
+ '^' => '洯',
+ '_' => '浨',
+ '`' => '涋',
+ 'a' => '浾',
+ 'b' => '涀',
+ 'c' => '涄',
+ 'd' => '洖',
+ 'e' => '涃',
+ 'f' => '浻',
+ 'g' => '浽',
+ 'h' => '浵',
+ 'i' => '涐',
+ 'j' => '烜',
+ 'k' => '烓',
+ 'l' => '烑',
+ 'm' => '烝',
+ 'n' => '烋',
+ 'o' => '缹',
+ 'p' => '烢',
+ 'q' => '烗',
+ 'r' => '烒',
+ 's' => '烞',
+ 't' => '烠',
+ 'u' => '烔',
+ 'v' => '烍',
+ 'w' => '烅',
+ 'x' => '烆',
+ 'y' => '烇',
+ 'z' => '烚',
+ '{' => '烎',
+ '|' => '烡',
+ '}' => '牂',
+ '~' => '牸',
+ 'ҡ' => '牷',
+ 'Ң' => '牶',
+ 'ң' => '猀',
+ 'Ҥ' => '狺',
+ 'ҥ' => '狴',
+ 'Ҧ' => '狾',
+ 'ҧ' => '狶',
+ 'Ҩ' => '狳',
+ 'ҩ' => '狻',
+ 'Ҫ' => '猁',
+ 'ҫ' => '珓',
+ 'Ҭ' => '珙',
+ 'ҭ' => '珥',
+ 'Ү' => '珖',
+ 'ү' => '玼',
+ 'Ұ' => '珧',
+ 'ұ' => '珣',
+ 'Ҳ' => '珩',
+ 'ҳ' => '珜',
+ 'Ҵ' => '珒',
+ 'ҵ' => '珛',
+ 'Ҷ' => '珔',
+ 'ҷ' => '珝',
+ 'Ҹ' => '珚',
+ 'ҹ' => '珗',
+ 'Һ' => '珘',
+ 'һ' => '珨',
+ 'Ҽ' => '瓞',
+ 'ҽ' => '瓟',
+ 'Ҿ' => '瓴',
+ 'ҿ' => '瓵',
+ '' => '甡',
+ '' => '畛',
+ '' => '畟',
+ '' => '疰',
+ '' => '痁',
+ '' => '疻',
+ '' => '痄',
+ '' => '痀',
+ '' => '疿',
+ '' => '疶',
+ '' => '疺',
+ '' => '皊',
+ '' => '盉',
+ '' => '眝',
+ '' => '眛',
+ '' => '眐',
+ '' => '眓',
+ '' => '眒',
+ '' => '眣',
+ '' => '眑',
+ '' => '眕',
+ '' => '眙',
+ '' => '眚',
+ '' => '眢',
+ '' => '眧',
+ '' => '砣',
+ '' => '砬',
+ '' => '砢',
+ '' => '砵',
+ '' => '砯',
+ '' => '砨',
+ '' => '砮',
+ '' => '砫',
+ '' => '砡',
+ '' => '砩',
+ '' => '砳',
+ '' => '砪',
+ '' => '砱',
+ '' => '祔',
+ '' => '祛',
+ '' => '祏',
+ '' => '祜',
+ '' => '祓',
+ '' => '祒',
+ '' => '祑',
+ '' => '秫',
+ '' => '秬',
+ '' => '秠',
+ '' => '秮',
+ '' => '秭',
+ '' => '秪',
+ '' => '秜',
+ '' => '秞',
+ '' => '秝',
+ '' => '窆',
+ '' => '窉',
+ '' => '窅',
+ '' => '窋',
+ '' => '窌',
+ '' => '窊',
+ '' => '窇',
+ '' => '竘',
+ '' => '笐',
+ '@' => '笄',
+ 'A' => '笓',
+ 'B' => '笅',
+ 'C' => '笏',
+ 'D' => '笈',
+ 'E' => '笊',
+ 'F' => '笎',
+ 'G' => '笉',
+ 'H' => '笒',
+ 'I' => '粄',
+ 'J' => '粑',
+ 'K' => '粊',
+ 'L' => '粌',
+ 'M' => '粈',
+ 'N' => '粍',
+ 'O' => '粅',
+ 'P' => '紞',
+ 'Q' => '紝',
+ 'R' => '紑',
+ 'S' => '紎',
+ 'T' => '紘',
+ 'U' => '紖',
+ 'V' => '紓',
+ 'W' => '紟',
+ 'X' => '紒',
+ 'Y' => '紏',
+ 'Z' => '紌',
+ '[' => '罜',
+ '\\' => '罡',
+ ']' => '罞',
+ '^' => '罠',
+ '_' => '罝',
+ '`' => '罛',
+ 'a' => '羖',
+ 'b' => '羒',
+ 'c' => '翃',
+ 'd' => '翂',
+ 'e' => '翀',
+ 'f' => '耖',
+ 'g' => '耾',
+ 'h' => '耹',
+ 'i' => '胺',
+ 'j' => '胲',
+ 'k' => '胹',
+ 'l' => '胵',
+ 'm' => '脁',
+ 'n' => '胻',
+ 'o' => '脀',
+ 'p' => '舁',
+ 'q' => '舯',
+ 'r' => '舥',
+ 's' => '茳',
+ 't' => '茭',
+ 'u' => '荄',
+ 'v' => '茙',
+ 'w' => '荑',
+ 'x' => '茥',
+ 'y' => '荖',
+ 'z' => '茿',
+ '{' => '荁',
+ '|' => '茦',
+ '}' => '茜',
+ '~' => '茢',
+ 'ӡ' => '荂',
+ 'Ӣ' => '荎',
+ 'ӣ' => '茛',
+ 'Ӥ' => '茪',
+ 'ӥ' => '茈',
+ 'Ӧ' => '茼',
+ 'ӧ' => '荍',
+ 'Ө' => '茖',
+ 'ө' => '茤',
+ 'Ӫ' => '茠',
+ 'ӫ' => '茷',
+ 'Ӭ' => '茯',
+ 'ӭ' => '茩',
+ 'Ӯ' => '荇',
+ 'ӯ' => '荅',
+ 'Ӱ' => '荌',
+ 'ӱ' => '荓',
+ 'Ӳ' => '茞',
+ 'ӳ' => '茬',
+ 'Ӵ' => '荋',
+ 'ӵ' => '茧',
+ 'Ӷ' => '荈',
+ 'ӷ' => '虓',
+ 'Ӹ' => '虒',
+ 'ӹ' => '蚢',
+ 'Ӻ' => '蚨',
+ 'ӻ' => '蚖',
+ 'Ӽ' => '蚍',
+ 'ӽ' => '蚑',
+ 'Ӿ' => '蚞',
+ 'ӿ' => '蚇',
+ '' => '蚗',
+ '' => '蚆',
+ '' => '蚋',
+ '' => '蚚',
+ '' => '蚅',
+ '' => '蚥',
+ '' => '蚙',
+ '' => '蚡',
+ '' => '蚧',
+ '' => '蚕',
+ '' => '蚘',
+ '' => '蚎',
+ '' => '蚝',
+ '' => '蚐',
+ '' => '蚔',
+ '' => '衃',
+ '' => '衄',
+ '' => '衭',
+ '' => '衵',
+ '' => '衶',
+ '' => '衲',
+ '' => '袀',
+ '' => '衱',
+ '' => '衿',
+ '' => '衯',
+ '' => '袃',
+ '' => '衾',
+ '' => '衴',
+ '' => '衼',
+ '' => '訒',
+ '' => '豇',
+ '' => '豗',
+ '' => '豻',
+ '' => '貤',
+ '' => '貣',
+ '' => '赶',
+ '' => '赸',
+ '' => '趵',
+ '' => '趷',
+ '' => '趶',
+ '' => '軑',
+ '' => '軓',
+ '' => '迾',
+ '' => '迵',
+ '' => '适',
+ '' => '迿',
+ '' => '迻',
+ '' => '逄',
+ '' => '迼',
+ '' => '迶',
+ '' => '郖',
+ '' => '郠',
+ '' => '郙',
+ '' => '郚',
+ '' => '郣',
+ '' => '郟',
+ '' => '郥',
+ '' => '郘',
+ '' => '郛',
+ '' => '郗',
+ '' => '郜',
+ '' => '郤',
+ '' => '酐',
+ '@' => '酎',
+ 'A' => '酏',
+ 'B' => '釕',
+ 'C' => '釢',
+ 'D' => '釚',
+ 'E' => '陜',
+ 'F' => '陟',
+ 'G' => '隼',
+ 'H' => '飣',
+ 'I' => '髟',
+ 'J' => '鬯',
+ 'K' => '乿',
+ 'L' => '偰',
+ 'M' => '偪',
+ 'N' => '偡',
+ 'O' => '偞',
+ 'P' => '偠',
+ 'Q' => '偓',
+ 'R' => '偋',
+ 'S' => '偝',
+ 'T' => '偲',
+ 'U' => '偈',
+ 'V' => '偍',
+ 'W' => '偁',
+ 'X' => '偛',
+ 'Y' => '偊',
+ 'Z' => '偢',
+ '[' => '倕',
+ '\\' => '偅',
+ ']' => '偟',
+ '^' => '偩',
+ '_' => '偫',
+ '`' => '偣',
+ 'a' => '偤',
+ 'b' => '偆',
+ 'c' => '偀',
+ 'd' => '偮',
+ 'e' => '偳',
+ 'f' => '偗',
+ 'g' => '偑',
+ 'h' => '凐',
+ 'i' => '剫',
+ 'j' => '剭',
+ 'k' => '剬',
+ 'l' => '剮',
+ 'm' => '勖',
+ 'n' => '勓',
+ 'o' => '匭',
+ 'p' => '厜',
+ 'q' => '啵',
+ 'r' => '啶',
+ 's' => '唼',
+ 't' => '啍',
+ 'u' => '啐',
+ 'v' => '唴',
+ 'w' => '唪',
+ 'x' => '啑',
+ 'y' => '啢',
+ 'z' => '唶',
+ '{' => '唵',
+ '|' => '唰',
+ '}' => '啒',
+ '~' => '啅',
+ 'ԡ' => '唌',
+ 'Ԣ' => '唲',
+ 'ԣ' => '啥',
+ 'Ԥ' => '啎',
+ 'ԥ' => '唹',
+ 'Ԧ' => '啈',
+ 'ԧ' => '唭',
+ 'Ԩ' => '唻',
+ 'ԩ' => '啀',
+ 'Ԫ' => '啋',
+ 'ԫ' => '圊',
+ 'Ԭ' => '圇',
+ 'ԭ' => '埻',
+ 'Ԯ' => '堔',
+ 'ԯ' => '埢',
+ '' => '埶',
+ 'Ա' => '埜',
+ 'Բ' => '埴',
+ 'Գ' => '堀',
+ 'Դ' => '埭',
+ 'Ե' => '埽',
+ 'Զ' => '堈',
+ 'Է' => '埸',
+ 'Ը' => '堋',
+ 'Թ' => '埳',
+ 'Ժ' => '埏',
+ 'Ի' => '堇',
+ 'Լ' => '埮',
+ 'Խ' => '埣',
+ 'Ծ' => '埲',
+ 'Կ' => '埥',
+ '' => '埬',
+ '' => '埡',
+ '' => '堎',
+ '' => '埼',
+ '' => '堐',
+ '' => '埧',
+ '' => '堁',
+ '' => '堌',
+ '' => '埱',
+ '' => '埩',
+ '' => '埰',
+ '' => '堍',
+ '' => '堄',
+ '' => '奜',
+ '' => '婠',
+ '' => '婘',
+ '' => '婕',
+ '' => '婧',
+ '' => '婞',
+ '' => '娸',
+ '' => '娵',
+ '' => '婭',
+ '' => '婐',
+ '' => '婟',
+ '' => '婥',
+ '' => '婬',
+ '' => '婓',
+ '' => '婤',
+ '' => '婗',
+ '' => '婃',
+ '' => '婝',
+ '' => '婒',
+ '' => '婄',
+ '' => '婛',
+ '' => '婈',
+ '' => '媎',
+ '' => '娾',
+ '' => '婍',
+ '' => '娹',
+ '' => '婌',
+ '' => '婰',
+ '' => '婩',
+ '' => '婇',
+ '' => '婑',
+ '' => '婖',
+ '' => '婂',
+ '' => '婜',
+ '' => '孲',
+ '' => '孮',
+ '' => '寁',
+ '' => '寀',
+ '' => '屙',
+ '' => '崞',
+ '' => '崋',
+ '' => '崝',
+ '' => '崚',
+ '' => '崠',
+ '' => '崌',
+ '' => '崨',
+ '' => '崍',
+ '' => '崦',
+ '' => '崥',
+ '' => '崏',
+ '@' => '崰',
+ 'A' => '崒',
+ 'B' => '崣',
+ 'C' => '崟',
+ 'D' => '崮',
+ 'E' => '帾',
+ 'F' => '帴',
+ 'G' => '庱',
+ 'H' => '庴',
+ 'I' => '庹',
+ 'J' => '庲',
+ 'K' => '庳',
+ 'L' => '弶',
+ 'M' => '弸',
+ 'N' => '徛',
+ 'O' => '徖',
+ 'P' => '徟',
+ 'Q' => '悊',
+ 'R' => '悐',
+ 'S' => '悆',
+ 'T' => '悾',
+ 'U' => '悰',
+ 'V' => '悺',
+ 'W' => '惓',
+ 'X' => '惔',
+ 'Y' => '惏',
+ 'Z' => '惤',
+ '[' => '惙',
+ '\\' => '惝',
+ ']' => '惈',
+ '^' => '悱',
+ '_' => '惛',
+ '`' => '悷',
+ 'a' => '惊',
+ 'b' => '悿',
+ 'c' => '惃',
+ 'd' => '惍',
+ 'e' => '惀',
+ 'f' => '挲',
+ 'g' => '捥',
+ 'h' => '掊',
+ 'i' => '掂',
+ 'j' => '捽',
+ 'k' => '掽',
+ 'l' => '掞',
+ 'm' => '掭',
+ 'n' => '掝',
+ 'o' => '掗',
+ 'p' => '掫',
+ 'q' => '掎',
+ 'r' => '捯',
+ 's' => '掇',
+ 't' => '掐',
+ 'u' => '据',
+ 'v' => '掯',
+ 'w' => '捵',
+ 'x' => '掜',
+ 'y' => '捭',
+ 'z' => '掮',
+ '{' => '捼',
+ '|' => '掤',
+ '}' => '挻',
+ '~' => '掟',
+ 'ա' => '捸',
+ 'բ' => '掅',
+ 'գ' => '掁',
+ 'դ' => '掑',
+ 'ե' => '掍',
+ 'զ' => '捰',
+ 'է' => '敓',
+ 'ը' => '旍',
+ 'թ' => '晥',
+ 'ժ' => '晡',
+ 'ի' => '晛',
+ 'լ' => '晙',
+ 'խ' => '晜',
+ 'ծ' => '晢',
+ 'կ' => '朘',
+ 'հ' => '桹',
+ 'ձ' => '梇',
+ 'ղ' => '梐',
+ 'ճ' => '梜',
+ 'մ' => '桭',
+ 'յ' => '桮',
+ 'ն' => '梮',
+ 'շ' => '梫',
+ 'ո' => '楖',
+ 'չ' => '桯',
+ 'պ' => '梣',
+ 'ջ' => '梬',
+ 'ռ' => '梩',
+ 'ս' => '桵',
+ 'վ' => '桴',
+ 'տ' => '梲',
+ '' => '梏',
+ '' => '桷',
+ '' => '梒',
+ '' => '桼',
+ '' => '桫',
+ '' => '桲',
+ '' => '梪',
+ '' => '梀',
+ '' => '桱',
+ '' => '桾',
+ '' => '梛',
+ '' => '梖',
+ '' => '梋',
+ '' => '梠',
+ '' => '梉',
+ '' => '梤',
+ '' => '桸',
+ '' => '桻',
+ '' => '梑',
+ '' => '梌',
+ '' => '梊',
+ '' => '桽',
+ '' => '欶',
+ '' => '欳',
+ '' => '欷',
+ '' => '欸',
+ '' => '殑',
+ '' => '殏',
+ '' => '殍',
+ '' => '殎',
+ '' => '殌',
+ '' => '氪',
+ '' => '淀',
+ '' => '涫',
+ '' => '涴',
+ '' => '涳',
+ '' => '湴',
+ '' => '涬',
+ '' => '淩',
+ '' => '淢',
+ '' => '涷',
+ '' => '淶',
+ '' => '淔',
+ '' => '渀',
+ '' => '淈',
+ '' => '淠',
+ '' => '淟',
+ '' => '淖',
+ '' => '涾',
+ '' => '淥',
+ '' => '淜',
+ '' => '淝',
+ '' => '淛',
+ '' => '淴',
+ '' => '淊',
+ '' => '涽',
+ '' => '淭',
+ '' => '淰',
+ '' => '涺',
+ '' => '淕',
+ '' => '淂',
+ '' => '淏',
+ '' => '淉',
+ '@' => '淐',
+ 'A' => '淲',
+ 'B' => '淓',
+ 'C' => '淽',
+ 'D' => '淗',
+ 'E' => '淍',
+ 'F' => '淣',
+ 'G' => '涻',
+ 'H' => '烺',
+ 'I' => '焍',
+ 'J' => '烷',
+ 'K' => '焗',
+ 'L' => '烴',
+ 'M' => '焌',
+ 'N' => '烰',
+ 'O' => '焄',
+ 'P' => '烳',
+ 'Q' => '焐',
+ 'R' => '烼',
+ 'S' => '烿',
+ 'T' => '焆',
+ 'U' => '焓',
+ 'V' => '焀',
+ 'W' => '烸',
+ 'X' => '烶',
+ 'Y' => '焋',
+ 'Z' => '焂',
+ '[' => '焎',
+ '\\' => '牾',
+ ']' => '牻',
+ '^' => '牼',
+ '_' => '牿',
+ '`' => '猝',
+ 'a' => '猗',
+ 'b' => '猇',
+ 'c' => '猑',
+ 'd' => '猘',
+ 'e' => '猊',
+ 'f' => '猈',
+ 'g' => '狿',
+ 'h' => '猏',
+ 'i' => '猞',
+ 'j' => '玈',
+ 'k' => '珶',
+ 'l' => '珸',
+ 'm' => '珵',
+ 'n' => '琄',
+ 'o' => '琁',
+ 'p' => '珽',
+ 'q' => '琇',
+ 'r' => '琀',
+ 's' => '珺',
+ 't' => '珼',
+ 'u' => '珿',
+ 'v' => '琌',
+ 'w' => '琋',
+ 'x' => '珴',
+ 'y' => '琈',
+ 'z' => '畤',
+ '{' => '畣',
+ '|' => '痎',
+ '}' => '痒',
+ '~' => '痏',
+ '֡' => '痋',
+ '֢' => '痌',
+ '֣' => '痑',
+ '֤' => '痐',
+ '֥' => '皏',
+ '֦' => '皉',
+ '֧' => '盓',
+ '֨' => '眹',
+ '֩' => '眯',
+ '֪' => '眭',
+ '֫' => '眱',
+ '֬' => '眲',
+ '֭' => '眴',
+ '֮' => '眳',
+ '֯' => '眽',
+ 'ְ' => '眥',
+ 'ֱ' => '眻',
+ 'ֲ' => '眵',
+ 'ֳ' => '硈',
+ 'ִ' => '硒',
+ 'ֵ' => '硉',
+ 'ֶ' => '硍',
+ 'ַ' => '硊',
+ 'ָ' => '硌',
+ 'ֹ' => '砦',
+ 'ֺ' => '硅',
+ 'ֻ' => '硐',
+ 'ּ' => '祤',
+ 'ֽ' => '祧',
+ '־' => '祩',
+ 'ֿ' => '祪',
+ '' => '祣',
+ '' => '祫',
+ '' => '祡',
+ '' => '离',
+ '' => '秺',
+ '' => '秸',
+ '' => '秶',
+ '' => '秷',
+ '' => '窏',
+ '' => '窔',
+ '' => '窐',
+ '' => '笵',
+ '' => '筇',
+ '' => '笴',
+ '' => '笥',
+ '' => '笰',
+ '' => '笢',
+ '' => '笤',
+ '' => '笳',
+ '' => '笘',
+ '' => '笪',
+ '' => '笝',
+ '' => '笱',
+ '' => '笫',
+ '' => '笭',
+ '' => '笯',
+ '' => '笲',
+ '' => '笸',
+ '' => '笚',
+ '' => '笣',
+ '' => '粔',
+ '' => '粘',
+ '' => '粖',
+ '' => '粣',
+ '' => '紵',
+ '' => '紽',
+ '' => '紸',
+ '' => '紶',
+ '' => '紺',
+ '' => '絅',
+ '' => '紬',
+ '' => '紩',
+ '' => '絁',
+ '' => '絇',
+ '' => '紾',
+ '' => '紿',
+ '' => '絊',
+ '' => '紻',
+ '' => '紨',
+ '' => '罣',
+ '' => '羕',
+ '' => '羜',
+ '' => '羝',
+ '' => '羛',
+ '' => '翊',
+ '' => '翋',
+ '' => '翍',
+ '' => '翐',
+ '' => '翑',
+ '' => '翇',
+ '' => '翏',
+ '' => '翉',
+ '' => '耟',
+ '@' => '耞',
+ 'A' => '耛',
+ 'B' => '聇',
+ 'C' => '聃',
+ 'D' => '聈',
+ 'E' => '脘',
+ 'F' => '脥',
+ 'G' => '脙',
+ 'H' => '脛',
+ 'I' => '脭',
+ 'J' => '脟',
+ 'K' => '脬',
+ 'L' => '脞',
+ 'M' => '脡',
+ 'N' => '脕',
+ 'O' => '脧',
+ 'P' => '脝',
+ 'Q' => '脢',
+ 'R' => '舑',
+ 'S' => '舸',
+ 'T' => '舳',
+ 'U' => '舺',
+ 'V' => '舴',
+ 'W' => '舲',
+ 'X' => '艴',
+ 'Y' => '莐',
+ 'Z' => '莣',
+ '[' => '莨',
+ '\\' => '莍',
+ ']' => '荺',
+ '^' => '荳',
+ '_' => '莤',
+ '`' => '荴',
+ 'a' => '莏',
+ 'b' => '莁',
+ 'c' => '莕',
+ 'd' => '莙',
+ 'e' => '荵',
+ 'f' => '莔',
+ 'g' => '莩',
+ 'h' => '荽',
+ 'i' => '莃',
+ 'j' => '莌',
+ 'k' => '莝',
+ 'l' => '莛',
+ 'm' => '莪',
+ 'n' => '莋',
+ 'o' => '荾',
+ 'p' => '莥',
+ 'q' => '莯',
+ 'r' => '莈',
+ 's' => '莗',
+ 't' => '莰',
+ 'u' => '荿',
+ 'v' => '莦',
+ 'w' => '莇',
+ 'x' => '莮',
+ 'y' => '荶',
+ 'z' => '莚',
+ '{' => '虙',
+ '|' => '虖',
+ '}' => '蚿',
+ '~' => '蚷',
+ 'ס' => '蛂',
+ 'ע' => '蛁',
+ 'ף' => '蛅',
+ 'פ' => '蚺',
+ 'ץ' => '蚰',
+ 'צ' => '蛈',
+ 'ק' => '蚹',
+ 'ר' => '蚳',
+ 'ש' => '蚸',
+ 'ת' => '蛌',
+ '' => '蚴',
+ '' => '蚻',
+ '' => '蚼',
+ '' => '蛃',
+ 'ׯ' => '蚽',
+ 'װ' => '蚾',
+ 'ױ' => '衒',
+ 'ײ' => '袉',
+ '׳' => '袕',
+ '״' => '袨',
+ '' => '袢',
+ '' => '袪',
+ '' => '袚',
+ '' => '袑',
+ '' => '袡',
+ '' => '袟',
+ '' => '袘',
+ '' => '袧',
+ '' => '袙',
+ '' => '袛',
+ '' => '袗',
+ '' => '袤',
+ '' => '袬',
+ '' => '袌',
+ '' => '袓',
+ '' => '袎',
+ '' => '覂',
+ '' => '觖',
+ '' => '觙',
+ '' => '觕',
+ '' => '訰',
+ '' => '訧',
+ '' => '訬',
+ '' => '訞',
+ '' => '谹',
+ '' => '谻',
+ '' => '豜',
+ '' => '豝',
+ '' => '豽',
+ '' => '貥',
+ '' => '赽',
+ '' => '赻',
+ '' => '赹',
+ '' => '趼',
+ '' => '跂',
+ '' => '趹',
+ '' => '趿',
+ '' => '跁',
+ '' => '軘',
+ '' => '軞',
+ '' => '軝',
+ '' => '軜',
+ '' => '軗',
+ '' => '軠',
+ '' => '軡',
+ '' => '逤',
+ '' => '逋',
+ '' => '逑',
+ '' => '逜',
+ '' => '逌',
+ '' => '逡',
+ '' => '郯',
+ '' => '郪',
+ '' => '郰',
+ '' => '郴',
+ '' => '郲',
+ '' => '郳',
+ '' => '郔',
+ '' => '郫',
+ '' => '郬',
+ '' => '郩',
+ '' => '酖',
+ '' => '酘',
+ '' => '酚',
+ '' => '酓',
+ '' => '酕',
+ '' => '釬',
+ '' => '釴',
+ '' => '釱',
+ '' => '釳',
+ '' => '釸',
+ '' => '釤',
+ '' => '釹',
+ '' => '釪',
+ '@' => '釫',
+ 'A' => '釷',
+ 'B' => '釨',
+ 'C' => '釮',
+ 'D' => '镺',
+ 'E' => '閆',
+ 'F' => '閈',
+ 'G' => '陼',
+ 'H' => '陭',
+ 'I' => '陫',
+ 'J' => '陱',
+ 'K' => '陯',
+ 'L' => '隿',
+ 'M' => '靪',
+ 'N' => '頄',
+ 'O' => '飥',
+ 'P' => '馗',
+ 'Q' => '傛',
+ 'R' => '傕',
+ 'S' => '傔',
+ 'T' => '傞',
+ 'U' => '傋',
+ 'V' => '傣',
+ 'W' => '傃',
+ 'X' => '傌',
+ 'Y' => '傎',
+ 'Z' => '傝',
+ '[' => '偨',
+ '\\' => '傜',
+ ']' => '傒',
+ '^' => '傂',
+ '_' => '傇',
+ '`' => '兟',
+ 'a' => '凔',
+ 'b' => '匒',
+ 'c' => '匑',
+ 'd' => '厤',
+ 'e' => '厧',
+ 'f' => '喑',
+ 'g' => '喨',
+ 'h' => '喥',
+ 'i' => '喭',
+ 'j' => '啷',
+ 'k' => '噅',
+ 'l' => '喢',
+ 'm' => '喓',
+ 'n' => '喈',
+ 'o' => '喏',
+ 'p' => '喵',
+ 'q' => '喁',
+ 'r' => '喣',
+ 's' => '喒',
+ 't' => '喤',
+ 'u' => '啽',
+ 'v' => '喌',
+ 'w' => '喦',
+ 'x' => '啿',
+ 'y' => '喕',
+ 'z' => '喡',
+ '{' => '喎',
+ '|' => '圌',
+ '}' => '堩',
+ '~' => '堷',
+ 'ء' => '堙',
+ 'آ' => '堞',
+ 'أ' => '堧',
+ 'ؤ' => '堣',
+ 'إ' => '堨',
+ 'ئ' => '埵',
+ 'ا' => '塈',
+ 'ب' => '堥',
+ 'ة' => '堜',
+ 'ت' => '堛',
+ 'ث' => '堳',
+ 'ج' => '堿',
+ 'ح' => '堶',
+ 'خ' => '堮',
+ 'د' => '堹',
+ 'ذ' => '堸',
+ 'ر' => '堭',
+ 'ز' => '堬',
+ 'س' => '堻',
+ 'ش' => '奡',
+ 'ص' => '媯',
+ 'ض' => '媔',
+ 'ط' => '媟',
+ 'ظ' => '婺',
+ 'ع' => '媢',
+ 'غ' => '媞',
+ 'ػ' => '婸',
+ 'ؼ' => '媦',
+ 'ؽ' => '婼',
+ 'ؾ' => '媥',
+ 'ؿ' => '媬',
+ '' => '媕',
+ '' => '媮',
+ '' => '娷',
+ '' => '媄',
+ '' => '媊',
+ '' => '媗',
+ '' => '媃',
+ '' => '媋',
+ '' => '媩',
+ '' => '婻',
+ '' => '婽',
+ '' => '媌',
+ '' => '媜',
+ '' => '媏',
+ '' => '媓',
+ '' => '媝',
+ '' => '寪',
+ '' => '寍',
+ '' => '寋',
+ '' => '寔',
+ '' => '寑',
+ '' => '寊',
+ '' => '寎',
+ '' => '尌',
+ '' => '尰',
+ '' => '崷',
+ '' => '嵃',
+ '' => '嵫',
+ '' => '嵁',
+ '' => '嵋',
+ '' => '崿',
+ '' => '崵',
+ '' => '嵑',
+ '' => '嵎',
+ '' => '嵕',
+ '' => '崳',
+ '' => '崺',
+ '' => '嵒',
+ '' => '崽',
+ '' => '崱',
+ '' => '嵙',
+ '' => '嵂',
+ '' => '崹',
+ '' => '嵉',
+ '' => '崸',
+ '' => '崼',
+ '' => '崲',
+ '' => '崶',
+ '' => '嵀',
+ '' => '嵅',
+ '' => '幄',
+ '' => '幁',
+ '' => '彘',
+ '' => '徦',
+ '' => '徥',
+ '' => '徫',
+ '' => '惉',
+ '' => '悹',
+ '' => '惌',
+ '' => '惢',
+ '' => '惎',
+ '' => '惄',
+ '' => '愔',
+ '@' => '惲',
+ 'A' => '愊',
+ 'B' => '愖',
+ 'C' => '愅',
+ 'D' => '惵',
+ 'E' => '愓',
+ 'F' => '惸',
+ 'G' => '惼',
+ 'H' => '惾',
+ 'I' => '惁',
+ 'J' => '愃',
+ 'K' => '愘',
+ 'L' => '愝',
+ 'M' => '愐',
+ 'N' => '惿',
+ 'O' => '愄',
+ 'P' => '愋',
+ 'Q' => '扊',
+ 'R' => '掔',
+ 'S' => '掱',
+ 'T' => '掰',
+ 'U' => '揎',
+ 'V' => '揥',
+ 'W' => '揨',
+ 'X' => '揯',
+ 'Y' => '揃',
+ 'Z' => '撝',
+ '[' => '揳',
+ '\\' => '揊',
+ ']' => '揠',
+ '^' => '揶',
+ '_' => '揕',
+ '`' => '揲',
+ 'a' => '揵',
+ 'b' => '摡',
+ 'c' => '揟',
+ 'd' => '掾',
+ 'e' => '揝',
+ 'f' => '揜',
+ 'g' => '揄',
+ 'h' => '揘',
+ 'i' => '揓',
+ 'j' => '揂',
+ 'k' => '揇',
+ 'l' => '揌',
+ 'm' => '揋',
+ 'n' => '揈',
+ 'o' => '揰',
+ 'p' => '揗',
+ 'q' => '揙',
+ 'r' => '攲',
+ 's' => '敧',
+ 't' => '敪',
+ 'u' => '敤',
+ 'v' => '敜',
+ 'w' => '敨',
+ 'x' => '敥',
+ 'y' => '斌',
+ 'z' => '斝',
+ '{' => '斞',
+ '|' => '斮',
+ '}' => '旐',
+ '~' => '旒',
+ '١' => '晼',
+ '٢' => '晬',
+ '٣' => '晻',
+ '٤' => '暀',
+ '٥' => '晱',
+ '٦' => '晹',
+ '٧' => '晪',
+ '٨' => '晲',
+ '٩' => '朁',
+ '٪' => '椌',
+ '٫' => '棓',
+ '٬' => '椄',
+ '٭' => '棜',
+ 'ٮ' => '椪',
+ 'ٯ' => '棬',
+ 'ٰ' => '棪',
+ 'ٱ' => '棱',
+ 'ٲ' => '椏',
+ 'ٳ' => '棖',
+ 'ٴ' => '棷',
+ 'ٵ' => '棫',
+ 'ٶ' => '棤',
+ 'ٷ' => '棶',
+ 'ٸ' => '椓',
+ 'ٹ' => '椐',
+ 'ٺ' => '棳',
+ 'ٻ' => '棡',
+ 'ټ' => '椇',
+ 'ٽ' => '棌',
+ 'پ' => '椈',
+ 'ٿ' => '楰',
+ '' => '梴',
+ '' => '椑',
+ '' => '棯',
+ '' => '棆',
+ '' => '椔',
+ '' => '棸',
+ '' => '棐',
+ '' => '棽',
+ '' => '棼',
+ '' => '棨',
+ '' => '椋',
+ '' => '椊',
+ '' => '椗',
+ '' => '棎',
+ '' => '棈',
+ '' => '棝',
+ '' => '棞',
+ '' => '棦',
+ '' => '棴',
+ '' => '棑',
+ '' => '椆',
+ '' => '棔',
+ '' => '棩',
+ '' => '椕',
+ '' => '椥',
+ '' => '棇',
+ '' => '欹',
+ '' => '欻',
+ '' => '欿',
+ '' => '欼',
+ '' => '殔',
+ '' => '殗',
+ '' => '殙',
+ '' => '殕',
+ '' => '殽',
+ '' => '毰',
+ '' => '毲',
+ '' => '毳',
+ '' => '氰',
+ '' => '淼',
+ '' => '湆',
+ '' => '湇',
+ '' => '渟',
+ '' => '湉',
+ '' => '溈',
+ '' => '渼',
+ '' => '渽',
+ '' => '湅',
+ '' => '湢',
+ '' => '渫',
+ '' => '渿',
+ '' => '湁',
+ '' => '湝',
+ '' => '湳',
+ '' => '渜',
+ '' => '渳',
+ '' => '湋',
+ '' => '湀',
+ '' => '湑',
+ '' => '渻',
+ '' => '渃',
+ '' => '渮',
+ '' => '湞',
+ '@' => '湨',
+ 'A' => '湜',
+ 'B' => '湡',
+ 'C' => '渱',
+ 'D' => '渨',
+ 'E' => '湠',
+ 'F' => '湱',
+ 'G' => '湫',
+ 'H' => '渹',
+ 'I' => '渢',
+ 'J' => '渰',
+ 'K' => '湓',
+ 'L' => '湥',
+ 'M' => '渧',
+ 'N' => '湸',
+ 'O' => '湤',
+ 'P' => '湷',
+ 'Q' => '湕',
+ 'R' => '湹',
+ 'S' => '湒',
+ 'T' => '湦',
+ 'U' => '渵',
+ 'V' => '渶',
+ 'W' => '湚',
+ 'X' => '焠',
+ 'Y' => '焞',
+ 'Z' => '焯',
+ '[' => '烻',
+ '\\' => '焮',
+ ']' => '焱',
+ '^' => '焣',
+ '_' => '焥',
+ '`' => '焢',
+ 'a' => '焲',
+ 'b' => '焟',
+ 'c' => '焨',
+ 'd' => '焺',
+ 'e' => '焛',
+ 'f' => '牋',
+ 'g' => '牚',
+ 'h' => '犈',
+ 'i' => '犉',
+ 'j' => '犆',
+ 'k' => '犅',
+ 'l' => '犋',
+ 'm' => '猒',
+ 'n' => '猋',
+ 'o' => '猰',
+ 'p' => '猢',
+ 'q' => '猱',
+ 'r' => '猳',
+ 's' => '猧',
+ 't' => '猲',
+ 'u' => '猭',
+ 'v' => '猦',
+ 'w' => '猣',
+ 'x' => '猵',
+ 'y' => '猌',
+ 'z' => '琮',
+ '{' => '琬',
+ '|' => '琰',
+ '}' => '琫',
+ '~' => '琖',
+ 'ڡ' => '琚',
+ 'ڢ' => '琡',
+ 'ڣ' => '琭',
+ 'ڤ' => '琱',
+ 'ڥ' => '琤',
+ 'ڦ' => '琣',
+ 'ڧ' => '琝',
+ 'ڨ' => '琩',
+ 'ک' => '琠',
+ 'ڪ' => '琲',
+ 'ګ' => '瓻',
+ 'ڬ' => '甯',
+ 'ڭ' => '畯',
+ 'ڮ' => '畬',
+ 'گ' => '痧',
+ 'ڰ' => '痚',
+ 'ڱ' => '痡',
+ 'ڲ' => '痦',
+ 'ڳ' => '痝',
+ 'ڴ' => '痟',
+ 'ڵ' => '痤',
+ 'ڶ' => '痗',
+ 'ڷ' => '皕',
+ 'ڸ' => '皒',
+ 'ڹ' => '盚',
+ 'ں' => '睆',
+ 'ڻ' => '睇',
+ 'ڼ' => '睄',
+ 'ڽ' => '睍',
+ 'ھ' => '睅',
+ 'ڿ' => '睊',
+ '' => '睎',
+ '' => '睋',
+ '' => '睌',
+ '' => '矞',
+ '' => '矬',
+ '' => '硠',
+ '' => '硤',
+ '' => '硥',
+ '' => '硜',
+ '' => '硭',
+ '' => '硱',
+ '' => '硪',
+ '' => '确',
+ '' => '硰',
+ '' => '硩',
+ '' => '硨',
+ '' => '硞',
+ '' => '硢',
+ '' => '祴',
+ '' => '祳',
+ '' => '祲',
+ '' => '祰',
+ '' => '稂',
+ '' => '稊',
+ '' => '稃',
+ '' => '稌',
+ '' => '稄',
+ '' => '窙',
+ '' => '竦',
+ '' => '竤',
+ '' => '筊',
+ '' => '笻',
+ '' => '筄',
+ '' => '筈',
+ '' => '筌',
+ '' => '筎',
+ '' => '筀',
+ '' => '筘',
+ '' => '筅',
+ '' => '粢',
+ '' => '粞',
+ '' => '粨',
+ '' => '粡',
+ '' => '絘',
+ '' => '絯',
+ '' => '絣',
+ '' => '絓',
+ '' => '絖',
+ '' => '絧',
+ '' => '絪',
+ '' => '絏',
+ '' => '絭',
+ '' => '絜',
+ '' => '絫',
+ '' => '絒',
+ '' => '絔',
+ '' => '絩',
+ '' => '絑',
+ '' => '絟',
+ '' => '絎',
+ '' => '缾',
+ '' => '缿',
+ '' => '罥',
+ '@' => '罦',
+ 'A' => '羢',
+ 'B' => '羠',
+ 'C' => '羡',
+ 'D' => '翗',
+ 'E' => '聑',
+ 'F' => '聏',
+ 'G' => '聐',
+ 'H' => '胾',
+ 'I' => '胔',
+ 'J' => '腃',
+ 'K' => '腊',
+ 'L' => '腒',
+ 'M' => '腏',
+ 'N' => '腇',
+ 'O' => '脽',
+ 'P' => '腍',
+ 'Q' => '脺',
+ 'R' => '臦',
+ 'S' => '臮',
+ 'T' => '臷',
+ 'U' => '臸',
+ 'V' => '臹',
+ 'W' => '舄',
+ 'X' => '舼',
+ 'Y' => '舽',
+ 'Z' => '舿',
+ '[' => '艵',
+ '\\' => '茻',
+ ']' => '菏',
+ '^' => '菹',
+ '_' => '萣',
+ '`' => '菀',
+ 'a' => '菨',
+ 'b' => '萒',
+ 'c' => '菧',
+ 'd' => '菤',
+ 'e' => '菼',
+ 'f' => '菶',
+ 'g' => '萐',
+ 'h' => '菆',
+ 'i' => '菈',
+ 'j' => '菫',
+ 'k' => '菣',
+ 'l' => '莿',
+ 'm' => '萁',
+ 'n' => '菝',
+ 'o' => '菥',
+ 'p' => '菘',
+ 'q' => '菿',
+ 'r' => '菡',
+ 's' => '菋',
+ 't' => '菎',
+ 'u' => '菖',
+ 'v' => '菵',
+ 'w' => '菉',
+ 'x' => '萉',
+ 'y' => '萏',
+ 'z' => '菞',
+ '{' => '萑',
+ '|' => '萆',
+ '}' => '菂',
+ '~' => '菳',
+ 'ۡ' => '菕',
+ 'ۢ' => '菺',
+ 'ۣ' => '菇',
+ 'ۤ' => '菑',
+ 'ۥ' => '菪',
+ 'ۦ' => '萓',
+ 'ۧ' => '菃',
+ 'ۨ' => '菬',
+ '۩' => '菮',
+ '۪' => '菄',
+ '۫' => '菻',
+ '۬' => '菗',
+ 'ۭ' => '菢',
+ 'ۮ' => '萛',
+ 'ۯ' => '菛',
+ '۰' => '菾',
+ '۱' => '蛘',
+ '۲' => '蛢',
+ '۳' => '蛦',
+ '۴' => '蛓',
+ '۵' => '蛣',
+ '۶' => '蛚',
+ '۷' => '蛪',
+ '۸' => '蛝',
+ '۹' => '蛫',
+ 'ۺ' => '蛜',
+ 'ۻ' => '蛬',
+ 'ۼ' => '蛩',
+ '۽' => '蛗',
+ '۾' => '蛨',
+ 'ۿ' => '蛑',
+ '' => '衈',
+ '' => '衖',
+ '' => '衕',
+ '' => '袺',
+ '' => '裗',
+ '' => '袹',
+ '' => '袸',
+ '' => '裀',
+ '' => '袾',
+ '' => '袶',
+ '' => '袼',
+ '' => '袷',
+ '' => '袽',
+ '' => '袲',
+ '' => '褁',
+ '' => '裉',
+ '' => '覕',
+ '' => '覘',
+ '' => '覗',
+ '' => '觝',
+ '' => '觚',
+ '' => '觛',
+ '' => '詎',
+ '' => '詍',
+ '' => '訹',
+ '' => '詙',
+ '' => '詀',
+ '' => '詗',
+ '' => '詘',
+ '' => '詄',
+ '' => '詅',
+ '' => '詒',
+ '' => '詈',
+ '' => '詑',
+ '' => '詊',
+ '' => '詌',
+ '' => '詏',
+ '' => '豟',
+ '' => '貁',
+ '' => '貀',
+ '' => '貺',
+ '' => '貾',
+ '' => '貰',
+ '' => '貹',
+ '' => '貵',
+ '' => '趄',
+ '' => '趀',
+ '' => '趉',
+ '' => '跘',
+ '' => '跓',
+ '' => '跍',
+ '' => '跇',
+ '' => '跖',
+ '' => '跜',
+ '' => '跏',
+ '' => '跕',
+ '' => '跙',
+ '' => '跈',
+ '' => '跗',
+ '' => '跅',
+ '' => '軯',
+ '' => '軷',
+ '' => '軺',
+ '@' => '軹',
+ 'A' => '軦',
+ 'B' => '軮',
+ 'C' => '軥',
+ 'D' => '軵',
+ 'E' => '軧',
+ 'F' => '軨',
+ 'G' => '軶',
+ 'H' => '軫',
+ 'I' => '軱',
+ 'J' => '軬',
+ 'K' => '軴',
+ 'L' => '軩',
+ 'M' => '逭',
+ 'N' => '逴',
+ 'O' => '逯',
+ 'P' => '鄆',
+ 'Q' => '鄬',
+ 'R' => '鄄',
+ 'S' => '郿',
+ 'T' => '郼',
+ 'U' => '鄈',
+ 'V' => '郹',
+ 'W' => '郻',
+ 'X' => '鄁',
+ 'Y' => '鄀',
+ 'Z' => '鄇',
+ '[' => '鄅',
+ '\\' => '鄃',
+ ']' => '酡',
+ '^' => '酤',
+ '_' => '酟',
+ '`' => '酢',
+ 'a' => '酠',
+ 'b' => '鈁',
+ 'c' => '鈊',
+ 'd' => '鈥',
+ 'e' => '鈃',
+ 'f' => '鈚',
+ 'g' => '鈦',
+ 'h' => '鈏',
+ 'i' => '鈌',
+ 'j' => '鈀',
+ 'k' => '鈒',
+ 'l' => '釿',
+ 'm' => '釽',
+ 'n' => '鈆',
+ 'o' => '鈄',
+ 'p' => '鈧',
+ 'q' => '鈂',
+ 'r' => '鈜',
+ 's' => '鈤',
+ 't' => '鈙',
+ 'u' => '鈗',
+ 'v' => '鈅',
+ 'w' => '鈖',
+ 'x' => '镻',
+ 'y' => '閍',
+ 'z' => '閌',
+ '{' => '閐',
+ '|' => '隇',
+ '}' => '陾',
+ '~' => '隈',
+ 'ܡ' => '隉',
+ 'ܢ' => '隃',
+ 'ܣ' => '隀',
+ 'ܤ' => '雂',
+ 'ܥ' => '雈',
+ 'ܦ' => '雃',
+ 'ܧ' => '雱',
+ 'ܨ' => '雰',
+ 'ܩ' => '靬',
+ 'ܪ' => '靰',
+ 'ܫ' => '靮',
+ 'ܬ' => '頇',
+ 'ܭ' => '颩',
+ 'ܮ' => '飫',
+ 'ܯ' => '鳦',
+ 'ܰ' => '黹',
+ 'ܱ' => '亃',
+ 'ܲ' => '亄',
+ 'ܳ' => '亶',
+ 'ܴ' => '傽',
+ 'ܵ' => '傿',
+ 'ܶ' => '僆',
+ 'ܷ' => '傮',
+ 'ܸ' => '僄',
+ 'ܹ' => '僊',
+ 'ܺ' => '傴',
+ 'ܻ' => '僈',
+ 'ܼ' => '僂',
+ 'ܽ' => '傰',
+ 'ܾ' => '僁',
+ 'ܿ' => '傺',
+ '' => '傱',
+ '' => '僋',
+ '' => '僉',
+ '' => '傶',
+ '' => '傸',
+ '' => '凗',
+ '' => '剺',
+ '' => '剸',
+ '' => '剻',
+ '' => '剼',
+ '' => '嗃',
+ '' => '嗛',
+ '' => '嗌',
+ '' => '嗐',
+ '' => '嗋',
+ '' => '嗊',
+ '' => '嗝',
+ '' => '嗀',
+ '' => '嗔',
+ '' => '嗄',
+ '' => '嗩',
+ '' => '喿',
+ '' => '嗒',
+ '' => '喍',
+ '' => '嗏',
+ '' => '嗕',
+ '' => '嗢',
+ '' => '嗖',
+ '' => '嗈',
+ '' => '嗲',
+ '' => '嗍',
+ '' => '嗙',
+ '' => '嗂',
+ '' => '圔',
+ '' => '塓',
+ '' => '塨',
+ '' => '塤',
+ '' => '塏',
+ '' => '塍',
+ '' => '塉',
+ '' => '塯',
+ '' => '塕',
+ '' => '塎',
+ '' => '塝',
+ '' => '塙',
+ '' => '塥',
+ '' => '塛',
+ '' => '堽',
+ '' => '塣',
+ '' => '塱',
+ '' => '壼',
+ '' => '嫇',
+ '' => '嫄',
+ '' => '嫋',
+ '' => '媺',
+ '' => '媸',
+ '' => '媱',
+ '' => '媵',
+ '' => '媰',
+ '' => '媿',
+ '' => '嫈',
+ '' => '媻',
+ '' => '嫆',
+ '@' => '媷',
+ 'A' => '嫀',
+ 'B' => '嫊',
+ 'C' => '媴',
+ 'D' => '媶',
+ 'E' => '嫍',
+ 'F' => '媹',
+ 'G' => '媐',
+ 'H' => '寖',
+ 'I' => '寘',
+ 'J' => '寙',
+ 'K' => '尟',
+ 'L' => '尳',
+ 'M' => '嵱',
+ 'N' => '嵣',
+ 'O' => '嵊',
+ 'P' => '嵥',
+ 'Q' => '嵲',
+ 'R' => '嵬',
+ 'S' => '嵞',
+ 'T' => '嵨',
+ 'U' => '嵧',
+ 'V' => '嵢',
+ 'W' => '巰',
+ 'X' => '幏',
+ 'Y' => '幎',
+ 'Z' => '幊',
+ '[' => '幍',
+ '\\' => '幋',
+ ']' => '廅',
+ '^' => '廌',
+ '_' => '廆',
+ '`' => '廋',
+ 'a' => '廇',
+ 'b' => '彀',
+ 'c' => '徯',
+ 'd' => '徭',
+ 'e' => '惷',
+ 'f' => '慉',
+ 'g' => '慊',
+ 'h' => '愫',
+ 'i' => '慅',
+ 'j' => '愶',
+ 'k' => '愲',
+ 'l' => '愮',
+ 'm' => '慆',
+ 'n' => '愯',
+ 'o' => '慏',
+ 'p' => '愩',
+ 'q' => '慀',
+ 'r' => '戠',
+ 's' => '酨',
+ 't' => '戣',
+ 'u' => '戥',
+ 'v' => '戤',
+ 'w' => '揅',
+ 'x' => '揱',
+ 'y' => '揫',
+ 'z' => '搐',
+ '{' => '搒',
+ '|' => '搉',
+ '}' => '搠',
+ '~' => '搤',
+ 'ݡ' => '搳',
+ 'ݢ' => '摃',
+ 'ݣ' => '搟',
+ 'ݤ' => '搕',
+ 'ݥ' => '搘',
+ 'ݦ' => '搹',
+ 'ݧ' => '搷',
+ 'ݨ' => '搢',
+ 'ݩ' => '搣',
+ 'ݪ' => '搌',
+ 'ݫ' => '搦',
+ 'ݬ' => '搰',
+ 'ݭ' => '搨',
+ 'ݮ' => '摁',
+ 'ݯ' => '搵',
+ 'ݰ' => '搯',
+ 'ݱ' => '搊',
+ 'ݲ' => '搚',
+ 'ݳ' => '摀',
+ 'ݴ' => '搥',
+ 'ݵ' => '搧',
+ 'ݶ' => '搋',
+ 'ݷ' => '揧',
+ 'ݸ' => '搛',
+ 'ݹ' => '搮',
+ 'ݺ' => '搡',
+ 'ݻ' => '搎',
+ 'ݼ' => '敯',
+ 'ݽ' => '斒',
+ 'ݾ' => '旓',
+ 'ݿ' => '暆',
+ '' => '暌',
+ '' => '暕',
+ '' => '暐',
+ '' => '暋',
+ '' => '暊',
+ '' => '暙',
+ '' => '暔',
+ '' => '晸',
+ '' => '朠',
+ '' => '楦',
+ '' => '楟',
+ '' => '椸',
+ '' => '楎',
+ '' => '楢',
+ '' => '楱',
+ '' => '椿',
+ '' => '楅',
+ '' => '楪',
+ '' => '椹',
+ '' => '楂',
+ '' => '楗',
+ '' => '楙',
+ '' => '楺',
+ '' => '楈',
+ '' => '楉',
+ '' => '椵',
+ '' => '楬',
+ '' => '椳',
+ '' => '椽',
+ '' => '楥',
+ '' => '棰',
+ '' => '楸',
+ '' => '椴',
+ '' => '楩',
+ '' => '楀',
+ '' => '楯',
+ '' => '楄',
+ '' => '楶',
+ '' => '楘',
+ '' => '楁',
+ '' => '楴',
+ '' => '楌',
+ '' => '椻',
+ '' => '楋',
+ '' => '椷',
+ '' => '楜',
+ '' => '楏',
+ '' => '楑',
+ '' => '椲',
+ '' => '楒',
+ '' => '椯',
+ '' => '楻',
+ '' => '椼',
+ '' => '歆',
+ '' => '歅',
+ '' => '歃',
+ '' => '歂',
+ '' => '歈',
+ '' => '歁',
+ '' => '殛',
+ '' => '嗀',
+ '' => '毻',
+ '' => '毼',
+ '@' => '毹',
+ 'A' => '毷',
+ 'B' => '毸',
+ 'C' => '溛',
+ 'D' => '滖',
+ 'E' => '滈',
+ 'F' => '溏',
+ 'G' => '滀',
+ 'H' => '溟',
+ 'I' => '溓',
+ 'J' => '溔',
+ 'K' => '溠',
+ 'L' => '溱',
+ 'M' => '溹',
+ 'N' => '滆',
+ 'O' => '滒',
+ 'P' => '溽',
+ 'Q' => '滁',
+ 'R' => '溞',
+ 'S' => '滉',
+ 'T' => '溷',
+ 'U' => '溰',
+ 'V' => '滍',
+ 'W' => '溦',
+ 'X' => '滏',
+ 'Y' => '溲',
+ 'Z' => '溾',
+ '[' => '滃',
+ '\\' => '滜',
+ ']' => '滘',
+ '^' => '溙',
+ '_' => '溒',
+ '`' => '溎',
+ 'a' => '溍',
+ 'b' => '溤',
+ 'c' => '溡',
+ 'd' => '溿',
+ 'e' => '溳',
+ 'f' => '滐',
+ 'g' => '滊',
+ 'h' => '溗',
+ 'i' => '溮',
+ 'j' => '溣',
+ 'k' => '煇',
+ 'l' => '煔',
+ 'm' => '煒',
+ 'n' => '煣',
+ 'o' => '煠',
+ 'p' => '煁',
+ 'q' => '煝',
+ 'r' => '煢',
+ 's' => '煲',
+ 't' => '煸',
+ 'u' => '煪',
+ 'v' => '煡',
+ 'w' => '煂',
+ 'x' => '煘',
+ 'y' => '煃',
+ 'z' => '煋',
+ '{' => '煰',
+ '|' => '煟',
+ '}' => '煐',
+ '~' => '煓',
+ 'ޡ' => '煄',
+ 'ޢ' => '煍',
+ 'ޣ' => '煚',
+ 'ޤ' => '牏',
+ 'ޥ' => '犍',
+ 'ަ' => '犌',
+ 'ާ' => '犑',
+ 'ި' => '犐',
+ 'ީ' => '犎',
+ 'ު' => '猼',
+ 'ޫ' => '獂',
+ 'ެ' => '猻',
+ 'ޭ' => '猺',
+ 'ޮ' => '獀',
+ 'ޯ' => '獊',
+ 'ް' => '獉',
+ 'ޱ' => '瑄',
+ '' => '瑊',
+ '' => '瑋',
+ '' => '瑒',
+ '' => '瑑',
+ '' => '瑗',
+ '' => '瑀',
+ '' => '瑏',
+ '' => '瑐',
+ '' => '瑎',
+ '' => '瑂',
+ '' => '瑆',
+ '' => '瑍',
+ '' => '瑔',
+ '' => '瓡',
+ '' => '瓿',
+ '' => '瓾',
+ '' => '瓽',
+ '' => '甝',
+ '' => '畹',
+ '' => '畷',
+ '' => '榃',
+ '' => '痯',
+ '' => '瘏',
+ '' => '瘃',
+ '' => '痷',
+ '' => '痾',
+ '' => '痼',
+ '' => '痹',
+ '' => '痸',
+ '' => '瘐',
+ '' => '痻',
+ '' => '痶',
+ '' => '痭',
+ '' => '痵',
+ '' => '痽',
+ '' => '皙',
+ '' => '皵',
+ '' => '盝',
+ '' => '睕',
+ '' => '睟',
+ '' => '睠',
+ '' => '睒',
+ '' => '睖',
+ '' => '睚',
+ '' => '睩',
+ '' => '睧',
+ '' => '睔',
+ '' => '睙',
+ '' => '睭',
+ '' => '矠',
+ '' => '碇',
+ '' => '碚',
+ '' => '碔',
+ '' => '碏',
+ '' => '碄',
+ '' => '碕',
+ '' => '碅',
+ '' => '碆',
+ '' => '碡',
+ '' => '碃',
+ '' => '硹',
+ '' => '碙',
+ '' => '碀',
+ '' => '碖',
+ '' => '硻',
+ '' => '祼',
+ '' => '禂',
+ '' => '祽',
+ '' => '祹',
+ '' => '稑',
+ '' => '稘',
+ '' => '稙',
+ '' => '稒',
+ '' => '稗',
+ '' => '稕',
+ '' => '稢',
+ '' => '稓',
+ '@' => '稛',
+ 'A' => '稐',
+ 'B' => '窣',
+ 'C' => '窢',
+ 'D' => '窞',
+ 'E' => '竫',
+ 'F' => '筦',
+ 'G' => '筤',
+ 'H' => '筭',
+ 'I' => '筴',
+ 'J' => '筩',
+ 'K' => '筲',
+ 'L' => '筥',
+ 'M' => '筳',
+ 'N' => '筱',
+ 'O' => '筰',
+ 'P' => '筡',
+ 'Q' => '筸',
+ 'R' => '筶',
+ 'S' => '筣',
+ 'T' => '粲',
+ 'U' => '粴',
+ 'V' => '粯',
+ 'W' => '綈',
+ 'X' => '綆',
+ 'Y' => '綀',
+ 'Z' => '綍',
+ '[' => '絿',
+ '\\' => '綅',
+ ']' => '絺',
+ '^' => '綎',
+ '_' => '絻',
+ '`' => '綃',
+ 'a' => '絼',
+ 'b' => '綌',
+ 'c' => '綔',
+ 'd' => '綄',
+ 'e' => '絽',
+ 'f' => '綒',
+ 'g' => '罭',
+ 'h' => '罫',
+ 'i' => '罧',
+ 'j' => '罨',
+ 'k' => '罬',
+ 'l' => '羦',
+ 'm' => '羥',
+ 'n' => '羧',
+ 'o' => '翛',
+ 'p' => '翜',
+ 'q' => '耡',
+ 'r' => '腤',
+ 's' => '腠',
+ 't' => '腷',
+ 'u' => '腜',
+ 'v' => '腩',
+ 'w' => '腛',
+ 'x' => '腢',
+ 'y' => '腲',
+ 'z' => '朡',
+ '{' => '腞',
+ '|' => '腶',
+ '}' => '腧',
+ '~' => '腯',
+ 'ߡ' => '腄',
+ 'ߢ' => '腡',
+ 'ߣ' => '舝',
+ 'ߤ' => '艉',
+ 'ߥ' => '艄',
+ 'ߦ' => '艀',
+ 'ߧ' => '艂',
+ 'ߨ' => '艅',
+ 'ߩ' => '蓱',
+ 'ߪ' => '萿',
+ '߫' => '葖',
+ '߬' => '葶',
+ '߭' => '葹',
+ '߮' => '蒏',
+ '߯' => '蒍',
+ '߰' => '葥',
+ '߱' => '葑',
+ '߲' => '葀',
+ '߳' => '蒆',
+ 'ߴ' => '葧',
+ 'ߵ' => '萰',
+ '߶' => '葍',
+ '߷' => '葽',
+ '߸' => '葚',
+ '߹' => '葙',
+ 'ߺ' => '葴',
+ '' => '葳',
+ '' => '葝',
+ '߽' => '蔇',
+ '߾' => '葞',
+ '߿' => '萷',
+ '' => '萺',
+ '' => '萴',
+ '' => '葺',
+ '' => '葃',
+ '' => '葸',
+ '' => '萲',
+ '' => '葅',
+ '' => '萩',
+ '' => '菙',
+ '' => '葋',
+ '' => '萯',
+ '' => '葂',
+ '' => '萭',
+ '' => '葟',
+ '' => '葰',
+ '' => '萹',
+ '' => '葎',
+ '' => '葌',
+ '' => '葒',
+ '' => '葯',
+ '' => '蓅',
+ '' => '蒎',
+ '' => '萻',
+ '' => '葇',
+ '' => '萶',
+ '' => '萳',
+ '' => '葨',
+ '' => '葾',
+ '' => '葄',
+ '' => '萫',
+ '' => '葠',
+ '' => '葔',
+ '' => '葮',
+ '' => '葐',
+ '' => '蜋',
+ '' => '蜄',
+ '' => '蛷',
+ '' => '蜌',
+ '' => '蛺',
+ '' => '蛖',
+ '' => '蛵',
+ '' => '蝍',
+ '' => '蛸',
+ '' => '蜎',
+ '' => '蜉',
+ '' => '蜁',
+ '' => '蛶',
+ '' => '蜍',
+ '' => '蜅',
+ '' => '裖',
+ '' => '裋',
+ '' => '裍',
+ '' => '裎',
+ '' => '裞',
+ '' => '裛',
+ '' => '裚',
+ '' => '裌',
+ '' => '裐',
+ '' => '覅',
+ '' => '覛',
+ '' => '觟',
+ '' => '觥',
+ '' => '觤',
+ '@' => '觡',
+ 'A' => '觠',
+ 'B' => '觢',
+ 'C' => '觜',
+ 'D' => '触',
+ 'E' => '詶',
+ 'F' => '誆',
+ 'G' => '詿',
+ 'H' => '詡',
+ 'I' => '訿',
+ 'J' => '詷',
+ 'K' => '誂',
+ 'L' => '誄',
+ 'M' => '詵',
+ 'N' => '誃',
+ 'O' => '誁',
+ 'P' => '詴',
+ 'Q' => '詺',
+ 'R' => '谼',
+ 'S' => '豋',
+ 'T' => '豊',
+ 'U' => '豥',
+ 'V' => '豤',
+ 'W' => '豦',
+ 'X' => '貆',
+ 'Y' => '貄',
+ 'Z' => '貅',
+ '[' => '賌',
+ '\\' => '赨',
+ ']' => '赩',
+ '^' => '趑',
+ '_' => '趌',
+ '`' => '趎',
+ 'a' => '趏',
+ 'b' => '趍',
+ 'c' => '趓',
+ 'd' => '趔',
+ 'e' => '趐',
+ 'f' => '趒',
+ 'g' => '跰',
+ 'h' => '跠',
+ 'i' => '跬',
+ 'j' => '跱',
+ 'k' => '跮',
+ 'l' => '跐',
+ 'm' => '跩',
+ 'n' => '跣',
+ 'o' => '跢',
+ 'p' => '跧',
+ 'q' => '跲',
+ 'r' => '跫',
+ 's' => '跴',
+ 't' => '輆',
+ 'u' => '軿',
+ 'v' => '輁',
+ 'w' => '輀',
+ 'x' => '輅',
+ 'y' => '輇',
+ 'z' => '輈',
+ '{' => '輂',
+ '|' => '輋',
+ '}' => '遒',
+ '~' => '逿',
+ '' => '遄',
+ '' => '遉',
+ '' => '逽',
+ '' => '鄐',
+ '' => '鄍',
+ '' => '鄏',
+ '' => '鄑',
+ '' => '鄖',
+ '' => '鄔',
+ '' => '鄋',
+ '' => '鄎',
+ '' => '酮',
+ '' => '酯',
+ '' => '鉈',
+ '' => '鉒',
+ '' => '鈰',
+ '' => '鈺',
+ '' => '鉦',
+ '' => '鈳',
+ '' => '鉥',
+ '' => '鉞',
+ '' => '銃',
+ '' => '鈮',
+ '' => '鉊',
+ '' => '鉆',
+ '' => '鉭',
+ '' => '鉬',
+ '' => '鉏',
+ '' => '鉠',
+ '' => '鉧',
+ '' => '鉯',
+ '' => '鈶',
+ '' => '鉡',
+ '' => '鉰',
+ '' => '鈱',
+ '' => '鉔',
+ '' => '鉣',
+ '' => '鉐',
+ '' => '鉲',
+ '' => '鉎',
+ '' => '鉓',
+ '' => '鉌',
+ '' => '鉖',
+ '' => '鈲',
+ '' => '閟',
+ '' => '閜',
+ '' => '閞',
+ '' => '閛',
+ '' => '隒',
+ '' => '隓',
+ '' => '隑',
+ '' => '隗',
+ '' => '雎',
+ '' => '雺',
+ '' => '雽',
+ '' => '雸',
+ '' => '雵',
+ '' => '靳',
+ '' => '靷',
+ '' => '靸',
+ '' => '靲',
+ '' => '頏',
+ '' => '頍',
+ '' => '頎',
+ '' => '颬',
+ '' => '飶',
+ '' => '飹',
+ '' => '馯',
+ '' => '馲',
+ '' => '馰',
+ '' => '馵',
+ '' => '骭',
+ '' => '骫',
+ '' => '魛',
+ '' => '鳪',
+ '' => '鳭',
+ '' => '鳧',
+ '' => '麀',
+ '' => '黽',
+ '' => '僦',
+ '' => '僔',
+ '' => '僗',
+ '' => '僨',
+ '' => '僳',
+ '' => '僛',
+ '' => '僪',
+ '' => '僝',
+ '' => '僤',
+ '' => '僓',
+ '' => '僬',
+ '' => '僰',
+ '' => '僯',
+ '' => '僣',
+ '' => '僠',
+ '@' => '凘',
+ 'A' => '劀',
+ 'B' => '劁',
+ 'C' => '勩',
+ 'D' => '勫',
+ 'E' => '匰',
+ 'F' => '厬',
+ 'G' => '嘧',
+ 'H' => '嘕',
+ 'I' => '嘌',
+ 'J' => '嘒',
+ 'K' => '嗼',
+ 'L' => '嘏',
+ 'M' => '嘜',
+ 'N' => '嘁',
+ 'O' => '嘓',
+ 'P' => '嘂',
+ 'Q' => '嗺',
+ 'R' => '嘝',
+ 'S' => '嘄',
+ 'T' => '嗿',
+ 'U' => '嗹',
+ 'V' => '墉',
+ 'W' => '塼',
+ 'X' => '墐',
+ 'Y' => '墘',
+ 'Z' => '墆',
+ '[' => '墁',
+ '\\' => '塿',
+ ']' => '塴',
+ '^' => '墋',
+ '_' => '塺',
+ '`' => '墇',
+ 'a' => '墑',
+ 'b' => '墎',
+ 'c' => '塶',
+ 'd' => '墂',
+ 'e' => '墈',
+ 'f' => '塻',
+ 'g' => '墔',
+ 'h' => '墏',
+ 'i' => '壾',
+ 'j' => '奫',
+ 'k' => '嫜',
+ 'l' => '嫮',
+ 'm' => '嫥',
+ 'n' => '嫕',
+ 'o' => '嫪',
+ 'p' => '嫚',
+ 'q' => '嫭',
+ 'r' => '嫫',
+ 's' => '嫳',
+ 't' => '嫢',
+ 'u' => '嫠',
+ 'v' => '嫛',
+ 'w' => '嫬',
+ 'x' => '嫞',
+ 'y' => '嫝',
+ 'z' => '嫙',
+ '{' => '嫨',
+ '|' => '嫟',
+ '}' => '孷',
+ '~' => '寠',
+ '' => '寣',
+ '' => '屣',
+ '' => '嶂',
+ '' => '嶀',
+ '' => '嵽',
+ '' => '嶆',
+ '' => '嵺',
+ '' => '嶁',
+ '' => '嵷',
+ '' => '嶊',
+ '' => '嶉',
+ '' => '嶈',
+ '' => '嵾',
+ '' => '嵼',
+ '' => '嶍',
+ '' => '嵹',
+ '' => '嵿',
+ '' => '幘',
+ '' => '幙',
+ '' => '幓',
+ '' => '廘',
+ '' => '廑',
+ '' => '廗',
+ '' => '廎',
+ '' => '廜',
+ '' => '廕',
+ '' => '廙',
+ '' => '廒',
+ '' => '廔',
+ '' => '彄',
+ '' => '彃',
+ '' => '彯',
+ '' => '徶',
+ '' => '愬',
+ '' => '愨',
+ '' => '慁',
+ '' => '慞',
+ '' => '慱',
+ '' => '慳',
+ '' => '慒',
+ '' => '慓',
+ '' => '慲',
+ '' => '慬',
+ '' => '憀',
+ '' => '慴',
+ '' => '慔',
+ '' => '慺',
+ '' => '慛',
+ '' => '慥',
+ '' => '愻',
+ '' => '慪',
+ '' => '慡',
+ '' => '慖',
+ '' => '戩',
+ '' => '戧',
+ '' => '戫',
+ '' => '搫',
+ '' => '摍',
+ '' => '摛',
+ '' => '摝',
+ '' => '摴',
+ '' => '摶',
+ '' => '摲',
+ '' => '摳',
+ '' => '摽',
+ '' => '摵',
+ '' => '摦',
+ '' => '撦',
+ '' => '摎',
+ '' => '撂',
+ '' => '摞',
+ '' => '摜',
+ '' => '摋',
+ '' => '摓',
+ '' => '摠',
+ '' => '摐',
+ '' => '摿',
+ '' => '搿',
+ '' => '摬',
+ '' => '摫',
+ '' => '摙',
+ '' => '摥',
+ '' => '摷',
+ '' => '敳',
+ '' => '斠',
+ '' => '暡',
+ '' => '暠',
+ '' => '暟',
+ '' => '朅',
+ '' => '朄',
+ '' => '朢',
+ '' => '榱',
+ '' => '榶',
+ '' => '槉',
+ '@' => '榠',
+ 'A' => '槎',
+ 'B' => '榖',
+ 'C' => '榰',
+ 'D' => '榬',
+ 'E' => '榼',
+ 'F' => '榑',
+ 'G' => '榙',
+ 'H' => '榎',
+ 'I' => '榧',
+ 'J' => '榍',
+ 'K' => '榩',
+ 'L' => '榾',
+ 'M' => '榯',
+ 'N' => '榿',
+ 'O' => '槄',
+ 'P' => '榽',
+ 'Q' => '榤',
+ 'R' => '槔',
+ 'S' => '榹',
+ 'T' => '槊',
+ 'U' => '榚',
+ 'V' => '槏',
+ 'W' => '榳',
+ 'X' => '榓',
+ 'Y' => '榪',
+ 'Z' => '榡',
+ '[' => '榞',
+ '\\' => '槙',
+ ']' => '榗',
+ '^' => '榐',
+ '_' => '槂',
+ '`' => '榵',
+ 'a' => '榥',
+ 'b' => '槆',
+ 'c' => '歊',
+ 'd' => '歍',
+ 'e' => '歋',
+ 'f' => '殞',
+ 'g' => '殟',
+ 'h' => '殠',
+ 'i' => '毃',
+ 'j' => '毄',
+ 'k' => '毾',
+ 'l' => '滎',
+ 'm' => '滵',
+ 'n' => '滱',
+ 'o' => '漃',
+ 'p' => '漥',
+ 'q' => '滸',
+ 'r' => '漷',
+ 's' => '滻',
+ 't' => '漮',
+ 'u' => '漉',
+ 'v' => '潎',
+ 'w' => '漙',
+ 'x' => '漚',
+ 'y' => '漧',
+ 'z' => '漘',
+ '{' => '漻',
+ '|' => '漒',
+ '}' => '滭',
+ '~' => '漊',
+ '' => '漶',
+ '' => '潳',
+ '' => '滹',
+ '' => '滮',
+ '' => '漭',
+ '' => '潀',
+ '' => '漰',
+ '' => '漼',
+ '' => '漵',
+ '' => '滫',
+ '' => '漇',
+ '' => '漎',
+ '' => '潃',
+ '' => '漅',
+ '' => '滽',
+ '' => '滶',
+ '' => '漹',
+ '' => '漜',
+ '' => '滼',
+ '' => '漺',
+ '' => '漟',
+ '' => '漍',
+ '' => '漞',
+ '' => '漈',
+ '' => '漡',
+ '' => '熇',
+ '' => '熐',
+ '' => '熉',
+ '' => '熀',
+ '' => '熅',
+ '' => '熂',
+ '' => '熏',
+ '' => '煻',
+ '' => '熆',
+ '' => '熁',
+ '' => '熗',
+ '' => '牄',
+ '' => '牓',
+ '' => '犗',
+ '' => '犕',
+ '' => '犓',
+ '' => '獃',
+ '' => '獍',
+ '' => '獑',
+ '' => '獌',
+ '' => '瑢',
+ '' => '瑳',
+ '' => '瑱',
+ '' => '瑵',
+ '' => '瑲',
+ '' => '瑧',
+ '' => '瑮',
+ '' => '甀',
+ '' => '甂',
+ '' => '甃',
+ '' => '畽',
+ '' => '疐',
+ '' => '瘖',
+ '' => '瘈',
+ '' => '瘌',
+ '' => '瘕',
+ '' => '瘑',
+ '' => '瘊',
+ '' => '瘔',
+ '' => '皸',
+ '' => '瞁',
+ '' => '睼',
+ '' => '瞅',
+ '' => '瞂',
+ '' => '睮',
+ '' => '瞀',
+ '' => '睯',
+ '' => '睾',
+ '' => '瞃',
+ '' => '碲',
+ '' => '碪',
+ '' => '碴',
+ '' => '碭',
+ '' => '碨',
+ '' => '硾',
+ '' => '碫',
+ '' => '碞',
+ '' => '碥',
+ '' => '碠',
+ '' => '碬',
+ '' => '碢',
+ '' => '碤',
+ '' => '禘',
+ '' => '禊',
+ '' => '禋',
+ '' => '禖',
+ '' => '禕',
+ '' => '禔',
+ '' => '禓',
+ '@' => '禗',
+ 'A' => '禈',
+ 'B' => '禒',
+ 'C' => '禐',
+ 'D' => '稫',
+ 'E' => '穊',
+ 'F' => '稰',
+ 'G' => '稯',
+ 'H' => '稨',
+ 'I' => '稦',
+ 'J' => '窨',
+ 'K' => '窫',
+ 'L' => '窬',
+ 'M' => '竮',
+ 'N' => '箈',
+ 'O' => '箜',
+ 'P' => '箊',
+ 'Q' => '箑',
+ 'R' => '箐',
+ 'S' => '箖',
+ 'T' => '箍',
+ 'U' => '箌',
+ 'V' => '箛',
+ 'W' => '箎',
+ 'X' => '箅',
+ 'Y' => '箘',
+ 'Z' => '劄',
+ '[' => '箙',
+ '\\' => '箤',
+ ']' => '箂',
+ '^' => '粻',
+ '_' => '粿',
+ '`' => '粼',
+ 'a' => '粺',
+ 'b' => '綧',
+ 'c' => '綷',
+ 'd' => '緂',
+ 'e' => '綣',
+ 'f' => '綪',
+ 'g' => '緁',
+ 'h' => '緀',
+ 'i' => '緅',
+ 'j' => '綝',
+ 'k' => '緎',
+ 'l' => '緄',
+ 'm' => '緆',
+ 'n' => '緋',
+ 'o' => '緌',
+ 'p' => '綯',
+ 'q' => '綹',
+ 'r' => '綖',
+ 's' => '綼',
+ 't' => '綟',
+ 'u' => '綦',
+ 'v' => '綮',
+ 'w' => '綩',
+ 'x' => '綡',
+ 'y' => '緉',
+ 'z' => '罳',
+ '{' => '翢',
+ '|' => '翣',
+ '}' => '翥',
+ '~' => '翞',
+ '' => '耤',
+ '' => '聝',
+ '' => '聜',
+ '' => '膉',
+ '' => '膆',
+ '' => '膃',
+ '' => '膇',
+ '' => '膍',
+ '' => '膌',
+ '' => '膋',
+ '' => '舕',
+ '' => '蒗',
+ '' => '蒤',
+ '' => '蒡',
+ '' => '蒟',
+ '' => '蒺',
+ '' => '蓎',
+ '' => '蓂',
+ '' => '蒬',
+ '' => '蒮',
+ '' => '蒫',
+ '' => '蒹',
+ '' => '蒴',
+ '' => '蓁',
+ '' => '蓍',
+ '' => '蒪',
+ '' => '蒚',
+ '' => '蒱',
+ '' => '蓐',
+ '' => '蒝',
+ '' => '蒧',
+ '' => '蒻',
+ '' => '蒢',
+ '' => '蒔',
+ '' => '蓇',
+ '' => '蓌',
+ '' => '蒛',
+ '' => '蒩',
+ '' => '蒯',
+ '' => '蒨',
+ '' => '蓖',
+ '' => '蒘',
+ '' => '蒶',
+ '' => '蓏',
+ '' => '蒠',
+ '' => '蓗',
+ '' => '蓔',
+ '' => '蓒',
+ '' => '蓛',
+ '' => '蒰',
+ '' => '蒑',
+ '' => '虡',
+ '' => '蜳',
+ '' => '蜣',
+ '' => '蜨',
+ '' => '蝫',
+ '' => '蝀',
+ '' => '蜮',
+ '' => '蜞',
+ '' => '蜡',
+ '' => '蜙',
+ '' => '蜛',
+ '' => '蝃',
+ '' => '蜬',
+ '' => '蝁',
+ '' => '蜾',
+ '' => '蝆',
+ '' => '蜠',
+ '' => '蜲',
+ '' => '蜪',
+ '' => '蜭',
+ '' => '蜼',
+ '' => '蜒',
+ '' => '蜺',
+ '' => '蜱',
+ '' => '蜵',
+ '' => '蝂',
+ '' => '蜦',
+ '' => '蜧',
+ '' => '蜸',
+ '' => '蜤',
+ '' => '蜚',
+ '' => '蜰',
+ '' => '蜑',
+ '' => '裷',
+ '' => '裧',
+ '' => '裱',
+ '' => '裲',
+ '' => '裺',
+ '' => '裾',
+ '' => '裮',
+ '' => '裼',
+ '' => '裶',
+ '' => '裻',
+ '@' => '裰',
+ 'A' => '裬',
+ 'B' => '裫',
+ 'C' => '覝',
+ 'D' => '覡',
+ 'E' => '覟',
+ 'F' => '覞',
+ 'G' => '觩',
+ 'H' => '觫',
+ 'I' => '觨',
+ 'J' => '誫',
+ 'K' => '誙',
+ 'L' => '誋',
+ 'M' => '誒',
+ 'N' => '誏',
+ 'O' => '誖',
+ 'P' => '谽',
+ 'Q' => '豨',
+ 'R' => '豩',
+ 'S' => '賕',
+ 'T' => '賏',
+ 'U' => '賗',
+ 'V' => '趖',
+ 'W' => '踉',
+ 'X' => '踂',
+ 'Y' => '跿',
+ 'Z' => '踍',
+ '[' => '跽',
+ '\\' => '踊',
+ ']' => '踃',
+ '^' => '踇',
+ '_' => '踆',
+ '`' => '踅',
+ 'a' => '跾',
+ 'b' => '踀',
+ 'c' => '踄',
+ 'd' => '輐',
+ 'e' => '輑',
+ 'f' => '輎',
+ 'g' => '輍',
+ 'h' => '鄣',
+ 'i' => '鄜',
+ 'j' => '鄠',
+ 'k' => '鄢',
+ 'l' => '鄟',
+ 'm' => '鄝',
+ 'n' => '鄚',
+ 'o' => '鄤',
+ 'p' => '鄡',
+ 'q' => '鄛',
+ 'r' => '酺',
+ 's' => '酲',
+ 't' => '酹',
+ 'u' => '酳',
+ 'v' => '銥',
+ 'w' => '銤',
+ 'x' => '鉶',
+ 'y' => '銛',
+ 'z' => '鉺',
+ '{' => '銠',
+ '|' => '銔',
+ '}' => '銪',
+ '~' => '銍',
+ '' => '銦',
+ '' => '銚',
+ '' => '銫',
+ '' => '鉹',
+ '' => '銗',
+ '' => '鉿',
+ '' => '銣',
+ '' => '鋮',
+ '' => '銎',
+ '' => '銂',
+ '' => '銕',
+ '' => '銢',
+ '' => '鉽',
+ '' => '銈',
+ '' => '銡',
+ '' => '銊',
+ '' => '銆',
+ '' => '銌',
+ '' => '銙',
+ '' => '銧',
+ '' => '鉾',
+ '' => '銇',
+ '' => '銩',
+ '' => '銝',
+ '' => '銋',
+ '' => '鈭',
+ '' => '隞',
+ '' => '隡',
+ '' => '雿',
+ '' => '靘',
+ '' => '靽',
+ '' => '靺',
+ '' => '靾',
+ '' => '鞃',
+ '' => '鞀',
+ '' => '鞂',
+ '' => '靻',
+ '' => '鞄',
+ '' => '鞁',
+ '' => '靿',
+ '' => '韎',
+ '' => '韍',
+ '' => '頖',
+ '' => '颭',
+ '' => '颮',
+ '' => '餂',
+ '' => '餀',
+ '' => '餇',
+ '' => '馝',
+ '' => '馜',
+ '' => '駃',
+ '' => '馹',
+ '' => '馻',
+ '' => '馺',
+ '' => '駂',
+ '' => '馽',
+ '' => '駇',
+ '' => '骱',
+ '' => '髣',
+ '' => '髧',
+ '' => '鬾',
+ '' => '鬿',
+ '' => '魠',
+ '' => '魡',
+ '' => '魟',
+ '' => '鳱',
+ '' => '鳲',
+ '' => '鳵',
+ '' => '麧',
+ '' => '僿',
+ '' => '儃',
+ '' => '儰',
+ '' => '僸',
+ '' => '儆',
+ '' => '儇',
+ '' => '僶',
+ '' => '僾',
+ '' => '儋',
+ '' => '儌',
+ '' => '僽',
+ '' => '儊',
+ '' => '劋',
+ '' => '劌',
+ '' => '勱',
+ '' => '勯',
+ '' => '噈',
+ '' => '噂',
+ '' => '噌',
+ '' => '嘵',
+ '' => '噁',
+ '' => '噊',
+ '' => '噉',
+ '' => '噆',
+ '' => '噘',
+ '@' => '噚',
+ 'A' => '噀',
+ 'B' => '嘳',
+ 'C' => '嘽',
+ 'D' => '嘬',
+ 'E' => '嘾',
+ 'F' => '嘸',
+ 'G' => '嘪',
+ 'H' => '嘺',
+ 'I' => '圚',
+ 'J' => '墫',
+ 'K' => '墝',
+ 'L' => '墱',
+ 'M' => '墠',
+ 'N' => '墣',
+ 'O' => '墯',
+ 'P' => '墬',
+ 'Q' => '墥',
+ 'R' => '墡',
+ 'S' => '壿',
+ 'T' => '嫿',
+ 'U' => '嫴',
+ 'V' => '嫽',
+ 'W' => '嫷',
+ 'X' => '嫶',
+ 'Y' => '嬃',
+ 'Z' => '嫸',
+ '[' => '嬂',
+ '\\' => '嫹',
+ ']' => '嬁',
+ '^' => '嬇',
+ '_' => '嬅',
+ '`' => '嬏',
+ 'a' => '屧',
+ 'b' => '嶙',
+ 'c' => '嶗',
+ 'd' => '嶟',
+ 'e' => '嶒',
+ 'f' => '嶢',
+ 'g' => '嶓',
+ 'h' => '嶕',
+ 'i' => '嶠',
+ 'j' => '嶜',
+ 'k' => '嶡',
+ 'l' => '嶚',
+ 'm' => '嶞',
+ 'n' => '幩',
+ 'o' => '幝',
+ 'p' => '幠',
+ 'q' => '幜',
+ 'r' => '緳',
+ 's' => '廛',
+ 't' => '廞',
+ 'u' => '廡',
+ 'v' => '彉',
+ 'w' => '徲',
+ 'x' => '憋',
+ 'y' => '憃',
+ 'z' => '慹',
+ '{' => '憱',
+ '|' => '憰',
+ '}' => '憢',
+ '~' => '憉',
+ '' => '憛',
+ '' => '憓',
+ '' => '憯',
+ '' => '憭',
+ '' => '憟',
+ '' => '憒',
+ '' => '憪',
+ '' => '憡',
+ '' => '憍',
+ '' => '慦',
+ '' => '憳',
+ '' => '戭',
+ '' => '摮',
+ '' => '摰',
+ '' => '撖',
+ '' => '撠',
+ '' => '撅',
+ '' => '撗',
+ '' => '撜',
+ '' => '撏',
+ '' => '撋',
+ '' => '撊',
+ '' => '撌',
+ '' => '撣',
+ '' => '撟',
+ '' => '摨',
+ '' => '撱',
+ '' => '撘',
+ '' => '敶',
+ '' => '敺',
+ '' => '敹',
+ '' => '敻',
+ '' => '斲',
+ '' => '斳',
+ '' => '暵',
+ '' => '暰',
+ '' => '暩',
+ '' => '暲',
+ '' => '暷',
+ '' => '暪',
+ '' => '暯',
+ '' => '樀',
+ '' => '樆',
+ '' => '樗',
+ '' => '槥',
+ '' => '槸',
+ '' => '樕',
+ '' => '槱',
+ '' => '槤',
+ '' => '樠',
+ '' => '槿',
+ '' => '槬',
+ '' => '槢',
+ '' => '樛',
+ '' => '樝',
+ '' => '槾',
+ '' => '樧',
+ '' => '槲',
+ '' => '槮',
+ '' => '樔',
+ '' => '槷',
+ '' => '槧',
+ '' => '橀',
+ '' => '樈',
+ '' => '槦',
+ '' => '槻',
+ '' => '樍',
+ '' => '槼',
+ '' => '槫',
+ '' => '樉',
+ '' => '樄',
+ '' => '樘',
+ '' => '樥',
+ '' => '樏',
+ '' => '槶',
+ '' => '樦',
+ '' => '樇',
+ '' => '槴',
+ '' => '樖',
+ '' => '歑',
+ '' => '殥',
+ '' => '殣',
+ '' => '殢',
+ '' => '殦',
+ '' => '氁',
+ '' => '氀',
+ '' => '毿',
+ '' => '氂',
+ '' => '潁',
+ '' => '漦',
+ '' => '潾',
+ '' => '澇',
+ '' => '濆',
+ '' => '澒',
+ '@' => '澍',
+ 'A' => '澉',
+ 'B' => '澌',
+ 'C' => '潢',
+ 'D' => '潏',
+ 'E' => '澅',
+ 'F' => '潚',
+ 'G' => '澖',
+ 'H' => '潶',
+ 'I' => '潬',
+ 'J' => '澂',
+ 'K' => '潕',
+ 'L' => '潲',
+ 'M' => '潒',
+ 'N' => '潐',
+ 'O' => '潗',
+ 'P' => '澔',
+ 'Q' => '澓',
+ 'R' => '潝',
+ 'S' => '漀',
+ 'T' => '潡',
+ 'U' => '潫',
+ 'V' => '潽',
+ 'W' => '潧',
+ 'X' => '澐',
+ 'Y' => '潓',
+ 'Z' => '澋',
+ '[' => '潩',
+ '\\' => '潿',
+ ']' => '澕',
+ '^' => '潣',
+ '_' => '潷',
+ '`' => '潪',
+ 'a' => '潻',
+ 'b' => '熲',
+ 'c' => '熯',
+ 'd' => '熛',
+ 'e' => '熰',
+ 'f' => '熠',
+ 'g' => '熚',
+ 'h' => '熩',
+ 'i' => '熵',
+ 'j' => '熝',
+ 'k' => '熥',
+ 'l' => '熞',
+ 'm' => '熤',
+ 'n' => '熡',
+ 'o' => '熪',
+ 'p' => '熜',
+ 'q' => '熧',
+ 'r' => '熳',
+ 's' => '犘',
+ 't' => '犚',
+ 'u' => '獘',
+ 'v' => '獒',
+ 'w' => '獞',
+ 'x' => '獟',
+ 'y' => '獠',
+ 'z' => '獝',
+ '{' => '獛',
+ '|' => '獡',
+ '}' => '獚',
+ '~' => '獙',
+ '' => '獢',
+ '' => '璇',
+ '' => '璉',
+ '' => '璊',
+ '' => '璆',
+ '' => '璁',
+ '' => '瑽',
+ '' => '璅',
+ '' => '璈',
+ '' => '瑼',
+ '' => '瑹',
+ '' => '甈',
+ '' => '甇',
+ '' => '畾',
+ '' => '瘥',
+ '' => '瘞',
+ '' => '瘙',
+ '' => '瘝',
+ '' => '瘜',
+ '' => '瘣',
+ '' => '瘚',
+ '' => '瘨',
+ '' => '瘛',
+ '' => '皜',
+ '' => '皝',
+ '' => '皞',
+ '' => '皛',
+ '' => '瞍',
+ '' => '瞏',
+ '' => '瞉',
+ '' => '瞈',
+ '' => '磍',
+ '' => '碻',
+ '' => '磏',
+ '' => '磌',
+ '' => '磑',
+ '' => '磎',
+ '' => '磔',
+ '' => '磈',
+ '' => '磃',
+ '' => '磄',
+ '' => '磉',
+ '' => '禚',
+ '' => '禡',
+ '' => '禠',
+ '' => '禜',
+ '' => '禢',
+ '' => '禛',
+ '' => '歶',
+ '' => '稹',
+ '' => '窲',
+ '' => '窴',
+ '' => '窳',
+ '' => '箷',
+ '' => '篋',
+ '' => '箾',
+ '' => '箬',
+ '' => '篎',
+ '' => '箯',
+ '' => '箹',
+ '' => '篊',
+ '' => '箵',
+ '' => '糅',
+ '' => '糈',
+ '' => '糌',
+ '' => '糋',
+ '' => '緷',
+ '' => '緛',
+ '' => '緪',
+ '' => '緧',
+ '' => '緗',
+ '' => '緡',
+ '' => '縃',
+ '' => '緺',
+ '' => '緦',
+ '' => '緶',
+ '' => '緱',
+ '' => '緰',
+ '' => '緮',
+ '' => '緟',
+ '' => '罶',
+ '' => '羬',
+ '' => '羰',
+ '' => '羭',
+ '' => '翭',
+ '' => '翫',
+ '' => '翪',
+ '' => '翬',
+ '' => '翦',
+ '' => '翨',
+ '' => '聤',
+ '' => '聧',
+ '' => '膣',
+ '' => '膟',
+ '@' => '膞',
+ 'A' => '膕',
+ 'B' => '膢',
+ 'C' => '膙',
+ 'D' => '膗',
+ 'E' => '舖',
+ 'F' => '艏',
+ 'G' => '艓',
+ 'H' => '艒',
+ 'I' => '艐',
+ 'J' => '艎',
+ 'K' => '艑',
+ 'L' => '蔤',
+ 'M' => '蔻',
+ 'N' => '蔏',
+ 'O' => '蔀',
+ 'P' => '蔩',
+ 'Q' => '蔎',
+ 'R' => '蔉',
+ 'S' => '蔍',
+ 'T' => '蔟',
+ 'U' => '蔊',
+ 'V' => '蔧',
+ 'W' => '蔜',
+ 'X' => '蓻',
+ 'Y' => '蔫',
+ 'Z' => '蓺',
+ '[' => '蔈',
+ '\\' => '蔌',
+ ']' => '蓴',
+ '^' => '蔪',
+ '_' => '蓲',
+ '`' => '蔕',
+ 'a' => '蓷',
+ 'b' => '蓫',
+ 'c' => '蓳',
+ 'd' => '蓼',
+ 'e' => '蔒',
+ 'f' => '蓪',
+ 'g' => '蓩',
+ 'h' => '蔖',
+ 'i' => '蓾',
+ 'j' => '蔨',
+ 'k' => '蔝',
+ 'l' => '蔮',
+ 'm' => '蔂',
+ 'n' => '蓽',
+ 'o' => '蔞',
+ 'p' => '蓶',
+ 'q' => '蔱',
+ 'r' => '蔦',
+ 's' => '蓧',
+ 't' => '蓨',
+ 'u' => '蓰',
+ 'v' => '蓯',
+ 'w' => '蓹',
+ 'x' => '蔘',
+ 'y' => '蔠',
+ 'z' => '蔰',
+ '{' => '蔋',
+ '|' => '蔙',
+ '}' => '蔯',
+ '~' => '虢',
+ '' => '蝖',
+ '' => '蝣',
+ '' => '蝤',
+ '' => '蝷',
+ '' => '蟡',
+ '' => '蝳',
+ '' => '蝘',
+ '' => '蝔',
+ '' => '蝛',
+ '' => '蝒',
+ '' => '蝡',
+ '' => '蝚',
+ '' => '蝑',
+ '' => '蝞',
+ '' => '蝭',
+ '' => '蝪',
+ '' => '蝐',
+ '' => '蝎',
+ '' => '蝟',
+ '' => '蝝',
+ '' => '蝯',
+ '' => '蝬',
+ '' => '蝺',
+ '' => '蝮',
+ '' => '蝜',
+ '' => '蝥',
+ '' => '蝏',
+ '' => '蝻',
+ '' => '蝵',
+ '' => '蝢',
+ '' => '蝧',
+ '' => '蝩',
+ '' => '衚',
+ '' => '褅',
+ '' => '褌',
+ '' => '褔',
+ '' => '褋',
+ '' => '褗',
+ '' => '褘',
+ '' => '褙',
+ '' => '褆',
+ '' => '褖',
+ '' => '褑',
+ '' => '褎',
+ '' => '褉',
+ '' => '覢',
+ '' => '覤',
+ '' => '覣',
+ '' => '觭',
+ '' => '觰',
+ '' => '觬',
+ '' => '諏',
+ '' => '諆',
+ '' => '誸',
+ '' => '諓',
+ '' => '諑',
+ '' => '諔',
+ '' => '諕',
+ '' => '誻',
+ '' => '諗',
+ '' => '誾',
+ '' => '諀',
+ '' => '諅',
+ '' => '諘',
+ '' => '諃',
+ '' => '誺',
+ '' => '誽',
+ '' => '諙',
+ '' => '谾',
+ '' => '豍',
+ '' => '貏',
+ '' => '賥',
+ '' => '賟',
+ '' => '賙',
+ '' => '賨',
+ '' => '賚',
+ '' => '賝',
+ '' => '賧',
+ '' => '趠',
+ '' => '趜',
+ '' => '趡',
+ '' => '趛',
+ '' => '踠',
+ '' => '踣',
+ '' => '踥',
+ '' => '踤',
+ '' => '踮',
+ '' => '踕',
+ '' => '踛',
+ '' => '踖',
+ '' => '踑',
+ '' => '踙',
+ '' => '踦',
+ '' => '踧',
+ '@' => '踔',
+ 'A' => '踒',
+ 'B' => '踘',
+ 'C' => '踓',
+ 'D' => '踜',
+ 'E' => '踗',
+ 'F' => '踚',
+ 'G' => '輬',
+ 'H' => '輤',
+ 'I' => '輘',
+ 'J' => '輚',
+ 'K' => '輠',
+ 'L' => '輣',
+ 'M' => '輖',
+ 'N' => '輗',
+ 'O' => '遳',
+ 'P' => '遰',
+ 'Q' => '遯',
+ 'R' => '遧',
+ 'S' => '遫',
+ 'T' => '鄯',
+ 'U' => '鄫',
+ 'V' => '鄩',
+ 'W' => '鄪',
+ 'X' => '鄲',
+ 'Y' => '鄦',
+ 'Z' => '鄮',
+ '[' => '醅',
+ '\\' => '醆',
+ ']' => '醊',
+ '^' => '醁',
+ '_' => '醂',
+ '`' => '醄',
+ 'a' => '醀',
+ 'b' => '鋐',
+ 'c' => '鋃',
+ 'd' => '鋄',
+ 'e' => '鋀',
+ 'f' => '鋙',
+ 'g' => '銶',
+ 'h' => '鋏',
+ 'i' => '鋱',
+ 'j' => '鋟',
+ 'k' => '鋘',
+ 'l' => '鋩',
+ 'm' => '鋗',
+ 'n' => '鋝',
+ 'o' => '鋌',
+ 'p' => '鋯',
+ 'q' => '鋂',
+ 'r' => '鋨',
+ 's' => '鋊',
+ 't' => '鋈',
+ 'u' => '鋎',
+ 'v' => '鋦',
+ 'w' => '鋍',
+ 'x' => '鋕',
+ 'y' => '鋉',
+ 'z' => '鋠',
+ '{' => '鋞',
+ '|' => '鋧',
+ '}' => '鋑',
+ '~' => '鋓',
+ '' => '銵',
+ '' => '鋡',
+ '' => '鋆',
+ '' => '銴',
+ '' => '镼',
+ '' => '閬',
+ '' => '閫',
+ '' => '閮',
+ '' => '閰',
+ '' => '隤',
+ '' => '隢',
+ '' => '雓',
+ '' => '霅',
+ '' => '霈',
+ '' => '霂',
+ '' => '靚',
+ '' => '鞊',
+ '' => '鞎',
+ '' => '鞈',
+ '' => '韐',
+ '' => '韏',
+ '' => '頞',
+ '' => '頝',
+ '' => '頦',
+ '' => '頩',
+ '' => '頨',
+ '' => '頠',
+ '' => '頛',
+ '' => '頧',
+ '' => '颲',
+ '' => '餈',
+ '' => '飺',
+ '' => '餑',
+ '' => '餔',
+ '' => '餖',
+ '' => '餗',
+ '' => '餕',
+ '' => '駜',
+ '' => '駍',
+ '' => '駏',
+ '' => '駓',
+ '' => '駔',
+ '' => '駎',
+ '' => '駉',
+ '' => '駖',
+ '' => '駘',
+ '' => '駋',
+ '' => '駗',
+ '' => '駌',
+ '' => '骳',
+ '' => '髬',
+ '' => '髫',
+ '' => '髳',
+ '' => '髲',
+ '' => '髱',
+ '' => '魆',
+ '' => '魃',
+ '' => '魧',
+ '' => '魴',
+ '' => '魱',
+ '' => '魦',
+ '' => '魶',
+ '' => '魵',
+ '' => '魰',
+ '' => '魨',
+ '' => '魤',
+ '' => '魬',
+ '' => '鳼',
+ '' => '鳺',
+ '' => '鳽',
+ '' => '鳿',
+ '' => '鳷',
+ '' => '鴇',
+ '' => '鴀',
+ '' => '鳹',
+ '' => '鳻',
+ '' => '鴈',
+ '' => '鴅',
+ '' => '鴄',
+ '' => '麃',
+ '' => '黓',
+ '' => '鼏',
+ '' => '鼐',
+ '' => '儜',
+ '' => '儓',
+ '' => '儗',
+ '' => '儚',
+ '' => '儑',
+ '' => '凞',
+ '' => '匴',
+ '' => '叡',
+ '' => '噰',
+ '' => '噠',
+ '' => '噮',
+ '@' => '噳',
+ 'A' => '噦',
+ 'B' => '噣',
+ 'C' => '噭',
+ 'D' => '噲',
+ 'E' => '噞',
+ 'F' => '噷',
+ 'G' => '圜',
+ 'H' => '圛',
+ 'I' => '壈',
+ 'J' => '墽',
+ 'K' => '壉',
+ 'L' => '墿',
+ 'M' => '墺',
+ 'N' => '壂',
+ 'O' => '墼',
+ 'P' => '壆',
+ 'Q' => '嬗',
+ 'R' => '嬙',
+ 'S' => '嬛',
+ 'T' => '嬡',
+ 'U' => '嬔',
+ 'V' => '嬓',
+ 'W' => '嬐',
+ 'X' => '嬖',
+ 'Y' => '嬨',
+ 'Z' => '嬚',
+ '[' => '嬠',
+ '\\' => '嬞',
+ ']' => '寯',
+ '^' => '嶬',
+ '_' => '嶱',
+ '`' => '嶩',
+ 'a' => '嶧',
+ 'b' => '嶵',
+ 'c' => '嶰',
+ 'd' => '嶮',
+ 'e' => '嶪',
+ 'f' => '嶨',
+ 'g' => '嶲',
+ 'h' => '嶭',
+ 'i' => '嶯',
+ 'j' => '嶴',
+ 'k' => '幧',
+ 'l' => '幨',
+ 'm' => '幦',
+ 'n' => '幯',
+ 'o' => '廩',
+ 'p' => '廧',
+ 'q' => '廦',
+ 'r' => '廨',
+ 's' => '廥',
+ 't' => '彋',
+ 'u' => '徼',
+ 'v' => '憝',
+ 'w' => '憨',
+ 'x' => '憖',
+ 'y' => '懅',
+ 'z' => '憴',
+ '{' => '懆',
+ '|' => '懁',
+ '}' => '懌',
+ '~' => '憺',
+ '' => '憿',
+ '' => '憸',
+ '' => '憌',
+ '' => '擗',
+ '' => '擖',
+ '' => '擐',
+ '' => '擏',
+ '' => '擉',
+ '' => '撽',
+ '' => '撉',
+ '' => '擃',
+ '' => '擛',
+ '' => '擳',
+ '' => '擙',
+ '' => '攳',
+ '' => '敿',
+ '' => '敼',
+ '' => '斢',
+ '' => '曈',
+ '' => '暾',
+ '' => '曀',
+ '' => '曊',
+ '' => '曋',
+ '' => '曏',
+ '' => '暽',
+ '' => '暻',
+ '' => '暺',
+ '' => '曌',
+ '' => '朣',
+ '' => '樴',
+ '' => '橦',
+ '' => '橉',
+ '' => '橧',
+ '' => '樲',
+ '' => '橨',
+ '' => '樾',
+ '' => '橝',
+ '' => '橭',
+ '' => '橶',
+ '' => '橛',
+ '' => '橑',
+ '' => '樨',
+ '' => '橚',
+ '' => '樻',
+ '' => '樿',
+ '' => '橁',
+ '' => '橪',
+ '' => '橤',
+ '' => '橐',
+ '' => '橏',
+ '' => '橔',
+ '' => '橯',
+ '' => '橩',
+ '' => '橠',
+ '' => '樼',
+ '' => '橞',
+ '' => '橖',
+ '' => '橕',
+ '' => '橍',
+ '' => '橎',
+ '' => '橆',
+ '' => '歕',
+ '' => '歔',
+ '' => '歖',
+ '' => '殧',
+ '' => '殪',
+ '' => '殫',
+ '' => '毈',
+ '' => '毇',
+ '' => '氄',
+ '' => '氃',
+ '' => '氆',
+ '' => '澭',
+ '' => '濋',
+ '' => '澣',
+ '' => '濇',
+ '' => '澼',
+ '' => '濎',
+ '' => '濈',
+ '' => '潞',
+ '' => '濄',
+ '' => '澽',
+ '' => '澞',
+ '' => '濊',
+ '' => '澨',
+ '' => '瀄',
+ '' => '澥',
+ '' => '澮',
+ '' => '澺',
+ '' => '澬',
+ '' => '澪',
+ '' => '濏',
+ '' => '澿',
+ '' => '澸',
+ '@' => '澢',
+ 'A' => '濉',
+ 'B' => '澫',
+ 'C' => '濍',
+ 'D' => '澯',
+ 'E' => '澲',
+ 'F' => '澰',
+ 'G' => '燅',
+ 'H' => '燂',
+ 'I' => '熿',
+ 'J' => '熸',
+ 'K' => '燖',
+ 'L' => '燀',
+ 'M' => '燁',
+ 'N' => '燋',
+ 'O' => '燔',
+ 'P' => '燊',
+ 'Q' => '燇',
+ 'R' => '燏',
+ 'S' => '熽',
+ 'T' => '燘',
+ 'U' => '熼',
+ 'V' => '燆',
+ 'W' => '燚',
+ 'X' => '燛',
+ 'Y' => '犝',
+ 'Z' => '犞',
+ '[' => '獩',
+ '\\' => '獦',
+ ']' => '獧',
+ '^' => '獬',
+ '_' => '獥',
+ '`' => '獫',
+ 'a' => '獪',
+ 'b' => '瑿',
+ 'c' => '璚',
+ 'd' => '璠',
+ 'e' => '璔',
+ 'f' => '璒',
+ 'g' => '璕',
+ 'h' => '璡',
+ 'i' => '甋',
+ 'j' => '疀',
+ 'k' => '瘯',
+ 'l' => '瘭',
+ 'm' => '瘱',
+ 'n' => '瘽',
+ 'o' => '瘳',
+ 'p' => '瘼',
+ 'q' => '瘵',
+ 'r' => '瘲',
+ 's' => '瘰',
+ 't' => '皻',
+ 'u' => '盦',
+ 'v' => '瞚',
+ 'w' => '瞝',
+ 'x' => '瞡',
+ 'y' => '瞜',
+ 'z' => '瞛',
+ '{' => '瞢',
+ '|' => '瞣',
+ '}' => '瞕',
+ '~' => '瞙',
+ '' => '瞗',
+ '' => '磝',
+ '' => '磩',
+ '' => '磥',
+ '' => '磪',
+ '' => '磞',
+ '' => '磣',
+ '' => '磛',
+ '' => '磡',
+ '' => '磢',
+ '' => '磭',
+ '' => '磟',
+ '' => '磠',
+ '' => '禤',
+ '' => '穄',
+ '' => '穈',
+ '' => '穇',
+ '' => '窶',
+ '' => '窸',
+ '' => '窵',
+ '' => '窱',
+ '' => '窷',
+ '' => '篞',
+ '' => '篣',
+ '' => '篧',
+ '' => '篝',
+ '' => '篕',
+ '' => '篥',
+ '' => '篚',
+ '' => '篨',
+ '' => '篹',
+ '' => '篔',
+ '' => '篪',
+ '' => '篢',
+ '' => '篜',
+ '' => '篫',
+ '' => '篘',
+ '' => '篟',
+ '' => '糒',
+ '' => '糔',
+ '' => '糗',
+ '' => '糐',
+ '' => '糑',
+ '' => '縒',
+ '' => '縡',
+ '' => '縗',
+ '' => '縌',
+ '' => '縟',
+ '' => '縠',
+ '' => '縓',
+ '' => '縎',
+ '' => '縜',
+ '' => '縕',
+ '' => '縚',
+ '' => '縢',
+ '' => '縋',
+ '' => '縏',
+ '' => '縖',
+ '' => '縍',
+ '' => '縔',
+ '' => '縥',
+ '' => '縤',
+ '' => '罃',
+ '' => '罻',
+ '' => '罼',
+ '' => '罺',
+ '' => '羱',
+ '' => '翯',
+ '' => '耪',
+ '' => '耩',
+ '' => '聬',
+ '' => '膱',
+ '' => '膦',
+ '' => '膮',
+ '' => '膹',
+ '' => '膵',
+ '' => '膫',
+ '' => '膰',
+ '' => '膬',
+ '' => '膴',
+ '' => '膲',
+ '' => '膷',
+ '' => '膧',
+ '' => '臲',
+ '' => '艕',
+ '' => '艖',
+ '' => '艗',
+ '' => '蕖',
+ '' => '蕅',
+ '' => '蕫',
+ '' => '蕍',
+ '' => '蕓',
+ '' => '蕡',
+ '' => '蕘',
+ '@' => '蕀',
+ 'A' => '蕆',
+ 'B' => '蕤',
+ 'C' => '蕁',
+ 'D' => '蕢',
+ 'E' => '蕄',
+ 'F' => '蕑',
+ 'G' => '蕇',
+ 'H' => '蕣',
+ 'I' => '蔾',
+ 'J' => '蕛',
+ 'K' => '蕱',
+ 'L' => '蕎',
+ 'M' => '蕮',
+ 'N' => '蕵',
+ 'O' => '蕕',
+ 'P' => '蕧',
+ 'Q' => '蕠',
+ 'R' => '薌',
+ 'S' => '蕦',
+ 'T' => '蕝',
+ 'U' => '蕔',
+ 'V' => '蕥',
+ 'W' => '蕬',
+ 'X' => '虣',
+ 'Y' => '虥',
+ 'Z' => '虤',
+ '[' => '螛',
+ '\\' => '螏',
+ ']' => '螗',
+ '^' => '螓',
+ '_' => '螒',
+ '`' => '螈',
+ 'a' => '螁',
+ 'b' => '螖',
+ 'c' => '螘',
+ 'd' => '蝹',
+ 'e' => '螇',
+ 'f' => '螣',
+ 'g' => '螅',
+ 'h' => '螐',
+ 'i' => '螑',
+ 'j' => '螝',
+ 'k' => '螄',
+ 'l' => '螔',
+ 'm' => '螜',
+ 'n' => '螚',
+ 'o' => '螉',
+ 'p' => '褞',
+ 'q' => '褦',
+ 'r' => '褰',
+ 's' => '褭',
+ 't' => '褮',
+ 'u' => '褧',
+ 'v' => '褱',
+ 'w' => '褢',
+ 'x' => '褩',
+ 'y' => '褣',
+ 'z' => '褯',
+ '{' => '褬',
+ '|' => '褟',
+ '}' => '觱',
+ '~' => '諠',
+ '' => '諢',
+ '' => '諲',
+ '' => '諴',
+ '' => '諵',
+ '' => '諝',
+ '' => '謔',
+ '' => '諤',
+ '' => '諟',
+ '' => '諰',
+ '' => '諈',
+ '' => '諞',
+ '' => '諡',
+ '' => '諨',
+ '' => '諿',
+ '' => '諯',
+ '' => '諻',
+ '' => '貑',
+ '' => '貒',
+ '' => '貐',
+ '' => '賵',
+ '' => '賮',
+ '' => '賱',
+ '' => '賰',
+ '' => '賳',
+ '' => '赬',
+ '' => '赮',
+ '' => '趥',
+ '' => '趧',
+ '' => '踳',
+ '' => '踾',
+ '' => '踸',
+ '' => '蹀',
+ '' => '蹅',
+ '' => '踶',
+ '' => '踼',
+ '' => '踽',
+ '' => '蹁',
+ '' => '踰',
+ '' => '踿',
+ '' => '躽',
+ '' => '輶',
+ '' => '輮',
+ '' => '輵',
+ '' => '輲',
+ '' => '輹',
+ '' => '輷',
+ '' => '輴',
+ '' => '遶',
+ '' => '遹',
+ '' => '遻',
+ '' => '邆',
+ '' => '郺',
+ '' => '鄳',
+ '' => '鄵',
+ '' => '鄶',
+ '' => '醓',
+ '' => '醐',
+ '' => '醑',
+ '' => '醍',
+ '' => '醏',
+ '' => '錧',
+ '' => '錞',
+ '' => '錈',
+ '' => '錟',
+ '' => '錆',
+ '' => '錏',
+ '' => '鍺',
+ '' => '錸',
+ '' => '錼',
+ '' => '錛',
+ '' => '錣',
+ '' => '錒',
+ '' => '錁',
+ '' => '鍆',
+ '' => '錭',
+ '' => '錎',
+ '' => '錍',
+ '' => '鋋',
+ '' => '錝',
+ '' => '鋺',
+ '' => '錥',
+ '' => '錓',
+ '' => '鋹',
+ '' => '鋷',
+ '' => '錴',
+ '' => '錂',
+ '' => '錤',
+ '' => '鋿',
+ '' => '錩',
+ '' => '錹',
+ '' => '錵',
+ '' => '錪',
+ '' => '錔',
+ '' => '錌',
+ '@' => '錋',
+ 'A' => '鋾',
+ 'B' => '錉',
+ 'C' => '錀',
+ 'D' => '鋻',
+ 'E' => '錖',
+ 'F' => '閼',
+ 'G' => '闍',
+ 'H' => '閾',
+ 'I' => '閹',
+ 'J' => '閺',
+ 'K' => '閶',
+ 'L' => '閿',
+ 'M' => '閵',
+ 'N' => '閽',
+ 'O' => '隩',
+ 'P' => '雔',
+ 'Q' => '霋',
+ 'R' => '霒',
+ 'S' => '霐',
+ 'T' => '鞙',
+ 'U' => '鞗',
+ 'V' => '鞔',
+ 'W' => '韰',
+ 'X' => '韸',
+ 'Y' => '頵',
+ 'Z' => '頯',
+ '[' => '頲',
+ '\\' => '餤',
+ ']' => '餟',
+ '^' => '餧',
+ '_' => '餩',
+ '`' => '馞',
+ 'a' => '駮',
+ 'b' => '駬',
+ 'c' => '駥',
+ 'd' => '駤',
+ 'e' => '駰',
+ 'f' => '駣',
+ 'g' => '駪',
+ 'h' => '駩',
+ 'i' => '駧',
+ 'j' => '骹',
+ 'k' => '骿',
+ 'l' => '骴',
+ 'm' => '骻',
+ 'n' => '髶',
+ 'o' => '髺',
+ 'p' => '髹',
+ 'q' => '髷',
+ 'r' => '鬳',
+ 's' => '鮀',
+ 't' => '鮅',
+ 'u' => '鮇',
+ 'v' => '魼',
+ 'w' => '魾',
+ 'x' => '魻',
+ 'y' => '鮂',
+ 'z' => '鮓',
+ '{' => '鮒',
+ '|' => '鮐',
+ '}' => '魺',
+ '~' => '鮕',
+ '' => '魽',
+ '' => '鮈',
+ '' => '鴥',
+ '' => '鴗',
+ '' => '鴠',
+ '' => '鴞',
+ '' => '鴔',
+ '' => '鴩',
+ '' => '鴝',
+ '' => '鴘',
+ '' => '鴢',
+ '' => '鴐',
+ '' => '鴙',
+ '' => '鴟',
+ '' => '麈',
+ '' => '麆',
+ '' => '麇',
+ '' => '麮',
+ '' => '麭',
+ '' => '黕',
+ '' => '黖',
+ '' => '黺',
+ '' => '鼒',
+ '' => '鼽',
+ '' => '儦',
+ '' => '儥',
+ '' => '儢',
+ '' => '儤',
+ '' => '儠',
+ '' => '儩',
+ '' => '勴',
+ '' => '嚓',
+ '' => '嚌',
+ '' => '嚍',
+ '' => '嚆',
+ '' => '嚄',
+ '' => '嚃',
+ '' => '噾',
+ '' => '嚂',
+ '' => '噿',
+ '' => '嚁',
+ '' => '壖',
+ '' => '壔',
+ '' => '壏',
+ '' => '壒',
+ '' => '嬭',
+ '' => '嬥',
+ '' => '嬲',
+ '' => '嬣',
+ '' => '嬬',
+ '' => '嬧',
+ '' => '嬦',
+ '' => '嬯',
+ '' => '嬮',
+ '' => '孻',
+ '' => '寱',
+ '' => '寲',
+ '' => '嶷',
+ '' => '幬',
+ '' => '幪',
+ '' => '徾',
+ '' => '徻',
+ '' => '懃',
+ '' => '憵',
+ '' => '憼',
+ '' => '懧',
+ '' => '懠',
+ '' => '懥',
+ '' => '懤',
+ '' => '懨',
+ '' => '懞',
+ '' => '擯',
+ '' => '擩',
+ '' => '擣',
+ '' => '擫',
+ '' => '擤',
+ '' => '擨',
+ '' => '斁',
+ '' => '斀',
+ '' => '斶',
+ '' => '旚',
+ '' => '曒',
+ '' => '檍',
+ '' => '檖',
+ '' => '檁',
+ '' => '檥',
+ '' => '檉',
+ '' => '檟',
+ '' => '檛',
+ '' => '檡',
+ '' => '檞',
+ '' => '檇',
+ '' => '檓',
+ '' => '檎',
+ '@' => '檕',
+ 'A' => '檃',
+ 'B' => '檨',
+ 'C' => '檤',
+ 'D' => '檑',
+ 'E' => '橿',
+ 'F' => '檦',
+ 'G' => '檚',
+ 'H' => '檅',
+ 'I' => '檌',
+ 'J' => '檒',
+ 'K' => '歛',
+ 'L' => '殭',
+ 'M' => '氉',
+ 'N' => '濌',
+ 'O' => '澩',
+ 'P' => '濴',
+ 'Q' => '濔',
+ 'R' => '濣',
+ 'S' => '濜',
+ 'T' => '濭',
+ 'U' => '濧',
+ 'V' => '濦',
+ 'W' => '濞',
+ 'X' => '濲',
+ 'Y' => '濝',
+ 'Z' => '濢',
+ '[' => '濨',
+ '\\' => '燡',
+ ']' => '燱',
+ '^' => '燨',
+ '_' => '燲',
+ '`' => '燤',
+ 'a' => '燰',
+ 'b' => '燢',
+ 'c' => '獳',
+ 'd' => '獮',
+ 'e' => '獯',
+ 'f' => '璗',
+ 'g' => '璲',
+ 'h' => '璫',
+ 'i' => '璐',
+ 'j' => '璪',
+ 'k' => '璭',
+ 'l' => '璱',
+ 'm' => '璥',
+ 'n' => '璯',
+ 'o' => '甐',
+ 'p' => '甑',
+ 'q' => '甒',
+ 'r' => '甏',
+ 's' => '疄',
+ 't' => '癃',
+ 'u' => '癈',
+ 'v' => '癉',
+ 'w' => '癇',
+ 'x' => '皤',
+ 'y' => '盩',
+ 'z' => '瞵',
+ '{' => '瞫',
+ '|' => '瞲',
+ '}' => '瞷',
+ '~' => '瞶',
+ '' => '瞴',
+ '' => '瞱',
+ '' => '瞨',
+ '' => '矰',
+ '' => '磳',
+ '' => '磽',
+ '' => '礂',
+ '' => '磻',
+ '' => '磼',
+ '' => '磲',
+ '' => '礅',
+ '' => '磹',
+ '' => '磾',
+ '' => '礄',
+ '' => '禫',
+ '' => '禨',
+ '' => '穜',
+ '' => '穛',
+ '' => '穖',
+ '' => '穘',
+ '' => '穔',
+ '' => '穚',
+ '' => '窾',
+ '' => '竀',
+ '' => '竁',
+ '' => '簅',
+ '' => '簏',
+ '' => '篲',
+ '' => '簀',
+ '' => '篿',
+ '' => '篻',
+ '' => '簎',
+ '' => '篴',
+ '' => '簋',
+ '' => '篳',
+ '' => '簂',
+ '' => '簉',
+ '' => '簃',
+ '' => '簁',
+ '' => '篸',
+ '' => '篽',
+ '' => '簆',
+ '' => '篰',
+ '' => '篱',
+ '' => '簐',
+ '' => '簊',
+ '' => '糨',
+ '' => '縭',
+ '' => '縼',
+ '' => '繂',
+ '' => '縳',
+ '' => '顈',
+ '' => '縸',
+ '' => '縪',
+ '' => '繉',
+ '' => '繀',
+ '' => '繇',
+ '' => '縩',
+ '' => '繌',
+ '' => '縰',
+ '' => '縻',
+ '' => '縶',
+ '' => '繄',
+ '' => '縺',
+ '' => '罅',
+ '' => '罿',
+ '' => '罾',
+ '' => '罽',
+ '' => '翴',
+ '' => '翲',
+ '' => '耬',
+ '' => '膻',
+ '' => '臄',
+ '' => '臌',
+ '' => '臊',
+ '' => '臅',
+ '' => '臇',
+ '' => '膼',
+ '' => '臩',
+ '' => '艛',
+ '' => '艚',
+ '' => '艜',
+ '' => '薃',
+ '' => '薀',
+ '' => '薏',
+ '' => '薧',
+ '' => '薕',
+ '' => '薠',
+ '' => '薋',
+ '' => '薣',
+ '' => '蕻',
+ '' => '薤',
+ '' => '薚',
+ '' => '薞',
+ '@' => '蕷',
+ 'A' => '蕼',
+ 'B' => '薉',
+ 'C' => '薡',
+ 'D' => '蕺',
+ 'E' => '蕸',
+ 'F' => '蕗',
+ 'G' => '薎',
+ 'H' => '薖',
+ 'I' => '薆',
+ 'J' => '薍',
+ 'K' => '薙',
+ 'L' => '薝',
+ 'M' => '薁',
+ 'N' => '薢',
+ 'O' => '薂',
+ 'P' => '薈',
+ 'Q' => '薅',
+ 'R' => '蕹',
+ 'S' => '蕶',
+ 'T' => '薘',
+ 'U' => '薐',
+ 'V' => '薟',
+ 'W' => '虨',
+ 'X' => '螾',
+ 'Y' => '螪',
+ 'Z' => '螭',
+ '[' => '蟅',
+ '\\' => '螰',
+ ']' => '螬',
+ '^' => '螹',
+ '_' => '螵',
+ '`' => '螼',
+ 'a' => '螮',
+ 'b' => '蟉',
+ 'c' => '蟃',
+ 'd' => '蟂',
+ 'e' => '蟌',
+ 'f' => '螷',
+ 'g' => '螯',
+ 'h' => '蟄',
+ 'i' => '蟊',
+ 'j' => '螴',
+ 'k' => '螶',
+ 'l' => '螿',
+ 'm' => '螸',
+ 'n' => '螽',
+ 'o' => '蟞',
+ 'p' => '螲',
+ 'q' => '褵',
+ 'r' => '褳',
+ 's' => '褼',
+ 't' => '褾',
+ 'u' => '襁',
+ 'v' => '襒',
+ 'w' => '褷',
+ 'x' => '襂',
+ 'y' => '覭',
+ 'z' => '覯',
+ '{' => '覮',
+ '|' => '觲',
+ '}' => '觳',
+ '~' => '謞',
+ '' => '謘',
+ '' => '謖',
+ '' => '謑',
+ '' => '謅',
+ '' => '謋',
+ '' => '謢',
+ '' => '謏',
+ '' => '謒',
+ '' => '謕',
+ '' => '謇',
+ '' => '謍',
+ '' => '謈',
+ '' => '謆',
+ '' => '謜',
+ '' => '謓',
+ '' => '謚',
+ '' => '豏',
+ '' => '豰',
+ '' => '豲',
+ '' => '豱',
+ '' => '豯',
+ '' => '貕',
+ '' => '貔',
+ '' => '賹',
+ '' => '赯',
+ '' => '蹎',
+ '' => '蹍',
+ '' => '蹓',
+ '' => '蹐',
+ '' => '蹌',
+ '' => '蹇',
+ '' => '轃',
+ '' => '轀',
+ '' => '邅',
+ '' => '遾',
+ '' => '鄸',
+ '' => '醚',
+ '' => '醢',
+ '' => '醛',
+ '' => '醙',
+ '' => '醟',
+ '' => '醡',
+ '' => '醝',
+ '' => '醠',
+ '' => '鎡',
+ '' => '鎃',
+ '' => '鎯',
+ '' => '鍤',
+ '' => '鍖',
+ '' => '鍇',
+ '' => '鍼',
+ '' => '鍘',
+ '' => '鍜',
+ '' => '鍶',
+ '' => '鍉',
+ '' => '鍐',
+ '' => '鍑',
+ '' => '鍠',
+ '' => '鍭',
+ '' => '鎏',
+ '' => '鍌',
+ '' => '鍪',
+ '' => '鍹',
+ '' => '鍗',
+ '' => '鍕',
+ '' => '鍒',
+ '' => '鍏',
+ '' => '鍱',
+ '' => '鍷',
+ '' => '鍻',
+ '' => '鍡',
+ '' => '鍞',
+ '' => '鍣',
+ '' => '鍧',
+ '' => '鎀',
+ '' => '鍎',
+ '' => '鍙',
+ '' => '闇',
+ '' => '闀',
+ '' => '闉',
+ '' => '闃',
+ '' => '闅',
+ '' => '閷',
+ '' => '隮',
+ '' => '隰',
+ '' => '隬',
+ '' => '霠',
+ '' => '霟',
+ '' => '霘',
+ '' => '霝',
+ '' => '霙',
+ '' => '鞚',
+ '' => '鞡',
+ '' => '鞜',
+ '@' => '鞞',
+ 'A' => '鞝',
+ 'B' => '韕',
+ 'C' => '韔',
+ 'D' => '韱',
+ 'E' => '顁',
+ 'F' => '顄',
+ 'G' => '顊',
+ 'H' => '顉',
+ 'I' => '顅',
+ 'J' => '顃',
+ 'K' => '餥',
+ 'L' => '餫',
+ 'M' => '餬',
+ 'N' => '餪',
+ 'O' => '餳',
+ 'P' => '餲',
+ 'Q' => '餯',
+ 'R' => '餭',
+ 'S' => '餱',
+ 'T' => '餰',
+ 'U' => '馘',
+ 'V' => '馣',
+ 'W' => '馡',
+ 'X' => '騂',
+ 'Y' => '駺',
+ 'Z' => '駴',
+ '[' => '駷',
+ '\\' => '駹',
+ ']' => '駸',
+ '^' => '駶',
+ '_' => '駻',
+ '`' => '駽',
+ 'a' => '駾',
+ 'b' => '駼',
+ 'c' => '騃',
+ 'd' => '骾',
+ 'e' => '髾',
+ 'f' => '髽',
+ 'g' => '鬁',
+ 'h' => '髼',
+ 'i' => '魈',
+ 'j' => '鮚',
+ 'k' => '鮨',
+ 'l' => '鮞',
+ 'm' => '鮛',
+ 'n' => '鮦',
+ 'o' => '鮡',
+ 'p' => '鮥',
+ 'q' => '鮤',
+ 'r' => '鮆',
+ 's' => '鮢',
+ 't' => '鮠',
+ 'u' => '鮯',
+ 'v' => '鴳',
+ 'w' => '鵁',
+ 'x' => '鵧',
+ 'y' => '鴶',
+ 'z' => '鴮',
+ '{' => '鴯',
+ '|' => '鴱',
+ '}' => '鴸',
+ '~' => '鴰',
+ '' => '鵅',
+ '' => '鵂',
+ '' => '鵃',
+ '' => '鴾',
+ '' => '鴷',
+ '' => '鵀',
+ '' => '鴽',
+ '' => '翵',
+ '' => '鴭',
+ '' => '麊',
+ '' => '麉',
+ '' => '麍',
+ '' => '麰',
+ '' => '黈',
+ '' => '黚',
+ '' => '黻',
+ '' => '黿',
+ '' => '鼤',
+ '' => '鼣',
+ '' => '鼢',
+ '' => '齔',
+ '' => '龠',
+ '' => '儱',
+ '' => '儭',
+ '' => '儮',
+ '' => '嚘',
+ '' => '嚜',
+ '' => '嚗',
+ '' => '嚚',
+ '' => '嚝',
+ '' => '嚙',
+ '' => '奰',
+ '' => '嬼',
+ '' => '屩',
+ '' => '屪',
+ '' => '巀',
+ '' => '幭',
+ '' => '幮',
+ '' => '懘',
+ '' => '懟',
+ '' => '懭',
+ '' => '懮',
+ '' => '懱',
+ '' => '懪',
+ '' => '懰',
+ '' => '懫',
+ '' => '懖',
+ '' => '懩',
+ '' => '擿',
+ '' => '攄',
+ '' => '擽',
+ '' => '擸',
+ '' => '攁',
+ '' => '攃',
+ '' => '擼',
+ '' => '斔',
+ '' => '旛',
+ '' => '曚',
+ '' => '曛',
+ '' => '曘',
+ '' => '櫅',
+ '' => '檹',
+ '' => '檽',
+ '' => '櫡',
+ '' => '櫆',
+ '' => '檺',
+ '' => '檶',
+ '' => '檷',
+ '' => '櫇',
+ '' => '檴',
+ '' => '檭',
+ '' => '歞',
+ '' => '毉',
+ '' => '氋',
+ '' => '瀇',
+ '' => '瀌',
+ '' => '瀍',
+ '' => '瀁',
+ '' => '瀅',
+ '' => '瀔',
+ '' => '瀎',
+ '' => '濿',
+ '' => '瀀',
+ '' => '濻',
+ '' => '瀦',
+ '' => '濼',
+ '' => '濷',
+ '' => '瀊',
+ '' => '爁',
+ '' => '燿',
+ '' => '燹',
+ '' => '爃',
+ '' => '燽',
+ '' => '獶',
+ '@' => '璸',
+ 'A' => '瓀',
+ 'B' => '璵',
+ 'C' => '瓁',
+ 'D' => '璾',
+ 'E' => '璶',
+ 'F' => '璻',
+ 'G' => '瓂',
+ 'H' => '甔',
+ 'I' => '甓',
+ 'J' => '癜',
+ 'K' => '癤',
+ 'L' => '癙',
+ 'M' => '癐',
+ 'N' => '癓',
+ 'O' => '癗',
+ 'P' => '癚',
+ 'Q' => '皦',
+ 'R' => '皽',
+ 'S' => '盬',
+ 'T' => '矂',
+ 'U' => '瞺',
+ 'V' => '磿',
+ 'W' => '礌',
+ 'X' => '礓',
+ 'Y' => '礔',
+ 'Z' => '礉',
+ '[' => '礐',
+ '\\' => '礒',
+ ']' => '礑',
+ '^' => '禭',
+ '_' => '禬',
+ '`' => '穟',
+ 'a' => '簜',
+ 'b' => '簩',
+ 'c' => '簙',
+ 'd' => '簠',
+ 'e' => '簟',
+ 'f' => '簭',
+ 'g' => '簝',
+ 'h' => '簦',
+ 'i' => '簨',
+ 'j' => '簢',
+ 'k' => '簥',
+ 'l' => '簰',
+ 'm' => '繜',
+ 'n' => '繐',
+ 'o' => '繖',
+ 'p' => '繣',
+ 'q' => '繘',
+ 'r' => '繢',
+ 's' => '繟',
+ 't' => '繑',
+ 'u' => '繠',
+ 'v' => '繗',
+ 'w' => '繓',
+ 'x' => '羵',
+ 'y' => '羳',
+ 'z' => '翷',
+ '{' => '翸',
+ '|' => '聵',
+ '}' => '臑',
+ '~' => '臒',
+ '' => '臐',
+ '' => '艟',
+ '' => '艞',
+ '' => '薴',
+ '' => '藆',
+ '' => '藀',
+ '' => '藃',
+ '' => '藂',
+ '' => '薳',
+ '' => '薵',
+ '' => '薽',
+ '' => '藇',
+ '' => '藄',
+ '' => '薿',
+ '' => '藋',
+ '' => '藎',
+ '' => '藈',
+ '' => '藅',
+ '' => '薱',
+ '' => '薶',
+ '' => '藒',
+ '' => '蘤',
+ '' => '薸',
+ '' => '薷',
+ '' => '薾',
+ '' => '虩',
+ '' => '蟧',
+ '' => '蟦',
+ '' => '蟢',
+ '' => '蟛',
+ '' => '蟫',
+ '' => '蟪',
+ '' => '蟥',
+ '' => '蟟',
+ '' => '蟳',
+ '' => '蟤',
+ '' => '蟔',
+ '' => '蟜',
+ '' => '蟓',
+ '' => '蟭',
+ '' => '蟘',
+ '' => '蟣',
+ '' => '螤',
+ '' => '蟗',
+ '' => '蟙',
+ '' => '蠁',
+ '' => '蟴',
+ '' => '蟨',
+ '' => '蟝',
+ '' => '襓',
+ '' => '襋',
+ '' => '襏',
+ '' => '襌',
+ '' => '襆',
+ '' => '襐',
+ '' => '襑',
+ '' => '襉',
+ '' => '謪',
+ '' => '謧',
+ '' => '謣',
+ '' => '謳',
+ '' => '謰',
+ '' => '謵',
+ '' => '譇',
+ '' => '謯',
+ '' => '謼',
+ '' => '謾',
+ '' => '謱',
+ '' => '謥',
+ '' => '謷',
+ '' => '謦',
+ '' => '謶',
+ '' => '謮',
+ '' => '謤',
+ '' => '謻',
+ '' => '謽',
+ '' => '謺',
+ '' => '豂',
+ '' => '豵',
+ '' => '貙',
+ '' => '貘',
+ '' => '貗',
+ '' => '賾',
+ '' => '贄',
+ '' => '贂',
+ '' => '贀',
+ '' => '蹜',
+ '' => '蹢',
+ '' => '蹠',
+ '' => '蹗',
+ '' => '蹖',
+ '' => '蹞',
+ '' => '蹥',
+ '' => '蹧',
+ '@' => '蹛',
+ 'A' => '蹚',
+ 'B' => '蹡',
+ 'C' => '蹝',
+ 'D' => '蹩',
+ 'E' => '蹔',
+ 'F' => '轆',
+ 'G' => '轇',
+ 'H' => '轈',
+ 'I' => '轋',
+ 'J' => '鄨',
+ 'K' => '鄺',
+ 'L' => '鄻',
+ 'M' => '鄾',
+ 'N' => '醨',
+ 'O' => '醥',
+ 'P' => '醧',
+ 'Q' => '醯',
+ 'R' => '醪',
+ 'S' => '鎵',
+ 'T' => '鎌',
+ 'U' => '鎒',
+ 'V' => '鎷',
+ 'W' => '鎛',
+ 'X' => '鎝',
+ 'Y' => '鎉',
+ 'Z' => '鎧',
+ '[' => '鎎',
+ '\\' => '鎪',
+ ']' => '鎞',
+ '^' => '鎦',
+ '_' => '鎕',
+ '`' => '鎈',
+ 'a' => '鎙',
+ 'b' => '鎟',
+ 'c' => '鎍',
+ 'd' => '鎱',
+ 'e' => '鎑',
+ 'f' => '鎲',
+ 'g' => '鎤',
+ 'h' => '鎨',
+ 'i' => '鎴',
+ 'j' => '鎣',
+ 'k' => '鎥',
+ 'l' => '闒',
+ 'm' => '闓',
+ 'n' => '闑',
+ 'o' => '隳',
+ 'p' => '雗',
+ 'q' => '雚',
+ 'r' => '巂',
+ 's' => '雟',
+ 't' => '雘',
+ 'u' => '雝',
+ 'v' => '霣',
+ 'w' => '霢',
+ 'x' => '霥',
+ 'y' => '鞬',
+ 'z' => '鞮',
+ '{' => '鞨',
+ '|' => '鞫',
+ '}' => '鞤',
+ '~' => '鞪',
+ '' => '鞢',
+ '' => '鞥',
+ '' => '韗',
+ '' => '韙',
+ '' => '韖',
+ '' => '韘',
+ '' => '韺',
+ '' => '顐',
+ '' => '顑',
+ '' => '顒',
+ '' => '颸',
+ '' => '饁',
+ '' => '餼',
+ '' => '餺',
+ '' => '騏',
+ '' => '騋',
+ '' => '騉',
+ '' => '騍',
+ '' => '騄',
+ '' => '騑',
+ '' => '騊',
+ '' => '騅',
+ '' => '騇',
+ '' => '騆',
+ '' => '髀',
+ '' => '髜',
+ '' => '鬈',
+ '' => '鬄',
+ '' => '鬅',
+ '' => '鬩',
+ '' => '鬵',
+ '' => '魊',
+ '' => '魌',
+ '' => '魋',
+ '' => '鯇',
+ '' => '鯆',
+ '' => '鯃',
+ '' => '鮿',
+ '' => '鯁',
+ '' => '鮵',
+ '' => '鮸',
+ '' => '鯓',
+ '' => '鮶',
+ '' => '鯄',
+ '' => '鮹',
+ '' => '鮽',
+ '' => '鵜',
+ '' => '鵓',
+ '' => '鵏',
+ '' => '鵊',
+ '' => '鵛',
+ '' => '鵋',
+ '' => '鵙',
+ '' => '鵖',
+ '' => '鵌',
+ '' => '鵗',
+ '' => '鵒',
+ '' => '鵔',
+ '' => '鵟',
+ '' => '鵘',
+ '' => '鵚',
+ '' => '麎',
+ '' => '麌',
+ '' => '黟',
+ '' => '鼁',
+ '' => '鼀',
+ '' => '鼖',
+ '' => '鼥',
+ '' => '鼫',
+ '' => '鼪',
+ '' => '鼩',
+ '' => '鼨',
+ '' => '齌',
+ '' => '齕',
+ '' => '儴',
+ '' => '儵',
+ '' => '劖',
+ '' => '勷',
+ '' => '厴',
+ '' => '嚫',
+ '' => '嚭',
+ '' => '嚦',
+ '' => '嚧',
+ '' => '嚪',
+ '' => '嚬',
+ '' => '壚',
+ '' => '壝',
+ '' => '壛',
+ '' => '夒',
+ '' => '嬽',
+ '' => '嬾',
+ '' => '嬿',
+ '' => '巃',
+ '' => '幰',
+ '@' => '徿',
+ 'A' => '懻',
+ 'B' => '攇',
+ 'C' => '攐',
+ 'D' => '攍',
+ 'E' => '攉',
+ 'F' => '攌',
+ 'G' => '攎',
+ 'H' => '斄',
+ 'I' => '旞',
+ 'J' => '旝',
+ 'K' => '曞',
+ 'L' => '櫧',
+ 'M' => '櫠',
+ 'N' => '櫌',
+ 'O' => '櫑',
+ 'P' => '櫙',
+ 'Q' => '櫋',
+ 'R' => '櫟',
+ 'S' => '櫜',
+ 'T' => '櫐',
+ 'U' => '櫫',
+ 'V' => '櫏',
+ 'W' => '櫍',
+ 'X' => '櫞',
+ 'Y' => '歠',
+ 'Z' => '殰',
+ '[' => '氌',
+ '\\' => '瀙',
+ ']' => '瀧',
+ '^' => '瀠',
+ '_' => '瀖',
+ '`' => '瀫',
+ 'a' => '瀡',
+ 'b' => '瀢',
+ 'c' => '瀣',
+ 'd' => '瀩',
+ 'e' => '瀗',
+ 'f' => '瀤',
+ 'g' => '瀜',
+ 'h' => '瀪',
+ 'i' => '爌',
+ 'j' => '爊',
+ 'k' => '爇',
+ 'l' => '爂',
+ 'm' => '爅',
+ 'n' => '犥',
+ 'o' => '犦',
+ 'p' => '犤',
+ 'q' => '犣',
+ 'r' => '犡',
+ 's' => '瓋',
+ 't' => '瓅',
+ 'u' => '璷',
+ 'v' => '瓃',
+ 'w' => '甖',
+ 'x' => '癠',
+ 'y' => '矉',
+ 'z' => '矊',
+ '{' => '矄',
+ '|' => '矱',
+ '}' => '礝',
+ '~' => '礛',
+ '' => '礡',
+ '' => '礜',
+ '' => '礗',
+ '' => '礞',
+ '' => '禰',
+ '' => '穧',
+ '' => '穨',
+ '' => '簳',
+ '' => '簼',
+ '' => '簹',
+ '' => '簬',
+ '' => '簻',
+ '' => '糬',
+ '' => '糪',
+ '' => '繶',
+ '' => '繵',
+ '' => '繸',
+ '' => '繰',
+ '' => '繷',
+ '' => '繯',
+ '' => '繺',
+ '' => '繲',
+ '' => '繴',
+ '' => '繨',
+ '' => '罋',
+ '' => '罊',
+ '' => '羃',
+ '' => '羆',
+ '' => '羷',
+ '' => '翽',
+ '' => '翾',
+ '' => '聸',
+ '' => '臗',
+ '' => '臕',
+ '' => '艤',
+ '' => '艡',
+ '' => '艣',
+ '' => '藫',
+ '' => '藱',
+ '' => '藭',
+ '' => '藙',
+ '' => '藡',
+ '' => '藨',
+ '' => '藚',
+ '' => '藗',
+ '' => '藬',
+ '' => '藲',
+ '' => '藸',
+ '' => '藘',
+ '' => '藟',
+ '' => '藣',
+ '' => '藜',
+ '' => '藑',
+ '' => '藰',
+ '' => '藦',
+ '' => '藯',
+ '' => '藞',
+ '' => '藢',
+ '' => '蠀',
+ '' => '蟺',
+ '' => '蠃',
+ '' => '蟶',
+ '' => '蟷',
+ '' => '蠉',
+ '' => '蠌',
+ '' => '蠋',
+ '' => '蠆',
+ '' => '蟼',
+ '' => '蠈',
+ '' => '蟿',
+ '' => '蠊',
+ '' => '蠂',
+ '' => '襢',
+ '' => '襚',
+ '' => '襛',
+ '' => '襗',
+ '' => '襡',
+ '' => '襜',
+ '' => '襘',
+ '' => '襝',
+ '' => '襙',
+ '' => '覈',
+ '' => '覷',
+ '' => '覶',
+ '' => '觶',
+ '' => '譐',
+ '' => '譈',
+ '' => '譊',
+ '' => '譀',
+ '' => '譓',
+ '' => '譖',
+ '' => '譔',
+ '' => '譋',
+ '' => '譕',
+ '@' => '譑',
+ 'A' => '譂',
+ 'B' => '譒',
+ 'C' => '譗',
+ 'D' => '豃',
+ 'E' => '豷',
+ 'F' => '豶',
+ 'G' => '貚',
+ 'H' => '贆',
+ 'I' => '贇',
+ 'J' => '贉',
+ 'K' => '趬',
+ 'L' => '趪',
+ 'M' => '趭',
+ 'N' => '趫',
+ 'O' => '蹭',
+ 'P' => '蹸',
+ 'Q' => '蹳',
+ 'R' => '蹪',
+ 'S' => '蹯',
+ 'T' => '蹻',
+ 'U' => '軂',
+ 'V' => '轒',
+ 'W' => '轑',
+ 'X' => '轏',
+ 'Y' => '轐',
+ 'Z' => '轓',
+ '[' => '辴',
+ '\\' => '酀',
+ ']' => '鄿',
+ '^' => '醰',
+ '_' => '醭',
+ '`' => '鏞',
+ 'a' => '鏇',
+ 'b' => '鏏',
+ 'c' => '鏂',
+ 'd' => '鏚',
+ 'e' => '鏐',
+ 'f' => '鏹',
+ 'g' => '鏬',
+ 'h' => '鏌',
+ 'i' => '鏙',
+ 'j' => '鎩',
+ 'k' => '鏦',
+ 'l' => '鏊',
+ 'm' => '鏔',
+ 'n' => '鏮',
+ 'o' => '鏣',
+ 'p' => '鏕',
+ 'q' => '鏄',
+ 'r' => '鏎',
+ 's' => '鏀',
+ 't' => '鏒',
+ 'u' => '鏧',
+ 'v' => '镽',
+ 'w' => '闚',
+ 'x' => '闛',
+ 'y' => '雡',
+ 'z' => '霩',
+ '{' => '霫',
+ '|' => '霬',
+ '}' => '霨',
+ '~' => '霦',
+ '' => '鞳',
+ '' => '鞷',
+ '' => '鞶',
+ '' => '韝',
+ '' => '韞',
+ '' => '韟',
+ '' => '顜',
+ '' => '顙',
+ '' => '顝',
+ '' => '顗',
+ '' => '颿',
+ '' => '颽',
+ '' => '颻',
+ '' => '颾',
+ '' => '饈',
+ '' => '饇',
+ '' => '饃',
+ '' => '馦',
+ '' => '馧',
+ '' => '騚',
+ '' => '騕',
+ '' => '騥',
+ '' => '騝',
+ '' => '騤',
+ '' => '騛',
+ '' => '騢',
+ '' => '騠',
+ '' => '騧',
+ '' => '騣',
+ '' => '騞',
+ '' => '騜',
+ '' => '騔',
+ '' => '髂',
+ '' => '鬋',
+ '' => '鬊',
+ '' => '鬎',
+ '' => '鬌',
+ '' => '鬷',
+ '' => '鯪',
+ '' => '鯫',
+ '' => '鯠',
+ '' => '鯞',
+ '' => '鯤',
+ '' => '鯦',
+ '' => '鯢',
+ '' => '鯰',
+ '' => '鯔',
+ '' => '鯗',
+ '' => '鯬',
+ '' => '鯜',
+ '' => '鯙',
+ '' => '鯥',
+ '' => '鯕',
+ '' => '鯡',
+ '' => '鯚',
+ '' => '鵷',
+ '' => '鶁',
+ '' => '鶊',
+ '' => '鶄',
+ '' => '鶈',
+ '' => '鵱',
+ '' => '鶀',
+ '' => '鵸',
+ '' => '鶆',
+ '' => '鶋',
+ '' => '鶌',
+ '' => '鵽',
+ '' => '鵫',
+ '' => '鵴',
+ '' => '鵵',
+ '' => '鵰',
+ '' => '鵩',
+ '' => '鶅',
+ '' => '鵳',
+ '' => '鵻',
+ '' => '鶂',
+ '' => '鵯',
+ '' => '鵹',
+ '' => '鵿',
+ '' => '鶇',
+ '' => '鵨',
+ '' => '麔',
+ '' => '麑',
+ '' => '黀',
+ '' => '黼',
+ '' => '鼭',
+ '' => '齀',
+ '' => '齁',
+ '' => '齍',
+ '' => '齖',
+ '' => '齗',
+ '' => '齘',
+ '' => '匷',
+ '' => '嚲',
+ '@' => '嚵',
+ 'A' => '嚳',
+ 'B' => '壣',
+ 'C' => '孅',
+ 'D' => '巆',
+ 'E' => '巇',
+ 'F' => '廮',
+ 'G' => '廯',
+ 'H' => '忀',
+ 'I' => '忁',
+ 'J' => '懹',
+ 'K' => '攗',
+ 'L' => '攖',
+ 'M' => '攕',
+ 'N' => '攓',
+ 'O' => '旟',
+ 'P' => '曨',
+ 'Q' => '曣',
+ 'R' => '曤',
+ 'S' => '櫳',
+ 'T' => '櫰',
+ 'U' => '櫪',
+ 'V' => '櫨',
+ 'W' => '櫹',
+ 'X' => '櫱',
+ 'Y' => '櫮',
+ 'Z' => '櫯',
+ '[' => '瀼',
+ '\\' => '瀵',
+ ']' => '瀯',
+ '^' => '瀷',
+ '_' => '瀴',
+ '`' => '瀱',
+ 'a' => '灂',
+ 'b' => '瀸',
+ 'c' => '瀿',
+ 'd' => '瀺',
+ 'e' => '瀹',
+ 'f' => '灀',
+ 'g' => '瀻',
+ 'h' => '瀳',
+ 'i' => '灁',
+ 'j' => '爓',
+ 'k' => '爔',
+ 'l' => '犨',
+ 'm' => '獽',
+ 'n' => '獼',
+ 'o' => '璺',
+ 'p' => '皫',
+ 'q' => '皪',
+ 'r' => '皾',
+ 's' => '盭',
+ 't' => '矌',
+ 'u' => '矎',
+ 'v' => '矏',
+ 'w' => '矍',
+ 'x' => '矲',
+ 'y' => '礥',
+ 'z' => '礣',
+ '{' => '礧',
+ '|' => '礨',
+ '}' => '礤',
+ '~' => '礩',
+ '' => '禲',
+ '' => '穮',
+ '' => '穬',
+ '' => '穭',
+ '' => '竷',
+ '' => '籉',
+ '' => '籈',
+ '' => '籊',
+ '' => '籇',
+ '' => '籅',
+ '' => '糮',
+ '' => '繻',
+ '' => '繾',
+ '' => '纁',
+ '' => '纀',
+ '' => '羺',
+ '' => '翿',
+ '' => '聹',
+ '' => '臛',
+ '' => '臙',
+ '' => '舋',
+ '' => '艨',
+ '' => '艩',
+ '' => '蘢',
+ '' => '藿',
+ '' => '蘁',
+ '' => '藾',
+ '' => '蘛',
+ '' => '蘀',
+ '' => '藶',
+ '' => '蘄',
+ '' => '蘉',
+ '' => '蘅',
+ '' => '蘌',
+ '' => '藽',
+ '' => '蠙',
+ '' => '蠐',
+ '' => '蠑',
+ '' => '蠗',
+ '' => '蠓',
+ '' => '蠖',
+ '' => '襣',
+ '' => '襦',
+ '' => '覹',
+ '' => '觷',
+ '' => '譠',
+ '' => '譪',
+ '' => '譝',
+ '' => '譨',
+ '' => '譣',
+ '' => '譥',
+ '' => '譧',
+ '' => '譭',
+ '' => '趮',
+ '' => '躆',
+ '' => '躈',
+ '' => '躄',
+ '' => '轙',
+ '' => '轖',
+ '' => '轗',
+ '' => '轕',
+ '' => '轘',
+ '' => '轚',
+ '' => '邍',
+ '' => '酃',
+ '' => '酁',
+ '' => '醷',
+ '' => '醵',
+ '' => '醲',
+ '' => '醳',
+ '' => '鐋',
+ '' => '鐓',
+ '' => '鏻',
+ '' => '鐠',
+ '' => '鐏',
+ '' => '鐔',
+ '' => '鏾',
+ '' => '鐕',
+ '' => '鐐',
+ '' => '鐨',
+ '' => '鐙',
+ '' => '鐍',
+ '' => '鏵',
+ '' => '鐀',
+ '' => '鏷',
+ '' => '鐇',
+ '' => '鐎',
+ '' => '鐖',
+ '' => '鐒',
+ '' => '鏺',
+ '' => '鐉',
+ '' => '鏸',
+ '' => '鐊',
+ '' => '鏿',
+ '@' => '鏼',
+ 'A' => '鐌',
+ 'B' => '鏶',
+ 'C' => '鐑',
+ 'D' => '鐆',
+ 'E' => '闞',
+ 'F' => '闠',
+ 'G' => '闟',
+ 'H' => '霮',
+ 'I' => '霯',
+ 'J' => '鞹',
+ 'K' => '鞻',
+ 'L' => '韽',
+ 'M' => '韾',
+ 'N' => '顠',
+ 'O' => '顢',
+ 'P' => '顣',
+ 'Q' => '顟',
+ 'R' => '飁',
+ 'S' => '飂',
+ 'T' => '饐',
+ 'U' => '饎',
+ 'V' => '饙',
+ 'W' => '饌',
+ 'X' => '饋',
+ 'Y' => '饓',
+ 'Z' => '騲',
+ '[' => '騴',
+ '\\' => '騱',
+ ']' => '騬',
+ '^' => '騪',
+ '_' => '騶',
+ '`' => '騩',
+ 'a' => '騮',
+ 'b' => '騸',
+ 'c' => '騭',
+ 'd' => '髇',
+ 'e' => '髊',
+ 'f' => '髆',
+ 'g' => '鬐',
+ 'h' => '鬒',
+ 'i' => '鬑',
+ 'j' => '鰋',
+ 'k' => '鰈',
+ 'l' => '鯷',
+ 'm' => '鰅',
+ 'n' => '鰒',
+ 'o' => '鯸',
+ 'p' => '鱀',
+ 'q' => '鰇',
+ 'r' => '鰎',
+ 's' => '鰆',
+ 't' => '鰗',
+ 'u' => '鰔',
+ 'v' => '鰉',
+ 'w' => '鶟',
+ 'x' => '鶙',
+ 'y' => '鶤',
+ 'z' => '鶝',
+ '{' => '鶒',
+ '|' => '鶘',
+ '}' => '鶐',
+ '~' => '鶛',
+ '' => '鶠',
+ '' => '鶔',
+ '' => '鶜',
+ '' => '鶪',
+ '' => '鶗',
+ '' => '鶡',
+ '' => '鶚',
+ '' => '鶢',
+ '' => '鶨',
+ '' => '鶞',
+ '' => '鶣',
+ '' => '鶿',
+ '' => '鶩',
+ '' => '鶖',
+ '' => '鶦',
+ '' => '鶧',
+ '' => '麙',
+ '' => '麛',
+ '' => '麚',
+ '' => '黥',
+ '' => '黤',
+ '' => '黧',
+ '' => '黦',
+ '' => '鼰',
+ '' => '鼮',
+ '' => '齛',
+ '' => '齠',
+ '' => '齞',
+ '' => '齝',
+ '' => '齙',
+ '' => '龑',
+ '' => '儺',
+ '' => '儹',
+ '' => '劘',
+ '' => '劗',
+ '' => '囃',
+ '' => '嚽',
+ '' => '嚾',
+ '' => '孈',
+ '' => '孇',
+ '' => '巋',
+ '' => '巏',
+ '' => '廱',
+ '' => '懽',
+ '' => '攛',
+ '' => '欂',
+ '' => '櫼',
+ '' => '欃',
+ '' => '櫸',
+ '' => '欀',
+ '' => '灃',
+ '' => '灄',
+ '' => '灊',
+ '' => '灈',
+ '' => '灉',
+ '' => '灅',
+ '' => '灆',
+ '' => '爝',
+ '' => '爚',
+ '' => '爙',
+ '' => '獾',
+ '' => '甗',
+ '' => '癪',
+ '' => '矐',
+ '' => '礭',
+ '' => '礱',
+ '' => '礯',
+ '' => '籔',
+ '' => '籓',
+ '' => '糲',
+ '' => '纊',
+ '' => '纇',
+ '' => '纈',
+ '' => '纋',
+ '' => '纆',
+ '' => '纍',
+ '' => '罍',
+ '' => '羻',
+ '' => '耰',
+ '' => '臝',
+ '' => '蘘',
+ '' => '蘪',
+ '' => '蘦',
+ '' => '蘟',
+ '' => '蘣',
+ '' => '蘜',
+ '' => '蘙',
+ '' => '蘧',
+ '' => '蘮',
+ '' => '蘡',
+ '' => '蘠',
+ '' => '蘩',
+ '' => '蘞',
+ '' => '蘥',
+ '@' => '蠩',
+ 'A' => '蠝',
+ 'B' => '蠛',
+ 'C' => '蠠',
+ 'D' => '蠤',
+ 'E' => '蠜',
+ 'F' => '蠫',
+ 'G' => '衊',
+ 'H' => '襭',
+ 'I' => '襩',
+ 'J' => '襮',
+ 'K' => '襫',
+ 'L' => '觺',
+ 'M' => '譹',
+ 'N' => '譸',
+ 'O' => '譅',
+ 'P' => '譺',
+ 'Q' => '譻',
+ 'R' => '贐',
+ 'S' => '贔',
+ 'T' => '趯',
+ 'U' => '躎',
+ 'V' => '躌',
+ 'W' => '轞',
+ 'X' => '轛',
+ 'Y' => '轝',
+ 'Z' => '酆',
+ '[' => '酄',
+ '\\' => '酅',
+ ']' => '醹',
+ '^' => '鐿',
+ '_' => '鐻',
+ '`' => '鐶',
+ 'a' => '鐩',
+ 'b' => '鐽',
+ 'c' => '鐼',
+ 'd' => '鐰',
+ 'e' => '鐹',
+ 'f' => '鐪',
+ 'g' => '鐷',
+ 'h' => '鐬',
+ 'i' => '鑀',
+ 'j' => '鐱',
+ 'k' => '闥',
+ 'l' => '闤',
+ 'm' => '闣',
+ 'n' => '霵',
+ 'o' => '霺',
+ 'p' => '鞿',
+ 'q' => '韡',
+ 'r' => '顤',
+ 's' => '飉',
+ 't' => '飆',
+ 'u' => '飀',
+ 'v' => '饘',
+ 'w' => '饖',
+ 'x' => '騹',
+ 'y' => '騽',
+ 'z' => '驆',
+ '{' => '驄',
+ '|' => '驂',
+ '}' => '驁',
+ '~' => '騺',
+ '' => '騿',
+ '' => '髍',
+ '' => '鬕',
+ '' => '鬗',
+ '' => '鬘',
+ '' => '鬖',
+ '' => '鬺',
+ '' => '魒',
+ '' => '鰫',
+ '' => '鰝',
+ '' => '鰜',
+ '' => '鰬',
+ '' => '鰣',
+ '' => '鰨',
+ '' => '鰩',
+ '' => '鰤',
+ '' => '鰡',
+ '' => '鶷',
+ '' => '鶶',
+ '' => '鶼',
+ '' => '鷁',
+ '' => '鷇',
+ '' => '鷊',
+ '' => '鷏',
+ '' => '鶾',
+ '' => '鷅',
+ '' => '鷃',
+ '' => '鶻',
+ '' => '鶵',
+ '' => '鷎',
+ '' => '鶹',
+ '' => '鶺',
+ '' => '鶬',
+ '' => '鷈',
+ '' => '鶱',
+ '' => '鶭',
+ '' => '鷌',
+ '' => '鶳',
+ '' => '鷍',
+ '' => '鶲',
+ '' => '鹺',
+ '' => '麜',
+ '' => '黫',
+ '' => '黮',
+ '' => '黭',
+ '' => '鼛',
+ '' => '鼘',
+ '' => '鼚',
+ '' => '鼱',
+ '' => '齎',
+ '' => '齥',
+ '' => '齤',
+ '' => '龒',
+ '' => '亹',
+ '' => '囆',
+ '' => '囅',
+ '' => '囋',
+ '' => '奱',
+ '' => '孋',
+ '' => '孌',
+ '' => '巕',
+ '' => '巑',
+ '' => '廲',
+ '' => '攡',
+ '' => '攠',
+ '' => '攦',
+ '' => '攢',
+ '' => '欋',
+ '' => '欈',
+ '' => '欉',
+ '' => '氍',
+ '' => '灕',
+ '' => '灖',
+ '' => '灗',
+ '' => '灒',
+ '' => '爞',
+ '' => '爟',
+ '' => '犩',
+ '' => '獿',
+ '' => '瓘',
+ '' => '瓕',
+ '' => '瓙',
+ '' => '瓗',
+ '' => '癭',
+ '' => '皭',
+ '' => '礵',
+ '' => '禴',
+ '' => '穰',
+ '' => '穱',
+ '' => '籗',
+ '' => '籜',
+ '' => '籙',
+ '' => '籛',
+ '' => '籚',
+ '@' => '糴',
+ 'A' => '糱',
+ 'B' => '纑',
+ 'C' => '罏',
+ 'D' => '羇',
+ 'E' => '臞',
+ 'F' => '艫',
+ 'G' => '蘴',
+ 'H' => '蘵',
+ 'I' => '蘳',
+ 'J' => '蘬',
+ 'K' => '蘲',
+ 'L' => '蘶',
+ 'M' => '蠬',
+ 'N' => '蠨',
+ 'O' => '蠦',
+ 'P' => '蠪',
+ 'Q' => '蠥',
+ 'R' => '襱',
+ 'S' => '覿',
+ 'T' => '覾',
+ 'U' => '觻',
+ 'V' => '譾',
+ 'W' => '讄',
+ 'X' => '讂',
+ 'Y' => '讆',
+ 'Z' => '讅',
+ '[' => '譿',
+ '\\' => '贕',
+ ']' => '躕',
+ '^' => '躔',
+ '_' => '躚',
+ '`' => '躒',
+ 'a' => '躐',
+ 'b' => '躖',
+ 'c' => '躗',
+ 'd' => '轠',
+ 'e' => '轢',
+ 'f' => '酇',
+ 'g' => '鑌',
+ 'h' => '鑐',
+ 'i' => '鑊',
+ 'j' => '鑋',
+ 'k' => '鑏',
+ 'l' => '鑇',
+ 'm' => '鑅',
+ 'n' => '鑈',
+ 'o' => '鑉',
+ 'p' => '鑆',
+ 'q' => '霿',
+ 'r' => '韣',
+ 's' => '顪',
+ 't' => '顩',
+ 'u' => '飋',
+ 'v' => '饔',
+ 'w' => '饛',
+ 'x' => '驎',
+ 'y' => '驓',
+ 'z' => '驔',
+ '{' => '驌',
+ '|' => '驏',
+ '}' => '驈',
+ '~' => '驊',
+ '' => '驉',
+ '' => '驒',
+ '' => '驐',
+ '' => '髐',
+ '' => '鬙',
+ '' => '鬫',
+ '' => '鬻',
+ '' => '魖',
+ '' => '魕',
+ '' => '鱆',
+ '' => '鱈',
+ '' => '鰿',
+ '' => '鱄',
+ '' => '鰹',
+ '' => '鰳',
+ '' => '鱁',
+ '' => '鰼',
+ '' => '鰷',
+ '' => '鰴',
+ '' => '鰲',
+ '' => '鰽',
+ '' => '鰶',
+ '' => '鷛',
+ '' => '鷒',
+ '' => '鷞',
+ '' => '鷚',
+ '' => '鷋',
+ '' => '鷐',
+ '' => '鷜',
+ '' => '鷑',
+ '' => '鷟',
+ '' => '鷩',
+ '' => '鷙',
+ '' => '鷘',
+ '' => '鷖',
+ '' => '鷵',
+ '' => '鷕',
+ '' => '鷝',
+ '' => '麶',
+ '' => '黰',
+ '' => '鼵',
+ '' => '鼳',
+ '' => '鼲',
+ '' => '齂',
+ '' => '齫',
+ '' => '龕',
+ '' => '龢',
+ '' => '儽',
+ '' => '劙',
+ '' => '壨',
+ '' => '壧',
+ '' => '奲',
+ '' => '孍',
+ '' => '巘',
+ '' => '蠯',
+ '' => '彏',
+ '' => '戁',
+ '' => '戃',
+ '' => '戄',
+ '' => '攩',
+ '' => '攥',
+ '' => '斖',
+ '' => '曫',
+ '' => '欑',
+ '' => '欒',
+ '' => '欏',
+ '' => '毊',
+ '' => '灛',
+ '' => '灚',
+ '' => '爢',
+ '' => '玂',
+ '' => '玁',
+ '' => '玃',
+ '' => '癰',
+ '' => '矔',
+ '' => '籧',
+ '' => '籦',
+ '' => '纕',
+ '' => '艬',
+ '' => '蘺',
+ '' => '虀',
+ '' => '蘹',
+ '' => '蘼',
+ '' => '蘱',
+ '' => '蘻',
+ '' => '蘾',
+ '' => '蠰',
+ '' => '蠲',
+ '' => '蠮',
+ '' => '蠳',
+ '' => '襶',
+ '' => '襴',
+ '' => '襳',
+ '' => '觾',
+ '@' => '讌',
+ 'A' => '讎',
+ 'B' => '讋',
+ 'C' => '讈',
+ 'D' => '豅',
+ 'E' => '贙',
+ 'F' => '躘',
+ 'G' => '轤',
+ 'H' => '轣',
+ 'I' => '醼',
+ 'J' => '鑢',
+ 'K' => '鑕',
+ 'L' => '鑝',
+ 'M' => '鑗',
+ 'N' => '鑞',
+ 'O' => '韄',
+ 'P' => '韅',
+ 'Q' => '頀',
+ 'R' => '驖',
+ 'S' => '驙',
+ 'T' => '鬞',
+ 'U' => '鬟',
+ 'V' => '鬠',
+ 'W' => '鱒',
+ 'X' => '鱘',
+ 'Y' => '鱐',
+ 'Z' => '鱊',
+ '[' => '鱍',
+ '\\' => '鱋',
+ ']' => '鱕',
+ '^' => '鱙',
+ '_' => '鱌',
+ '`' => '鱎',
+ 'a' => '鷻',
+ 'b' => '鷷',
+ 'c' => '鷯',
+ 'd' => '鷣',
+ 'e' => '鷫',
+ 'f' => '鷸',
+ 'g' => '鷤',
+ 'h' => '鷶',
+ 'i' => '鷡',
+ 'j' => '鷮',
+ 'k' => '鷦',
+ 'l' => '鷲',
+ 'm' => '鷰',
+ 'n' => '鷢',
+ 'o' => '鷬',
+ 'p' => '鷴',
+ 'q' => '鷳',
+ 'r' => '鷨',
+ 's' => '鷭',
+ 't' => '黂',
+ 'u' => '黐',
+ 'v' => '黲',
+ 'w' => '黳',
+ 'x' => '鼆',
+ 'y' => '鼜',
+ 'z' => '鼸',
+ '{' => '鼷',
+ '|' => '鼶',
+ '}' => '齃',
+ '~' => '齏',
+ '' => '齱',
+ '' => '齰',
+ '' => '齮',
+ '' => '齯',
+ '' => '囓',
+ '' => '囍',
+ '' => '孎',
+ '' => '屭',
+ '' => '攭',
+ '' => '曭',
+ '' => '曮',
+ '' => '欓',
+ '' => '灟',
+ '' => '灡',
+ '' => '灝',
+ '' => '灠',
+ '' => '爣',
+ '' => '瓛',
+ '' => '瓥',
+ '' => '矕',
+ '' => '礸',
+ '' => '禷',
+ '' => '禶',
+ '' => '籪',
+ '' => '纗',
+ '' => '羉',
+ '' => '艭',
+ '' => '虃',
+ '' => '蠸',
+ '' => '蠷',
+ '' => '蠵',
+ '' => '衋',
+ '' => '讔',
+ '' => '讕',
+ '' => '躞',
+ '' => '躟',
+ '' => '躠',
+ '' => '躝',
+ '' => '醾',
+ '' => '醽',
+ '' => '釂',
+ '' => '鑫',
+ '' => '鑨',
+ '' => '鑩',
+ '' => '雥',
+ '' => '靆',
+ '' => '靃',
+ '' => '靇',
+ '' => '韇',
+ '' => '韥',
+ '' => '驞',
+ '' => '髕',
+ '' => '魙',
+ '' => '鱣',
+ '' => '鱧',
+ '' => '鱦',
+ '' => '鱢',
+ '' => '鱞',
+ '' => '鱠',
+ '' => '鸂',
+ '' => '鷾',
+ '' => '鸇',
+ '' => '鸃',
+ '' => '鸆',
+ '' => '鸅',
+ '' => '鸀',
+ '' => '鸁',
+ '' => '鸉',
+ '' => '鷿',
+ '' => '鷽',
+ '' => '鸄',
+ '' => '麠',
+ '' => '鼞',
+ '' => '齆',
+ '' => '齴',
+ '' => '齵',
+ '' => '齶',
+ '' => '囔',
+ '' => '攮',
+ '' => '斸',
+ '' => '欘',
+ '' => '欙',
+ '' => '欗',
+ '' => '欚',
+ '' => '灢',
+ '' => '爦',
+ '' => '犪',
+ '' => '矘',
+ '' => '矙',
+ '' => '礹',
+ '' => '籩',
+ '' => '籫',
+ '' => '糶',
+ '' => '纚',
+ '@' => '纘',
+ 'A' => '纛',
+ 'B' => '纙',
+ 'C' => '臠',
+ 'D' => '臡',
+ 'E' => '虆',
+ 'F' => '虇',
+ 'G' => '虈',
+ 'H' => '襹',
+ 'I' => '襺',
+ 'J' => '襼',
+ 'K' => '襻',
+ 'L' => '觿',
+ 'M' => '讘',
+ 'N' => '讙',
+ 'O' => '躥',
+ 'P' => '躤',
+ 'Q' => '躣',
+ 'R' => '鑮',
+ 'S' => '鑭',
+ 'T' => '鑯',
+ 'U' => '鑱',
+ 'V' => '鑳',
+ 'W' => '靉',
+ 'X' => '顲',
+ 'Y' => '饟',
+ 'Z' => '鱨',
+ '[' => '鱮',
+ '\\' => '鱭',
+ ']' => '鸋',
+ '^' => '鸍',
+ '_' => '鸐',
+ '`' => '鸏',
+ 'a' => '鸒',
+ 'b' => '鸑',
+ 'c' => '麡',
+ 'd' => '黵',
+ 'e' => '鼉',
+ 'f' => '齇',
+ 'g' => '齸',
+ 'h' => '齻',
+ 'i' => '齺',
+ 'j' => '齹',
+ 'k' => '圞',
+ 'l' => '灦',
+ 'm' => '籯',
+ 'n' => '蠼',
+ 'o' => '趲',
+ 'p' => '躦',
+ 'q' => '釃',
+ 'r' => '鑴',
+ 's' => '鑸',
+ 't' => '鑶',
+ 'u' => '鑵',
+ 'v' => '驠',
+ 'w' => '鱴',
+ 'x' => '鱳',
+ 'y' => '鱱',
+ 'z' => '鱵',
+ '{' => '鸔',
+ '|' => '鸓',
+ '}' => '黶',
+ '~' => '鼊',
+ '' => '龤',
+ '' => '灨',
+ '' => '灥',
+ '' => '糷',
+ '' => '虪',
+ '' => '蠾',
+ '' => '蠽',
+ '' => '蠿',
+ '' => '讞',
+ '' => '貜',
+ '' => '躩',
+ '' => '軉',
+ '' => '靋',
+ '' => '顳',
+ '' => '顴',
+ '' => '飌',
+ '' => '饡',
+ '' => '馫',
+ '' => '驤',
+ '' => '驦',
+ '' => '驧',
+ '' => '鬤',
+ '' => '鸕',
+ '' => '鸗',
+ '' => '齈',
+ '' => '戇',
+ '' => '欞',
+ '' => '爧',
+ '' => '虌',
+ '' => '躨',
+ '' => '钂',
+ '' => '钀',
+ '' => '钁',
+ '' => '驩',
+ '' => '驨',
+ '' => '鬮',
+ '' => '鸙',
+ '' => '爩',
+ '' => '虋',
+ '' => '讟',
+ '' => '钃',
+ '' => '鱹',
+ '' => '麷',
+ '' => '癵',
+ '' => '驫',
+ '' => '鱺',
+ '' => '鸝',
+ '' => '灩',
+ '' => '灪',
+ '' => '麤',
+ '' => '齾',
+ '' => '齉',
+ '' => '龘',
+);
+
+$result =& $data;
+unset($data);
+
+return $result;
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php
new file mode 100644
index 00000000..a014e4b4
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1006.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1006.php
new file mode 100644
index 00000000..2b5e7beb
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1006.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php
new file mode 100644
index 00000000..aba455b5
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php
new file mode 100644
index 00000000..e8e23703
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp437.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp437.php
new file mode 100644
index 00000000..e3ebb45c
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp437.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php
new file mode 100644
index 00000000..3771c8f6
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php
new file mode 100644
index 00000000..2d67d33f
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp775.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp775.php
new file mode 100644
index 00000000..1fbc4cdc
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp775.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php
new file mode 100644
index 00000000..0b314c80
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp852.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp852.php
new file mode 100644
index 00000000..f8c318ca
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp852.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php
new file mode 100644
index 00000000..48440ba1
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php
new file mode 100644
index 00000000..c9cac0c3
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php
new file mode 100644
index 00000000..3e7770ad
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp860.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp860.php
new file mode 100644
index 00000000..2a52d473
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp860.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php
new file mode 100644
index 00000000..4ba6573c
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp862.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp862.php
new file mode 100644
index 00000000..d2a29a22
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp862.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp863.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp863.php
new file mode 100644
index 00000000..1f36b9a2
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp863.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php
new file mode 100644
index 00000000..953e4635
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php
new file mode 100644
index 00000000..2668bcc4
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php
new file mode 100644
index 00000000..a7b47f8f
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php
new file mode 100644
index 00000000..0f040548
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php
new file mode 100644
index 00000000..47994569
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php
new file mode 100644
index 00000000..85616453
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php
new file mode 100644
index 00000000..0bf828ff
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php
new file mode 100644
index 00000000..a593d05d
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php
new file mode 100644
index 00000000..d4e99f1f
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php
new file mode 100644
index 00000000..267b1906
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php
new file mode 100644
index 00000000..d7a217c9
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php
new file mode 100644
index 00000000..d60f6473
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php
new file mode 100644
index 00000000..d69220bf
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-13.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-13.php
new file mode 100644
index 00000000..838783f1
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-13.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php
new file mode 100644
index 00000000..65a48ee3
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php
new file mode 100644
index 00000000..42e50e0f
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-16.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-16.php
new file mode 100644
index 00000000..46758a6a
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-16.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php
new file mode 100644
index 00000000..5f23f515
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php
new file mode 100644
index 00000000..b31bb83f
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-4.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-4.php
new file mode 100644
index 00000000..9cbf9f37
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-4.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php
new file mode 100644
index 00000000..fd038823
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php
new file mode 100644
index 00000000..ed6f72f3
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php
new file mode 100644
index 00000000..cf723ac6
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php
new file mode 100644
index 00000000..c978731a
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php
new file mode 100644
index 00000000..2a3e36a4
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-r.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-r.php
new file mode 100644
index 00000000..d83c2125
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-r.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php
new file mode 100644
index 00000000..dbbf96be
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.us-ascii.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.us-ascii.php
new file mode 100644
index 00000000..94a93b28
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.us-ascii.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1250.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1250.php
new file mode 100644
index 00000000..d1d5e6f2
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1250.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1251.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1251.php
new file mode 100644
index 00000000..f422a71f
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1251.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php
new file mode 100644
index 00000000..ba6d203d
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1253.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1253.php
new file mode 100644
index 00000000..c04dc8f0
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1253.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php
new file mode 100644
index 00000000..1cfadcf2
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php
new file mode 100644
index 00000000..f73cbb6f
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php
new file mode 100644
index 00000000..953704f6
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php
new file mode 100644
index 00000000..78580ece
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php
new file mode 100644
index 00000000..de1609d8
Binary files /dev/null and b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php differ
diff --git a/plugins/vendor/symfony/polyfill-iconv/Resources/charset/translit.php b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/translit.php
new file mode 100644
index 00000000..f322ff0d
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-iconv/Resources/charset/translit.php
@@ -0,0 +1,4106 @@
+ 'μ',
+ '¼' => ' 1⁄4 ',
+ '½' => ' 1⁄2 ',
+ '¾' => ' 3⁄4 ',
+ 'IJ' => 'IJ',
+ 'ij' => 'ij',
+ 'Ŀ' => 'L·',
+ 'ŀ' => 'l·',
+ 'ʼn' => 'ʼn',
+ 'ſ' => 's',
+ 'DŽ' => 'DŽ',
+ 'Dž' => 'Dž',
+ 'dž' => 'dž',
+ 'LJ' => 'LJ',
+ 'Lj' => 'Lj',
+ 'lj' => 'lj',
+ 'NJ' => 'NJ',
+ 'Nj' => 'Nj',
+ 'nj' => 'nj',
+ 'DZ' => 'DZ',
+ 'Dz' => 'Dz',
+ 'dz' => 'dz',
+ 'ϐ' => 'β',
+ 'ϑ' => 'θ',
+ 'ϒ' => 'Υ',
+ 'ϕ' => 'φ',
+ 'ϖ' => 'π',
+ 'ϰ' => 'κ',
+ 'ϱ' => 'ρ',
+ 'ϲ' => 'ς',
+ 'ϴ' => 'Θ',
+ 'ϵ' => 'ε',
+ 'Ϲ' => 'Σ',
+ 'և' => 'եւ',
+ 'ٵ' => 'اٴ',
+ 'ٶ' => 'وٴ',
+ 'ٷ' => 'ۇٴ',
+ 'ٸ' => 'يٴ',
+ 'ำ' => 'ํา',
+ 'ຳ' => 'ໍາ',
+ 'ໜ' => 'ຫນ',
+ 'ໝ' => 'ຫມ',
+ 'ཷ' => 'ྲཱྀ',
+ 'ཹ' => 'ླཱྀ',
+ 'ẚ' => 'aʾ',
+ '․' => '.',
+ '‥' => '..',
+ '…' => '...',
+ '″' => '′′',
+ '‴' => '′′′',
+ '‶' => '‵‵',
+ '‷' => '‵‵‵',
+ '‼' => '!!',
+ '⁇' => '??',
+ '⁈' => '?!',
+ '⁉' => '!?',
+ '⁗' => '′′′′',
+ '₨' => 'Rs',
+ '℀' => 'a/c',
+ '℁' => 'a/s',
+ 'ℂ' => 'C',
+ '℃' => '°C',
+ '℅' => 'c/o',
+ '℆' => 'c/u',
+ 'ℇ' => 'Ɛ',
+ '℉' => '°F',
+ 'ℊ' => 'g',
+ 'ℋ' => 'H',
+ 'ℌ' => 'H',
+ 'ℍ' => 'H',
+ 'ℎ' => 'h',
+ 'ℏ' => 'ħ',
+ 'ℐ' => 'I',
+ 'ℑ' => 'I',
+ 'ℒ' => 'L',
+ 'ℓ' => 'l',
+ 'ℕ' => 'N',
+ '№' => 'No',
+ 'ℙ' => 'P',
+ 'ℚ' => 'Q',
+ 'ℛ' => 'R',
+ 'ℜ' => 'R',
+ 'ℝ' => 'R',
+ '℡' => 'TEL',
+ 'ℤ' => 'Z',
+ 'ℨ' => 'Z',
+ 'ℬ' => 'B',
+ 'ℭ' => 'C',
+ 'ℯ' => 'e',
+ 'ℰ' => 'E',
+ 'ℱ' => 'F',
+ 'ℳ' => 'M',
+ 'ℴ' => 'o',
+ 'ℵ' => 'א',
+ 'ℶ' => 'ב',
+ 'ℷ' => 'ג',
+ 'ℸ' => 'ד',
+ 'ℹ' => 'i',
+ '℻' => 'FAX',
+ 'ℼ' => 'π',
+ 'ℽ' => 'γ',
+ 'ℾ' => 'Γ',
+ 'ℿ' => 'Π',
+ '⅀' => '∑',
+ 'ⅅ' => 'D',
+ 'ⅆ' => 'd',
+ 'ⅇ' => 'e',
+ 'ⅈ' => 'i',
+ 'ⅉ' => 'j',
+ '⅐' => ' 1⁄7 ',
+ '⅑' => ' 1⁄9 ',
+ '⅒' => ' 1⁄10 ',
+ '⅓' => ' 1⁄3 ',
+ '⅔' => ' 2⁄3 ',
+ '⅕' => ' 1⁄5 ',
+ '⅖' => ' 2⁄5 ',
+ '⅗' => ' 3⁄5 ',
+ '⅘' => ' 4⁄5 ',
+ '⅙' => ' 1⁄6 ',
+ '⅚' => ' 5⁄6 ',
+ '⅛' => ' 1⁄8 ',
+ '⅜' => ' 3⁄8 ',
+ '⅝' => ' 5⁄8 ',
+ '⅞' => ' 7⁄8 ',
+ '⅟' => ' 1⁄ ',
+ 'Ⅰ' => 'I',
+ 'Ⅱ' => 'II',
+ 'Ⅲ' => 'III',
+ 'Ⅳ' => 'IV',
+ 'Ⅴ' => 'V',
+ 'Ⅵ' => 'VI',
+ 'Ⅶ' => 'VII',
+ 'Ⅷ' => 'VIII',
+ 'Ⅸ' => 'IX',
+ 'Ⅹ' => 'X',
+ 'Ⅺ' => 'XI',
+ 'Ⅻ' => 'XII',
+ 'Ⅼ' => 'L',
+ 'Ⅽ' => 'C',
+ 'Ⅾ' => 'D',
+ 'Ⅿ' => 'M',
+ 'ⅰ' => 'i',
+ 'ⅱ' => 'ii',
+ 'ⅲ' => 'iii',
+ 'ⅳ' => 'iv',
+ 'ⅴ' => 'v',
+ 'ⅵ' => 'vi',
+ 'ⅶ' => 'vii',
+ 'ⅷ' => 'viii',
+ 'ⅸ' => 'ix',
+ 'ⅹ' => 'x',
+ 'ⅺ' => 'xi',
+ 'ⅻ' => 'xii',
+ 'ⅼ' => 'l',
+ 'ⅽ' => 'c',
+ 'ⅾ' => 'd',
+ 'ⅿ' => 'm',
+ '↉' => ' 0⁄3 ',
+ '∬' => '∫∫',
+ '∭' => '∫∫∫',
+ '∯' => '∮∮',
+ '∰' => '∮∮∮',
+ '①' => '(1)',
+ '②' => '(2)',
+ '③' => '(3)',
+ '④' => '(4)',
+ '⑤' => '(5)',
+ '⑥' => '(6)',
+ '⑦' => '(7)',
+ '⑧' => '(8)',
+ '⑨' => '(9)',
+ '⑩' => '(10)',
+ '⑪' => '(11)',
+ '⑫' => '(12)',
+ '⑬' => '(13)',
+ '⑭' => '(14)',
+ '⑮' => '(15)',
+ '⑯' => '(16)',
+ '⑰' => '(17)',
+ '⑱' => '(18)',
+ '⑲' => '(19)',
+ '⑳' => '(20)',
+ '⑴' => '(1)',
+ '⑵' => '(2)',
+ '⑶' => '(3)',
+ '⑷' => '(4)',
+ '⑸' => '(5)',
+ '⑹' => '(6)',
+ '⑺' => '(7)',
+ '⑻' => '(8)',
+ '⑼' => '(9)',
+ '⑽' => '(10)',
+ '⑾' => '(11)',
+ '⑿' => '(12)',
+ '⒀' => '(13)',
+ '⒁' => '(14)',
+ '⒂' => '(15)',
+ '⒃' => '(16)',
+ '⒄' => '(17)',
+ '⒅' => '(18)',
+ '⒆' => '(19)',
+ '⒇' => '(20)',
+ '⒈' => '1.',
+ '⒉' => '2.',
+ '⒊' => '3.',
+ '⒋' => '4.',
+ '⒌' => '5.',
+ '⒍' => '6.',
+ '⒎' => '7.',
+ '⒏' => '8.',
+ '⒐' => '9.',
+ '⒑' => '10.',
+ '⒒' => '11.',
+ '⒓' => '12.',
+ '⒔' => '13.',
+ '⒕' => '14.',
+ '⒖' => '15.',
+ '⒗' => '16.',
+ '⒘' => '17.',
+ '⒙' => '18.',
+ '⒚' => '19.',
+ '⒛' => '20.',
+ '⒜' => '(a)',
+ '⒝' => '(b)',
+ '⒞' => '(c)',
+ '⒟' => '(d)',
+ '⒠' => '(e)',
+ '⒡' => '(f)',
+ '⒢' => '(g)',
+ '⒣' => '(h)',
+ '⒤' => '(i)',
+ '⒥' => '(j)',
+ '⒦' => '(k)',
+ '⒧' => '(l)',
+ '⒨' => '(m)',
+ '⒩' => '(n)',
+ '⒪' => '(o)',
+ '⒫' => '(p)',
+ '⒬' => '(q)',
+ '⒭' => '(r)',
+ '⒮' => '(s)',
+ '⒯' => '(t)',
+ '⒰' => '(u)',
+ '⒱' => '(v)',
+ '⒲' => '(w)',
+ '⒳' => '(x)',
+ '⒴' => '(y)',
+ '⒵' => '(z)',
+ 'Ⓐ' => '(A)',
+ 'Ⓑ' => '(B)',
+ 'Ⓒ' => '(C)',
+ 'Ⓓ' => '(D)',
+ 'Ⓔ' => '(E)',
+ 'Ⓕ' => '(F)',
+ 'Ⓖ' => '(G)',
+ 'Ⓗ' => '(H)',
+ 'Ⓘ' => '(I)',
+ 'Ⓙ' => '(J)',
+ 'Ⓚ' => '(K)',
+ 'Ⓛ' => '(L)',
+ 'Ⓜ' => '(M)',
+ 'Ⓝ' => '(N)',
+ 'Ⓞ' => '(O)',
+ 'Ⓟ' => '(P)',
+ 'Ⓠ' => '(Q)',
+ 'Ⓡ' => '(R)',
+ 'Ⓢ' => '(S)',
+ 'Ⓣ' => '(T)',
+ 'Ⓤ' => '(U)',
+ 'Ⓥ' => '(V)',
+ 'Ⓦ' => '(W)',
+ 'Ⓧ' => '(X)',
+ 'Ⓨ' => '(Y)',
+ 'Ⓩ' => '(Z)',
+ 'ⓐ' => '(a)',
+ 'ⓑ' => '(b)',
+ 'ⓒ' => '(c)',
+ 'ⓓ' => '(d)',
+ 'ⓔ' => '(e)',
+ 'ⓕ' => '(f)',
+ 'ⓖ' => '(g)',
+ 'ⓗ' => '(h)',
+ 'ⓘ' => '(i)',
+ 'ⓙ' => '(j)',
+ 'ⓚ' => '(k)',
+ 'ⓛ' => '(l)',
+ 'ⓜ' => '(m)',
+ 'ⓝ' => '(n)',
+ 'ⓞ' => '(o)',
+ 'ⓟ' => '(p)',
+ 'ⓠ' => '(q)',
+ 'ⓡ' => '(r)',
+ 'ⓢ' => '(s)',
+ 'ⓣ' => '(t)',
+ 'ⓤ' => '(u)',
+ 'ⓥ' => '(v)',
+ 'ⓦ' => '(w)',
+ 'ⓧ' => '(x)',
+ 'ⓨ' => '(y)',
+ 'ⓩ' => '(z)',
+ '⓪' => '(0)',
+ '⨌' => '∫∫∫∫',
+ '⩴' => '::=',
+ '⩵' => '==',
+ '⩶' => '===',
+ '⺟' => '母',
+ '⻳' => '龟',
+ '⼀' => '一',
+ '⼁' => '丨',
+ '⼂' => '丶',
+ '⼃' => '丿',
+ '⼄' => '乙',
+ '⼅' => '亅',
+ '⼆' => '二',
+ '⼇' => '亠',
+ '⼈' => '人',
+ '⼉' => '儿',
+ '⼊' => '入',
+ '⼋' => '八',
+ '⼌' => '冂',
+ '⼍' => '冖',
+ '⼎' => '冫',
+ '⼏' => '几',
+ '⼐' => '凵',
+ '⼑' => '刀',
+ '⼒' => '力',
+ '⼓' => '勹',
+ '⼔' => '匕',
+ '⼕' => '匚',
+ '⼖' => '匸',
+ '⼗' => '十',
+ '⼘' => '卜',
+ '⼙' => '卩',
+ '⼚' => '厂',
+ '⼛' => '厶',
+ '⼜' => '又',
+ '⼝' => '口',
+ '⼞' => '囗',
+ '⼟' => '土',
+ '⼠' => '士',
+ '⼡' => '夂',
+ '⼢' => '夊',
+ '⼣' => '夕',
+ '⼤' => '大',
+ '⼥' => '女',
+ '⼦' => '子',
+ '⼧' => '宀',
+ '⼨' => '寸',
+ '⼩' => '小',
+ '⼪' => '尢',
+ '⼫' => '尸',
+ '⼬' => '屮',
+ '⼭' => '山',
+ '⼮' => '巛',
+ '⼯' => '工',
+ '⼰' => '己',
+ '⼱' => '巾',
+ '⼲' => '干',
+ '⼳' => '幺',
+ '⼴' => '广',
+ '⼵' => '廴',
+ '⼶' => '廾',
+ '⼷' => '弋',
+ '⼸' => '弓',
+ '⼹' => '彐',
+ '⼺' => '彡',
+ '⼻' => '彳',
+ '⼼' => '心',
+ '⼽' => '戈',
+ '⼾' => '戶',
+ '⼿' => '手',
+ '⽀' => '支',
+ '⽁' => '攴',
+ '⽂' => '文',
+ '⽃' => '斗',
+ '⽄' => '斤',
+ '⽅' => '方',
+ '⽆' => '无',
+ '⽇' => '日',
+ '⽈' => '曰',
+ '⽉' => '月',
+ '⽊' => '木',
+ '⽋' => '欠',
+ '⽌' => '止',
+ '⽍' => '歹',
+ '⽎' => '殳',
+ '⽏' => '毋',
+ '⽐' => '比',
+ '⽑' => '毛',
+ '⽒' => '氏',
+ '⽓' => '气',
+ '⽔' => '水',
+ '⽕' => '火',
+ '⽖' => '爪',
+ '⽗' => '父',
+ '⽘' => '爻',
+ '⽙' => '爿',
+ '⽚' => '片',
+ '⽛' => '牙',
+ '⽜' => '牛',
+ '⽝' => '犬',
+ '⽞' => '玄',
+ '⽟' => '玉',
+ '⽠' => '瓜',
+ '⽡' => '瓦',
+ '⽢' => '甘',
+ '⽣' => '生',
+ '⽤' => '用',
+ '⽥' => '田',
+ '⽦' => '疋',
+ '⽧' => '疒',
+ '⽨' => '癶',
+ '⽩' => '白',
+ '⽪' => '皮',
+ '⽫' => '皿',
+ '⽬' => '目',
+ '⽭' => '矛',
+ '⽮' => '矢',
+ '⽯' => '石',
+ '⽰' => '示',
+ '⽱' => '禸',
+ '⽲' => '禾',
+ '⽳' => '穴',
+ '⽴' => '立',
+ '⽵' => '竹',
+ '⽶' => '米',
+ '⽷' => '糸',
+ '⽸' => '缶',
+ '⽹' => '网',
+ '⽺' => '羊',
+ '⽻' => '羽',
+ '⽼' => '老',
+ '⽽' => '而',
+ '⽾' => '耒',
+ '⽿' => '耳',
+ '⾀' => '聿',
+ '⾁' => '肉',
+ '⾂' => '臣',
+ '⾃' => '自',
+ '⾄' => '至',
+ '⾅' => '臼',
+ '⾆' => '舌',
+ '⾇' => '舛',
+ '⾈' => '舟',
+ '⾉' => '艮',
+ '⾊' => '色',
+ '⾋' => '艸',
+ '⾌' => '虍',
+ '⾍' => '虫',
+ '⾎' => '血',
+ '⾏' => '行',
+ '⾐' => '衣',
+ '⾑' => '襾',
+ '⾒' => '見',
+ '⾓' => '角',
+ '⾔' => '言',
+ '⾕' => '谷',
+ '⾖' => '豆',
+ '⾗' => '豕',
+ '⾘' => '豸',
+ '⾙' => '貝',
+ '⾚' => '赤',
+ '⾛' => '走',
+ '⾜' => '足',
+ '⾝' => '身',
+ '⾞' => '車',
+ '⾟' => '辛',
+ '⾠' => '辰',
+ '⾡' => '辵',
+ '⾢' => '邑',
+ '⾣' => '酉',
+ '⾤' => '釆',
+ '⾥' => '里',
+ '⾦' => '金',
+ '⾧' => '長',
+ '⾨' => '門',
+ '⾩' => '阜',
+ '⾪' => '隶',
+ '⾫' => '隹',
+ '⾬' => '雨',
+ '⾭' => '靑',
+ '⾮' => '非',
+ '⾯' => '面',
+ '⾰' => '革',
+ '⾱' => '韋',
+ '⾲' => '韭',
+ '⾳' => '音',
+ '⾴' => '頁',
+ '⾵' => '風',
+ '⾶' => '飛',
+ '⾷' => '食',
+ '⾸' => '首',
+ '⾹' => '香',
+ '⾺' => '馬',
+ '⾻' => '骨',
+ '⾼' => '高',
+ '⾽' => '髟',
+ '⾾' => '鬥',
+ '⾿' => '鬯',
+ '⿀' => '鬲',
+ '⿁' => '鬼',
+ '⿂' => '魚',
+ '⿃' => '鳥',
+ '⿄' => '鹵',
+ '⿅' => '鹿',
+ '⿆' => '麥',
+ '⿇' => '麻',
+ '⿈' => '黃',
+ '⿉' => '黍',
+ '⿊' => '黑',
+ '⿋' => '黹',
+ '⿌' => '黽',
+ '⿍' => '鼎',
+ '⿎' => '鼓',
+ '⿏' => '鼠',
+ '⿐' => '鼻',
+ '⿑' => '齊',
+ '⿒' => '齒',
+ '⿓' => '龍',
+ '⿔' => '龜',
+ '⿕' => '龠',
+ ' ' => ' ',
+ '〶' => '〒',
+ '〸' => '十',
+ '〹' => '卄',
+ '〺' => '卅',
+ 'ㄱ' => 'ᄀ',
+ 'ㄲ' => 'ᄁ',
+ 'ㄳ' => 'ᆪ',
+ 'ㄴ' => 'ᄂ',
+ 'ㄵ' => 'ᆬ',
+ 'ㄶ' => 'ᆭ',
+ 'ㄷ' => 'ᄃ',
+ 'ㄸ' => 'ᄄ',
+ 'ㄹ' => 'ᄅ',
+ 'ㄺ' => 'ᆰ',
+ 'ㄻ' => 'ᆱ',
+ 'ㄼ' => 'ᆲ',
+ 'ㄽ' => 'ᆳ',
+ 'ㄾ' => 'ᆴ',
+ 'ㄿ' => 'ᆵ',
+ 'ㅀ' => 'ᄚ',
+ 'ㅁ' => 'ᄆ',
+ 'ㅂ' => 'ᄇ',
+ 'ㅃ' => 'ᄈ',
+ 'ㅄ' => 'ᄡ',
+ 'ㅅ' => 'ᄉ',
+ 'ㅆ' => 'ᄊ',
+ 'ㅇ' => 'ᄋ',
+ 'ㅈ' => 'ᄌ',
+ 'ㅉ' => 'ᄍ',
+ 'ㅊ' => 'ᄎ',
+ 'ㅋ' => 'ᄏ',
+ 'ㅌ' => 'ᄐ',
+ 'ㅍ' => 'ᄑ',
+ 'ㅎ' => 'ᄒ',
+ 'ㅏ' => 'ᅡ',
+ 'ㅐ' => 'ᅢ',
+ 'ㅑ' => 'ᅣ',
+ 'ㅒ' => 'ᅤ',
+ 'ㅓ' => 'ᅥ',
+ 'ㅔ' => 'ᅦ',
+ 'ㅕ' => 'ᅧ',
+ 'ㅖ' => 'ᅨ',
+ 'ㅗ' => 'ᅩ',
+ 'ㅘ' => 'ᅪ',
+ 'ㅙ' => 'ᅫ',
+ 'ㅚ' => 'ᅬ',
+ 'ㅛ' => 'ᅭ',
+ 'ㅜ' => 'ᅮ',
+ 'ㅝ' => 'ᅯ',
+ 'ㅞ' => 'ᅰ',
+ 'ㅟ' => 'ᅱ',
+ 'ㅠ' => 'ᅲ',
+ 'ㅡ' => 'ᅳ',
+ 'ㅢ' => 'ᅴ',
+ 'ㅣ' => 'ᅵ',
+ 'ㅤ' => 'ᅠ',
+ 'ㅥ' => 'ᄔ',
+ 'ㅦ' => 'ᄕ',
+ 'ㅧ' => 'ᇇ',
+ 'ㅨ' => 'ᇈ',
+ 'ㅩ' => 'ᇌ',
+ 'ㅪ' => 'ᇎ',
+ 'ㅫ' => 'ᇓ',
+ 'ㅬ' => 'ᇗ',
+ 'ㅭ' => 'ᇙ',
+ 'ㅮ' => 'ᄜ',
+ 'ㅯ' => 'ᇝ',
+ 'ㅰ' => 'ᇟ',
+ 'ㅱ' => 'ᄝ',
+ 'ㅲ' => 'ᄞ',
+ 'ㅳ' => 'ᄠ',
+ 'ㅴ' => 'ᄢ',
+ 'ㅵ' => 'ᄣ',
+ 'ㅶ' => 'ᄧ',
+ 'ㅷ' => 'ᄩ',
+ 'ㅸ' => 'ᄫ',
+ 'ㅹ' => 'ᄬ',
+ 'ㅺ' => 'ᄭ',
+ 'ㅻ' => 'ᄮ',
+ 'ㅼ' => 'ᄯ',
+ 'ㅽ' => 'ᄲ',
+ 'ㅾ' => 'ᄶ',
+ 'ㅿ' => 'ᅀ',
+ 'ㆀ' => 'ᅇ',
+ 'ㆁ' => 'ᅌ',
+ 'ㆂ' => 'ᇱ',
+ 'ㆃ' => 'ᇲ',
+ 'ㆄ' => 'ᅗ',
+ 'ㆅ' => 'ᅘ',
+ 'ㆆ' => 'ᅙ',
+ 'ㆇ' => 'ᆄ',
+ 'ㆈ' => 'ᆅ',
+ 'ㆉ' => 'ᆈ',
+ 'ㆊ' => 'ᆑ',
+ 'ㆋ' => 'ᆒ',
+ 'ㆌ' => 'ᆔ',
+ 'ㆍ' => 'ᆞ',
+ 'ㆎ' => 'ᆡ',
+ '㈀' => '(ᄀ)',
+ '㈁' => '(ᄂ)',
+ '㈂' => '(ᄃ)',
+ '㈃' => '(ᄅ)',
+ '㈄' => '(ᄆ)',
+ '㈅' => '(ᄇ)',
+ '㈆' => '(ᄉ)',
+ '㈇' => '(ᄋ)',
+ '㈈' => '(ᄌ)',
+ '㈉' => '(ᄎ)',
+ '㈊' => '(ᄏ)',
+ '㈋' => '(ᄐ)',
+ '㈌' => '(ᄑ)',
+ '㈍' => '(ᄒ)',
+ '㈎' => '(가)',
+ '㈏' => '(나)',
+ '㈐' => '(다)',
+ '㈑' => '(라)',
+ '㈒' => '(마)',
+ '㈓' => '(바)',
+ '㈔' => '(사)',
+ '㈕' => '(아)',
+ '㈖' => '(자)',
+ '㈗' => '(차)',
+ '㈘' => '(카)',
+ '㈙' => '(타)',
+ '㈚' => '(파)',
+ '㈛' => '(하)',
+ '㈜' => '(주)',
+ '㈝' => '(오전)',
+ '㈞' => '(오후)',
+ '㈠' => '(一)',
+ '㈡' => '(二)',
+ '㈢' => '(三)',
+ '㈣' => '(四)',
+ '㈤' => '(五)',
+ '㈥' => '(六)',
+ '㈦' => '(七)',
+ '㈧' => '(八)',
+ '㈨' => '(九)',
+ '㈩' => '(十)',
+ '㈪' => '(月)',
+ '㈫' => '(火)',
+ '㈬' => '(水)',
+ '㈭' => '(木)',
+ '㈮' => '(金)',
+ '㈯' => '(土)',
+ '㈰' => '(日)',
+ '㈱' => '(株)',
+ '㈲' => '(有)',
+ '㈳' => '(社)',
+ '㈴' => '(名)',
+ '㈵' => '(特)',
+ '㈶' => '(財)',
+ '㈷' => '(祝)',
+ '㈸' => '(労)',
+ '㈹' => '(代)',
+ '㈺' => '(呼)',
+ '㈻' => '(学)',
+ '㈼' => '(監)',
+ '㈽' => '(企)',
+ '㈾' => '(資)',
+ '㈿' => '(協)',
+ '㉀' => '(祭)',
+ '㉁' => '(休)',
+ '㉂' => '(自)',
+ '㉃' => '(至)',
+ '㉄' => '(問)',
+ '㉅' => '(幼)',
+ '㉆' => '(文)',
+ '㉇' => '(箏)',
+ '㉐' => 'PTE',
+ '㉑' => '(21)',
+ '㉒' => '(22)',
+ '㉓' => '(23)',
+ '㉔' => '(24)',
+ '㉕' => '(25)',
+ '㉖' => '(26)',
+ '㉗' => '(27)',
+ '㉘' => '(28)',
+ '㉙' => '(29)',
+ '㉚' => '(30)',
+ '㉛' => '(31)',
+ '㉜' => '(32)',
+ '㉝' => '(33)',
+ '㉞' => '(34)',
+ '㉟' => '(35)',
+ '㉠' => '(ᄀ)',
+ '㉡' => '(ᄂ)',
+ '㉢' => '(ᄃ)',
+ '㉣' => '(ᄅ)',
+ '㉤' => '(ᄆ)',
+ '㉥' => '(ᄇ)',
+ '㉦' => '(ᄉ)',
+ '㉧' => '(ᄋ)',
+ '㉨' => '(ᄌ)',
+ '㉩' => '(ᄎ)',
+ '㉪' => '(ᄏ)',
+ '㉫' => '(ᄐ)',
+ '㉬' => '(ᄑ)',
+ '㉭' => '(ᄒ)',
+ '㉮' => '(가)',
+ '㉯' => '(나)',
+ '㉰' => '(다)',
+ '㉱' => '(라)',
+ '㉲' => '(마)',
+ '㉳' => '(바)',
+ '㉴' => '(사)',
+ '㉵' => '(아)',
+ '㉶' => '(자)',
+ '㉷' => '(차)',
+ '㉸' => '(카)',
+ '㉹' => '(타)',
+ '㉺' => '(파)',
+ '㉻' => '(하)',
+ '㉼' => '(참고)',
+ '㉽' => '(주의)',
+ '㉾' => '(우)',
+ '㊀' => '(一)',
+ '㊁' => '(二)',
+ '㊂' => '(三)',
+ '㊃' => '(四)',
+ '㊄' => '(五)',
+ '㊅' => '(六)',
+ '㊆' => '(七)',
+ '㊇' => '(八)',
+ '㊈' => '(九)',
+ '㊉' => '(十)',
+ '㊊' => '(月)',
+ '㊋' => '(火)',
+ '㊌' => '(水)',
+ '㊍' => '(木)',
+ '㊎' => '(金)',
+ '㊏' => '(土)',
+ '㊐' => '(日)',
+ '㊑' => '(株)',
+ '㊒' => '(有)',
+ '㊓' => '(社)',
+ '㊔' => '(名)',
+ '㊕' => '(特)',
+ '㊖' => '(財)',
+ '㊗' => '(祝)',
+ '㊘' => '(労)',
+ '㊙' => '(秘)',
+ '㊚' => '(男)',
+ '㊛' => '(女)',
+ '㊜' => '(適)',
+ '㊝' => '(優)',
+ '㊞' => '(印)',
+ '㊟' => '(注)',
+ '㊠' => '(項)',
+ '㊡' => '(休)',
+ '㊢' => '(写)',
+ '㊣' => '(正)',
+ '㊤' => '(上)',
+ '㊥' => '(中)',
+ '㊦' => '(下)',
+ '㊧' => '(左)',
+ '㊨' => '(右)',
+ '㊩' => '(医)',
+ '㊪' => '(宗)',
+ '㊫' => '(学)',
+ '㊬' => '(監)',
+ '㊭' => '(企)',
+ '㊮' => '(資)',
+ '㊯' => '(協)',
+ '㊰' => '(夜)',
+ '㊱' => '(36)',
+ '㊲' => '(37)',
+ '㊳' => '(38)',
+ '㊴' => '(39)',
+ '㊵' => '(40)',
+ '㊶' => '(41)',
+ '㊷' => '(42)',
+ '㊸' => '(43)',
+ '㊹' => '(44)',
+ '㊺' => '(45)',
+ '㊻' => '(46)',
+ '㊼' => '(47)',
+ '㊽' => '(48)',
+ '㊾' => '(49)',
+ '㊿' => '(50)',
+ '㋀' => '1月',
+ '㋁' => '2月',
+ '㋂' => '3月',
+ '㋃' => '4月',
+ '㋄' => '5月',
+ '㋅' => '6月',
+ '㋆' => '7月',
+ '㋇' => '8月',
+ '㋈' => '9月',
+ '㋉' => '10月',
+ '㋊' => '11月',
+ '㋋' => '12月',
+ '㋌' => 'Hg',
+ '㋍' => 'erg',
+ '㋎' => 'eV',
+ '㋏' => 'LTD',
+ '㋐' => '(ア)',
+ '㋑' => '(イ)',
+ '㋒' => '(ウ)',
+ '㋓' => '(エ)',
+ '㋔' => '(オ)',
+ '㋕' => '(カ)',
+ '㋖' => '(キ)',
+ '㋗' => '(ク)',
+ '㋘' => '(ケ)',
+ '㋙' => '(コ)',
+ '㋚' => '(サ)',
+ '㋛' => '(シ)',
+ '㋜' => '(ス)',
+ '㋝' => '(セ)',
+ '㋞' => '(ソ)',
+ '㋟' => '(タ)',
+ '㋠' => '(チ)',
+ '㋡' => '(ツ)',
+ '㋢' => '(テ)',
+ '㋣' => '(ト)',
+ '㋤' => '(ナ)',
+ '㋥' => '(ニ)',
+ '㋦' => '(ヌ)',
+ '㋧' => '(ネ)',
+ '㋨' => '(ノ)',
+ '㋩' => '(ハ)',
+ '㋪' => '(ヒ)',
+ '㋫' => '(フ)',
+ '㋬' => '(ヘ)',
+ '㋭' => '(ホ)',
+ '㋮' => '(マ)',
+ '㋯' => '(ミ)',
+ '㋰' => '(ム)',
+ '㋱' => '(メ)',
+ '㋲' => '(モ)',
+ '㋳' => '(ヤ)',
+ '㋴' => '(ユ)',
+ '㋵' => '(ヨ)',
+ '㋶' => '(ラ)',
+ '㋷' => '(リ)',
+ '㋸' => '(ル)',
+ '㋹' => '(レ)',
+ '㋺' => '(ロ)',
+ '㋻' => '(ワ)',
+ '㋼' => '(ヰ)',
+ '㋽' => '(ヱ)',
+ '㋾' => '(ヲ)',
+ '㋿' => '令和',
+ '㌀' => 'アパート',
+ '㌁' => 'アルファ',
+ '㌂' => 'アンペア',
+ '㌃' => 'アール',
+ '㌄' => 'イニング',
+ '㌅' => 'インチ',
+ '㌆' => 'ウォン',
+ '㌇' => 'エスクード',
+ '㌈' => 'エーカー',
+ '㌉' => 'オンス',
+ '㌊' => 'オーム',
+ '㌋' => 'カイリ',
+ '㌌' => 'カラット',
+ '㌍' => 'カロリー',
+ '㌎' => 'ガロン',
+ '㌏' => 'ガンマ',
+ '㌐' => 'ギガ',
+ '㌑' => 'ギニー',
+ '㌒' => 'キュリー',
+ '㌓' => 'ギルダー',
+ '㌔' => 'キロ',
+ '㌕' => 'キログラム',
+ '㌖' => 'キロメートル',
+ '㌗' => 'キロワット',
+ '㌘' => 'グラム',
+ '㌙' => 'グラムトン',
+ '㌚' => 'クルゼイロ',
+ '㌛' => 'クローネ',
+ '㌜' => 'ケース',
+ '㌝' => 'コルナ',
+ '㌞' => 'コーポ',
+ '㌟' => 'サイクル',
+ '㌠' => 'サンチーム',
+ '㌡' => 'シリング',
+ '㌢' => 'センチ',
+ '㌣' => 'セント',
+ '㌤' => 'ダース',
+ '㌥' => 'デシ',
+ '㌦' => 'ドル',
+ '㌧' => 'トン',
+ '㌨' => 'ナノ',
+ '㌩' => 'ノット',
+ '㌪' => 'ハイツ',
+ '㌫' => 'パーセント',
+ '㌬' => 'パーツ',
+ '㌭' => 'バーレル',
+ '㌮' => 'ピアストル',
+ '㌯' => 'ピクル',
+ '㌰' => 'ピコ',
+ '㌱' => 'ビル',
+ '㌲' => 'ファラッド',
+ '㌳' => 'フィート',
+ '㌴' => 'ブッシェル',
+ '㌵' => 'フラン',
+ '㌶' => 'ヘクタール',
+ '㌷' => 'ペソ',
+ '㌸' => 'ペニヒ',
+ '㌹' => 'ヘルツ',
+ '㌺' => 'ペンス',
+ '㌻' => 'ページ',
+ '㌼' => 'ベータ',
+ '㌽' => 'ポイント',
+ '㌾' => 'ボルト',
+ '㌿' => 'ホン',
+ '㍀' => 'ポンド',
+ '㍁' => 'ホール',
+ '㍂' => 'ホーン',
+ '㍃' => 'マイクロ',
+ '㍄' => 'マイル',
+ '㍅' => 'マッハ',
+ '㍆' => 'マルク',
+ '㍇' => 'マンション',
+ '㍈' => 'ミクロン',
+ '㍉' => 'ミリ',
+ '㍊' => 'ミリバール',
+ '㍋' => 'メガ',
+ '㍌' => 'メガトン',
+ '㍍' => 'メートル',
+ '㍎' => 'ヤード',
+ '㍏' => 'ヤール',
+ '㍐' => 'ユアン',
+ '㍑' => 'リットル',
+ '㍒' => 'リラ',
+ '㍓' => 'ルピー',
+ '㍔' => 'ルーブル',
+ '㍕' => 'レム',
+ '㍖' => 'レントゲン',
+ '㍗' => 'ワット',
+ '㍘' => '0点',
+ '㍙' => '1点',
+ '㍚' => '2点',
+ '㍛' => '3点',
+ '㍜' => '4点',
+ '㍝' => '5点',
+ '㍞' => '6点',
+ '㍟' => '7点',
+ '㍠' => '8点',
+ '㍡' => '9点',
+ '㍢' => '10点',
+ '㍣' => '11点',
+ '㍤' => '12点',
+ '㍥' => '13点',
+ '㍦' => '14点',
+ '㍧' => '15点',
+ '㍨' => '16点',
+ '㍩' => '17点',
+ '㍪' => '18点',
+ '㍫' => '19点',
+ '㍬' => '20点',
+ '㍭' => '21点',
+ '㍮' => '22点',
+ '㍯' => '23点',
+ '㍰' => '24点',
+ '㍱' => 'hPa',
+ '㍲' => 'da',
+ '㍳' => 'AU',
+ '㍴' => 'bar',
+ '㍵' => 'oV',
+ '㍶' => 'pc',
+ '㍷' => 'dm',
+ '㍸' => 'dm²',
+ '㍹' => 'dm³',
+ '㍺' => 'IU',
+ '㍻' => '平成',
+ '㍼' => '昭和',
+ '㍽' => '大正',
+ '㍾' => '明治',
+ '㍿' => '株式会社',
+ '㎀' => 'pA',
+ '㎁' => 'nA',
+ '㎂' => 'μA',
+ '㎃' => 'mA',
+ '㎄' => 'kA',
+ '㎅' => 'KB',
+ '㎆' => 'MB',
+ '㎇' => 'GB',
+ '㎈' => 'cal',
+ '㎉' => 'kcal',
+ '㎊' => 'pF',
+ '㎋' => 'nF',
+ '㎌' => 'μF',
+ '㎍' => 'μg',
+ '㎎' => 'mg',
+ '㎏' => 'kg',
+ '㎐' => 'Hz',
+ '㎑' => 'kHz',
+ '㎒' => 'MHz',
+ '㎓' => 'GHz',
+ '㎔' => 'THz',
+ '㎕' => 'μℓ',
+ '㎖' => 'mℓ',
+ '㎗' => 'dℓ',
+ '㎘' => 'kℓ',
+ '㎙' => 'fm',
+ '㎚' => 'nm',
+ '㎛' => 'μm',
+ '㎜' => 'mm',
+ '㎝' => 'cm',
+ '㎞' => 'km',
+ '㎟' => 'mm²',
+ '㎠' => 'cm²',
+ '㎡' => 'm²',
+ '㎢' => 'km²',
+ '㎣' => 'mm³',
+ '㎤' => 'cm³',
+ '㎥' => 'm³',
+ '㎦' => 'km³',
+ '㎧' => 'm∕s',
+ '㎨' => 'm∕s²',
+ '㎩' => 'Pa',
+ '㎪' => 'kPa',
+ '㎫' => 'MPa',
+ '㎬' => 'GPa',
+ '㎭' => 'rad',
+ '㎮' => 'rad∕s',
+ '㎯' => 'rad∕s²',
+ '㎰' => 'ps',
+ '㎱' => 'ns',
+ '㎲' => 'μs',
+ '㎳' => 'ms',
+ '㎴' => 'pV',
+ '㎵' => 'nV',
+ '㎶' => 'μV',
+ '㎷' => 'mV',
+ '㎸' => 'kV',
+ '㎹' => 'MV',
+ '㎺' => 'pW',
+ '㎻' => 'nW',
+ '㎼' => 'μW',
+ '㎽' => 'mW',
+ '㎾' => 'kW',
+ '㎿' => 'MW',
+ '㏀' => 'kΩ',
+ '㏁' => 'MΩ',
+ '㏂' => 'a.m.',
+ '㏃' => 'Bq',
+ '㏄' => 'cc',
+ '㏅' => 'cd',
+ '㏆' => 'C∕kg',
+ '㏇' => 'Co.',
+ '㏈' => 'dB',
+ '㏉' => 'Gy',
+ '㏊' => 'ha',
+ '㏋' => 'HP',
+ '㏌' => 'in',
+ '㏍' => 'KK',
+ '㏎' => 'KM',
+ '㏏' => 'kt',
+ '㏐' => 'lm',
+ '㏑' => 'ln',
+ '㏒' => 'log',
+ '㏓' => 'lx',
+ '㏔' => 'mb',
+ '㏕' => 'mil',
+ '㏖' => 'mol',
+ '㏗' => 'PH',
+ '㏘' => 'p.m.',
+ '㏙' => 'PPM',
+ '㏚' => 'PR',
+ '㏛' => 'sr',
+ '㏜' => 'Sv',
+ '㏝' => 'Wb',
+ '㏞' => 'V∕m',
+ '㏟' => 'A∕m',
+ '㏠' => '1日',
+ '㏡' => '2日',
+ '㏢' => '3日',
+ '㏣' => '4日',
+ '㏤' => '5日',
+ '㏥' => '6日',
+ '㏦' => '7日',
+ '㏧' => '8日',
+ '㏨' => '9日',
+ '㏩' => '10日',
+ '㏪' => '11日',
+ '㏫' => '12日',
+ '㏬' => '13日',
+ '㏭' => '14日',
+ '㏮' => '15日',
+ '㏯' => '16日',
+ '㏰' => '17日',
+ '㏱' => '18日',
+ '㏲' => '19日',
+ '㏳' => '20日',
+ '㏴' => '21日',
+ '㏵' => '22日',
+ '㏶' => '23日',
+ '㏷' => '24日',
+ '㏸' => '25日',
+ '㏹' => '26日',
+ '㏺' => '27日',
+ '㏻' => '28日',
+ '㏼' => '29日',
+ '㏽' => '30日',
+ '㏾' => '31日',
+ '㏿' => 'gal',
+ '豈' => '豈',
+ '更' => '更',
+ '車' => '車',
+ '賈' => '賈',
+ '滑' => '滑',
+ '串' => '串',
+ '句' => '句',
+ '龜' => '龜',
+ '龜' => '龜',
+ '契' => '契',
+ '金' => '金',
+ '喇' => '喇',
+ '奈' => '奈',
+ '懶' => '懶',
+ '癩' => '癩',
+ '羅' => '羅',
+ '蘿' => '蘿',
+ '螺' => '螺',
+ '裸' => '裸',
+ '邏' => '邏',
+ '樂' => '樂',
+ '洛' => '洛',
+ '烙' => '烙',
+ '珞' => '珞',
+ '落' => '落',
+ '酪' => '酪',
+ '駱' => '駱',
+ '亂' => '亂',
+ '卵' => '卵',
+ '欄' => '欄',
+ '爛' => '爛',
+ '蘭' => '蘭',
+ '鸞' => '鸞',
+ '嵐' => '嵐',
+ '濫' => '濫',
+ '藍' => '藍',
+ '襤' => '襤',
+ '拉' => '拉',
+ '臘' => '臘',
+ '蠟' => '蠟',
+ '廊' => '廊',
+ '朗' => '朗',
+ '浪' => '浪',
+ '狼' => '狼',
+ '郎' => '郎',
+ '來' => '來',
+ '冷' => '冷',
+ '勞' => '勞',
+ '擄' => '擄',
+ '櫓' => '櫓',
+ '爐' => '爐',
+ '盧' => '盧',
+ '老' => '老',
+ '蘆' => '蘆',
+ '虜' => '虜',
+ '路' => '路',
+ '露' => '露',
+ '魯' => '魯',
+ '鷺' => '鷺',
+ '碌' => '碌',
+ '祿' => '祿',
+ '綠' => '綠',
+ '菉' => '菉',
+ '錄' => '錄',
+ '鹿' => '鹿',
+ '論' => '論',
+ '壟' => '壟',
+ '弄' => '弄',
+ '籠' => '籠',
+ '聾' => '聾',
+ '牢' => '牢',
+ '磊' => '磊',
+ '賂' => '賂',
+ '雷' => '雷',
+ '壘' => '壘',
+ '屢' => '屢',
+ '樓' => '樓',
+ '淚' => '淚',
+ '漏' => '漏',
+ '累' => '累',
+ '縷' => '縷',
+ '陋' => '陋',
+ '勒' => '勒',
+ '肋' => '肋',
+ '凜' => '凜',
+ '凌' => '凌',
+ '稜' => '稜',
+ '綾' => '綾',
+ '菱' => '菱',
+ '陵' => '陵',
+ '讀' => '讀',
+ '拏' => '拏',
+ '樂' => '樂',
+ '諾' => '諾',
+ '丹' => '丹',
+ '寧' => '寧',
+ '怒' => '怒',
+ '率' => '率',
+ '異' => '異',
+ '北' => '北',
+ '磻' => '磻',
+ '便' => '便',
+ '復' => '復',
+ '不' => '不',
+ '泌' => '泌',
+ '數' => '數',
+ '索' => '索',
+ '參' => '參',
+ '塞' => '塞',
+ '省' => '省',
+ '葉' => '葉',
+ '說' => '說',
+ '殺' => '殺',
+ '辰' => '辰',
+ '沈' => '沈',
+ '拾' => '拾',
+ '若' => '若',
+ '掠' => '掠',
+ '略' => '略',
+ '亮' => '亮',
+ '兩' => '兩',
+ '凉' => '凉',
+ '梁' => '梁',
+ '糧' => '糧',
+ '良' => '良',
+ '諒' => '諒',
+ '量' => '量',
+ '勵' => '勵',
+ '呂' => '呂',
+ '女' => '女',
+ '廬' => '廬',
+ '旅' => '旅',
+ '濾' => '濾',
+ '礪' => '礪',
+ '閭' => '閭',
+ '驪' => '驪',
+ '麗' => '麗',
+ '黎' => '黎',
+ '力' => '力',
+ '曆' => '曆',
+ '歷' => '歷',
+ '轢' => '轢',
+ '年' => '年',
+ '憐' => '憐',
+ '戀' => '戀',
+ '撚' => '撚',
+ '漣' => '漣',
+ '煉' => '煉',
+ '璉' => '璉',
+ '秊' => '秊',
+ '練' => '練',
+ '聯' => '聯',
+ '輦' => '輦',
+ '蓮' => '蓮',
+ '連' => '連',
+ '鍊' => '鍊',
+ '列' => '列',
+ '劣' => '劣',
+ '咽' => '咽',
+ '烈' => '烈',
+ '裂' => '裂',
+ '說' => '說',
+ '廉' => '廉',
+ '念' => '念',
+ '捻' => '捻',
+ '殮' => '殮',
+ '簾' => '簾',
+ '獵' => '獵',
+ '令' => '令',
+ '囹' => '囹',
+ '寧' => '寧',
+ '嶺' => '嶺',
+ '怜' => '怜',
+ '玲' => '玲',
+ '瑩' => '瑩',
+ '羚' => '羚',
+ '聆' => '聆',
+ '鈴' => '鈴',
+ '零' => '零',
+ '靈' => '靈',
+ '領' => '領',
+ '例' => '例',
+ '禮' => '禮',
+ '醴' => '醴',
+ '隸' => '隸',
+ '惡' => '惡',
+ '了' => '了',
+ '僚' => '僚',
+ '寮' => '寮',
+ '尿' => '尿',
+ '料' => '料',
+ '樂' => '樂',
+ '燎' => '燎',
+ '療' => '療',
+ '蓼' => '蓼',
+ '遼' => '遼',
+ '龍' => '龍',
+ '暈' => '暈',
+ '阮' => '阮',
+ '劉' => '劉',
+ '杻' => '杻',
+ '柳' => '柳',
+ '流' => '流',
+ '溜' => '溜',
+ '琉' => '琉',
+ '留' => '留',
+ '硫' => '硫',
+ '紐' => '紐',
+ '類' => '類',
+ '六' => '六',
+ '戮' => '戮',
+ '陸' => '陸',
+ '倫' => '倫',
+ '崙' => '崙',
+ '淪' => '淪',
+ '輪' => '輪',
+ '律' => '律',
+ '慄' => '慄',
+ '栗' => '栗',
+ '率' => '率',
+ '隆' => '隆',
+ '利' => '利',
+ '吏' => '吏',
+ '履' => '履',
+ '易' => '易',
+ '李' => '李',
+ '梨' => '梨',
+ '泥' => '泥',
+ '理' => '理',
+ '痢' => '痢',
+ '罹' => '罹',
+ '裏' => '裏',
+ '裡' => '裡',
+ '里' => '里',
+ '離' => '離',
+ '匿' => '匿',
+ '溺' => '溺',
+ '吝' => '吝',
+ '燐' => '燐',
+ '璘' => '璘',
+ '藺' => '藺',
+ '隣' => '隣',
+ '鱗' => '鱗',
+ '麟' => '麟',
+ '林' => '林',
+ '淋' => '淋',
+ '臨' => '臨',
+ '立' => '立',
+ '笠' => '笠',
+ '粒' => '粒',
+ '狀' => '狀',
+ '炙' => '炙',
+ '識' => '識',
+ '什' => '什',
+ '茶' => '茶',
+ '刺' => '刺',
+ '切' => '切',
+ '度' => '度',
+ '拓' => '拓',
+ '糖' => '糖',
+ '宅' => '宅',
+ '洞' => '洞',
+ '暴' => '暴',
+ '輻' => '輻',
+ '行' => '行',
+ '降' => '降',
+ '見' => '見',
+ '廓' => '廓',
+ '兀' => '兀',
+ '嗀' => '嗀',
+ '﨎' => '' . "\0" . '',
+ '﨏' => '' . "\0" . '',
+ '塚' => '塚',
+ '﨑' => '' . "\0" . '',
+ '晴' => '晴',
+ '﨓' => '' . "\0" . '',
+ '﨔' => '' . "\0" . '',
+ '凞' => '凞',
+ '猪' => '猪',
+ '益' => '益',
+ '礼' => '礼',
+ '神' => '神',
+ '祥' => '祥',
+ '福' => '福',
+ '靖' => '靖',
+ '精' => '精',
+ '羽' => '羽',
+ '﨟' => '' . "\0" . '',
+ '蘒' => '蘒',
+ '﨡' => '' . "\0" . '',
+ '諸' => '諸',
+ '﨣' => '' . "\0" . '',
+ '﨤' => '' . "\0" . '',
+ '逸' => '逸',
+ '都' => '都',
+ '﨧' => '' . "\0" . '',
+ '﨨' => '' . "\0" . '',
+ '﨩' => '' . "\0" . '',
+ '飯' => '飯',
+ '飼' => '飼',
+ '館' => '館',
+ '鶴' => '鶴',
+ '郞' => '郞',
+ '隷' => '隷',
+ '侮' => '侮',
+ '僧' => '僧',
+ '免' => '免',
+ '勉' => '勉',
+ '勤' => '勤',
+ '卑' => '卑',
+ '喝' => '喝',
+ '嘆' => '嘆',
+ '器' => '器',
+ '塀' => '塀',
+ '墨' => '墨',
+ '層' => '層',
+ '屮' => '屮',
+ '悔' => '悔',
+ '慨' => '慨',
+ '憎' => '憎',
+ '懲' => '懲',
+ '敏' => '敏',
+ '既' => '既',
+ '暑' => '暑',
+ '梅' => '梅',
+ '海' => '海',
+ '渚' => '渚',
+ '漢' => '漢',
+ '煮' => '煮',
+ '爫' => '爫',
+ '琢' => '琢',
+ '碑' => '碑',
+ '社' => '社',
+ '祉' => '祉',
+ '祈' => '祈',
+ '祐' => '祐',
+ '祖' => '祖',
+ '祝' => '祝',
+ '禍' => '禍',
+ '禎' => '禎',
+ '穀' => '穀',
+ '突' => '突',
+ '節' => '節',
+ '練' => '練',
+ '縉' => '縉',
+ '繁' => '繁',
+ '署' => '署',
+ '者' => '者',
+ '臭' => '臭',
+ '艹' => '艹',
+ '艹' => '艹',
+ '著' => '著',
+ '褐' => '褐',
+ '視' => '視',
+ '謁' => '謁',
+ '謹' => '謹',
+ '賓' => '賓',
+ '贈' => '贈',
+ '辶' => '辶',
+ '逸' => '逸',
+ '難' => '難',
+ '響' => '響',
+ '頻' => '頻',
+ '恵' => '恵',
+ '𤋮' => '𤋮',
+ '舘' => '舘',
+ '並' => '並',
+ '况' => '况',
+ '全' => '全',
+ '侀' => '侀',
+ '充' => '充',
+ '冀' => '冀',
+ '勇' => '勇',
+ '勺' => '勺',
+ '喝' => '喝',
+ '啕' => '啕',
+ '喙' => '喙',
+ '嗢' => '嗢',
+ '塚' => '塚',
+ '墳' => '墳',
+ '奄' => '奄',
+ '奔' => '奔',
+ '婢' => '婢',
+ '嬨' => '嬨',
+ '廒' => '廒',
+ '廙' => '廙',
+ '彩' => '彩',
+ '徭' => '徭',
+ '惘' => '惘',
+ '慎' => '慎',
+ '愈' => '愈',
+ '憎' => '憎',
+ '慠' => '慠',
+ '懲' => '懲',
+ '戴' => '戴',
+ '揄' => '揄',
+ '搜' => '搜',
+ '摒' => '摒',
+ '敖' => '敖',
+ '晴' => '晴',
+ '朗' => '朗',
+ '望' => '望',
+ '杖' => '杖',
+ '歹' => '歹',
+ '殺' => '殺',
+ '流' => '流',
+ '滛' => '滛',
+ '滋' => '滋',
+ '漢' => '漢',
+ '瀞' => '瀞',
+ '煮' => '煮',
+ '瞧' => '瞧',
+ '爵' => '爵',
+ '犯' => '犯',
+ '猪' => '猪',
+ '瑱' => '瑱',
+ '甆' => '甆',
+ '画' => '画',
+ '瘝' => '瘝',
+ '瘟' => '瘟',
+ '益' => '益',
+ '盛' => '盛',
+ '直' => '直',
+ '睊' => '睊',
+ '着' => '着',
+ '磌' => '磌',
+ '窱' => '窱',
+ '節' => '節',
+ '类' => '类',
+ '絛' => '絛',
+ '練' => '練',
+ '缾' => '缾',
+ '者' => '者',
+ '荒' => '荒',
+ '華' => '華',
+ '蝹' => '蝹',
+ '襁' => '襁',
+ '覆' => '覆',
+ '視' => '視',
+ '調' => '調',
+ '諸' => '諸',
+ '請' => '請',
+ '謁' => '謁',
+ '諾' => '諾',
+ '諭' => '諭',
+ '謹' => '謹',
+ '變' => '變',
+ '贈' => '贈',
+ '輸' => '輸',
+ '遲' => '遲',
+ '醙' => '醙',
+ '鉶' => '鉶',
+ '陼' => '陼',
+ '難' => '難',
+ '靖' => '靖',
+ '韛' => '韛',
+ '響' => '響',
+ '頋' => '頋',
+ '頻' => '頻',
+ '鬒' => '鬒',
+ '龜' => '龜',
+ '𢡊' => '𢡊',
+ '𢡄' => '𢡄',
+ '𣏕' => '𣏕',
+ '㮝' => '㮝',
+ '䀘' => '䀘',
+ '䀹' => '䀹',
+ '𥉉' => '𥉉',
+ '𥳐' => '𥳐',
+ '𧻓' => '𧻓',
+ '齃' => '齃',
+ '龎' => '龎',
+ 'ff' => 'ff',
+ 'fi' => 'fi',
+ 'fl' => 'fl',
+ 'ffi' => 'ffi',
+ 'ffl' => 'ffl',
+ 'ſt' => 'ſt',
+ 'st' => 'st',
+ 'ﬓ' => 'մն',
+ 'ﬔ' => 'մե',
+ 'ﬕ' => 'մի',
+ 'ﬖ' => 'վն',
+ 'ﬗ' => 'մխ',
+ 'ﬠ' => 'ע',
+ 'ﬡ' => 'א',
+ 'ﬢ' => 'ד',
+ 'ﬣ' => 'ה',
+ 'ﬤ' => 'כ',
+ 'ﬥ' => 'ל',
+ 'ﬦ' => 'ם',
+ 'ﬧ' => 'ר',
+ 'ﬨ' => 'ת',
+ '﬩' => '+',
+ 'ﭏ' => 'אל',
+ '﹉' => '‾',
+ '﹊' => '‾',
+ '﹋' => '‾',
+ '﹌' => '‾',
+ '﹍' => '_',
+ '﹎' => '_',
+ '﹏' => '_',
+ '﹐' => ',',
+ '﹑' => '、',
+ '﹒' => '.',
+ '﹔' => ';',
+ '﹕' => ':',
+ '﹖' => '?',
+ '﹗' => '!',
+ '﹘' => '—',
+ '﹙' => '(',
+ '﹚' => ')',
+ '﹛' => '{',
+ '﹜' => '}',
+ '﹝' => '〔',
+ '﹞' => '〕',
+ '﹟' => '#',
+ '﹠' => '&',
+ '﹡' => '*',
+ '﹢' => '+',
+ '﹣' => '-',
+ '﹤' => '<',
+ '﹥' => '>',
+ '﹦' => '=',
+ '﹨' => '\\',
+ '﹩' => '$',
+ '﹪' => '%',
+ '﹫' => '@',
+ '!' => '!',
+ '"' => '"',
+ '#' => '#',
+ '$' => '$',
+ '%' => '%',
+ '&' => '&',
+ ''' => '\'',
+ '(' => '(',
+ ')' => ')',
+ '*' => '*',
+ '+' => '+',
+ ',' => ',',
+ '-' => '-',
+ '.' => '.',
+ '/' => '/',
+ '0' => '0',
+ '1' => '1',
+ '2' => '2',
+ '3' => '3',
+ '4' => '4',
+ '5' => '5',
+ '6' => '6',
+ '7' => '7',
+ '8' => '8',
+ '9' => '9',
+ ':' => ':',
+ ';' => ';',
+ '<' => '<',
+ '=' => '=',
+ '>' => '>',
+ '?' => '?',
+ '@' => '@',
+ 'A' => 'A',
+ 'B' => 'B',
+ 'C' => 'C',
+ 'D' => 'D',
+ 'E' => 'E',
+ 'F' => 'F',
+ 'G' => 'G',
+ 'H' => 'H',
+ 'I' => 'I',
+ 'J' => 'J',
+ 'K' => 'K',
+ 'L' => 'L',
+ 'M' => 'M',
+ 'N' => 'N',
+ 'O' => 'O',
+ 'P' => 'P',
+ 'Q' => 'Q',
+ 'R' => 'R',
+ 'S' => 'S',
+ 'T' => 'T',
+ 'U' => 'U',
+ 'V' => 'V',
+ 'W' => 'W',
+ 'X' => 'X',
+ 'Y' => 'Y',
+ 'Z' => 'Z',
+ '[' => '[',
+ '\' => '\\',
+ ']' => ']',
+ '^' => '^',
+ '_' => '_',
+ '`' => '`',
+ 'a' => 'a',
+ 'b' => 'b',
+ 'c' => 'c',
+ 'd' => 'd',
+ 'e' => 'e',
+ 'f' => 'f',
+ 'g' => 'g',
+ 'h' => 'h',
+ 'i' => 'i',
+ 'j' => 'j',
+ 'k' => 'k',
+ 'l' => 'l',
+ 'm' => 'm',
+ 'n' => 'n',
+ 'o' => 'o',
+ 'p' => 'p',
+ 'q' => 'q',
+ 'r' => 'r',
+ 's' => 's',
+ 't' => 't',
+ 'u' => 'u',
+ 'v' => 'v',
+ 'w' => 'w',
+ 'x' => 'x',
+ 'y' => 'y',
+ 'z' => 'z',
+ '{' => '{',
+ '|' => '|',
+ '}' => '}',
+ '~' => '~',
+ '⦅' => '⦅',
+ '⦆' => '⦆',
+ '。' => '。',
+ '「' => '「',
+ '」' => '」',
+ '、' => '、',
+ '・' => '・',
+ 'ヲ' => 'ヲ',
+ 'ァ' => 'ァ',
+ 'ィ' => 'ィ',
+ 'ゥ' => 'ゥ',
+ 'ェ' => 'ェ',
+ 'ォ' => 'ォ',
+ 'ャ' => 'ャ',
+ 'ュ' => 'ュ',
+ 'ョ' => 'ョ',
+ 'ッ' => 'ッ',
+ 'ー' => 'ー',
+ 'ア' => 'ア',
+ 'イ' => 'イ',
+ 'ウ' => 'ウ',
+ 'エ' => 'エ',
+ 'オ' => 'オ',
+ 'カ' => 'カ',
+ 'キ' => 'キ',
+ 'ク' => 'ク',
+ 'ケ' => 'ケ',
+ 'コ' => 'コ',
+ 'サ' => 'サ',
+ 'シ' => 'シ',
+ 'ス' => 'ス',
+ 'セ' => 'セ',
+ 'ソ' => 'ソ',
+ 'タ' => 'タ',
+ 'チ' => 'チ',
+ 'ツ' => 'ツ',
+ 'テ' => 'テ',
+ 'ト' => 'ト',
+ 'ナ' => 'ナ',
+ 'ニ' => 'ニ',
+ 'ヌ' => 'ヌ',
+ 'ネ' => 'ネ',
+ 'ノ' => 'ノ',
+ 'ハ' => 'ハ',
+ 'ヒ' => 'ヒ',
+ 'フ' => 'フ',
+ 'ヘ' => 'ヘ',
+ 'ホ' => 'ホ',
+ 'マ' => 'マ',
+ 'ミ' => 'ミ',
+ 'ム' => 'ム',
+ 'メ' => 'メ',
+ 'モ' => 'モ',
+ 'ヤ' => 'ヤ',
+ 'ユ' => 'ユ',
+ 'ヨ' => 'ヨ',
+ 'ラ' => 'ラ',
+ 'リ' => 'リ',
+ 'ル' => 'ル',
+ 'レ' => 'レ',
+ 'ロ' => 'ロ',
+ 'ワ' => 'ワ',
+ 'ン' => 'ン',
+ '゙' => '゙',
+ '゚' => '゚',
+ 'ᅠ' => 'ㅤ',
+ 'ᄀ' => 'ㄱ',
+ 'ᄁ' => 'ㄲ',
+ 'ᆪ' => 'ㄳ',
+ 'ᄂ' => 'ㄴ',
+ 'ᆬ' => 'ㄵ',
+ 'ᆭ' => 'ㄶ',
+ 'ᄃ' => 'ㄷ',
+ 'ᄄ' => 'ㄸ',
+ 'ᄅ' => 'ㄹ',
+ 'ᆰ' => 'ㄺ',
+ 'ᆱ' => 'ㄻ',
+ 'ᆲ' => 'ㄼ',
+ 'ᆳ' => 'ㄽ',
+ 'ᆴ' => 'ㄾ',
+ 'ᆵ' => 'ㄿ',
+ 'ᄚ' => 'ㅀ',
+ 'ᄆ' => 'ㅁ',
+ 'ᄇ' => 'ㅂ',
+ 'ᄈ' => 'ㅃ',
+ 'ᄡ' => 'ㅄ',
+ 'ᄉ' => 'ㅅ',
+ 'ᄊ' => 'ㅆ',
+ 'ᄋ' => 'ㅇ',
+ 'ᄌ' => 'ㅈ',
+ 'ᄍ' => 'ㅉ',
+ 'ᄎ' => 'ㅊ',
+ 'ᄏ' => 'ㅋ',
+ 'ᄐ' => 'ㅌ',
+ 'ᄑ' => 'ㅍ',
+ 'ᄒ' => 'ㅎ',
+ 'ᅡ' => 'ㅏ',
+ 'ᅢ' => 'ㅐ',
+ 'ᅣ' => 'ㅑ',
+ 'ᅤ' => 'ㅒ',
+ 'ᅥ' => 'ㅓ',
+ 'ᅦ' => 'ㅔ',
+ 'ᅧ' => 'ㅕ',
+ 'ᅨ' => 'ㅖ',
+ 'ᅩ' => 'ㅗ',
+ 'ᅪ' => 'ㅘ',
+ 'ᅫ' => 'ㅙ',
+ 'ᅬ' => 'ㅚ',
+ 'ᅭ' => 'ㅛ',
+ 'ᅮ' => 'ㅜ',
+ 'ᅯ' => 'ㅝ',
+ 'ᅰ' => 'ㅞ',
+ 'ᅱ' => 'ㅟ',
+ 'ᅲ' => 'ㅠ',
+ 'ᅳ' => 'ㅡ',
+ 'ᅴ' => 'ㅢ',
+ 'ᅵ' => 'ㅣ',
+ '¢' => '¢',
+ '£' => '£',
+ '¬' => '¬',
+ ' ̄' => '¯',
+ '¦' => '¦',
+ '¥' => '¥',
+ '₩' => '₩',
+ '│' => '│',
+ '←' => '←',
+ '↑' => '↑',
+ '→' => '→',
+ '↓' => '↓',
+ '■' => '■',
+ '○' => '○',
+ '𝐀' => 'A',
+ '𝐁' => 'B',
+ '𝐂' => 'C',
+ '𝐃' => 'D',
+ '𝐄' => 'E',
+ '𝐅' => 'F',
+ '𝐆' => 'G',
+ '𝐇' => 'H',
+ '𝐈' => 'I',
+ '𝐉' => 'J',
+ '𝐊' => 'K',
+ '𝐋' => 'L',
+ '𝐌' => 'M',
+ '𝐍' => 'N',
+ '𝐎' => 'O',
+ '𝐏' => 'P',
+ '𝐐' => 'Q',
+ '𝐑' => 'R',
+ '𝐒' => 'S',
+ '𝐓' => 'T',
+ '𝐔' => 'U',
+ '𝐕' => 'V',
+ '𝐖' => 'W',
+ '𝐗' => 'X',
+ '𝐘' => 'Y',
+ '𝐙' => 'Z',
+ '𝐚' => 'a',
+ '𝐛' => 'b',
+ '𝐜' => 'c',
+ '𝐝' => 'd',
+ '𝐞' => 'e',
+ '𝐟' => 'f',
+ '𝐠' => 'g',
+ '𝐡' => 'h',
+ '𝐢' => 'i',
+ '𝐣' => 'j',
+ '𝐤' => 'k',
+ '𝐥' => 'l',
+ '𝐦' => 'm',
+ '𝐧' => 'n',
+ '𝐨' => 'o',
+ '𝐩' => 'p',
+ '𝐪' => 'q',
+ '𝐫' => 'r',
+ '𝐬' => 's',
+ '𝐭' => 't',
+ '𝐮' => 'u',
+ '𝐯' => 'v',
+ '𝐰' => 'w',
+ '𝐱' => 'x',
+ '𝐲' => 'y',
+ '𝐳' => 'z',
+ '𝐴' => 'A',
+ '𝐵' => 'B',
+ '𝐶' => 'C',
+ '𝐷' => 'D',
+ '𝐸' => 'E',
+ '𝐹' => 'F',
+ '𝐺' => 'G',
+ '𝐻' => 'H',
+ '𝐼' => 'I',
+ '𝐽' => 'J',
+ '𝐾' => 'K',
+ '𝐿' => 'L',
+ '𝑀' => 'M',
+ '𝑁' => 'N',
+ '𝑂' => 'O',
+ '𝑃' => 'P',
+ '𝑄' => 'Q',
+ '𝑅' => 'R',
+ '𝑆' => 'S',
+ '𝑇' => 'T',
+ '𝑈' => 'U',
+ '𝑉' => 'V',
+ '𝑊' => 'W',
+ '𝑋' => 'X',
+ '𝑌' => 'Y',
+ '𝑍' => 'Z',
+ '𝑎' => 'a',
+ '𝑏' => 'b',
+ '𝑐' => 'c',
+ '𝑑' => 'd',
+ '𝑒' => 'e',
+ '𝑓' => 'f',
+ '𝑔' => 'g',
+ '𝑖' => 'i',
+ '𝑗' => 'j',
+ '𝑘' => 'k',
+ '𝑙' => 'l',
+ '𝑚' => 'm',
+ '𝑛' => 'n',
+ '𝑜' => 'o',
+ '𝑝' => 'p',
+ '𝑞' => 'q',
+ '𝑟' => 'r',
+ '𝑠' => 's',
+ '𝑡' => 't',
+ '𝑢' => 'u',
+ '𝑣' => 'v',
+ '𝑤' => 'w',
+ '𝑥' => 'x',
+ '𝑦' => 'y',
+ '𝑧' => 'z',
+ '𝑨' => 'A',
+ '𝑩' => 'B',
+ '𝑪' => 'C',
+ '𝑫' => 'D',
+ '𝑬' => 'E',
+ '𝑭' => 'F',
+ '𝑮' => 'G',
+ '𝑯' => 'H',
+ '𝑰' => 'I',
+ '𝑱' => 'J',
+ '𝑲' => 'K',
+ '𝑳' => 'L',
+ '𝑴' => 'M',
+ '𝑵' => 'N',
+ '𝑶' => 'O',
+ '𝑷' => 'P',
+ '𝑸' => 'Q',
+ '𝑹' => 'R',
+ '𝑺' => 'S',
+ '𝑻' => 'T',
+ '𝑼' => 'U',
+ '𝑽' => 'V',
+ '𝑾' => 'W',
+ '𝑿' => 'X',
+ '𝒀' => 'Y',
+ '𝒁' => 'Z',
+ '𝒂' => 'a',
+ '𝒃' => 'b',
+ '𝒄' => 'c',
+ '𝒅' => 'd',
+ '𝒆' => 'e',
+ '𝒇' => 'f',
+ '𝒈' => 'g',
+ '𝒉' => 'h',
+ '𝒊' => 'i',
+ '𝒋' => 'j',
+ '𝒌' => 'k',
+ '𝒍' => 'l',
+ '𝒎' => 'm',
+ '𝒏' => 'n',
+ '𝒐' => 'o',
+ '𝒑' => 'p',
+ '𝒒' => 'q',
+ '𝒓' => 'r',
+ '𝒔' => 's',
+ '𝒕' => 't',
+ '𝒖' => 'u',
+ '𝒗' => 'v',
+ '𝒘' => 'w',
+ '𝒙' => 'x',
+ '𝒚' => 'y',
+ '𝒛' => 'z',
+ '𝒜' => 'A',
+ '𝒞' => 'C',
+ '𝒟' => 'D',
+ '𝒢' => 'G',
+ '𝒥' => 'J',
+ '𝒦' => 'K',
+ '𝒩' => 'N',
+ '𝒪' => 'O',
+ '𝒫' => 'P',
+ '𝒬' => 'Q',
+ '𝒮' => 'S',
+ '𝒯' => 'T',
+ '𝒰' => 'U',
+ '𝒱' => 'V',
+ '𝒲' => 'W',
+ '𝒳' => 'X',
+ '𝒴' => 'Y',
+ '𝒵' => 'Z',
+ '𝒶' => 'a',
+ '𝒷' => 'b',
+ '𝒸' => 'c',
+ '𝒹' => 'd',
+ '𝒻' => 'f',
+ '𝒽' => 'h',
+ '𝒾' => 'i',
+ '𝒿' => 'j',
+ '𝓀' => 'k',
+ '𝓁' => 'l',
+ '𝓂' => 'm',
+ '𝓃' => 'n',
+ '𝓅' => 'p',
+ '𝓆' => 'q',
+ '𝓇' => 'r',
+ '𝓈' => 's',
+ '𝓉' => 't',
+ '𝓊' => 'u',
+ '𝓋' => 'v',
+ '𝓌' => 'w',
+ '𝓍' => 'x',
+ '𝓎' => 'y',
+ '𝓏' => 'z',
+ '𝓐' => 'A',
+ '𝓑' => 'B',
+ '𝓒' => 'C',
+ '𝓓' => 'D',
+ '𝓔' => 'E',
+ '𝓕' => 'F',
+ '𝓖' => 'G',
+ '𝓗' => 'H',
+ '𝓘' => 'I',
+ '𝓙' => 'J',
+ '𝓚' => 'K',
+ '𝓛' => 'L',
+ '𝓜' => 'M',
+ '𝓝' => 'N',
+ '𝓞' => 'O',
+ '𝓟' => 'P',
+ '𝓠' => 'Q',
+ '𝓡' => 'R',
+ '𝓢' => 'S',
+ '𝓣' => 'T',
+ '𝓤' => 'U',
+ '𝓥' => 'V',
+ '𝓦' => 'W',
+ '𝓧' => 'X',
+ '𝓨' => 'Y',
+ '𝓩' => 'Z',
+ '𝓪' => 'a',
+ '𝓫' => 'b',
+ '𝓬' => 'c',
+ '𝓭' => 'd',
+ '𝓮' => 'e',
+ '𝓯' => 'f',
+ '𝓰' => 'g',
+ '𝓱' => 'h',
+ '𝓲' => 'i',
+ '𝓳' => 'j',
+ '𝓴' => 'k',
+ '𝓵' => 'l',
+ '𝓶' => 'm',
+ '𝓷' => 'n',
+ '𝓸' => 'o',
+ '𝓹' => 'p',
+ '𝓺' => 'q',
+ '𝓻' => 'r',
+ '𝓼' => 's',
+ '𝓽' => 't',
+ '𝓾' => 'u',
+ '𝓿' => 'v',
+ '𝔀' => 'w',
+ '𝔁' => 'x',
+ '𝔂' => 'y',
+ '𝔃' => 'z',
+ '𝔄' => 'A',
+ '𝔅' => 'B',
+ '𝔇' => 'D',
+ '𝔈' => 'E',
+ '𝔉' => 'F',
+ '𝔊' => 'G',
+ '𝔍' => 'J',
+ '𝔎' => 'K',
+ '𝔏' => 'L',
+ '𝔐' => 'M',
+ '𝔑' => 'N',
+ '𝔒' => 'O',
+ '𝔓' => 'P',
+ '𝔔' => 'Q',
+ '𝔖' => 'S',
+ '𝔗' => 'T',
+ '𝔘' => 'U',
+ '𝔙' => 'V',
+ '𝔚' => 'W',
+ '𝔛' => 'X',
+ '𝔜' => 'Y',
+ '𝔞' => 'a',
+ '𝔟' => 'b',
+ '𝔠' => 'c',
+ '𝔡' => 'd',
+ '𝔢' => 'e',
+ '𝔣' => 'f',
+ '𝔤' => 'g',
+ '𝔥' => 'h',
+ '𝔦' => 'i',
+ '𝔧' => 'j',
+ '𝔨' => 'k',
+ '𝔩' => 'l',
+ '𝔪' => 'm',
+ '𝔫' => 'n',
+ '𝔬' => 'o',
+ '𝔭' => 'p',
+ '𝔮' => 'q',
+ '𝔯' => 'r',
+ '𝔰' => 's',
+ '𝔱' => 't',
+ '𝔲' => 'u',
+ '𝔳' => 'v',
+ '𝔴' => 'w',
+ '𝔵' => 'x',
+ '𝔶' => 'y',
+ '𝔷' => 'z',
+ '𝔸' => 'A',
+ '𝔹' => 'B',
+ '𝔻' => 'D',
+ '𝔼' => 'E',
+ '𝔽' => 'F',
+ '𝔾' => 'G',
+ '𝕀' => 'I',
+ '𝕁' => 'J',
+ '𝕂' => 'K',
+ '𝕃' => 'L',
+ '𝕄' => 'M',
+ '𝕆' => 'O',
+ '𝕊' => 'S',
+ '𝕋' => 'T',
+ '𝕌' => 'U',
+ '𝕍' => 'V',
+ '𝕎' => 'W',
+ '𝕏' => 'X',
+ '𝕐' => 'Y',
+ '𝕒' => 'a',
+ '𝕓' => 'b',
+ '𝕔' => 'c',
+ '𝕕' => 'd',
+ '𝕖' => 'e',
+ '𝕗' => 'f',
+ '𝕘' => 'g',
+ '𝕙' => 'h',
+ '𝕚' => 'i',
+ '𝕛' => 'j',
+ '𝕜' => 'k',
+ '𝕝' => 'l',
+ '𝕞' => 'm',
+ '𝕟' => 'n',
+ '𝕠' => 'o',
+ '𝕡' => 'p',
+ '𝕢' => 'q',
+ '𝕣' => 'r',
+ '𝕤' => 's',
+ '𝕥' => 't',
+ '𝕦' => 'u',
+ '𝕧' => 'v',
+ '𝕨' => 'w',
+ '𝕩' => 'x',
+ '𝕪' => 'y',
+ '𝕫' => 'z',
+ '𝕬' => 'A',
+ '𝕭' => 'B',
+ '𝕮' => 'C',
+ '𝕯' => 'D',
+ '𝕰' => 'E',
+ '𝕱' => 'F',
+ '𝕲' => 'G',
+ '𝕳' => 'H',
+ '𝕴' => 'I',
+ '𝕵' => 'J',
+ '𝕶' => 'K',
+ '𝕷' => 'L',
+ '𝕸' => 'M',
+ '𝕹' => 'N',
+ '𝕺' => 'O',
+ '𝕻' => 'P',
+ '𝕼' => 'Q',
+ '𝕽' => 'R',
+ '𝕾' => 'S',
+ '𝕿' => 'T',
+ '𝖀' => 'U',
+ '𝖁' => 'V',
+ '𝖂' => 'W',
+ '𝖃' => 'X',
+ '𝖄' => 'Y',
+ '𝖅' => 'Z',
+ '𝖆' => 'a',
+ '𝖇' => 'b',
+ '𝖈' => 'c',
+ '𝖉' => 'd',
+ '𝖊' => 'e',
+ '𝖋' => 'f',
+ '𝖌' => 'g',
+ '𝖍' => 'h',
+ '𝖎' => 'i',
+ '𝖏' => 'j',
+ '𝖐' => 'k',
+ '𝖑' => 'l',
+ '𝖒' => 'm',
+ '𝖓' => 'n',
+ '𝖔' => 'o',
+ '𝖕' => 'p',
+ '𝖖' => 'q',
+ '𝖗' => 'r',
+ '𝖘' => 's',
+ '𝖙' => 't',
+ '𝖚' => 'u',
+ '𝖛' => 'v',
+ '𝖜' => 'w',
+ '𝖝' => 'x',
+ '𝖞' => 'y',
+ '𝖟' => 'z',
+ '𝖠' => 'A',
+ '𝖡' => 'B',
+ '𝖢' => 'C',
+ '𝖣' => 'D',
+ '𝖤' => 'E',
+ '𝖥' => 'F',
+ '𝖦' => 'G',
+ '𝖧' => 'H',
+ '𝖨' => 'I',
+ '𝖩' => 'J',
+ '𝖪' => 'K',
+ '𝖫' => 'L',
+ '𝖬' => 'M',
+ '𝖭' => 'N',
+ '𝖮' => 'O',
+ '𝖯' => 'P',
+ '𝖰' => 'Q',
+ '𝖱' => 'R',
+ '𝖲' => 'S',
+ '𝖳' => 'T',
+ '𝖴' => 'U',
+ '𝖵' => 'V',
+ '𝖶' => 'W',
+ '𝖷' => 'X',
+ '𝖸' => 'Y',
+ '𝖹' => 'Z',
+ '𝖺' => 'a',
+ '𝖻' => 'b',
+ '𝖼' => 'c',
+ '𝖽' => 'd',
+ '𝖾' => 'e',
+ '𝖿' => 'f',
+ '𝗀' => 'g',
+ '𝗁' => 'h',
+ '𝗂' => 'i',
+ '𝗃' => 'j',
+ '𝗄' => 'k',
+ '𝗅' => 'l',
+ '𝗆' => 'm',
+ '𝗇' => 'n',
+ '𝗈' => 'o',
+ '𝗉' => 'p',
+ '𝗊' => 'q',
+ '𝗋' => 'r',
+ '𝗌' => 's',
+ '𝗍' => 't',
+ '𝗎' => 'u',
+ '𝗏' => 'v',
+ '𝗐' => 'w',
+ '𝗑' => 'x',
+ '𝗒' => 'y',
+ '𝗓' => 'z',
+ '𝗔' => 'A',
+ '𝗕' => 'B',
+ '𝗖' => 'C',
+ '𝗗' => 'D',
+ '𝗘' => 'E',
+ '𝗙' => 'F',
+ '𝗚' => 'G',
+ '𝗛' => 'H',
+ '𝗜' => 'I',
+ '𝗝' => 'J',
+ '𝗞' => 'K',
+ '𝗟' => 'L',
+ '𝗠' => 'M',
+ '𝗡' => 'N',
+ '𝗢' => 'O',
+ '𝗣' => 'P',
+ '𝗤' => 'Q',
+ '𝗥' => 'R',
+ '𝗦' => 'S',
+ '𝗧' => 'T',
+ '𝗨' => 'U',
+ '𝗩' => 'V',
+ '𝗪' => 'W',
+ '𝗫' => 'X',
+ '𝗬' => 'Y',
+ '𝗭' => 'Z',
+ '𝗮' => 'a',
+ '𝗯' => 'b',
+ '𝗰' => 'c',
+ '𝗱' => 'd',
+ '𝗲' => 'e',
+ '𝗳' => 'f',
+ '𝗴' => 'g',
+ '𝗵' => 'h',
+ '𝗶' => 'i',
+ '𝗷' => 'j',
+ '𝗸' => 'k',
+ '𝗹' => 'l',
+ '𝗺' => 'm',
+ '𝗻' => 'n',
+ '𝗼' => 'o',
+ '𝗽' => 'p',
+ '𝗾' => 'q',
+ '𝗿' => 'r',
+ '𝘀' => 's',
+ '𝘁' => 't',
+ '𝘂' => 'u',
+ '𝘃' => 'v',
+ '𝘄' => 'w',
+ '𝘅' => 'x',
+ '𝘆' => 'y',
+ '𝘇' => 'z',
+ '𝘈' => 'A',
+ '𝘉' => 'B',
+ '𝘊' => 'C',
+ '𝘋' => 'D',
+ '𝘌' => 'E',
+ '𝘍' => 'F',
+ '𝘎' => 'G',
+ '𝘏' => 'H',
+ '𝘐' => 'I',
+ '𝘑' => 'J',
+ '𝘒' => 'K',
+ '𝘓' => 'L',
+ '𝘔' => 'M',
+ '𝘕' => 'N',
+ '𝘖' => 'O',
+ '𝘗' => 'P',
+ '𝘘' => 'Q',
+ '𝘙' => 'R',
+ '𝘚' => 'S',
+ '𝘛' => 'T',
+ '𝘜' => 'U',
+ '𝘝' => 'V',
+ '𝘞' => 'W',
+ '𝘟' => 'X',
+ '𝘠' => 'Y',
+ '𝘡' => 'Z',
+ '𝘢' => 'a',
+ '𝘣' => 'b',
+ '𝘤' => 'c',
+ '𝘥' => 'd',
+ '𝘦' => 'e',
+ '𝘧' => 'f',
+ '𝘨' => 'g',
+ '𝘩' => 'h',
+ '𝘪' => 'i',
+ '𝘫' => 'j',
+ '𝘬' => 'k',
+ '𝘭' => 'l',
+ '𝘮' => 'm',
+ '𝘯' => 'n',
+ '𝘰' => 'o',
+ '𝘱' => 'p',
+ '𝘲' => 'q',
+ '𝘳' => 'r',
+ '𝘴' => 's',
+ '𝘵' => 't',
+ '𝘶' => 'u',
+ '𝘷' => 'v',
+ '𝘸' => 'w',
+ '𝘹' => 'x',
+ '𝘺' => 'y',
+ '𝘻' => 'z',
+ '𝘼' => 'A',
+ '𝘽' => 'B',
+ '𝘾' => 'C',
+ '𝘿' => 'D',
+ '𝙀' => 'E',
+ '𝙁' => 'F',
+ '𝙂' => 'G',
+ '𝙃' => 'H',
+ '𝙄' => 'I',
+ '𝙅' => 'J',
+ '𝙆' => 'K',
+ '𝙇' => 'L',
+ '𝙈' => 'M',
+ '𝙉' => 'N',
+ '𝙊' => 'O',
+ '𝙋' => 'P',
+ '𝙌' => 'Q',
+ '𝙍' => 'R',
+ '𝙎' => 'S',
+ '𝙏' => 'T',
+ '𝙐' => 'U',
+ '𝙑' => 'V',
+ '𝙒' => 'W',
+ '𝙓' => 'X',
+ '𝙔' => 'Y',
+ '𝙕' => 'Z',
+ '𝙖' => 'a',
+ '𝙗' => 'b',
+ '𝙘' => 'c',
+ '𝙙' => 'd',
+ '𝙚' => 'e',
+ '𝙛' => 'f',
+ '𝙜' => 'g',
+ '𝙝' => 'h',
+ '𝙞' => 'i',
+ '𝙟' => 'j',
+ '𝙠' => 'k',
+ '𝙡' => 'l',
+ '𝙢' => 'm',
+ '𝙣' => 'n',
+ '𝙤' => 'o',
+ '𝙥' => 'p',
+ '𝙦' => 'q',
+ '𝙧' => 'r',
+ '𝙨' => 's',
+ '𝙩' => 't',
+ '𝙪' => 'u',
+ '𝙫' => 'v',
+ '𝙬' => 'w',
+ '𝙭' => 'x',
+ '𝙮' => 'y',
+ '𝙯' => 'z',
+ '𝙰' => 'A',
+ '𝙱' => 'B',
+ '𝙲' => 'C',
+ '𝙳' => 'D',
+ '𝙴' => 'E',
+ '𝙵' => 'F',
+ '𝙶' => 'G',
+ '𝙷' => 'H',
+ '𝙸' => 'I',
+ '𝙹' => 'J',
+ '𝙺' => 'K',
+ '𝙻' => 'L',
+ '𝙼' => 'M',
+ '𝙽' => 'N',
+ '𝙾' => 'O',
+ '𝙿' => 'P',
+ '𝚀' => 'Q',
+ '𝚁' => 'R',
+ '𝚂' => 'S',
+ '𝚃' => 'T',
+ '𝚄' => 'U',
+ '𝚅' => 'V',
+ '𝚆' => 'W',
+ '𝚇' => 'X',
+ '𝚈' => 'Y',
+ '𝚉' => 'Z',
+ '𝚊' => 'a',
+ '𝚋' => 'b',
+ '𝚌' => 'c',
+ '𝚍' => 'd',
+ '𝚎' => 'e',
+ '𝚏' => 'f',
+ '𝚐' => 'g',
+ '𝚑' => 'h',
+ '𝚒' => 'i',
+ '𝚓' => 'j',
+ '𝚔' => 'k',
+ '𝚕' => 'l',
+ '𝚖' => 'm',
+ '𝚗' => 'n',
+ '𝚘' => 'o',
+ '𝚙' => 'p',
+ '𝚚' => 'q',
+ '𝚛' => 'r',
+ '𝚜' => 's',
+ '𝚝' => 't',
+ '𝚞' => 'u',
+ '𝚟' => 'v',
+ '𝚠' => 'w',
+ '𝚡' => 'x',
+ '𝚢' => 'y',
+ '𝚣' => 'z',
+ '𝚤' => 'ı',
+ '𝚥' => 'ȷ',
+ '𝚨' => 'Α',
+ '𝚩' => 'Β',
+ '𝚪' => 'Γ',
+ '𝚫' => 'Δ',
+ '𝚬' => 'Ε',
+ '𝚭' => 'Ζ',
+ '𝚮' => 'Η',
+ '𝚯' => 'Θ',
+ '𝚰' => 'Ι',
+ '𝚱' => 'Κ',
+ '𝚲' => 'Λ',
+ '𝚳' => 'Μ',
+ '𝚴' => 'Ν',
+ '𝚵' => 'Ξ',
+ '𝚶' => 'Ο',
+ '𝚷' => 'Π',
+ '𝚸' => 'Ρ',
+ '𝚹' => 'ϴ',
+ '𝚺' => 'Σ',
+ '𝚻' => 'Τ',
+ '𝚼' => 'Υ',
+ '𝚽' => 'Φ',
+ '𝚾' => 'Χ',
+ '𝚿' => 'Ψ',
+ '𝛀' => 'Ω',
+ '𝛁' => '∇',
+ '𝛂' => 'α',
+ '𝛃' => 'β',
+ '𝛄' => 'γ',
+ '𝛅' => 'δ',
+ '𝛆' => 'ε',
+ '𝛇' => 'ζ',
+ '𝛈' => 'η',
+ '𝛉' => 'θ',
+ '𝛊' => 'ι',
+ '𝛋' => 'κ',
+ '𝛌' => 'λ',
+ '𝛍' => 'μ',
+ '𝛎' => 'ν',
+ '𝛏' => 'ξ',
+ '𝛐' => 'ο',
+ '𝛑' => 'π',
+ '𝛒' => 'ρ',
+ '𝛓' => 'ς',
+ '𝛔' => 'σ',
+ '𝛕' => 'τ',
+ '𝛖' => 'υ',
+ '𝛗' => 'φ',
+ '𝛘' => 'χ',
+ '𝛙' => 'ψ',
+ '𝛚' => 'ω',
+ '𝛛' => '∂',
+ '𝛜' => 'ϵ',
+ '𝛝' => 'ϑ',
+ '𝛞' => 'ϰ',
+ '𝛟' => 'ϕ',
+ '𝛠' => 'ϱ',
+ '𝛡' => 'ϖ',
+ '𝛢' => 'Α',
+ '𝛣' => 'Β',
+ '𝛤' => 'Γ',
+ '𝛥' => 'Δ',
+ '𝛦' => 'Ε',
+ '𝛧' => 'Ζ',
+ '𝛨' => 'Η',
+ '𝛩' => 'Θ',
+ '𝛪' => 'Ι',
+ '𝛫' => 'Κ',
+ '𝛬' => 'Λ',
+ '𝛭' => 'Μ',
+ '𝛮' => 'Ν',
+ '𝛯' => 'Ξ',
+ '𝛰' => 'Ο',
+ '𝛱' => 'Π',
+ '𝛲' => 'Ρ',
+ '𝛳' => 'ϴ',
+ '𝛴' => 'Σ',
+ '𝛵' => 'Τ',
+ '𝛶' => 'Υ',
+ '𝛷' => 'Φ',
+ '𝛸' => 'Χ',
+ '𝛹' => 'Ψ',
+ '𝛺' => 'Ω',
+ '𝛻' => '∇',
+ '𝛼' => 'α',
+ '𝛽' => 'β',
+ '𝛾' => 'γ',
+ '𝛿' => 'δ',
+ '𝜀' => 'ε',
+ '𝜁' => 'ζ',
+ '𝜂' => 'η',
+ '𝜃' => 'θ',
+ '𝜄' => 'ι',
+ '𝜅' => 'κ',
+ '𝜆' => 'λ',
+ '𝜇' => 'μ',
+ '𝜈' => 'ν',
+ '𝜉' => 'ξ',
+ '𝜊' => 'ο',
+ '𝜋' => 'π',
+ '𝜌' => 'ρ',
+ '𝜍' => 'ς',
+ '𝜎' => 'σ',
+ '𝜏' => 'τ',
+ '𝜐' => 'υ',
+ '𝜑' => 'φ',
+ '𝜒' => 'χ',
+ '𝜓' => 'ψ',
+ '𝜔' => 'ω',
+ '𝜕' => '∂',
+ '𝜖' => 'ϵ',
+ '𝜗' => 'ϑ',
+ '𝜘' => 'ϰ',
+ '𝜙' => 'ϕ',
+ '𝜚' => 'ϱ',
+ '𝜛' => 'ϖ',
+ '𝜜' => 'Α',
+ '𝜝' => 'Β',
+ '𝜞' => 'Γ',
+ '𝜟' => 'Δ',
+ '𝜠' => 'Ε',
+ '𝜡' => 'Ζ',
+ '𝜢' => 'Η',
+ '𝜣' => 'Θ',
+ '𝜤' => 'Ι',
+ '𝜥' => 'Κ',
+ '𝜦' => 'Λ',
+ '𝜧' => 'Μ',
+ '𝜨' => 'Ν',
+ '𝜩' => 'Ξ',
+ '𝜪' => 'Ο',
+ '𝜫' => 'Π',
+ '𝜬' => 'Ρ',
+ '𝜭' => 'ϴ',
+ '𝜮' => 'Σ',
+ '𝜯' => 'Τ',
+ '𝜰' => 'Υ',
+ '𝜱' => 'Φ',
+ '𝜲' => 'Χ',
+ '𝜳' => 'Ψ',
+ '𝜴' => 'Ω',
+ '𝜵' => '∇',
+ '𝜶' => 'α',
+ '𝜷' => 'β',
+ '𝜸' => 'γ',
+ '𝜹' => 'δ',
+ '𝜺' => 'ε',
+ '𝜻' => 'ζ',
+ '𝜼' => 'η',
+ '𝜽' => 'θ',
+ '𝜾' => 'ι',
+ '𝜿' => 'κ',
+ '𝝀' => 'λ',
+ '𝝁' => 'μ',
+ '𝝂' => 'ν',
+ '𝝃' => 'ξ',
+ '𝝄' => 'ο',
+ '𝝅' => 'π',
+ '𝝆' => 'ρ',
+ '𝝇' => 'ς',
+ '𝝈' => 'σ',
+ '𝝉' => 'τ',
+ '𝝊' => 'υ',
+ '𝝋' => 'φ',
+ '𝝌' => 'χ',
+ '𝝍' => 'ψ',
+ '𝝎' => 'ω',
+ '𝝏' => '∂',
+ '𝝐' => 'ϵ',
+ '𝝑' => 'ϑ',
+ '𝝒' => 'ϰ',
+ '𝝓' => 'ϕ',
+ '𝝔' => 'ϱ',
+ '𝝕' => 'ϖ',
+ '𝝖' => 'Α',
+ '𝝗' => 'Β',
+ '𝝘' => 'Γ',
+ '𝝙' => 'Δ',
+ '𝝚' => 'Ε',
+ '𝝛' => 'Ζ',
+ '𝝜' => 'Η',
+ '𝝝' => 'Θ',
+ '𝝞' => 'Ι',
+ '𝝟' => 'Κ',
+ '𝝠' => 'Λ',
+ '𝝡' => 'Μ',
+ '𝝢' => 'Ν',
+ '𝝣' => 'Ξ',
+ '𝝤' => 'Ο',
+ '𝝥' => 'Π',
+ '𝝦' => 'Ρ',
+ '𝝧' => 'ϴ',
+ '𝝨' => 'Σ',
+ '𝝩' => 'Τ',
+ '𝝪' => 'Υ',
+ '𝝫' => 'Φ',
+ '𝝬' => 'Χ',
+ '𝝭' => 'Ψ',
+ '𝝮' => 'Ω',
+ '𝝯' => '∇',
+ '𝝰' => 'α',
+ '𝝱' => 'β',
+ '𝝲' => 'γ',
+ '𝝳' => 'δ',
+ '𝝴' => 'ε',
+ '𝝵' => 'ζ',
+ '𝝶' => 'η',
+ '𝝷' => 'θ',
+ '𝝸' => 'ι',
+ '𝝹' => 'κ',
+ '𝝺' => 'λ',
+ '𝝻' => 'μ',
+ '𝝼' => 'ν',
+ '𝝽' => 'ξ',
+ '𝝾' => 'ο',
+ '𝝿' => 'π',
+ '𝞀' => 'ρ',
+ '𝞁' => 'ς',
+ '𝞂' => 'σ',
+ '𝞃' => 'τ',
+ '𝞄' => 'υ',
+ '𝞅' => 'φ',
+ '𝞆' => 'χ',
+ '𝞇' => 'ψ',
+ '𝞈' => 'ω',
+ '𝞉' => '∂',
+ '𝞊' => 'ϵ',
+ '𝞋' => 'ϑ',
+ '𝞌' => 'ϰ',
+ '𝞍' => 'ϕ',
+ '𝞎' => 'ϱ',
+ '𝞏' => 'ϖ',
+ '𝞐' => 'Α',
+ '𝞑' => 'Β',
+ '𝞒' => 'Γ',
+ '𝞓' => 'Δ',
+ '𝞔' => 'Ε',
+ '𝞕' => 'Ζ',
+ '𝞖' => 'Η',
+ '𝞗' => 'Θ',
+ '𝞘' => 'Ι',
+ '𝞙' => 'Κ',
+ '𝞚' => 'Λ',
+ '𝞛' => 'Μ',
+ '𝞜' => 'Ν',
+ '𝞝' => 'Ξ',
+ '𝞞' => 'Ο',
+ '𝞟' => 'Π',
+ '𝞠' => 'Ρ',
+ '𝞡' => 'ϴ',
+ '𝞢' => 'Σ',
+ '𝞣' => 'Τ',
+ '𝞤' => 'Υ',
+ '𝞥' => 'Φ',
+ '𝞦' => 'Χ',
+ '𝞧' => 'Ψ',
+ '𝞨' => 'Ω',
+ '𝞩' => '∇',
+ '𝞪' => 'α',
+ '𝞫' => 'β',
+ '𝞬' => 'γ',
+ '𝞭' => 'δ',
+ '𝞮' => 'ε',
+ '𝞯' => 'ζ',
+ '𝞰' => 'η',
+ '𝞱' => 'θ',
+ '𝞲' => 'ι',
+ '𝞳' => 'κ',
+ '𝞴' => 'λ',
+ '𝞵' => 'μ',
+ '𝞶' => 'ν',
+ '𝞷' => 'ξ',
+ '𝞸' => 'ο',
+ '𝞹' => 'π',
+ '𝞺' => 'ρ',
+ '𝞻' => 'ς',
+ '𝞼' => 'σ',
+ '𝞽' => 'τ',
+ '𝞾' => 'υ',
+ '𝞿' => 'φ',
+ '𝟀' => 'χ',
+ '𝟁' => 'ψ',
+ '𝟂' => 'ω',
+ '𝟃' => '∂',
+ '𝟄' => 'ϵ',
+ '𝟅' => 'ϑ',
+ '𝟆' => 'ϰ',
+ '𝟇' => 'ϕ',
+ '𝟈' => 'ϱ',
+ '𝟉' => 'ϖ',
+ '𝟊' => 'Ϝ',
+ '𝟋' => 'ϝ',
+ '𝟎' => '0',
+ '𝟏' => '1',
+ '𝟐' => '2',
+ '𝟑' => '3',
+ '𝟒' => '4',
+ '𝟓' => '5',
+ '𝟔' => '6',
+ '𝟕' => '7',
+ '𝟖' => '8',
+ '𝟗' => '9',
+ '𝟘' => '0',
+ '𝟙' => '1',
+ '𝟚' => '2',
+ '𝟛' => '3',
+ '𝟜' => '4',
+ '𝟝' => '5',
+ '𝟞' => '6',
+ '𝟟' => '7',
+ '𝟠' => '8',
+ '𝟡' => '9',
+ '𝟢' => '0',
+ '𝟣' => '1',
+ '𝟤' => '2',
+ '𝟥' => '3',
+ '𝟦' => '4',
+ '𝟧' => '5',
+ '𝟨' => '6',
+ '𝟩' => '7',
+ '𝟪' => '8',
+ '𝟫' => '9',
+ '𝟬' => '0',
+ '𝟭' => '1',
+ '𝟮' => '2',
+ '𝟯' => '3',
+ '𝟰' => '4',
+ '𝟱' => '5',
+ '𝟲' => '6',
+ '𝟳' => '7',
+ '𝟴' => '8',
+ '𝟵' => '9',
+ '𝟶' => '0',
+ '𝟷' => '1',
+ '𝟸' => '2',
+ '𝟹' => '3',
+ '𝟺' => '4',
+ '𝟻' => '5',
+ '𝟼' => '6',
+ '𝟽' => '7',
+ '𝟾' => '8',
+ '𝟿' => '9',
+ '𞸀' => 'ا',
+ '𞸁' => 'ب',
+ '𞸂' => 'ج',
+ '𞸃' => 'د',
+ '𞸅' => 'و',
+ '𞸆' => 'ز',
+ '𞸇' => 'ح',
+ '𞸈' => 'ط',
+ '𞸉' => 'ي',
+ '𞸊' => 'ك',
+ '𞸋' => 'ل',
+ '𞸌' => 'م',
+ '𞸍' => 'ن',
+ '𞸎' => 'س',
+ '𞸏' => 'ع',
+ '𞸐' => 'ف',
+ '𞸑' => 'ص',
+ '𞸒' => 'ق',
+ '𞸓' => 'ر',
+ '𞸔' => 'ش',
+ '𞸕' => 'ت',
+ '𞸖' => 'ث',
+ '𞸗' => 'خ',
+ '𞸘' => 'ذ',
+ '𞸙' => 'ض',
+ '𞸚' => 'ظ',
+ '𞸛' => 'غ',
+ '𞸜' => 'ٮ',
+ '𞸝' => 'ں',
+ '𞸞' => 'ڡ',
+ '𞸟' => 'ٯ',
+ '𞸡' => 'ب',
+ '𞸢' => 'ج',
+ '𞸤' => 'ه',
+ '𞸧' => 'ح',
+ '𞸩' => 'ي',
+ '𞸪' => 'ك',
+ '𞸫' => 'ل',
+ '𞸬' => 'م',
+ '𞸭' => 'ن',
+ '𞸮' => 'س',
+ '𞸯' => 'ع',
+ '𞸰' => 'ف',
+ '𞸱' => 'ص',
+ '𞸲' => 'ق',
+ '𞸴' => 'ش',
+ '𞸵' => 'ت',
+ '𞸶' => 'ث',
+ '𞸷' => 'خ',
+ '𞸹' => 'ض',
+ '𞸻' => 'غ',
+ '𞹂' => 'ج',
+ '𞹇' => 'ح',
+ '𞹉' => 'ي',
+ '𞹋' => 'ل',
+ '𞹍' => 'ن',
+ '𞹎' => 'س',
+ '𞹏' => 'ع',
+ '𞹑' => 'ص',
+ '𞹒' => 'ق',
+ '𞹔' => 'ش',
+ '𞹗' => 'خ',
+ '𞹙' => 'ض',
+ '𞹛' => 'غ',
+ '𞹝' => 'ں',
+ '𞹟' => 'ٯ',
+ '𞹡' => 'ب',
+ '𞹢' => 'ج',
+ '𞹤' => 'ه',
+ '𞹧' => 'ح',
+ '𞹨' => 'ط',
+ '𞹩' => 'ي',
+ '𞹪' => 'ك',
+ '𞹬' => 'م',
+ '𞹭' => 'ن',
+ '𞹮' => 'س',
+ '𞹯' => 'ع',
+ '𞹰' => 'ف',
+ '𞹱' => 'ص',
+ '𞹲' => 'ق',
+ '𞹴' => 'ش',
+ '𞹵' => 'ت',
+ '𞹶' => 'ث',
+ '𞹷' => 'خ',
+ '𞹹' => 'ض',
+ '𞹺' => 'ظ',
+ '𞹻' => 'غ',
+ '𞹼' => 'ٮ',
+ '𞹾' => 'ڡ',
+ '𞺀' => 'ا',
+ '𞺁' => 'ب',
+ '𞺂' => 'ج',
+ '𞺃' => 'د',
+ '𞺄' => 'ه',
+ '𞺅' => 'و',
+ '𞺆' => 'ز',
+ '𞺇' => 'ح',
+ '𞺈' => 'ط',
+ '𞺉' => 'ي',
+ '𞺋' => 'ل',
+ '𞺌' => 'م',
+ '𞺍' => 'ن',
+ '𞺎' => 'س',
+ '𞺏' => 'ع',
+ '𞺐' => 'ف',
+ '𞺑' => 'ص',
+ '𞺒' => 'ق',
+ '𞺓' => 'ر',
+ '𞺔' => 'ش',
+ '𞺕' => 'ت',
+ '𞺖' => 'ث',
+ '𞺗' => 'خ',
+ '𞺘' => 'ذ',
+ '𞺙' => 'ض',
+ '𞺚' => 'ظ',
+ '𞺛' => 'غ',
+ '𞺡' => 'ب',
+ '𞺢' => 'ج',
+ '𞺣' => 'د',
+ '𞺥' => 'و',
+ '𞺦' => 'ز',
+ '𞺧' => 'ح',
+ '𞺨' => 'ط',
+ '𞺩' => 'ي',
+ '𞺫' => 'ل',
+ '𞺬' => 'م',
+ '𞺭' => 'ن',
+ '𞺮' => 'س',
+ '𞺯' => 'ع',
+ '𞺰' => 'ف',
+ '𞺱' => 'ص',
+ '𞺲' => 'ق',
+ '𞺳' => 'ر',
+ '𞺴' => 'ش',
+ '𞺵' => 'ت',
+ '𞺶' => 'ث',
+ '𞺷' => 'خ',
+ '𞺸' => 'ذ',
+ '𞺹' => 'ض',
+ '𞺺' => 'ظ',
+ '𞺻' => 'غ',
+ '🄀' => '0.',
+ '🄁' => '0,',
+ '🄂' => '1,',
+ '🄃' => '2,',
+ '🄄' => '3,',
+ '🄅' => '4,',
+ '🄆' => '5,',
+ '🄇' => '6,',
+ '🄈' => '7,',
+ '🄉' => '8,',
+ '🄊' => '9,',
+ '🄐' => '(A)',
+ '🄑' => '(B)',
+ '🄒' => '(C)',
+ '🄓' => '(D)',
+ '🄔' => '(E)',
+ '🄕' => '(F)',
+ '🄖' => '(G)',
+ '🄗' => '(H)',
+ '🄘' => '(I)',
+ '🄙' => '(J)',
+ '🄚' => '(K)',
+ '🄛' => '(L)',
+ '🄜' => '(M)',
+ '🄝' => '(N)',
+ '🄞' => '(O)',
+ '🄟' => '(P)',
+ '🄠' => '(Q)',
+ '🄡' => '(R)',
+ '🄢' => '(S)',
+ '🄣' => '(T)',
+ '🄤' => '(U)',
+ '🄥' => '(V)',
+ '🄦' => '(W)',
+ '🄧' => '(X)',
+ '🄨' => '(Y)',
+ '🄩' => '(Z)',
+ '🄪' => '〔S〕',
+ '🄫' => '(C)',
+ '🄬' => '(R)',
+ '🄭' => '(CD)',
+ '🄮' => '(WZ)',
+ '🄰' => 'A',
+ '🄱' => 'B',
+ '🄲' => 'C',
+ '🄳' => 'D',
+ '🄴' => 'E',
+ '🄵' => 'F',
+ '🄶' => 'G',
+ '🄷' => 'H',
+ '🄸' => 'I',
+ '🄹' => 'J',
+ '🄺' => 'K',
+ '🄻' => 'L',
+ '🄼' => 'M',
+ '🄽' => 'N',
+ '🄾' => 'O',
+ '🄿' => 'P',
+ '🅀' => 'Q',
+ '🅁' => 'R',
+ '🅂' => 'S',
+ '🅃' => 'T',
+ '🅄' => 'U',
+ '🅅' => 'V',
+ '🅆' => 'W',
+ '🅇' => 'X',
+ '🅈' => 'Y',
+ '🅉' => 'Z',
+ '🅊' => 'HV',
+ '🅋' => 'MV',
+ '🅌' => 'SD',
+ '🅍' => 'SS',
+ '🅎' => 'PPV',
+ '🅏' => 'WC',
+ '🆐' => 'DJ',
+ '🈀' => 'ほか',
+ '🈁' => 'ココ',
+ '🈂' => 'サ',
+ '🈐' => '手',
+ '🈑' => '字',
+ '🈒' => '双',
+ '🈓' => 'デ',
+ '🈔' => '二',
+ '🈕' => '多',
+ '🈖' => '解',
+ '🈗' => '天',
+ '🈘' => '交',
+ '🈙' => '映',
+ '🈚' => '無',
+ '🈛' => '料',
+ '🈜' => '前',
+ '🈝' => '後',
+ '🈞' => '再',
+ '🈟' => '新',
+ '🈠' => '初',
+ '🈡' => '終',
+ '🈢' => '生',
+ '🈣' => '販',
+ '🈤' => '声',
+ '🈥' => '吹',
+ '🈦' => '演',
+ '🈧' => '投',
+ '🈨' => '捕',
+ '🈩' => '一',
+ '🈪' => '三',
+ '🈫' => '遊',
+ '🈬' => '左',
+ '🈭' => '中',
+ '🈮' => '右',
+ '🈯' => '指',
+ '🈰' => '走',
+ '🈱' => '打',
+ '🈲' => '禁',
+ '🈳' => '空',
+ '🈴' => '合',
+ '🈵' => '満',
+ '🈶' => '有',
+ '🈷' => '月',
+ '🈸' => '申',
+ '🈹' => '割',
+ '🈺' => '営',
+ '🈻' => '配',
+ '🉀' => '〔本〕',
+ '🉁' => '〔三〕',
+ '🉂' => '〔二〕',
+ '🉃' => '〔安〕',
+ '🉄' => '〔点〕',
+ '🉅' => '〔打〕',
+ '🉆' => '〔盗〕',
+ '🉇' => '〔勝〕',
+ '🉈' => '〔敗〕',
+ '🉐' => '(得)',
+ '🉑' => '(可)',
+ '🯰' => '0',
+ '🯱' => '1',
+ '🯲' => '2',
+ '🯳' => '3',
+ '🯴' => '4',
+ '🯵' => '5',
+ '🯶' => '6',
+ '🯷' => '7',
+ '🯸' => '8',
+ '🯹' => '9',
+ '丽' => '丽',
+ '丸' => '丸',
+ '乁' => '乁',
+ '𠄢' => '𠄢',
+ '你' => '你',
+ '侮' => '侮',
+ '侻' => '侻',
+ '倂' => '倂',
+ '偺' => '偺',
+ '備' => '備',
+ '僧' => '僧',
+ '像' => '像',
+ '㒞' => '㒞',
+ '𠘺' => '𠘺',
+ '免' => '免',
+ '兔' => '兔',
+ '兤' => '兤',
+ '具' => '具',
+ '𠔜' => '𠔜',
+ '㒹' => '㒹',
+ '內' => '內',
+ '再' => '再',
+ '𠕋' => '𠕋',
+ '冗' => '冗',
+ '冤' => '冤',
+ '仌' => '仌',
+ '冬' => '冬',
+ '况' => '况',
+ '𩇟' => '𩇟',
+ '凵' => '凵',
+ '刃' => '刃',
+ '㓟' => '㓟',
+ '刻' => '刻',
+ '剆' => '剆',
+ '割' => '割',
+ '剷' => '剷',
+ '㔕' => '㔕',
+ '勇' => '勇',
+ '勉' => '勉',
+ '勤' => '勤',
+ '勺' => '勺',
+ '包' => '包',
+ '匆' => '匆',
+ '北' => '北',
+ '卉' => '卉',
+ '卑' => '卑',
+ '博' => '博',
+ '即' => '即',
+ '卽' => '卽',
+ '卿' => '卿',
+ '卿' => '卿',
+ '卿' => '卿',
+ '𠨬' => '𠨬',
+ '灰' => '灰',
+ '及' => '及',
+ '叟' => '叟',
+ '𠭣' => '𠭣',
+ '叫' => '叫',
+ '叱' => '叱',
+ '吆' => '吆',
+ '咞' => '咞',
+ '吸' => '吸',
+ '呈' => '呈',
+ '周' => '周',
+ '咢' => '咢',
+ '哶' => '哶',
+ '唐' => '唐',
+ '啓' => '啓',
+ '啣' => '啣',
+ '善' => '善',
+ '善' => '善',
+ '喙' => '喙',
+ '喫' => '喫',
+ '喳' => '喳',
+ '嗂' => '嗂',
+ '圖' => '圖',
+ '嘆' => '嘆',
+ '圗' => '圗',
+ '噑' => '噑',
+ '噴' => '噴',
+ '切' => '切',
+ '壮' => '壮',
+ '城' => '城',
+ '埴' => '埴',
+ '堍' => '堍',
+ '型' => '型',
+ '堲' => '堲',
+ '報' => '報',
+ '墬' => '墬',
+ '𡓤' => '𡓤',
+ '売' => '売',
+ '壷' => '壷',
+ '夆' => '夆',
+ '多' => '多',
+ '夢' => '夢',
+ '奢' => '奢',
+ '𡚨' => '𡚨',
+ '𡛪' => '𡛪',
+ '姬' => '姬',
+ '娛' => '娛',
+ '娧' => '娧',
+ '姘' => '姘',
+ '婦' => '婦',
+ '㛮' => '㛮',
+ '㛼' => '㛼',
+ '嬈' => '嬈',
+ '嬾' => '嬾',
+ '嬾' => '嬾',
+ '𡧈' => '𡧈',
+ '寃' => '寃',
+ '寘' => '寘',
+ '寧' => '寧',
+ '寳' => '寳',
+ '𡬘' => '𡬘',
+ '寿' => '寿',
+ '将' => '将',
+ '当' => '当',
+ '尢' => '尢',
+ '㞁' => '㞁',
+ '屠' => '屠',
+ '屮' => '屮',
+ '峀' => '峀',
+ '岍' => '岍',
+ '𡷤' => '𡷤',
+ '嵃' => '嵃',
+ '𡷦' => '𡷦',
+ '嵮' => '嵮',
+ '嵫' => '嵫',
+ '嵼' => '嵼',
+ '巡' => '巡',
+ '巢' => '巢',
+ '㠯' => '㠯',
+ '巽' => '巽',
+ '帨' => '帨',
+ '帽' => '帽',
+ '幩' => '幩',
+ '㡢' => '㡢',
+ '𢆃' => '𢆃',
+ '㡼' => '㡼',
+ '庰' => '庰',
+ '庳' => '庳',
+ '庶' => '庶',
+ '廊' => '廊',
+ '𪎒' => '𪎒',
+ '廾' => '廾',
+ '𢌱' => '𢌱',
+ '𢌱' => '𢌱',
+ '舁' => '舁',
+ '弢' => '弢',
+ '弢' => '弢',
+ '㣇' => '㣇',
+ '𣊸' => '𣊸',
+ '𦇚' => '𦇚',
+ '形' => '形',
+ '彫' => '彫',
+ '㣣' => '㣣',
+ '徚' => '徚',
+ '忍' => '忍',
+ '志' => '志',
+ '忹' => '忹',
+ '悁' => '悁',
+ '㤺' => '㤺',
+ '㤜' => '㤜',
+ '悔' => '悔',
+ '𢛔' => '𢛔',
+ '惇' => '惇',
+ '慈' => '慈',
+ '慌' => '慌',
+ '慎' => '慎',
+ '慌' => '慌',
+ '慺' => '慺',
+ '憎' => '憎',
+ '憲' => '憲',
+ '憤' => '憤',
+ '憯' => '憯',
+ '懞' => '懞',
+ '懲' => '懲',
+ '懶' => '懶',
+ '成' => '成',
+ '戛' => '戛',
+ '扝' => '扝',
+ '抱' => '抱',
+ '拔' => '拔',
+ '捐' => '捐',
+ '𢬌' => '𢬌',
+ '挽' => '挽',
+ '拼' => '拼',
+ '捨' => '捨',
+ '掃' => '掃',
+ '揤' => '揤',
+ '𢯱' => '𢯱',
+ '搢' => '搢',
+ '揅' => '揅',
+ '掩' => '掩',
+ '㨮' => '㨮',
+ '摩' => '摩',
+ '摾' => '摾',
+ '撝' => '撝',
+ '摷' => '摷',
+ '㩬' => '㩬',
+ '敏' => '敏',
+ '敬' => '敬',
+ '𣀊' => '𣀊',
+ '旣' => '旣',
+ '書' => '書',
+ '晉' => '晉',
+ '㬙' => '㬙',
+ '暑' => '暑',
+ '㬈' => '㬈',
+ '㫤' => '㫤',
+ '冒' => '冒',
+ '冕' => '冕',
+ '最' => '最',
+ '暜' => '暜',
+ '肭' => '肭',
+ '䏙' => '䏙',
+ '朗' => '朗',
+ '望' => '望',
+ '朡' => '朡',
+ '杞' => '杞',
+ '杓' => '杓',
+ '𣏃' => '𣏃',
+ '㭉' => '㭉',
+ '柺' => '柺',
+ '枅' => '枅',
+ '桒' => '桒',
+ '梅' => '梅',
+ '𣑭' => '𣑭',
+ '梎' => '梎',
+ '栟' => '栟',
+ '椔' => '椔',
+ '㮝' => '㮝',
+ '楂' => '楂',
+ '榣' => '榣',
+ '槪' => '槪',
+ '檨' => '檨',
+ '𣚣' => '𣚣',
+ '櫛' => '櫛',
+ '㰘' => '㰘',
+ '次' => '次',
+ '𣢧' => '𣢧',
+ '歔' => '歔',
+ '㱎' => '㱎',
+ '歲' => '歲',
+ '殟' => '殟',
+ '殺' => '殺',
+ '殻' => '殻',
+ '𣪍' => '𣪍',
+ '𡴋' => '𡴋',
+ '𣫺' => '𣫺',
+ '汎' => '汎',
+ '𣲼' => '𣲼',
+ '沿' => '沿',
+ '泍' => '泍',
+ '汧' => '汧',
+ '洖' => '洖',
+ '派' => '派',
+ '海' => '海',
+ '流' => '流',
+ '浩' => '浩',
+ '浸' => '浸',
+ '涅' => '涅',
+ '𣴞' => '𣴞',
+ '洴' => '洴',
+ '港' => '港',
+ '湮' => '湮',
+ '㴳' => '㴳',
+ '滋' => '滋',
+ '滇' => '滇',
+ '𣻑' => '𣻑',
+ '淹' => '淹',
+ '潮' => '潮',
+ '𣽞' => '𣽞',
+ '𣾎' => '𣾎',
+ '濆' => '濆',
+ '瀹' => '瀹',
+ '瀞' => '瀞',
+ '瀛' => '瀛',
+ '㶖' => '㶖',
+ '灊' => '灊',
+ '災' => '災',
+ '灷' => '灷',
+ '炭' => '炭',
+ '𠔥' => '𠔥',
+ '煅' => '煅',
+ '𤉣' => '𤉣',
+ '熜' => '熜',
+ '𤎫' => '𤎫',
+ '爨' => '爨',
+ '爵' => '爵',
+ '牐' => '牐',
+ '𤘈' => '𤘈',
+ '犀' => '犀',
+ '犕' => '犕',
+ '𤜵' => '𤜵',
+ '𤠔' => '𤠔',
+ '獺' => '獺',
+ '王' => '王',
+ '㺬' => '㺬',
+ '玥' => '玥',
+ '㺸' => '㺸',
+ '㺸' => '㺸',
+ '瑇' => '瑇',
+ '瑜' => '瑜',
+ '瑱' => '瑱',
+ '璅' => '璅',
+ '瓊' => '瓊',
+ '㼛' => '㼛',
+ '甤' => '甤',
+ '𤰶' => '𤰶',
+ '甾' => '甾',
+ '𤲒' => '𤲒',
+ '異' => '異',
+ '𢆟' => '𢆟',
+ '瘐' => '瘐',
+ '𤾡' => '𤾡',
+ '𤾸' => '𤾸',
+ '𥁄' => '𥁄',
+ '㿼' => '㿼',
+ '䀈' => '䀈',
+ '直' => '直',
+ '𥃳' => '𥃳',
+ '𥃲' => '𥃲',
+ '𥄙' => '𥄙',
+ '𥄳' => '𥄳',
+ '眞' => '眞',
+ '真' => '真',
+ '真' => '真',
+ '睊' => '睊',
+ '䀹' => '䀹',
+ '瞋' => '瞋',
+ '䁆' => '䁆',
+ '䂖' => '䂖',
+ '𥐝' => '𥐝',
+ '硎' => '硎',
+ '碌' => '碌',
+ '磌' => '磌',
+ '䃣' => '䃣',
+ '𥘦' => '𥘦',
+ '祖' => '祖',
+ '𥚚' => '𥚚',
+ '𥛅' => '𥛅',
+ '福' => '福',
+ '秫' => '秫',
+ '䄯' => '䄯',
+ '穀' => '穀',
+ '穊' => '穊',
+ '穏' => '穏',
+ '𥥼' => '𥥼',
+ '𥪧' => '𥪧',
+ '𥪧' => '𥪧',
+ '竮' => '竮',
+ '䈂' => '䈂',
+ '𥮫' => '𥮫',
+ '篆' => '篆',
+ '築' => '築',
+ '䈧' => '䈧',
+ '𥲀' => '𥲀',
+ '糒' => '糒',
+ '䊠' => '䊠',
+ '糨' => '糨',
+ '糣' => '糣',
+ '紀' => '紀',
+ '𥾆' => '𥾆',
+ '絣' => '絣',
+ '䌁' => '䌁',
+ '緇' => '緇',
+ '縂' => '縂',
+ '繅' => '繅',
+ '䌴' => '䌴',
+ '𦈨' => '𦈨',
+ '𦉇' => '𦉇',
+ '䍙' => '䍙',
+ '𦋙' => '𦋙',
+ '罺' => '罺',
+ '𦌾' => '𦌾',
+ '羕' => '羕',
+ '翺' => '翺',
+ '者' => '者',
+ '𦓚' => '𦓚',
+ '𦔣' => '𦔣',
+ '聠' => '聠',
+ '𦖨' => '𦖨',
+ '聰' => '聰',
+ '𣍟' => '𣍟',
+ '䏕' => '䏕',
+ '育' => '育',
+ '脃' => '脃',
+ '䐋' => '䐋',
+ '脾' => '脾',
+ '媵' => '媵',
+ '𦞧' => '𦞧',
+ '𦞵' => '𦞵',
+ '𣎓' => '𣎓',
+ '𣎜' => '𣎜',
+ '舁' => '舁',
+ '舄' => '舄',
+ '辞' => '辞',
+ '䑫' => '䑫',
+ '芑' => '芑',
+ '芋' => '芋',
+ '芝' => '芝',
+ '劳' => '劳',
+ '花' => '花',
+ '芳' => '芳',
+ '芽' => '芽',
+ '苦' => '苦',
+ '𦬼' => '𦬼',
+ '若' => '若',
+ '茝' => '茝',
+ '荣' => '荣',
+ '莭' => '莭',
+ '茣' => '茣',
+ '莽' => '莽',
+ '菧' => '菧',
+ '著' => '著',
+ '荓' => '荓',
+ '菊' => '菊',
+ '菌' => '菌',
+ '菜' => '菜',
+ '𦰶' => '𦰶',
+ '𦵫' => '𦵫',
+ '𦳕' => '𦳕',
+ '䔫' => '䔫',
+ '蓱' => '蓱',
+ '蓳' => '蓳',
+ '蔖' => '蔖',
+ '𧏊' => '𧏊',
+ '蕤' => '蕤',
+ '𦼬' => '𦼬',
+ '䕝' => '䕝',
+ '䕡' => '䕡',
+ '𦾱' => '𦾱',
+ '𧃒' => '𧃒',
+ '䕫' => '䕫',
+ '虐' => '虐',
+ '虜' => '虜',
+ '虧' => '虧',
+ '虩' => '虩',
+ '蚩' => '蚩',
+ '蚈' => '蚈',
+ '蜎' => '蜎',
+ '蛢' => '蛢',
+ '蝹' => '蝹',
+ '蜨' => '蜨',
+ '蝫' => '蝫',
+ '螆' => '螆',
+ '䗗' => '䗗',
+ '蟡' => '蟡',
+ '蠁' => '蠁',
+ '䗹' => '䗹',
+ '衠' => '衠',
+ '衣' => '衣',
+ '𧙧' => '𧙧',
+ '裗' => '裗',
+ '裞' => '裞',
+ '䘵' => '䘵',
+ '裺' => '裺',
+ '㒻' => '㒻',
+ '𧢮' => '𧢮',
+ '𧥦' => '𧥦',
+ '䚾' => '䚾',
+ '䛇' => '䛇',
+ '誠' => '誠',
+ '諭' => '諭',
+ '變' => '變',
+ '豕' => '豕',
+ '𧲨' => '𧲨',
+ '貫' => '貫',
+ '賁' => '賁',
+ '贛' => '贛',
+ '起' => '起',
+ '𧼯' => '𧼯',
+ '𠠄' => '𠠄',
+ '跋' => '跋',
+ '趼' => '趼',
+ '跰' => '跰',
+ '𠣞' => '𠣞',
+ '軔' => '軔',
+ '輸' => '輸',
+ '𨗒' => '𨗒',
+ '𨗭' => '𨗭',
+ '邔' => '邔',
+ '郱' => '郱',
+ '鄑' => '鄑',
+ '𨜮' => '𨜮',
+ '鄛' => '鄛',
+ '鈸' => '鈸',
+ '鋗' => '鋗',
+ '鋘' => '鋘',
+ '鉼' => '鉼',
+ '鏹' => '鏹',
+ '鐕' => '鐕',
+ '𨯺' => '𨯺',
+ '開' => '開',
+ '䦕' => '䦕',
+ '閷' => '閷',
+ '𨵷' => '𨵷',
+ '䧦' => '䧦',
+ '雃' => '雃',
+ '嶲' => '嶲',
+ '霣' => '霣',
+ '𩅅' => '𩅅',
+ '𩈚' => '𩈚',
+ '䩮' => '䩮',
+ '䩶' => '䩶',
+ '韠' => '韠',
+ '𩐊' => '𩐊',
+ '䪲' => '䪲',
+ '𩒖' => '𩒖',
+ '頋' => '頋',
+ '頋' => '頋',
+ '頩' => '頩',
+ '𩖶' => '𩖶',
+ '飢' => '飢',
+ '䬳' => '䬳',
+ '餩' => '餩',
+ '馧' => '馧',
+ '駂' => '駂',
+ '駾' => '駾',
+ '䯎' => '䯎',
+ '𩬰' => '𩬰',
+ '鬒' => '鬒',
+ '鱀' => '鱀',
+ '鳽' => '鳽',
+ '䳎' => '䳎',
+ '䳭' => '䳭',
+ '鵧' => '鵧',
+ '𪃎' => '𪃎',
+ '䳸' => '䳸',
+ '𪄅' => '𪄅',
+ '𪈎' => '𪈎',
+ '𪊑' => '𪊑',
+ '麻' => '麻',
+ '䵖' => '䵖',
+ '黹' => '黹',
+ '黾' => '黾',
+ '鼅' => '鼅',
+ '鼏' => '鼏',
+ '鼖' => '鼖',
+ '鼻' => '鼻',
+ '𪘀' => '𪘀',
+ 'Æ' => 'AE',
+ 'Ð' => 'D',
+ 'Ø' => 'O',
+ 'Þ' => 'TH',
+ 'ß' => 'ss',
+ 'æ' => 'ae',
+ 'ð' => 'd',
+ 'ø' => 'o',
+ 'þ' => 'th',
+ 'Đ' => 'D',
+ 'đ' => 'd',
+ 'Ħ' => 'H',
+ 'ħ' => 'h',
+ 'ı' => 'i',
+ 'ĸ' => 'q',
+ 'Ł' => 'L',
+ 'ł' => 'l',
+ 'Ŋ' => 'N',
+ 'ŋ' => 'n',
+ 'Œ' => 'OE',
+ 'œ' => 'oe',
+ 'Ŧ' => 'T',
+ 'ŧ' => 't',
+ 'ƀ' => 'b',
+ 'Ɓ' => 'B',
+ 'Ƃ' => 'B',
+ 'ƃ' => 'b',
+ 'Ƈ' => 'C',
+ 'ƈ' => 'c',
+ 'Ɖ' => 'D',
+ 'Ɗ' => 'D',
+ 'Ƌ' => 'D',
+ 'ƌ' => 'd',
+ 'Ɛ' => 'E',
+ 'Ƒ' => 'F',
+ 'ƒ' => 'f',
+ 'Ɠ' => 'G',
+ 'ƕ' => 'hv',
+ 'Ɩ' => 'I',
+ 'Ɨ' => 'I',
+ 'Ƙ' => 'K',
+ 'ƙ' => 'k',
+ 'ƚ' => 'l',
+ 'Ɲ' => 'N',
+ 'ƞ' => 'n',
+ 'Ƣ' => 'OI',
+ 'ƣ' => 'oi',
+ 'Ƥ' => 'P',
+ 'ƥ' => 'p',
+ 'ƫ' => 't',
+ 'Ƭ' => 'T',
+ 'ƭ' => 't',
+ 'Ʈ' => 'T',
+ 'Ʋ' => 'V',
+ 'Ƴ' => 'Y',
+ 'ƴ' => 'y',
+ 'Ƶ' => 'Z',
+ 'ƶ' => 'z',
+ 'Ǥ' => 'G',
+ 'ǥ' => 'g',
+ 'ȡ' => 'd',
+ 'Ȥ' => 'Z',
+ 'ȥ' => 'z',
+ 'ȴ' => 'l',
+ 'ȵ' => 'n',
+ 'ȶ' => 't',
+ 'ȷ' => 'j',
+ 'ȸ' => 'db',
+ 'ȹ' => 'qp',
+ 'Ⱥ' => 'A',
+ 'Ȼ' => 'C',
+ 'ȼ' => 'c',
+ 'Ƚ' => 'L',
+ 'Ⱦ' => 'T',
+ 'ȿ' => 's',
+ 'ɀ' => 'z',
+ 'Ƀ' => 'B',
+ 'Ʉ' => 'U',
+ 'Ɇ' => 'E',
+ 'ɇ' => 'e',
+ 'Ɉ' => 'J',
+ 'ɉ' => 'j',
+ 'Ɍ' => 'R',
+ 'ɍ' => 'r',
+ 'Ɏ' => 'Y',
+ 'ɏ' => 'y',
+ 'ɓ' => 'b',
+ 'ɕ' => 'c',
+ 'ɖ' => 'd',
+ 'ɗ' => 'd',
+ 'ɛ' => 'e',
+ 'ɟ' => 'j',
+ 'ɠ' => 'g',
+ 'ɡ' => 'g',
+ 'ɢ' => 'G',
+ 'ɦ' => 'h',
+ 'ɧ' => 'h',
+ 'ɨ' => 'i',
+ 'ɪ' => 'I',
+ 'ɫ' => 'l',
+ 'ɬ' => 'l',
+ 'ɭ' => 'l',
+ 'ɱ' => 'm',
+ 'ɲ' => 'n',
+ 'ɳ' => 'n',
+ 'ɴ' => 'N',
+ 'ɶ' => 'OE',
+ 'ɼ' => 'r',
+ 'ɽ' => 'r',
+ 'ɾ' => 'r',
+ 'ʀ' => 'R',
+ 'ʂ' => 's',
+ 'ʈ' => 't',
+ 'ʉ' => 'u',
+ 'ʋ' => 'v',
+ 'ʏ' => 'Y',
+ 'ʐ' => 'z',
+ 'ʑ' => 'z',
+ 'ʙ' => 'B',
+ 'ʛ' => 'G',
+ 'ʜ' => 'H',
+ 'ʝ' => 'j',
+ 'ʟ' => 'L',
+ 'ʠ' => 'q',
+ 'ʣ' => 'dz',
+ 'ʥ' => 'dz',
+ 'ʦ' => 'ts',
+ 'ʪ' => 'ls',
+ 'ʫ' => 'lz',
+ 'ᴀ' => 'A',
+ 'ᴁ' => 'AE',
+ 'ᴃ' => 'B',
+ 'ᴄ' => 'C',
+ 'ᴅ' => 'D',
+ 'ᴆ' => 'D',
+ 'ᴇ' => 'E',
+ 'ᴊ' => 'J',
+ 'ᴋ' => 'K',
+ 'ᴌ' => 'L',
+ 'ᴍ' => 'M',
+ 'ᴏ' => 'O',
+ 'ᴘ' => 'P',
+ 'ᴛ' => 'T',
+ 'ᴜ' => 'U',
+ 'ᴠ' => 'V',
+ 'ᴡ' => 'W',
+ 'ᴢ' => 'Z',
+ 'ᵫ' => 'ue',
+ 'ᵬ' => 'b',
+ 'ᵭ' => 'd',
+ 'ᵮ' => 'f',
+ 'ᵯ' => 'm',
+ 'ᵰ' => 'n',
+ 'ᵱ' => 'p',
+ 'ᵲ' => 'r',
+ 'ᵳ' => 'r',
+ 'ᵴ' => 's',
+ 'ᵵ' => 't',
+ 'ᵶ' => 'z',
+ 'ᵺ' => 'th',
+ 'ᵻ' => 'I',
+ 'ᵽ' => 'p',
+ 'ᵾ' => 'U',
+ 'ᶀ' => 'b',
+ 'ᶁ' => 'd',
+ 'ᶂ' => 'f',
+ 'ᶃ' => 'g',
+ 'ᶄ' => 'k',
+ 'ᶅ' => 'l',
+ 'ᶆ' => 'm',
+ 'ᶇ' => 'n',
+ 'ᶈ' => 'p',
+ 'ᶉ' => 'r',
+ 'ᶊ' => 's',
+ 'ᶌ' => 'v',
+ 'ᶍ' => 'x',
+ 'ᶎ' => 'z',
+ 'ᶏ' => 'a',
+ 'ᶑ' => 'd',
+ 'ᶒ' => 'e',
+ 'ᶓ' => 'e',
+ 'ᶖ' => 'i',
+ 'ᶙ' => 'u',
+ 'ẜ' => 's',
+ 'ẝ' => 's',
+ 'ẞ' => 'SS',
+ 'Ỻ' => 'LL',
+ 'ỻ' => 'll',
+ 'Ỽ' => 'V',
+ 'ỽ' => 'v',
+ 'Ỿ' => 'Y',
+ 'ỿ' => 'y',
+ 'Ⱡ' => 'L',
+ 'ⱡ' => 'l',
+ 'Ɫ' => 'L',
+ 'Ᵽ' => 'P',
+ 'Ɽ' => 'R',
+ 'ⱥ' => 'a',
+ 'ⱦ' => 't',
+ 'Ⱨ' => 'H',
+ 'ⱨ' => 'h',
+ 'Ⱪ' => 'K',
+ 'ⱪ' => 'k',
+ 'Ⱬ' => 'Z',
+ 'ⱬ' => 'z',
+ 'Ɱ' => 'M',
+ 'ⱱ' => 'v',
+ 'Ⱳ' => 'W',
+ 'ⱳ' => 'w',
+ 'ⱴ' => 'v',
+ 'ⱸ' => 'e',
+ 'ⱺ' => 'o',
+ 'Ȿ' => 'S',
+ 'Ɀ' => 'Z',
+ 'ꜰ' => 'F',
+ 'ꜱ' => 'S',
+ 'Ꜳ' => 'AA',
+ 'ꜳ' => 'aa',
+ 'Ꜵ' => 'AO',
+ 'ꜵ' => 'ao',
+ 'Ꜷ' => 'AU',
+ 'ꜷ' => 'au',
+ 'Ꜹ' => 'AV',
+ 'ꜹ' => 'av',
+ 'Ꜻ' => 'AV',
+ 'ꜻ' => 'av',
+ 'Ꜽ' => 'AY',
+ 'ꜽ' => 'ay',
+ 'Ꝁ' => 'K',
+ 'ꝁ' => 'k',
+ 'Ꝃ' => 'K',
+ 'ꝃ' => 'k',
+ 'Ꝅ' => 'K',
+ 'ꝅ' => 'k',
+ 'Ꝇ' => 'L',
+ 'ꝇ' => 'l',
+ 'Ꝉ' => 'L',
+ 'ꝉ' => 'l',
+ 'Ꝋ' => 'O',
+ 'ꝋ' => 'o',
+ 'Ꝍ' => 'O',
+ 'ꝍ' => 'o',
+ 'Ꝏ' => 'OO',
+ 'ꝏ' => 'oo',
+ 'Ꝑ' => 'P',
+ 'ꝑ' => 'p',
+ 'Ꝓ' => 'P',
+ 'ꝓ' => 'p',
+ 'Ꝕ' => 'P',
+ 'ꝕ' => 'p',
+ 'Ꝗ' => 'Q',
+ 'ꝗ' => 'q',
+ 'Ꝙ' => 'Q',
+ 'ꝙ' => 'q',
+ 'Ꝟ' => 'V',
+ 'ꝟ' => 'v',
+ 'Ꝡ' => 'VY',
+ 'ꝡ' => 'vy',
+ 'Ꝥ' => 'TH',
+ 'ꝥ' => 'th',
+ 'Ꝧ' => 'TH',
+ 'ꝧ' => 'th',
+ 'ꝱ' => 'd',
+ 'ꝲ' => 'l',
+ 'ꝳ' => 'm',
+ 'ꝴ' => 'n',
+ 'ꝵ' => 'r',
+ 'ꝶ' => 'R',
+ 'ꝷ' => 't',
+ 'Ꝺ' => 'D',
+ 'ꝺ' => 'd',
+ 'Ꝼ' => 'F',
+ 'ꝼ' => 'f',
+ 'Ꞇ' => 'T',
+ 'ꞇ' => 't',
+ 'Ꞑ' => 'N',
+ 'ꞑ' => 'n',
+ 'Ꞓ' => 'C',
+ 'ꞓ' => 'c',
+ 'Ꞡ' => 'G',
+ 'ꞡ' => 'g',
+ 'Ꞣ' => 'K',
+ 'ꞣ' => 'k',
+ 'Ꞥ' => 'N',
+ 'ꞥ' => 'n',
+ 'Ꞧ' => 'R',
+ 'ꞧ' => 'r',
+ 'Ꞩ' => 'S',
+ 'ꞩ' => 's',
+ 'Ɦ' => 'H',
+ '©' => '(C)',
+ '®' => '(R)',
+ '₠' => 'CE',
+ '₢' => 'Cr',
+ '₣' => 'Fr.',
+ '₤' => 'L.',
+ '₧' => 'Pts',
+ '₹' => 'Rs',
+ '₺' => 'TL',
+ '℗' => '(P)',
+ '℘' => 'P',
+ '℞' => 'Rx',
+ '〇' => '0',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ 'ʹ' => '\'',
+ 'ʺ' => '"',
+ 'ʻ' => '\'',
+ 'ʼ' => '\'',
+ 'ʽ' => '\'',
+ 'ˈ' => '\'',
+ 'ˋ' => '`',
+ '‘' => '\'',
+ '’' => '\'',
+ '‚' => ',',
+ '‛' => '\'',
+ '“' => '"',
+ '”' => '"',
+ '„' => ',,',
+ '‟' => '"',
+ '′' => '\'',
+ '〝' => '"',
+ '〞' => '"',
+ '«' => '<<',
+ '»' => '>>',
+ '‹' => '<',
+ '›' => '>',
+ '' => '-',
+ '‐' => '-',
+ '‑' => '-',
+ '‒' => '-',
+ '–' => '-',
+ '—' => '-',
+ '―' => '-',
+ '︱' => '-',
+ '︲' => '-',
+ '¡' => '!',
+ '¿' => '?',
+ '˂' => '<',
+ '˃' => '>',
+ '˄' => '^',
+ 'ˆ' => '^',
+ 'ː' => ':',
+ '˜' => '~',
+ '‖' => '||',
+ '⁄' => '/',
+ '⁅' => '[',
+ '⁆' => ']',
+ '⁎' => '*',
+ '、' => ',',
+ '。' => '.',
+ '〈' => '<',
+ '〉' => '>',
+ '《' => '<<',
+ '》' => '>>',
+ '〔' => '[',
+ '〕' => ']',
+ '〘' => '[',
+ '〙' => ']',
+ '〚' => '[',
+ '〛' => ']',
+ '︐' => ',',
+ '︑' => ',',
+ '︒' => '.',
+ '︓' => ':',
+ '︔' => ';',
+ '︕' => '!',
+ '︖' => '?',
+ '︙' => '...',
+ '︰' => '..',
+ '︵' => '(',
+ '︶' => ')',
+ '︷' => '{',
+ '︸' => '}',
+ '︹' => '[',
+ '︺' => ']',
+ '︽' => '<<',
+ '︾' => '>>',
+ '︿' => '<',
+ '﹀' => '>',
+ '﹇' => '[',
+ '﹈' => ']',
+ '±' => '+/-',
+ '×' => '*',
+ '÷' => '/',
+ '˖' => '+',
+ '˗' => '-',
+ '−' => '-',
+ '∕' => '/',
+ '∖' => '\\',
+ '∣' => '|',
+ '∥' => '||',
+ '≪' => '<<',
+ '≫' => '>>',
+ '⦅' => '((',
+ '⦆' => '))',
+);
diff --git a/plugins/vendor/symfony/polyfill-iconv/bootstrap.php b/plugins/vendor/symfony/polyfill-iconv/bootstrap.php
new file mode 100644
index 00000000..e629531f
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-iconv/bootstrap.php
@@ -0,0 +1,84 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Iconv as p;
+
+if (extension_loaded('iconv')) {
+ return;
+}
+
+if (\PHP_VERSION_ID >= 80000) {
+ return require __DIR__.'/bootstrap80.php';
+}
+
+if (!defined('ICONV_IMPL')) {
+ define('ICONV_IMPL', 'Symfony');
+}
+if (!defined('ICONV_VERSION')) {
+ define('ICONV_VERSION', '1.0');
+}
+if (!defined('ICONV_MIME_DECODE_STRICT')) {
+ define('ICONV_MIME_DECODE_STRICT', 1);
+}
+if (!defined('ICONV_MIME_DECODE_CONTINUE_ON_ERROR')) {
+ define('ICONV_MIME_DECODE_CONTINUE_ON_ERROR', 2);
+}
+
+if (!function_exists('iconv')) {
+ function iconv($from_encoding, $to_encoding, $string) { return p\Iconv::iconv($from_encoding, $to_encoding, $string); }
+}
+if (!function_exists('iconv_get_encoding')) {
+ function iconv_get_encoding($type = 'all') { return p\Iconv::iconv_get_encoding($type); }
+}
+if (!function_exists('iconv_set_encoding')) {
+ function iconv_set_encoding($type, $encoding) { return p\Iconv::iconv_set_encoding($type, $encoding); }
+}
+if (!function_exists('iconv_mime_encode')) {
+ function iconv_mime_encode($field_name, $field_value, $options = []) { return p\Iconv::iconv_mime_encode($field_name, $field_value, $options); }
+}
+if (!function_exists('iconv_mime_decode_headers')) {
+ function iconv_mime_decode_headers($headers, $mode = 0, $encoding = null) { return p\Iconv::iconv_mime_decode_headers($headers, $mode, $encoding); }
+}
+
+if (extension_loaded('mbstring')) {
+ if (!function_exists('iconv_strlen')) {
+ function iconv_strlen($string, $encoding = null) { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_strlen($string, $encoding); }
+ }
+ if (!function_exists('iconv_strpos')) {
+ function iconv_strpos($haystack, $needle, $offset = 0, $encoding = null) { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_strpos($haystack, $needle, $offset, $encoding); }
+ }
+ if (!function_exists('iconv_strrpos')) {
+ function iconv_strrpos($haystack, $needle, $encoding = null) { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_strrpos($haystack, $needle, 0, $encoding); }
+ }
+ if (!function_exists('iconv_substr')) {
+ function iconv_substr($string, $offset, $length = 2147483647, $encoding = null) { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_substr($string, $offset, $length, $encoding); }
+ }
+ if (!function_exists('iconv_mime_decode')) {
+ function iconv_mime_decode($string, $mode = 0, $encoding = null) { $currentMbEncoding = mb_internal_encoding(); null === $encoding && $encoding = p\Iconv::$internalEncoding; mb_internal_encoding($encoding); $decoded = mb_decode_mimeheader($string); mb_internal_encoding($currentMbEncoding); return $decoded; }
+ }
+} else {
+ if (!function_exists('iconv_strlen')) {
+ function iconv_strlen($string, $encoding = null) { return p\Iconv::iconv_strlen($string, $encoding); }
+ }
+
+ if (!function_exists('iconv_strpos')) {
+ function iconv_strpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Iconv::iconv_strpos($haystack, $needle, $offset, $encoding); }
+ }
+ if (!function_exists('iconv_strrpos')) {
+ function iconv_strrpos($haystack, $needle, $encoding = null) { return p\Iconv::iconv_strrpos($haystack, $needle, $encoding); }
+ }
+ if (!function_exists('iconv_substr')) {
+ function iconv_substr($string, $offset, $length = 2147483647, $encoding = null) { return p\Iconv::iconv_substr($string, $offset, $length, $encoding); }
+ }
+ if (!function_exists('iconv_mime_decode')) {
+ function iconv_mime_decode($string, $mode = 0, $encoding = null) { return p\Iconv::iconv_mime_decode($string, $mode, $encoding); }
+ }
+}
diff --git a/plugins/vendor/symfony/polyfill-iconv/bootstrap80.php b/plugins/vendor/symfony/polyfill-iconv/bootstrap80.php
new file mode 100644
index 00000000..2d0f12fd
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-iconv/bootstrap80.php
@@ -0,0 +1,76 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Iconv as p;
+
+if (!defined('ICONV_IMPL')) {
+ define('ICONV_IMPL', 'Symfony');
+}
+if (!defined('ICONV_VERSION')) {
+ define('ICONV_VERSION', '1.0');
+}
+if (!defined('ICONV_MIME_DECODE_STRICT')) {
+ define('ICONV_MIME_DECODE_STRICT', 1);
+}
+if (!defined('ICONV_MIME_DECODE_CONTINUE_ON_ERROR')) {
+ define('ICONV_MIME_DECODE_CONTINUE_ON_ERROR', 2);
+}
+
+if (!function_exists('iconv')) {
+ function iconv(?string $from_encoding, ?string $to_encoding, ?string $string): string|false { return p\Iconv::iconv((string) $from_encoding, (string) $to_encoding, (string) $string); }
+}
+if (!function_exists('iconv_get_encoding')) {
+ function iconv_get_encoding(?string $type = 'all'): array|string|false { return p\Iconv::iconv_get_encoding((string) $type); }
+}
+if (!function_exists('iconv_set_encoding')) {
+ function iconv_set_encoding(?string $type, ?string $encoding): bool { return p\Iconv::iconv_set_encoding((string) $type, (string) $encoding); }
+}
+if (!function_exists('iconv_mime_encode')) {
+ function iconv_mime_encode(?string $field_name, ?string $field_value, ?array $options = []): string|false { return p\Iconv::iconv_mime_encode((string) $field_name, (string) $field_value, (array) $options); }
+}
+if (!function_exists('iconv_mime_decode_headers')) {
+ function iconv_mime_decode_headers(?string $headers, ?int $mode = 0, ?string $encoding = null): array|false { return p\Iconv::iconv_mime_decode_headers((string) $headers, (int) $mode, $encoding); }
+}
+
+if (extension_loaded('mbstring')) {
+ if (!function_exists('iconv_strlen')) {
+ function iconv_strlen(?string $string, ?string $encoding = null): int|false { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_strlen((string) $string, $encoding); }
+ }
+ if (!function_exists('iconv_strpos')) {
+ function iconv_strpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_strpos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+ }
+ if (!function_exists('iconv_strrpos')) {
+ function iconv_strrpos(?string $haystack, ?string $needle, ?string $encoding = null): int|false { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_strrpos((string) $haystack, (string) $needle, 0, $encoding); }
+ }
+ if (!function_exists('iconv_substr')) {
+ function iconv_substr(?string $string, ?int $offset, ?int $length = null, ?string $encoding = null): string|false { null === $encoding && $encoding = p\Iconv::$internalEncoding; return mb_substr((string) $string, (int) $offset, $length, $encoding); }
+ }
+ if (!function_exists('iconv_mime_decode')) {
+ function iconv_mime_decode($string, $mode = 0, $encoding = null) { $currentMbEncoding = mb_internal_encoding(); null === $encoding && $encoding = p\Iconv::$internalEncoding; mb_internal_encoding($encoding); $decoded = mb_decode_mimeheader($string); mb_internal_encoding($currentMbEncoding); return $decoded; }
+ }
+} else {
+ if (!function_exists('iconv_strlen')) {
+ function iconv_strlen(?string $string, ?string $encoding = null): int|false { return p\Iconv::iconv_strlen((string) $string, $encoding); }
+ }
+
+ if (!function_exists('iconv_strpos')) {
+ function iconv_strpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Iconv::iconv_strpos((string) $haystack, (string) $needle, (int) $offset, $encoding); }
+ }
+ if (!function_exists('iconv_strrpos')) {
+ function iconv_strrpos(?string $haystack, ?string $needle, ?string $encoding = null): int|false { return p\Iconv::iconv_strrpos((string) $haystack, (string) $needle, $encoding); }
+ }
+ if (!function_exists('iconv_substr')) {
+ function iconv_substr(?string $string, ?int $offset, ?int $length = null, ?string $encoding = null): string|false { return p\Iconv::iconv_substr((string) $string, (string) $offset, $length, $encoding); }
+ }
+ if (!function_exists('iconv_mime_decode')) {
+ function iconv_mime_decode(?string $string, ?int $mode = 0, ?string $encoding = null): string|false { return p\Iconv::iconv_mime_decode((string) $string, (int) $mode, $encoding); }
+ }
+}
diff --git a/plugins/vendor/symfony/polyfill-iconv/composer.json b/plugins/vendor/symfony/polyfill-iconv/composer.json
new file mode 100644
index 00000000..af0b1739
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-iconv/composer.json
@@ -0,0 +1,38 @@
+{
+ "name": "symfony/polyfill-iconv",
+ "type": "library",
+ "description": "Symfony polyfill for the Iconv extension",
+ "keywords": ["polyfill", "shim", "compatibility", "portable", "iconv"],
+ "homepage": "https://symfony.com",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "require": {
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-iconv": "*"
+ },
+ "autoload": {
+ "psr-4": { "Symfony\\Polyfill\\Iconv\\": "" },
+ "files": [ "bootstrap.php" ]
+ },
+ "suggest": {
+ "ext-iconv": "For best performance"
+ },
+ "minimum-stability": "dev",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ }
+}
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/Idn.php b/plugins/vendor/symfony/polyfill-intl-idn/Idn.php
new file mode 100644
index 00000000..448f74ce
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/Idn.php
@@ -0,0 +1,941 @@
+ and Trevor Rowbotham
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Intl\Idn;
+
+use Symfony\Polyfill\Intl\Idn\Resources\unidata\DisallowedRanges;
+use Symfony\Polyfill\Intl\Idn\Resources\unidata\Regex;
+
+/**
+ * @see https://www.unicode.org/reports/tr46/
+ *
+ * @internal
+ */
+final class Idn
+{
+ public const ERROR_EMPTY_LABEL = 1;
+ public const ERROR_LABEL_TOO_LONG = 2;
+ public const ERROR_DOMAIN_NAME_TOO_LONG = 4;
+ public const ERROR_LEADING_HYPHEN = 8;
+ public const ERROR_TRAILING_HYPHEN = 0x10;
+ public const ERROR_HYPHEN_3_4 = 0x20;
+ public const ERROR_LEADING_COMBINING_MARK = 0x40;
+ public const ERROR_DISALLOWED = 0x80;
+ public const ERROR_PUNYCODE = 0x100;
+ public const ERROR_LABEL_HAS_DOT = 0x200;
+ public const ERROR_INVALID_ACE_LABEL = 0x400;
+ public const ERROR_BIDI = 0x800;
+ public const ERROR_CONTEXTJ = 0x1000;
+ public const ERROR_CONTEXTO_PUNCTUATION = 0x2000;
+ public const ERROR_CONTEXTO_DIGITS = 0x4000;
+
+ public const INTL_IDNA_VARIANT_2003 = 0;
+ public const INTL_IDNA_VARIANT_UTS46 = 1;
+
+ public const IDNA_DEFAULT = 0;
+ public const IDNA_ALLOW_UNASSIGNED = 1;
+ public const IDNA_USE_STD3_RULES = 2;
+ public const IDNA_CHECK_BIDI = 4;
+ public const IDNA_CHECK_CONTEXTJ = 8;
+ public const IDNA_NONTRANSITIONAL_TO_ASCII = 16;
+ public const IDNA_NONTRANSITIONAL_TO_UNICODE = 32;
+
+ public const MAX_DOMAIN_SIZE = 253;
+ public const MAX_LABEL_SIZE = 63;
+
+ public const BASE = 36;
+ public const TMIN = 1;
+ public const TMAX = 26;
+ public const SKEW = 38;
+ public const DAMP = 700;
+ public const INITIAL_BIAS = 72;
+ public const INITIAL_N = 128;
+ public const DELIMITER = '-';
+ public const MAX_INT = 2147483647;
+
+ /**
+ * Contains the numeric value of a basic code point (for use in representing integers) in the
+ * range 0 to BASE-1, or -1 if b is does not represent a value.
+ *
+ * @var array
+ */
+ private static $basicToDigit = [
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
+
+ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
+
+ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
+
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ ];
+
+ /**
+ * @var array
+ */
+ private static $virama;
+
+ /**
+ * @var array
+ */
+ private static $mapped;
+
+ /**
+ * @var array
+ */
+ private static $ignored;
+
+ /**
+ * @var array
+ */
+ private static $deviation;
+
+ /**
+ * @var array
+ */
+ private static $disallowed;
+
+ /**
+ * @var array
+ */
+ private static $disallowed_STD3_mapped;
+
+ /**
+ * @var array
+ */
+ private static $disallowed_STD3_valid;
+
+ /**
+ * @var bool
+ */
+ private static $mappingTableLoaded = false;
+
+ /**
+ * @see https://www.unicode.org/reports/tr46/#ToASCII
+ *
+ * @param string $domainName
+ * @param int $options
+ * @param int $variant
+ * @param array $idna_info
+ *
+ * @return string|false
+ */
+ public static function idn_to_ascii($domainName, $options = self::IDNA_DEFAULT, $variant = self::INTL_IDNA_VARIANT_UTS46, &$idna_info = [])
+ {
+ if (\PHP_VERSION_ID > 80400 && '' === $domainName) {
+ throw new \ValueError('idn_to_ascii(): Argument #1 ($domain) cannot be empty');
+ }
+
+ if (self::INTL_IDNA_VARIANT_2003 === $variant) {
+ @trigger_error('idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated', \E_USER_DEPRECATED);
+ }
+
+ $options = [
+ 'CheckHyphens' => true,
+ 'CheckBidi' => self::INTL_IDNA_VARIANT_2003 === $variant || 0 !== ($options & self::IDNA_CHECK_BIDI),
+ 'CheckJoiners' => self::INTL_IDNA_VARIANT_UTS46 === $variant && 0 !== ($options & self::IDNA_CHECK_CONTEXTJ),
+ 'UseSTD3ASCIIRules' => 0 !== ($options & self::IDNA_USE_STD3_RULES),
+ 'Transitional_Processing' => self::INTL_IDNA_VARIANT_2003 === $variant || 0 === ($options & self::IDNA_NONTRANSITIONAL_TO_ASCII),
+ 'VerifyDnsLength' => true,
+ ];
+ $info = new Info();
+ $labels = self::process((string) $domainName, $options, $info);
+
+ foreach ($labels as $i => $label) {
+ // Only convert labels to punycode that contain non-ASCII code points
+ if (1 === preg_match('/[^\x00-\x7F]/', $label)) {
+ try {
+ $label = 'xn--'.self::punycodeEncode($label);
+ } catch (\Exception $e) {
+ $info->errors |= self::ERROR_PUNYCODE;
+ }
+
+ $labels[$i] = $label;
+ }
+ }
+
+ if ($options['VerifyDnsLength']) {
+ self::validateDomainAndLabelLength($labels, $info);
+ }
+
+ $idna_info = [
+ 'result' => implode('.', $labels),
+ 'isTransitionalDifferent' => $info->transitionalDifferent,
+ 'errors' => $info->errors,
+ ];
+
+ return 0 === $info->errors ? $idna_info['result'] : false;
+ }
+
+ /**
+ * @see https://www.unicode.org/reports/tr46/#ToUnicode
+ *
+ * @param string $domainName
+ * @param int $options
+ * @param int $variant
+ * @param array $idna_info
+ *
+ * @return string|false
+ */
+ public static function idn_to_utf8($domainName, $options = self::IDNA_DEFAULT, $variant = self::INTL_IDNA_VARIANT_UTS46, &$idna_info = [])
+ {
+ if (\PHP_VERSION_ID > 80400 && '' === $domainName) {
+ throw new \ValueError('idn_to_utf8(): Argument #1 ($domain) cannot be empty');
+ }
+
+ if (self::INTL_IDNA_VARIANT_2003 === $variant) {
+ @trigger_error('idn_to_utf8(): INTL_IDNA_VARIANT_2003 is deprecated', \E_USER_DEPRECATED);
+ }
+
+ $info = new Info();
+ $labels = self::process((string) $domainName, [
+ 'CheckHyphens' => true,
+ 'CheckBidi' => self::INTL_IDNA_VARIANT_2003 === $variant || 0 !== ($options & self::IDNA_CHECK_BIDI),
+ 'CheckJoiners' => self::INTL_IDNA_VARIANT_UTS46 === $variant && 0 !== ($options & self::IDNA_CHECK_CONTEXTJ),
+ 'UseSTD3ASCIIRules' => 0 !== ($options & self::IDNA_USE_STD3_RULES),
+ 'Transitional_Processing' => self::INTL_IDNA_VARIANT_2003 === $variant || 0 === ($options & self::IDNA_NONTRANSITIONAL_TO_UNICODE),
+ ], $info);
+ $idna_info = [
+ 'result' => implode('.', $labels),
+ 'isTransitionalDifferent' => $info->transitionalDifferent,
+ 'errors' => $info->errors,
+ ];
+
+ return 0 === $info->errors ? $idna_info['result'] : false;
+ }
+
+ /**
+ * @param string $label
+ *
+ * @return bool
+ */
+ private static function isValidContextJ(array $codePoints, $label)
+ {
+ if (!isset(self::$virama)) {
+ self::$virama = require __DIR__.\DIRECTORY_SEPARATOR.'Resources'.\DIRECTORY_SEPARATOR.'unidata'.\DIRECTORY_SEPARATOR.'virama.php';
+ }
+
+ $offset = 0;
+
+ foreach ($codePoints as $i => $codePoint) {
+ if (0x200C !== $codePoint && 0x200D !== $codePoint) {
+ continue;
+ }
+
+ if (!isset($codePoints[$i - 1])) {
+ return false;
+ }
+
+ // If Canonical_Combining_Class(Before(cp)) .eq. Virama Then True;
+ if (isset(self::$virama[$codePoints[$i - 1]])) {
+ continue;
+ }
+
+ // If RegExpMatch((Joining_Type:{L,D})(Joining_Type:T)*\u200C(Joining_Type:T)*(Joining_Type:{R,D})) Then
+ // True;
+ // Generated RegExp = ([Joining_Type:{L,D}][Joining_Type:T]*\u200C[Joining_Type:T]*)[Joining_Type:{R,D}]
+ if (0x200C === $codePoint && 1 === preg_match(Regex::ZWNJ, $label, $matches, \PREG_OFFSET_CAPTURE, $offset)) {
+ $offset += \strlen($matches[1][0]);
+
+ continue;
+ }
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * @see https://www.unicode.org/reports/tr46/#ProcessingStepMap
+ *
+ * @param string $input
+ * @param array $options
+ *
+ * @return string
+ */
+ private static function mapCodePoints($input, array $options, Info $info)
+ {
+ $str = '';
+ $useSTD3ASCIIRules = $options['UseSTD3ASCIIRules'];
+ $transitional = $options['Transitional_Processing'];
+
+ foreach (self::utf8Decode($input) as $codePoint) {
+ $data = self::lookupCodePointStatus($codePoint, $useSTD3ASCIIRules);
+
+ switch ($data['status']) {
+ case 'disallowed':
+ case 'valid':
+ $str .= mb_chr($codePoint, 'utf-8');
+
+ break;
+
+ case 'ignored':
+ // Do nothing.
+ break;
+
+ case 'mapped':
+ $str .= $transitional && 0x1E9E === $codePoint ? 'ss' : $data['mapping'];
+
+ break;
+
+ case 'deviation':
+ $info->transitionalDifferent = true;
+ $str .= ($transitional ? $data['mapping'] : mb_chr($codePoint, 'utf-8'));
+
+ break;
+ }
+ }
+
+ return $str;
+ }
+
+ /**
+ * @see https://www.unicode.org/reports/tr46/#Processing
+ *
+ * @param string $domain
+ * @param array $options
+ *
+ * @return array
+ */
+ private static function process($domain, array $options, Info $info)
+ {
+ // If VerifyDnsLength is not set, we are doing ToUnicode otherwise we are doing ToASCII and
+ // we need to respect the VerifyDnsLength option.
+ $checkForEmptyLabels = !isset($options['VerifyDnsLength']) || $options['VerifyDnsLength'];
+
+ if ($checkForEmptyLabels && '' === $domain) {
+ $info->errors |= self::ERROR_EMPTY_LABEL;
+
+ return [$domain];
+ }
+
+ // Step 1. Map each code point in the domain name string
+ $domain = self::mapCodePoints($domain, $options, $info);
+
+ // Step 2. Normalize the domain name string to Unicode Normalization Form C.
+ if (!\Normalizer::isNormalized($domain, \Normalizer::FORM_C)) {
+ $domain = \Normalizer::normalize($domain, \Normalizer::FORM_C);
+ }
+
+ // Step 3. Break the string into labels at U+002E (.) FULL STOP.
+ $labels = explode('.', $domain);
+ $lastLabelIndex = \count($labels) - 1;
+
+ // Step 4. Convert and validate each label in the domain name string.
+ foreach ($labels as $i => $label) {
+ $validationOptions = $options;
+
+ if ('xn--' === substr($label, 0, 4)) {
+ // Step 4.1. If the label contains any non-ASCII code point (i.e., a code point greater than U+007F),
+ // record that there was an error, and continue with the next label.
+ if (preg_match('/[^\x00-\x7F]/', $label)) {
+ $info->errors |= self::ERROR_PUNYCODE;
+
+ continue;
+ }
+
+ // Step 4.2. Attempt to convert the rest of the label to Unicode according to Punycode [RFC3492]. If
+ // that conversion fails, record that there was an error, and continue
+ // with the next label. Otherwise replace the original label in the string by the results of the
+ // conversion.
+ try {
+ $label = self::punycodeDecode(substr($label, 4));
+ } catch (\Exception $e) {
+ $info->errors |= self::ERROR_PUNYCODE;
+
+ continue;
+ }
+
+ $validationOptions['Transitional_Processing'] = false;
+ $labels[$i] = $label;
+ }
+
+ self::validateLabel($label, $info, $validationOptions, $i > 0 && $i === $lastLabelIndex);
+ }
+
+ if ($info->bidiDomain && !$info->validBidiDomain) {
+ $info->errors |= self::ERROR_BIDI;
+ }
+
+ // Any input domain name string that does not record an error has been successfully
+ // processed according to this specification. Conversely, if an input domain_name string
+ // causes an error, then the processing of the input domain_name string fails. Determining
+ // what to do with error input is up to the caller, and not in the scope of this document.
+ return $labels;
+ }
+
+ /**
+ * @see https://tools.ietf.org/html/rfc5893#section-2
+ *
+ * @param string $label
+ */
+ private static function validateBidiLabel($label, Info $info)
+ {
+ if (1 === preg_match(Regex::RTL_LABEL, $label)) {
+ $info->bidiDomain = true;
+
+ // Step 1. The first character must be a character with Bidi property L, R, or AL.
+ // If it has the R or AL property, it is an RTL label
+ if (1 !== preg_match(Regex::BIDI_STEP_1_RTL, $label)) {
+ $info->validBidiDomain = false;
+
+ return;
+ }
+
+ // Step 2. In an RTL label, only characters with the Bidi properties R, AL, AN, EN, ES,
+ // CS, ET, ON, BN, or NSM are allowed.
+ if (1 === preg_match(Regex::BIDI_STEP_2, $label)) {
+ $info->validBidiDomain = false;
+
+ return;
+ }
+
+ // Step 3. In an RTL label, the end of the label must be a character with Bidi property
+ // R, AL, EN, or AN, followed by zero or more characters with Bidi property NSM.
+ if (1 !== preg_match(Regex::BIDI_STEP_3, $label)) {
+ $info->validBidiDomain = false;
+
+ return;
+ }
+
+ // Step 4. In an RTL label, if an EN is present, no AN may be present, and vice versa.
+ if (1 === preg_match(Regex::BIDI_STEP_4_AN, $label) && 1 === preg_match(Regex::BIDI_STEP_4_EN, $label)) {
+ $info->validBidiDomain = false;
+
+ return;
+ }
+
+ return;
+ }
+
+ // We are a LTR label
+ // Step 1. The first character must be a character with Bidi property L, R, or AL.
+ // If it has the L property, it is an LTR label.
+ if (1 !== preg_match(Regex::BIDI_STEP_1_LTR, $label)) {
+ $info->validBidiDomain = false;
+
+ return;
+ }
+
+ // Step 5. In an LTR label, only characters with the Bidi properties L, EN,
+ // ES, CS, ET, ON, BN, or NSM are allowed.
+ if (1 === preg_match(Regex::BIDI_STEP_5, $label)) {
+ $info->validBidiDomain = false;
+
+ return;
+ }
+
+ // Step 6.In an LTR label, the end of the label must be a character with Bidi property L or
+ // EN, followed by zero or more characters with Bidi property NSM.
+ if (1 !== preg_match(Regex::BIDI_STEP_6, $label)) {
+ $info->validBidiDomain = false;
+
+ return;
+ }
+ }
+
+ /**
+ * @param array $labels
+ */
+ private static function validateDomainAndLabelLength(array $labels, Info $info)
+ {
+ $maxDomainSize = self::MAX_DOMAIN_SIZE;
+ $length = \count($labels);
+
+ // Number of "." delimiters.
+ $domainLength = $length - 1;
+
+ // If the last label is empty and it is not the first label, then it is the root label.
+ // Increase the max size by 1, making it 254, to account for the root label's "."
+ // delimiter. This also means we don't need to check the last label's length for being too
+ // long.
+ if ($length > 1 && '' === $labels[$length - 1]) {
+ ++$maxDomainSize;
+ --$length;
+ }
+
+ for ($i = 0; $i < $length; ++$i) {
+ $bytes = \strlen($labels[$i]);
+ $domainLength += $bytes;
+
+ if ($bytes > self::MAX_LABEL_SIZE) {
+ $info->errors |= self::ERROR_LABEL_TOO_LONG;
+ }
+ }
+
+ if ($domainLength > $maxDomainSize) {
+ $info->errors |= self::ERROR_DOMAIN_NAME_TOO_LONG;
+ }
+ }
+
+ /**
+ * @see https://www.unicode.org/reports/tr46/#Validity_Criteria
+ *
+ * @param string $label
+ * @param array $options
+ * @param bool $canBeEmpty
+ */
+ private static function validateLabel($label, Info $info, array $options, $canBeEmpty)
+ {
+ if ('' === $label) {
+ if (!$canBeEmpty && (!isset($options['VerifyDnsLength']) || $options['VerifyDnsLength'])) {
+ $info->errors |= self::ERROR_EMPTY_LABEL;
+ }
+
+ return;
+ }
+
+ // Step 1. The label must be in Unicode Normalization Form C.
+ if (!\Normalizer::isNormalized($label, \Normalizer::FORM_C)) {
+ $info->errors |= self::ERROR_INVALID_ACE_LABEL;
+ }
+
+ $codePoints = self::utf8Decode($label);
+
+ if ($options['CheckHyphens']) {
+ // Step 2. If CheckHyphens, the label must not contain a U+002D HYPHEN-MINUS character
+ // in both the thrid and fourth positions.
+ if (isset($codePoints[2], $codePoints[3]) && 0x002D === $codePoints[2] && 0x002D === $codePoints[3]) {
+ $info->errors |= self::ERROR_HYPHEN_3_4;
+ }
+
+ // Step 3. If CheckHyphens, the label must neither begin nor end with a U+002D
+ // HYPHEN-MINUS character.
+ if ('-' === substr($label, 0, 1)) {
+ $info->errors |= self::ERROR_LEADING_HYPHEN;
+ }
+
+ if ('-' === substr($label, -1, 1)) {
+ $info->errors |= self::ERROR_TRAILING_HYPHEN;
+ }
+ } elseif ('xn--' === substr($label, 0, 4)) {
+ $info->errors |= self::ERROR_PUNYCODE;
+ }
+
+ // Step 4. The label must not contain a U+002E (.) FULL STOP.
+ if (false !== strpos($label, '.')) {
+ $info->errors |= self::ERROR_LABEL_HAS_DOT;
+ }
+
+ // Step 5. The label must not begin with a combining mark, that is: General_Category=Mark.
+ if (1 === preg_match(Regex::COMBINING_MARK, $label)) {
+ $info->errors |= self::ERROR_LEADING_COMBINING_MARK;
+ }
+
+ // Step 6. Each code point in the label must only have certain status values according to
+ // Section 5, IDNA Mapping Table:
+ $transitional = $options['Transitional_Processing'];
+ $useSTD3ASCIIRules = $options['UseSTD3ASCIIRules'];
+
+ foreach ($codePoints as $codePoint) {
+ $data = self::lookupCodePointStatus($codePoint, $useSTD3ASCIIRules);
+ $status = $data['status'];
+
+ if ('valid' === $status || (!$transitional && 'deviation' === $status)) {
+ continue;
+ }
+
+ $info->errors |= self::ERROR_DISALLOWED;
+
+ break;
+ }
+
+ // Step 7. If CheckJoiners, the label must satisify the ContextJ rules from Appendix A, in
+ // The Unicode Code Points and Internationalized Domain Names for Applications (IDNA)
+ // [IDNA2008].
+ if ($options['CheckJoiners'] && !self::isValidContextJ($codePoints, $label)) {
+ $info->errors |= self::ERROR_CONTEXTJ;
+ }
+
+ // Step 8. If CheckBidi, and if the domain name is a Bidi domain name, then the label must
+ // satisfy all six of the numbered conditions in [IDNA2008] RFC 5893, Section 2.
+ if ($options['CheckBidi'] && (!$info->bidiDomain || $info->validBidiDomain)) {
+ self::validateBidiLabel($label, $info);
+ }
+ }
+
+ /**
+ * @see https://tools.ietf.org/html/rfc3492#section-6.2
+ *
+ * @param string $input
+ *
+ * @return string
+ */
+ private static function punycodeDecode($input)
+ {
+ $n = self::INITIAL_N;
+ $out = 0;
+ $i = 0;
+ $bias = self::INITIAL_BIAS;
+ $lastDelimIndex = strrpos($input, self::DELIMITER);
+ $b = false === $lastDelimIndex ? 0 : $lastDelimIndex;
+ $inputLength = \strlen($input);
+ $output = [];
+ $bytes = array_map('ord', str_split($input));
+
+ for ($j = 0; $j < $b; ++$j) {
+ if ($bytes[$j] > 0x7F) {
+ throw new \Exception('Invalid input');
+ }
+
+ $output[$out++] = $input[$j];
+ }
+
+ if ($b > 0) {
+ ++$b;
+ }
+
+ for ($in = $b; $in < $inputLength; ++$out) {
+ $oldi = $i;
+ $w = 1;
+
+ for ($k = self::BASE; /* no condition */; $k += self::BASE) {
+ if ($in >= $inputLength) {
+ throw new \Exception('Invalid input');
+ }
+
+ $digit = self::$basicToDigit[$bytes[$in++] & 0xFF];
+
+ if ($digit < 0) {
+ throw new \Exception('Invalid input');
+ }
+
+ if ($digit > intdiv(self::MAX_INT - $i, $w)) {
+ throw new \Exception('Integer overflow');
+ }
+
+ $i += $digit * $w;
+
+ if ($k <= $bias) {
+ $t = self::TMIN;
+ } elseif ($k >= $bias + self::TMAX) {
+ $t = self::TMAX;
+ } else {
+ $t = $k - $bias;
+ }
+
+ if ($digit < $t) {
+ break;
+ }
+
+ $baseMinusT = self::BASE - $t;
+
+ if ($w > intdiv(self::MAX_INT, $baseMinusT)) {
+ throw new \Exception('Integer overflow');
+ }
+
+ $w *= $baseMinusT;
+ }
+
+ $outPlusOne = $out + 1;
+ $bias = self::adaptBias($i - $oldi, $outPlusOne, 0 === $oldi);
+
+ if (intdiv($i, $outPlusOne) > self::MAX_INT - $n) {
+ throw new \Exception('Integer overflow');
+ }
+
+ $n += intdiv($i, $outPlusOne);
+ $i %= $outPlusOne;
+ array_splice($output, $i++, 0, [mb_chr($n, 'utf-8')]);
+ }
+
+ return implode('', $output);
+ }
+
+ /**
+ * @see https://tools.ietf.org/html/rfc3492#section-6.3
+ *
+ * @param string $input
+ *
+ * @return string
+ */
+ private static function punycodeEncode($input)
+ {
+ $n = self::INITIAL_N;
+ $delta = 0;
+ $out = 0;
+ $bias = self::INITIAL_BIAS;
+ $inputLength = 0;
+ $output = '';
+ $iter = self::utf8Decode($input);
+
+ foreach ($iter as $codePoint) {
+ ++$inputLength;
+
+ if ($codePoint < 0x80) {
+ $output .= \chr($codePoint);
+ ++$out;
+ }
+ }
+
+ $h = $out;
+ $b = $out;
+
+ if ($b > 0) {
+ $output .= self::DELIMITER;
+ ++$out;
+ }
+
+ while ($h < $inputLength) {
+ $m = self::MAX_INT;
+
+ foreach ($iter as $codePoint) {
+ if ($codePoint >= $n && $codePoint < $m) {
+ $m = $codePoint;
+ }
+ }
+
+ if ($m - $n > intdiv(self::MAX_INT - $delta, $h + 1)) {
+ throw new \Exception('Integer overflow');
+ }
+
+ $delta += ($m - $n) * ($h + 1);
+ $n = $m;
+
+ foreach ($iter as $codePoint) {
+ if ($codePoint < $n && 0 === ++$delta) {
+ throw new \Exception('Integer overflow');
+ }
+
+ if ($codePoint === $n) {
+ $q = $delta;
+
+ for ($k = self::BASE; /* no condition */; $k += self::BASE) {
+ if ($k <= $bias) {
+ $t = self::TMIN;
+ } elseif ($k >= $bias + self::TMAX) {
+ $t = self::TMAX;
+ } else {
+ $t = $k - $bias;
+ }
+
+ if ($q < $t) {
+ break;
+ }
+
+ $qMinusT = $q - $t;
+ $baseMinusT = self::BASE - $t;
+ $output .= self::encodeDigit($t + $qMinusT % $baseMinusT, false);
+ ++$out;
+ $q = intdiv($qMinusT, $baseMinusT);
+ }
+
+ $output .= self::encodeDigit($q, false);
+ ++$out;
+ $bias = self::adaptBias($delta, $h + 1, $h === $b);
+ $delta = 0;
+ ++$h;
+ }
+ }
+
+ ++$delta;
+ ++$n;
+ }
+
+ return $output;
+ }
+
+ /**
+ * @see https://tools.ietf.org/html/rfc3492#section-6.1
+ *
+ * @param int $delta
+ * @param int $numPoints
+ * @param bool $firstTime
+ *
+ * @return int
+ */
+ private static function adaptBias($delta, $numPoints, $firstTime)
+ {
+ // xxx >> 1 is a faster way of doing intdiv(xxx, 2)
+ $delta = $firstTime ? intdiv($delta, self::DAMP) : $delta >> 1;
+ $delta += intdiv($delta, $numPoints);
+ $k = 0;
+
+ while ($delta > ((self::BASE - self::TMIN) * self::TMAX) >> 1) {
+ $delta = intdiv($delta, self::BASE - self::TMIN);
+ $k += self::BASE;
+ }
+
+ return $k + intdiv((self::BASE - self::TMIN + 1) * $delta, $delta + self::SKEW);
+ }
+
+ /**
+ * @param int $d
+ * @param bool $flag
+ *
+ * @return string
+ */
+ private static function encodeDigit($d, $flag)
+ {
+ return \chr($d + 22 + 75 * ($d < 26 ? 1 : 0) - (($flag ? 1 : 0) << 5));
+ }
+
+ /**
+ * Takes a UTF-8 encoded string and converts it into a series of integer code points. Any
+ * invalid byte sequences will be replaced by a U+FFFD replacement code point.
+ *
+ * @see https://encoding.spec.whatwg.org/#utf-8-decoder
+ *
+ * @param string $input
+ *
+ * @return array
+ */
+ private static function utf8Decode($input)
+ {
+ $bytesSeen = 0;
+ $bytesNeeded = 0;
+ $lowerBoundary = 0x80;
+ $upperBoundary = 0xBF;
+ $codePoint = 0;
+ $codePoints = [];
+ $length = \strlen($input);
+
+ for ($i = 0; $i < $length; ++$i) {
+ $byte = \ord($input[$i]);
+
+ if (0 === $bytesNeeded) {
+ if ($byte >= 0x00 && $byte <= 0x7F) {
+ $codePoints[] = $byte;
+
+ continue;
+ }
+
+ if ($byte >= 0xC2 && $byte <= 0xDF) {
+ $bytesNeeded = 1;
+ $codePoint = $byte & 0x1F;
+ } elseif ($byte >= 0xE0 && $byte <= 0xEF) {
+ if (0xE0 === $byte) {
+ $lowerBoundary = 0xA0;
+ } elseif (0xED === $byte) {
+ $upperBoundary = 0x9F;
+ }
+
+ $bytesNeeded = 2;
+ $codePoint = $byte & 0xF;
+ } elseif ($byte >= 0xF0 && $byte <= 0xF4) {
+ if (0xF0 === $byte) {
+ $lowerBoundary = 0x90;
+ } elseif (0xF4 === $byte) {
+ $upperBoundary = 0x8F;
+ }
+
+ $bytesNeeded = 3;
+ $codePoint = $byte & 0x7;
+ } else {
+ $codePoints[] = 0xFFFD;
+ }
+
+ continue;
+ }
+
+ if ($byte < $lowerBoundary || $byte > $upperBoundary) {
+ $codePoint = 0;
+ $bytesNeeded = 0;
+ $bytesSeen = 0;
+ $lowerBoundary = 0x80;
+ $upperBoundary = 0xBF;
+ --$i;
+ $codePoints[] = 0xFFFD;
+
+ continue;
+ }
+
+ $lowerBoundary = 0x80;
+ $upperBoundary = 0xBF;
+ $codePoint = ($codePoint << 6) | ($byte & 0x3F);
+
+ if (++$bytesSeen !== $bytesNeeded) {
+ continue;
+ }
+
+ $codePoints[] = $codePoint;
+ $codePoint = 0;
+ $bytesNeeded = 0;
+ $bytesSeen = 0;
+ }
+
+ // String unexpectedly ended, so append a U+FFFD code point.
+ if (0 !== $bytesNeeded) {
+ $codePoints[] = 0xFFFD;
+ }
+
+ return $codePoints;
+ }
+
+ /**
+ * @param int $codePoint
+ * @param bool $useSTD3ASCIIRules
+ *
+ * @return array{status: string, mapping?: string}
+ */
+ private static function lookupCodePointStatus($codePoint, $useSTD3ASCIIRules)
+ {
+ if (!self::$mappingTableLoaded) {
+ self::$mappingTableLoaded = true;
+ self::$mapped = require __DIR__.'/Resources/unidata/mapped.php';
+ self::$ignored = require __DIR__.'/Resources/unidata/ignored.php';
+ self::$deviation = require __DIR__.'/Resources/unidata/deviation.php';
+ self::$disallowed = require __DIR__.'/Resources/unidata/disallowed.php';
+ self::$disallowed_STD3_mapped = require __DIR__.'/Resources/unidata/disallowed_STD3_mapped.php';
+ self::$disallowed_STD3_valid = require __DIR__.'/Resources/unidata/disallowed_STD3_valid.php';
+ }
+
+ if (isset(self::$mapped[$codePoint])) {
+ return ['status' => 'mapped', 'mapping' => self::$mapped[$codePoint]];
+ }
+
+ if (isset(self::$ignored[$codePoint])) {
+ return ['status' => 'ignored'];
+ }
+
+ if (isset(self::$deviation[$codePoint])) {
+ return ['status' => 'deviation', 'mapping' => self::$deviation[$codePoint]];
+ }
+
+ if (isset(self::$disallowed[$codePoint]) || DisallowedRanges::inRange($codePoint)) {
+ return ['status' => 'disallowed'];
+ }
+
+ $isDisallowedMapped = isset(self::$disallowed_STD3_mapped[$codePoint]);
+
+ if ($isDisallowedMapped || isset(self::$disallowed_STD3_valid[$codePoint])) {
+ $status = 'disallowed';
+
+ if (!$useSTD3ASCIIRules) {
+ $status = $isDisallowedMapped ? 'mapped' : 'valid';
+ }
+
+ if ($isDisallowedMapped) {
+ return ['status' => $status, 'mapping' => self::$disallowed_STD3_mapped[$codePoint]];
+ }
+
+ return ['status' => $status];
+ }
+
+ return ['status' => 'valid'];
+ }
+}
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/Info.php b/plugins/vendor/symfony/polyfill-intl-idn/Info.php
new file mode 100644
index 00000000..25c3582b
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/Info.php
@@ -0,0 +1,23 @@
+ and Trevor Rowbotham
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Intl\Idn;
+
+/**
+ * @internal
+ */
+class Info
+{
+ public $bidiDomain = false;
+ public $errors = 0;
+ public $validBidiDomain = true;
+ public $transitionalDifferent = false;
+}
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/LICENSE b/plugins/vendor/symfony/polyfill-intl-idn/LICENSE
new file mode 100644
index 00000000..fd0a0626
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2018-present Fabien Potencier and Trevor Rowbotham
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/README.md b/plugins/vendor/symfony/polyfill-intl-idn/README.md
new file mode 100644
index 00000000..cae55170
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/README.md
@@ -0,0 +1,12 @@
+Symfony Polyfill / Intl: Idn
+============================
+
+This component provides [`idn_to_ascii`](https://php.net/idn-to-ascii) and [`idn_to_utf8`](https://php.net/idn-to-utf8) functions to users who run php versions without the [Intl](https://php.net/intl) extension.
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php
new file mode 100644
index 00000000..d285acd1
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php
@@ -0,0 +1,384 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Intl\Idn\Resources\unidata;
+
+/**
+ * @internal
+ */
+final class DisallowedRanges
+{
+ /**
+ * @param int $codePoint
+ *
+ * @return bool
+ */
+ public static function inRange($codePoint)
+ {
+ if ($codePoint >= 128 && $codePoint <= 159) {
+ return true;
+ }
+
+ if ($codePoint >= 2155 && $codePoint <= 2207) {
+ return true;
+ }
+
+ if ($codePoint >= 3676 && $codePoint <= 3712) {
+ return true;
+ }
+
+ if ($codePoint >= 3808 && $codePoint <= 3839) {
+ return true;
+ }
+
+ if ($codePoint >= 4059 && $codePoint <= 4095) {
+ return true;
+ }
+
+ if ($codePoint >= 4256 && $codePoint <= 4293) {
+ return true;
+ }
+
+ if ($codePoint >= 6849 && $codePoint <= 6911) {
+ return true;
+ }
+
+ if ($codePoint >= 11859 && $codePoint <= 11903) {
+ return true;
+ }
+
+ if ($codePoint >= 42955 && $codePoint <= 42996) {
+ return true;
+ }
+
+ if ($codePoint >= 55296 && $codePoint <= 57343) {
+ return true;
+ }
+
+ if ($codePoint >= 57344 && $codePoint <= 63743) {
+ return true;
+ }
+
+ if ($codePoint >= 64218 && $codePoint <= 64255) {
+ return true;
+ }
+
+ if ($codePoint >= 64976 && $codePoint <= 65007) {
+ return true;
+ }
+
+ if ($codePoint >= 65630 && $codePoint <= 65663) {
+ return true;
+ }
+
+ if ($codePoint >= 65953 && $codePoint <= 65999) {
+ return true;
+ }
+
+ if ($codePoint >= 66046 && $codePoint <= 66175) {
+ return true;
+ }
+
+ if ($codePoint >= 66518 && $codePoint <= 66559) {
+ return true;
+ }
+
+ if ($codePoint >= 66928 && $codePoint <= 67071) {
+ return true;
+ }
+
+ if ($codePoint >= 67432 && $codePoint <= 67583) {
+ return true;
+ }
+
+ if ($codePoint >= 67760 && $codePoint <= 67807) {
+ return true;
+ }
+
+ if ($codePoint >= 67904 && $codePoint <= 67967) {
+ return true;
+ }
+
+ if ($codePoint >= 68256 && $codePoint <= 68287) {
+ return true;
+ }
+
+ if ($codePoint >= 68528 && $codePoint <= 68607) {
+ return true;
+ }
+
+ if ($codePoint >= 68681 && $codePoint <= 68735) {
+ return true;
+ }
+
+ if ($codePoint >= 68922 && $codePoint <= 69215) {
+ return true;
+ }
+
+ if ($codePoint >= 69298 && $codePoint <= 69375) {
+ return true;
+ }
+
+ if ($codePoint >= 69466 && $codePoint <= 69551) {
+ return true;
+ }
+
+ if ($codePoint >= 70207 && $codePoint <= 70271) {
+ return true;
+ }
+
+ if ($codePoint >= 70517 && $codePoint <= 70655) {
+ return true;
+ }
+
+ if ($codePoint >= 70874 && $codePoint <= 71039) {
+ return true;
+ }
+
+ if ($codePoint >= 71134 && $codePoint <= 71167) {
+ return true;
+ }
+
+ if ($codePoint >= 71370 && $codePoint <= 71423) {
+ return true;
+ }
+
+ if ($codePoint >= 71488 && $codePoint <= 71679) {
+ return true;
+ }
+
+ if ($codePoint >= 71740 && $codePoint <= 71839) {
+ return true;
+ }
+
+ if ($codePoint >= 72026 && $codePoint <= 72095) {
+ return true;
+ }
+
+ if ($codePoint >= 72441 && $codePoint <= 72703) {
+ return true;
+ }
+
+ if ($codePoint >= 72887 && $codePoint <= 72959) {
+ return true;
+ }
+
+ if ($codePoint >= 73130 && $codePoint <= 73439) {
+ return true;
+ }
+
+ if ($codePoint >= 73465 && $codePoint <= 73647) {
+ return true;
+ }
+
+ if ($codePoint >= 74650 && $codePoint <= 74751) {
+ return true;
+ }
+
+ if ($codePoint >= 75076 && $codePoint <= 77823) {
+ return true;
+ }
+
+ if ($codePoint >= 78905 && $codePoint <= 82943) {
+ return true;
+ }
+
+ if ($codePoint >= 83527 && $codePoint <= 92159) {
+ return true;
+ }
+
+ if ($codePoint >= 92784 && $codePoint <= 92879) {
+ return true;
+ }
+
+ if ($codePoint >= 93072 && $codePoint <= 93759) {
+ return true;
+ }
+
+ if ($codePoint >= 93851 && $codePoint <= 93951) {
+ return true;
+ }
+
+ if ($codePoint >= 94112 && $codePoint <= 94175) {
+ return true;
+ }
+
+ if ($codePoint >= 101590 && $codePoint <= 101631) {
+ return true;
+ }
+
+ if ($codePoint >= 101641 && $codePoint <= 110591) {
+ return true;
+ }
+
+ if ($codePoint >= 110879 && $codePoint <= 110927) {
+ return true;
+ }
+
+ if ($codePoint >= 111356 && $codePoint <= 113663) {
+ return true;
+ }
+
+ if ($codePoint >= 113828 && $codePoint <= 118783) {
+ return true;
+ }
+
+ if ($codePoint >= 119366 && $codePoint <= 119519) {
+ return true;
+ }
+
+ if ($codePoint >= 119673 && $codePoint <= 119807) {
+ return true;
+ }
+
+ if ($codePoint >= 121520 && $codePoint <= 122879) {
+ return true;
+ }
+
+ if ($codePoint >= 122923 && $codePoint <= 123135) {
+ return true;
+ }
+
+ if ($codePoint >= 123216 && $codePoint <= 123583) {
+ return true;
+ }
+
+ if ($codePoint >= 123648 && $codePoint <= 124927) {
+ return true;
+ }
+
+ if ($codePoint >= 125143 && $codePoint <= 125183) {
+ return true;
+ }
+
+ if ($codePoint >= 125280 && $codePoint <= 126064) {
+ return true;
+ }
+
+ if ($codePoint >= 126133 && $codePoint <= 126208) {
+ return true;
+ }
+
+ if ($codePoint >= 126270 && $codePoint <= 126463) {
+ return true;
+ }
+
+ if ($codePoint >= 126652 && $codePoint <= 126703) {
+ return true;
+ }
+
+ if ($codePoint >= 126706 && $codePoint <= 126975) {
+ return true;
+ }
+
+ if ($codePoint >= 127406 && $codePoint <= 127461) {
+ return true;
+ }
+
+ if ($codePoint >= 127590 && $codePoint <= 127743) {
+ return true;
+ }
+
+ if ($codePoint >= 129202 && $codePoint <= 129279) {
+ return true;
+ }
+
+ if ($codePoint >= 129751 && $codePoint <= 129791) {
+ return true;
+ }
+
+ if ($codePoint >= 129995 && $codePoint <= 130031) {
+ return true;
+ }
+
+ if ($codePoint >= 130042 && $codePoint <= 131069) {
+ return true;
+ }
+
+ if ($codePoint >= 173790 && $codePoint <= 173823) {
+ return true;
+ }
+
+ if ($codePoint >= 191457 && $codePoint <= 194559) {
+ return true;
+ }
+
+ if ($codePoint >= 195102 && $codePoint <= 196605) {
+ return true;
+ }
+
+ if ($codePoint >= 201547 && $codePoint <= 262141) {
+ return true;
+ }
+
+ if ($codePoint >= 262144 && $codePoint <= 327677) {
+ return true;
+ }
+
+ if ($codePoint >= 327680 && $codePoint <= 393213) {
+ return true;
+ }
+
+ if ($codePoint >= 393216 && $codePoint <= 458749) {
+ return true;
+ }
+
+ if ($codePoint >= 458752 && $codePoint <= 524285) {
+ return true;
+ }
+
+ if ($codePoint >= 524288 && $codePoint <= 589821) {
+ return true;
+ }
+
+ if ($codePoint >= 589824 && $codePoint <= 655357) {
+ return true;
+ }
+
+ if ($codePoint >= 655360 && $codePoint <= 720893) {
+ return true;
+ }
+
+ if ($codePoint >= 720896 && $codePoint <= 786429) {
+ return true;
+ }
+
+ if ($codePoint >= 786432 && $codePoint <= 851965) {
+ return true;
+ }
+
+ if ($codePoint >= 851968 && $codePoint <= 917501) {
+ return true;
+ }
+
+ if ($codePoint >= 917536 && $codePoint <= 917631) {
+ return true;
+ }
+
+ if ($codePoint >= 917632 && $codePoint <= 917759) {
+ return true;
+ }
+
+ if ($codePoint >= 918000 && $codePoint <= 983037) {
+ return true;
+ }
+
+ if ($codePoint >= 983040 && $codePoint <= 1048573) {
+ return true;
+ }
+
+ if ($codePoint >= 1048576 && $codePoint <= 1114109) {
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php
new file mode 100644
index 00000000..3c6af0c1
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php
@@ -0,0 +1,33 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Intl\Idn\Resources\unidata;
+
+/**
+ * @internal
+ */
+final class Regex
+{
+ const COMBINING_MARK = '/^[\x{0300}-\x{036F}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{0591}-\x{05BD}\x{05BF}\x{05C1}-\x{05C2}\x{05C4}-\x{05C5}\x{05C7}\x{0610}-\x{061A}\x{064B}-\x{065F}\x{0670}\x{06D6}-\x{06DC}\x{06DF}-\x{06E4}\x{06E7}-\x{06E8}\x{06EA}-\x{06ED}\x{0711}\x{0730}-\x{074A}\x{07A6}-\x{07B0}\x{07EB}-\x{07F3}\x{07FD}\x{0816}-\x{0819}\x{081B}-\x{0823}\x{0825}-\x{0827}\x{0829}-\x{082D}\x{0859}-\x{085B}\x{08D3}-\x{08E1}\x{08E3}-\x{0902}\x{0903}\x{093A}\x{093B}\x{093C}\x{093E}-\x{0940}\x{0941}-\x{0948}\x{0949}-\x{094C}\x{094D}\x{094E}-\x{094F}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0981}\x{0982}-\x{0983}\x{09BC}\x{09BE}-\x{09C0}\x{09C1}-\x{09C4}\x{09C7}-\x{09C8}\x{09CB}-\x{09CC}\x{09CD}\x{09D7}\x{09E2}-\x{09E3}\x{09FE}\x{0A01}-\x{0A02}\x{0A03}\x{0A3C}\x{0A3E}-\x{0A40}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0A83}\x{0ABC}\x{0ABE}-\x{0AC0}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0AC9}\x{0ACB}-\x{0ACC}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B02}-\x{0B03}\x{0B3C}\x{0B3E}\x{0B3F}\x{0B40}\x{0B41}-\x{0B44}\x{0B47}-\x{0B48}\x{0B4B}-\x{0B4C}\x{0B4D}\x{0B55}-\x{0B56}\x{0B57}\x{0B62}-\x{0B63}\x{0B82}\x{0BBE}-\x{0BBF}\x{0BC0}\x{0BC1}-\x{0BC2}\x{0BC6}-\x{0BC8}\x{0BCA}-\x{0BCC}\x{0BCD}\x{0BD7}\x{0C00}\x{0C01}-\x{0C03}\x{0C04}\x{0C3E}-\x{0C40}\x{0C41}-\x{0C44}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C81}\x{0C82}-\x{0C83}\x{0CBC}\x{0CBE}\x{0CBF}\x{0CC0}-\x{0CC4}\x{0CC6}\x{0CC7}-\x{0CC8}\x{0CCA}-\x{0CCB}\x{0CCC}-\x{0CCD}\x{0CD5}-\x{0CD6}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D02}-\x{0D03}\x{0D3B}-\x{0D3C}\x{0D3E}-\x{0D40}\x{0D41}-\x{0D44}\x{0D46}-\x{0D48}\x{0D4A}-\x{0D4C}\x{0D4D}\x{0D57}\x{0D62}-\x{0D63}\x{0D81}\x{0D82}-\x{0D83}\x{0DCA}\x{0DCF}-\x{0DD1}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0DD8}-\x{0DDF}\x{0DF2}-\x{0DF3}\x{0E31}\x{0E34}-\x{0E3A}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EBC}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F3E}-\x{0F3F}\x{0F71}-\x{0F7E}\x{0F7F}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102B}-\x{102C}\x{102D}-\x{1030}\x{1031}\x{1032}-\x{1037}\x{1038}\x{1039}-\x{103A}\x{103B}-\x{103C}\x{103D}-\x{103E}\x{1056}-\x{1057}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1062}-\x{1064}\x{1067}-\x{106D}\x{1071}-\x{1074}\x{1082}\x{1083}-\x{1084}\x{1085}-\x{1086}\x{1087}-\x{108C}\x{108D}\x{108F}\x{109A}-\x{109C}\x{109D}\x{135D}-\x{135F}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B6}\x{17B7}-\x{17BD}\x{17BE}-\x{17C5}\x{17C6}\x{17C7}-\x{17C8}\x{17C9}-\x{17D3}\x{17DD}\x{180B}-\x{180D}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1923}-\x{1926}\x{1927}-\x{1928}\x{1929}-\x{192B}\x{1930}-\x{1931}\x{1932}\x{1933}-\x{1938}\x{1939}-\x{193B}\x{1A17}-\x{1A18}\x{1A19}-\x{1A1A}\x{1A1B}\x{1A55}\x{1A56}\x{1A57}\x{1A58}-\x{1A5E}\x{1A60}\x{1A61}\x{1A62}\x{1A63}-\x{1A64}\x{1A65}-\x{1A6C}\x{1A6D}-\x{1A72}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1ABF}-\x{1AC0}\x{1B00}-\x{1B03}\x{1B04}\x{1B34}\x{1B35}\x{1B36}-\x{1B3A}\x{1B3B}\x{1B3C}\x{1B3D}-\x{1B41}\x{1B42}\x{1B43}-\x{1B44}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1B82}\x{1BA1}\x{1BA2}-\x{1BA5}\x{1BA6}-\x{1BA7}\x{1BA8}-\x{1BA9}\x{1BAA}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE7}\x{1BE8}-\x{1BE9}\x{1BEA}-\x{1BEC}\x{1BED}\x{1BEE}\x{1BEF}-\x{1BF1}\x{1BF2}-\x{1BF3}\x{1C24}-\x{1C2B}\x{1C2C}-\x{1C33}\x{1C34}-\x{1C35}\x{1C36}-\x{1C37}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE1}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF7}\x{1CF8}-\x{1CF9}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2CEF}-\x{2CF1}\x{2D7F}\x{2DE0}-\x{2DFF}\x{302A}-\x{302D}\x{302E}-\x{302F}\x{3099}-\x{309A}\x{A66F}\x{A670}-\x{A672}\x{A674}-\x{A67D}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A802}\x{A806}\x{A80B}\x{A823}-\x{A824}\x{A825}-\x{A826}\x{A827}\x{A82C}\x{A880}-\x{A881}\x{A8B4}-\x{A8C3}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A952}-\x{A953}\x{A980}-\x{A982}\x{A983}\x{A9B3}\x{A9B4}-\x{A9B5}\x{A9B6}-\x{A9B9}\x{A9BA}-\x{A9BB}\x{A9BC}-\x{A9BD}\x{A9BE}-\x{A9C0}\x{A9E5}\x{AA29}-\x{AA2E}\x{AA2F}-\x{AA30}\x{AA31}-\x{AA32}\x{AA33}-\x{AA34}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA4D}\x{AA7B}\x{AA7C}\x{AA7D}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AAEB}\x{AAEC}-\x{AAED}\x{AAEE}-\x{AAEF}\x{AAF5}\x{AAF6}\x{ABE3}-\x{ABE4}\x{ABE5}\x{ABE6}-\x{ABE7}\x{ABE8}\x{ABE9}-\x{ABEA}\x{ABEC}\x{ABED}\x{FB1E}\x{FE00}-\x{FE0F}\x{FE20}-\x{FE2F}\x{101FD}\x{102E0}\x{10376}-\x{1037A}\x{10A01}-\x{10A03}\x{10A05}-\x{10A06}\x{10A0C}-\x{10A0F}\x{10A38}-\x{10A3A}\x{10A3F}\x{10AE5}-\x{10AE6}\x{10D24}-\x{10D27}\x{10EAB}-\x{10EAC}\x{10F46}-\x{10F50}\x{11000}\x{11001}\x{11002}\x{11038}-\x{11046}\x{1107F}-\x{11081}\x{11082}\x{110B0}-\x{110B2}\x{110B3}-\x{110B6}\x{110B7}-\x{110B8}\x{110B9}-\x{110BA}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112C}\x{1112D}-\x{11134}\x{11145}-\x{11146}\x{11173}\x{11180}-\x{11181}\x{11182}\x{111B3}-\x{111B5}\x{111B6}-\x{111BE}\x{111BF}-\x{111C0}\x{111C9}-\x{111CC}\x{111CE}\x{111CF}\x{1122C}-\x{1122E}\x{1122F}-\x{11231}\x{11232}-\x{11233}\x{11234}\x{11235}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E0}-\x{112E2}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{11302}-\x{11303}\x{1133B}-\x{1133C}\x{1133E}-\x{1133F}\x{11340}\x{11341}-\x{11344}\x{11347}-\x{11348}\x{1134B}-\x{1134D}\x{11357}\x{11362}-\x{11363}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11435}-\x{11437}\x{11438}-\x{1143F}\x{11440}-\x{11441}\x{11442}-\x{11444}\x{11445}\x{11446}\x{1145E}\x{114B0}-\x{114B2}\x{114B3}-\x{114B8}\x{114B9}\x{114BA}\x{114BB}-\x{114BE}\x{114BF}-\x{114C0}\x{114C1}\x{114C2}-\x{114C3}\x{115AF}-\x{115B1}\x{115B2}-\x{115B5}\x{115B8}-\x{115BB}\x{115BC}-\x{115BD}\x{115BE}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11630}-\x{11632}\x{11633}-\x{1163A}\x{1163B}-\x{1163C}\x{1163D}\x{1163E}\x{1163F}-\x{11640}\x{116AB}\x{116AC}\x{116AD}\x{116AE}-\x{116AF}\x{116B0}-\x{116B5}\x{116B6}\x{116B7}\x{1171D}-\x{1171F}\x{11720}-\x{11721}\x{11722}-\x{11725}\x{11726}\x{11727}-\x{1172B}\x{1182C}-\x{1182E}\x{1182F}-\x{11837}\x{11838}\x{11839}-\x{1183A}\x{11930}-\x{11935}\x{11937}-\x{11938}\x{1193B}-\x{1193C}\x{1193D}\x{1193E}\x{11940}\x{11942}\x{11943}\x{119D1}-\x{119D3}\x{119D4}-\x{119D7}\x{119DA}-\x{119DB}\x{119DC}-\x{119DF}\x{119E0}\x{119E4}\x{11A01}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A39}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A57}-\x{11A58}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A97}\x{11A98}-\x{11A99}\x{11C2F}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C3E}\x{11C3F}\x{11C92}-\x{11CA7}\x{11CA9}\x{11CAA}-\x{11CB0}\x{11CB1}\x{11CB2}-\x{11CB3}\x{11CB4}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D8A}-\x{11D8E}\x{11D90}-\x{11D91}\x{11D93}-\x{11D94}\x{11D95}\x{11D96}\x{11D97}\x{11EF3}-\x{11EF4}\x{11EF5}-\x{11EF6}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16F4F}\x{16F51}-\x{16F87}\x{16F8F}-\x{16F92}\x{16FE4}\x{16FF0}-\x{16FF1}\x{1BC9D}-\x{1BC9E}\x{1D165}-\x{1D166}\x{1D167}-\x{1D169}\x{1D16D}-\x{1D172}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D242}-\x{1D244}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E130}-\x{1E136}\x{1E2EC}-\x{1E2EF}\x{1E8D0}-\x{1E8D6}\x{1E944}-\x{1E94A}\x{E0100}-\x{E01EF}]/u';
+
+ const RTL_LABEL = '/[\x{0590}\x{05BE}\x{05C0}\x{05C3}\x{05C6}\x{05C8}-\x{05CF}\x{05D0}-\x{05EA}\x{05EB}-\x{05EE}\x{05EF}-\x{05F2}\x{05F3}-\x{05F4}\x{05F5}-\x{05FF}\x{0600}-\x{0605}\x{0608}\x{060B}\x{060D}\x{061B}\x{061C}\x{061D}\x{061E}-\x{061F}\x{0620}-\x{063F}\x{0640}\x{0641}-\x{064A}\x{0660}-\x{0669}\x{066B}-\x{066C}\x{066D}\x{066E}-\x{066F}\x{0671}-\x{06D3}\x{06D4}\x{06D5}\x{06DD}\x{06E5}-\x{06E6}\x{06EE}-\x{06EF}\x{06FA}-\x{06FC}\x{06FD}-\x{06FE}\x{06FF}\x{0700}-\x{070D}\x{070E}\x{070F}\x{0710}\x{0712}-\x{072F}\x{074B}-\x{074C}\x{074D}-\x{07A5}\x{07B1}\x{07B2}-\x{07BF}\x{07C0}-\x{07C9}\x{07CA}-\x{07EA}\x{07F4}-\x{07F5}\x{07FA}\x{07FB}-\x{07FC}\x{07FE}-\x{07FF}\x{0800}-\x{0815}\x{081A}\x{0824}\x{0828}\x{082E}-\x{082F}\x{0830}-\x{083E}\x{083F}\x{0840}-\x{0858}\x{085C}-\x{085D}\x{085E}\x{085F}\x{0860}-\x{086A}\x{086B}-\x{086F}\x{0870}-\x{089F}\x{08A0}-\x{08B4}\x{08B5}\x{08B6}-\x{08C7}\x{08C8}-\x{08D2}\x{08E2}\x{200F}\x{FB1D}\x{FB1F}-\x{FB28}\x{FB2A}-\x{FB36}\x{FB37}\x{FB38}-\x{FB3C}\x{FB3D}\x{FB3E}\x{FB3F}\x{FB40}-\x{FB41}\x{FB42}\x{FB43}-\x{FB44}\x{FB45}\x{FB46}-\x{FB4F}\x{FB50}-\x{FBB1}\x{FBB2}-\x{FBC1}\x{FBC2}-\x{FBD2}\x{FBD3}-\x{FD3D}\x{FD40}-\x{FD4F}\x{FD50}-\x{FD8F}\x{FD90}-\x{FD91}\x{FD92}-\x{FDC7}\x{FDC8}-\x{FDCF}\x{FDF0}-\x{FDFB}\x{FDFC}\x{FDFE}-\x{FDFF}\x{FE70}-\x{FE74}\x{FE75}\x{FE76}-\x{FEFC}\x{FEFD}-\x{FEFE}\x{10800}-\x{10805}\x{10806}-\x{10807}\x{10808}\x{10809}\x{1080A}-\x{10835}\x{10836}\x{10837}-\x{10838}\x{10839}-\x{1083B}\x{1083C}\x{1083D}-\x{1083E}\x{1083F}-\x{10855}\x{10856}\x{10857}\x{10858}-\x{1085F}\x{10860}-\x{10876}\x{10877}-\x{10878}\x{10879}-\x{1087F}\x{10880}-\x{1089E}\x{1089F}-\x{108A6}\x{108A7}-\x{108AF}\x{108B0}-\x{108DF}\x{108E0}-\x{108F2}\x{108F3}\x{108F4}-\x{108F5}\x{108F6}-\x{108FA}\x{108FB}-\x{108FF}\x{10900}-\x{10915}\x{10916}-\x{1091B}\x{1091C}-\x{1091E}\x{10920}-\x{10939}\x{1093A}-\x{1093E}\x{1093F}\x{10940}-\x{1097F}\x{10980}-\x{109B7}\x{109B8}-\x{109BB}\x{109BC}-\x{109BD}\x{109BE}-\x{109BF}\x{109C0}-\x{109CF}\x{109D0}-\x{109D1}\x{109D2}-\x{109FF}\x{10A00}\x{10A04}\x{10A07}-\x{10A0B}\x{10A10}-\x{10A13}\x{10A14}\x{10A15}-\x{10A17}\x{10A18}\x{10A19}-\x{10A35}\x{10A36}-\x{10A37}\x{10A3B}-\x{10A3E}\x{10A40}-\x{10A48}\x{10A49}-\x{10A4F}\x{10A50}-\x{10A58}\x{10A59}-\x{10A5F}\x{10A60}-\x{10A7C}\x{10A7D}-\x{10A7E}\x{10A7F}\x{10A80}-\x{10A9C}\x{10A9D}-\x{10A9F}\x{10AA0}-\x{10ABF}\x{10AC0}-\x{10AC7}\x{10AC8}\x{10AC9}-\x{10AE4}\x{10AE7}-\x{10AEA}\x{10AEB}-\x{10AEF}\x{10AF0}-\x{10AF6}\x{10AF7}-\x{10AFF}\x{10B00}-\x{10B35}\x{10B36}-\x{10B38}\x{10B40}-\x{10B55}\x{10B56}-\x{10B57}\x{10B58}-\x{10B5F}\x{10B60}-\x{10B72}\x{10B73}-\x{10B77}\x{10B78}-\x{10B7F}\x{10B80}-\x{10B91}\x{10B92}-\x{10B98}\x{10B99}-\x{10B9C}\x{10B9D}-\x{10BA8}\x{10BA9}-\x{10BAF}\x{10BB0}-\x{10BFF}\x{10C00}-\x{10C48}\x{10C49}-\x{10C7F}\x{10C80}-\x{10CB2}\x{10CB3}-\x{10CBF}\x{10CC0}-\x{10CF2}\x{10CF3}-\x{10CF9}\x{10CFA}-\x{10CFF}\x{10D00}-\x{10D23}\x{10D28}-\x{10D2F}\x{10D30}-\x{10D39}\x{10D3A}-\x{10D3F}\x{10D40}-\x{10E5F}\x{10E60}-\x{10E7E}\x{10E7F}\x{10E80}-\x{10EA9}\x{10EAA}\x{10EAD}\x{10EAE}-\x{10EAF}\x{10EB0}-\x{10EB1}\x{10EB2}-\x{10EFF}\x{10F00}-\x{10F1C}\x{10F1D}-\x{10F26}\x{10F27}\x{10F28}-\x{10F2F}\x{10F30}-\x{10F45}\x{10F51}-\x{10F54}\x{10F55}-\x{10F59}\x{10F5A}-\x{10F6F}\x{10F70}-\x{10FAF}\x{10FB0}-\x{10FC4}\x{10FC5}-\x{10FCB}\x{10FCC}-\x{10FDF}\x{10FE0}-\x{10FF6}\x{10FF7}-\x{10FFF}\x{1E800}-\x{1E8C4}\x{1E8C5}-\x{1E8C6}\x{1E8C7}-\x{1E8CF}\x{1E8D7}-\x{1E8FF}\x{1E900}-\x{1E943}\x{1E94B}\x{1E94C}-\x{1E94F}\x{1E950}-\x{1E959}\x{1E95A}-\x{1E95D}\x{1E95E}-\x{1E95F}\x{1E960}-\x{1EC6F}\x{1EC70}\x{1EC71}-\x{1ECAB}\x{1ECAC}\x{1ECAD}-\x{1ECAF}\x{1ECB0}\x{1ECB1}-\x{1ECB4}\x{1ECB5}-\x{1ECBF}\x{1ECC0}-\x{1ECFF}\x{1ED00}\x{1ED01}-\x{1ED2D}\x{1ED2E}\x{1ED2F}-\x{1ED3D}\x{1ED3E}-\x{1ED4F}\x{1ED50}-\x{1EDFF}\x{1EE00}-\x{1EE03}\x{1EE04}\x{1EE05}-\x{1EE1F}\x{1EE20}\x{1EE21}-\x{1EE22}\x{1EE23}\x{1EE24}\x{1EE25}-\x{1EE26}\x{1EE27}\x{1EE28}\x{1EE29}-\x{1EE32}\x{1EE33}\x{1EE34}-\x{1EE37}\x{1EE38}\x{1EE39}\x{1EE3A}\x{1EE3B}\x{1EE3C}-\x{1EE41}\x{1EE42}\x{1EE43}-\x{1EE46}\x{1EE47}\x{1EE48}\x{1EE49}\x{1EE4A}\x{1EE4B}\x{1EE4C}\x{1EE4D}-\x{1EE4F}\x{1EE50}\x{1EE51}-\x{1EE52}\x{1EE53}\x{1EE54}\x{1EE55}-\x{1EE56}\x{1EE57}\x{1EE58}\x{1EE59}\x{1EE5A}\x{1EE5B}\x{1EE5C}\x{1EE5D}\x{1EE5E}\x{1EE5F}\x{1EE60}\x{1EE61}-\x{1EE62}\x{1EE63}\x{1EE64}\x{1EE65}-\x{1EE66}\x{1EE67}-\x{1EE6A}\x{1EE6B}\x{1EE6C}-\x{1EE72}\x{1EE73}\x{1EE74}-\x{1EE77}\x{1EE78}\x{1EE79}-\x{1EE7C}\x{1EE7D}\x{1EE7E}\x{1EE7F}\x{1EE80}-\x{1EE89}\x{1EE8A}\x{1EE8B}-\x{1EE9B}\x{1EE9C}-\x{1EEA0}\x{1EEA1}-\x{1EEA3}\x{1EEA4}\x{1EEA5}-\x{1EEA9}\x{1EEAA}\x{1EEAB}-\x{1EEBB}\x{1EEBC}-\x{1EEEF}\x{1EEF2}-\x{1EEFF}\x{1EF00}-\x{1EFFF}]/u';
+
+ const BIDI_STEP_1_LTR = '/^[^\x{0000}-\x{0008}\x{0009}\x{000A}\x{000B}\x{000C}\x{000D}\x{000E}-\x{001B}\x{001C}-\x{001E}\x{001F}\x{0020}\x{0021}-\x{0022}\x{0023}\x{0024}\x{0025}\x{0026}-\x{0027}\x{0028}\x{0029}\x{002A}\x{002B}\x{002C}\x{002D}\x{002E}-\x{002F}\x{0030}-\x{0039}\x{003A}\x{003B}\x{003C}-\x{003E}\x{003F}-\x{0040}\x{005B}\x{005C}\x{005D}\x{005E}\x{005F}\x{0060}\x{007B}\x{007C}\x{007D}\x{007E}\x{007F}-\x{0084}\x{0085}\x{0086}-\x{009F}\x{00A0}\x{00A1}\x{00A2}-\x{00A5}\x{00A6}\x{00A7}\x{00A8}\x{00A9}\x{00AB}\x{00AC}\x{00AD}\x{00AE}\x{00AF}\x{00B0}\x{00B1}\x{00B2}-\x{00B3}\x{00B4}\x{00B6}-\x{00B7}\x{00B8}\x{00B9}\x{00BB}\x{00BC}-\x{00BE}\x{00BF}\x{00D7}\x{00F7}\x{02B9}-\x{02BA}\x{02C2}-\x{02C5}\x{02C6}-\x{02CF}\x{02D2}-\x{02DF}\x{02E5}-\x{02EB}\x{02EC}\x{02ED}\x{02EF}-\x{02FF}\x{0300}-\x{036F}\x{0374}\x{0375}\x{037E}\x{0384}-\x{0385}\x{0387}\x{03F6}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{058A}\x{058D}-\x{058E}\x{058F}\x{0590}\x{0591}-\x{05BD}\x{05BE}\x{05BF}\x{05C0}\x{05C1}-\x{05C2}\x{05C3}\x{05C4}-\x{05C5}\x{05C6}\x{05C7}\x{05C8}-\x{05CF}\x{05D0}-\x{05EA}\x{05EB}-\x{05EE}\x{05EF}-\x{05F2}\x{05F3}-\x{05F4}\x{05F5}-\x{05FF}\x{0600}-\x{0605}\x{0606}-\x{0607}\x{0608}\x{0609}-\x{060A}\x{060B}\x{060C}\x{060D}\x{060E}-\x{060F}\x{0610}-\x{061A}\x{061B}\x{061C}\x{061D}\x{061E}-\x{061F}\x{0620}-\x{063F}\x{0640}\x{0641}-\x{064A}\x{064B}-\x{065F}\x{0660}-\x{0669}\x{066A}\x{066B}-\x{066C}\x{066D}\x{066E}-\x{066F}\x{0670}\x{0671}-\x{06D3}\x{06D4}\x{06D5}\x{06D6}-\x{06DC}\x{06DD}\x{06DE}\x{06DF}-\x{06E4}\x{06E5}-\x{06E6}\x{06E7}-\x{06E8}\x{06E9}\x{06EA}-\x{06ED}\x{06EE}-\x{06EF}\x{06F0}-\x{06F9}\x{06FA}-\x{06FC}\x{06FD}-\x{06FE}\x{06FF}\x{0700}-\x{070D}\x{070E}\x{070F}\x{0710}\x{0711}\x{0712}-\x{072F}\x{0730}-\x{074A}\x{074B}-\x{074C}\x{074D}-\x{07A5}\x{07A6}-\x{07B0}\x{07B1}\x{07B2}-\x{07BF}\x{07C0}-\x{07C9}\x{07CA}-\x{07EA}\x{07EB}-\x{07F3}\x{07F4}-\x{07F5}\x{07F6}\x{07F7}-\x{07F9}\x{07FA}\x{07FB}-\x{07FC}\x{07FD}\x{07FE}-\x{07FF}\x{0800}-\x{0815}\x{0816}-\x{0819}\x{081A}\x{081B}-\x{0823}\x{0824}\x{0825}-\x{0827}\x{0828}\x{0829}-\x{082D}\x{082E}-\x{082F}\x{0830}-\x{083E}\x{083F}\x{0840}-\x{0858}\x{0859}-\x{085B}\x{085C}-\x{085D}\x{085E}\x{085F}\x{0860}-\x{086A}\x{086B}-\x{086F}\x{0870}-\x{089F}\x{08A0}-\x{08B4}\x{08B5}\x{08B6}-\x{08C7}\x{08C8}-\x{08D2}\x{08D3}-\x{08E1}\x{08E2}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09F2}-\x{09F3}\x{09FB}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AF1}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B55}-\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0BF3}-\x{0BF8}\x{0BF9}\x{0BFA}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C78}-\x{0C7E}\x{0C81}\x{0CBC}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0D81}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E3F}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EBC}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F3A}\x{0F3B}\x{0F3C}\x{0F3D}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{135D}-\x{135F}\x{1390}-\x{1399}\x{1400}\x{1680}\x{169B}\x{169C}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17DB}\x{17DD}\x{17F0}-\x{17F9}\x{1800}-\x{1805}\x{1806}\x{1807}-\x{180A}\x{180B}-\x{180D}\x{180E}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1940}\x{1944}-\x{1945}\x{19DE}-\x{19FF}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1ABF}-\x{1AC0}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{1FBD}\x{1FBF}-\x{1FC1}\x{1FCD}-\x{1FCF}\x{1FDD}-\x{1FDF}\x{1FED}-\x{1FEF}\x{1FFD}-\x{1FFE}\x{2000}-\x{200A}\x{200B}-\x{200D}\x{200F}\x{2010}-\x{2015}\x{2016}-\x{2017}\x{2018}\x{2019}\x{201A}\x{201B}-\x{201C}\x{201D}\x{201E}\x{201F}\x{2020}-\x{2027}\x{2028}\x{2029}\x{202A}\x{202B}\x{202C}\x{202D}\x{202E}\x{202F}\x{2030}-\x{2034}\x{2035}-\x{2038}\x{2039}\x{203A}\x{203B}-\x{203E}\x{203F}-\x{2040}\x{2041}-\x{2043}\x{2044}\x{2045}\x{2046}\x{2047}-\x{2051}\x{2052}\x{2053}\x{2054}\x{2055}-\x{205E}\x{205F}\x{2060}-\x{2064}\x{2065}\x{2066}\x{2067}\x{2068}\x{2069}\x{206A}-\x{206F}\x{2070}\x{2074}-\x{2079}\x{207A}-\x{207B}\x{207C}\x{207D}\x{207E}\x{2080}-\x{2089}\x{208A}-\x{208B}\x{208C}\x{208D}\x{208E}\x{20A0}-\x{20BF}\x{20C0}-\x{20CF}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2100}-\x{2101}\x{2103}-\x{2106}\x{2108}-\x{2109}\x{2114}\x{2116}-\x{2117}\x{2118}\x{211E}-\x{2123}\x{2125}\x{2127}\x{2129}\x{212E}\x{213A}-\x{213B}\x{2140}-\x{2144}\x{214A}\x{214B}\x{214C}-\x{214D}\x{2150}-\x{215F}\x{2189}\x{218A}-\x{218B}\x{2190}-\x{2194}\x{2195}-\x{2199}\x{219A}-\x{219B}\x{219C}-\x{219F}\x{21A0}\x{21A1}-\x{21A2}\x{21A3}\x{21A4}-\x{21A5}\x{21A6}\x{21A7}-\x{21AD}\x{21AE}\x{21AF}-\x{21CD}\x{21CE}-\x{21CF}\x{21D0}-\x{21D1}\x{21D2}\x{21D3}\x{21D4}\x{21D5}-\x{21F3}\x{21F4}-\x{2211}\x{2212}\x{2213}\x{2214}-\x{22FF}\x{2300}-\x{2307}\x{2308}\x{2309}\x{230A}\x{230B}\x{230C}-\x{231F}\x{2320}-\x{2321}\x{2322}-\x{2328}\x{2329}\x{232A}\x{232B}-\x{2335}\x{237B}\x{237C}\x{237D}-\x{2394}\x{2396}-\x{239A}\x{239B}-\x{23B3}\x{23B4}-\x{23DB}\x{23DC}-\x{23E1}\x{23E2}-\x{2426}\x{2440}-\x{244A}\x{2460}-\x{2487}\x{2488}-\x{249B}\x{24EA}-\x{24FF}\x{2500}-\x{25B6}\x{25B7}\x{25B8}-\x{25C0}\x{25C1}\x{25C2}-\x{25F7}\x{25F8}-\x{25FF}\x{2600}-\x{266E}\x{266F}\x{2670}-\x{26AB}\x{26AD}-\x{2767}\x{2768}\x{2769}\x{276A}\x{276B}\x{276C}\x{276D}\x{276E}\x{276F}\x{2770}\x{2771}\x{2772}\x{2773}\x{2774}\x{2775}\x{2776}-\x{2793}\x{2794}-\x{27BF}\x{27C0}-\x{27C4}\x{27C5}\x{27C6}\x{27C7}-\x{27E5}\x{27E6}\x{27E7}\x{27E8}\x{27E9}\x{27EA}\x{27EB}\x{27EC}\x{27ED}\x{27EE}\x{27EF}\x{27F0}-\x{27FF}\x{2900}-\x{2982}\x{2983}\x{2984}\x{2985}\x{2986}\x{2987}\x{2988}\x{2989}\x{298A}\x{298B}\x{298C}\x{298D}\x{298E}\x{298F}\x{2990}\x{2991}\x{2992}\x{2993}\x{2994}\x{2995}\x{2996}\x{2997}\x{2998}\x{2999}-\x{29D7}\x{29D8}\x{29D9}\x{29DA}\x{29DB}\x{29DC}-\x{29FB}\x{29FC}\x{29FD}\x{29FE}-\x{2AFF}\x{2B00}-\x{2B2F}\x{2B30}-\x{2B44}\x{2B45}-\x{2B46}\x{2B47}-\x{2B4C}\x{2B4D}-\x{2B73}\x{2B76}-\x{2B95}\x{2B97}-\x{2BFF}\x{2CE5}-\x{2CEA}\x{2CEF}-\x{2CF1}\x{2CF9}-\x{2CFC}\x{2CFD}\x{2CFE}-\x{2CFF}\x{2D7F}\x{2DE0}-\x{2DFF}\x{2E00}-\x{2E01}\x{2E02}\x{2E03}\x{2E04}\x{2E05}\x{2E06}-\x{2E08}\x{2E09}\x{2E0A}\x{2E0B}\x{2E0C}\x{2E0D}\x{2E0E}-\x{2E16}\x{2E17}\x{2E18}-\x{2E19}\x{2E1A}\x{2E1B}\x{2E1C}\x{2E1D}\x{2E1E}-\x{2E1F}\x{2E20}\x{2E21}\x{2E22}\x{2E23}\x{2E24}\x{2E25}\x{2E26}\x{2E27}\x{2E28}\x{2E29}\x{2E2A}-\x{2E2E}\x{2E2F}\x{2E30}-\x{2E39}\x{2E3A}-\x{2E3B}\x{2E3C}-\x{2E3F}\x{2E40}\x{2E41}\x{2E42}\x{2E43}-\x{2E4F}\x{2E50}-\x{2E51}\x{2E52}\x{2E80}-\x{2E99}\x{2E9B}-\x{2EF3}\x{2F00}-\x{2FD5}\x{2FF0}-\x{2FFB}\x{3000}\x{3001}-\x{3003}\x{3004}\x{3008}\x{3009}\x{300A}\x{300B}\x{300C}\x{300D}\x{300E}\x{300F}\x{3010}\x{3011}\x{3012}-\x{3013}\x{3014}\x{3015}\x{3016}\x{3017}\x{3018}\x{3019}\x{301A}\x{301B}\x{301C}\x{301D}\x{301E}-\x{301F}\x{3020}\x{302A}-\x{302D}\x{3030}\x{3036}-\x{3037}\x{303D}\x{303E}-\x{303F}\x{3099}-\x{309A}\x{309B}-\x{309C}\x{30A0}\x{30FB}\x{31C0}-\x{31E3}\x{321D}-\x{321E}\x{3250}\x{3251}-\x{325F}\x{327C}-\x{327E}\x{32B1}-\x{32BF}\x{32CC}-\x{32CF}\x{3377}-\x{337A}\x{33DE}-\x{33DF}\x{33FF}\x{4DC0}-\x{4DFF}\x{A490}-\x{A4C6}\x{A60D}-\x{A60F}\x{A66F}\x{A670}-\x{A672}\x{A673}\x{A674}-\x{A67D}\x{A67E}\x{A67F}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A700}-\x{A716}\x{A717}-\x{A71F}\x{A720}-\x{A721}\x{A788}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A828}-\x{A82B}\x{A82C}\x{A838}\x{A839}\x{A874}-\x{A877}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}-\x{A9BD}\x{A9E5}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AAEC}-\x{AAED}\x{AAF6}\x{AB6A}-\x{AB6B}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1D}\x{FB1E}\x{FB1F}-\x{FB28}\x{FB29}\x{FB2A}-\x{FB36}\x{FB37}\x{FB38}-\x{FB3C}\x{FB3D}\x{FB3E}\x{FB3F}\x{FB40}-\x{FB41}\x{FB42}\x{FB43}-\x{FB44}\x{FB45}\x{FB46}-\x{FB4F}\x{FB50}-\x{FBB1}\x{FBB2}-\x{FBC1}\x{FBC2}-\x{FBD2}\x{FBD3}-\x{FD3D}\x{FD3E}\x{FD3F}\x{FD40}-\x{FD4F}\x{FD50}-\x{FD8F}\x{FD90}-\x{FD91}\x{FD92}-\x{FDC7}\x{FDC8}-\x{FDCF}\x{FDD0}-\x{FDEF}\x{FDF0}-\x{FDFB}\x{FDFC}\x{FDFD}\x{FDFE}-\x{FDFF}\x{FE00}-\x{FE0F}\x{FE10}-\x{FE16}\x{FE17}\x{FE18}\x{FE19}\x{FE20}-\x{FE2F}\x{FE30}\x{FE31}-\x{FE32}\x{FE33}-\x{FE34}\x{FE35}\x{FE36}\x{FE37}\x{FE38}\x{FE39}\x{FE3A}\x{FE3B}\x{FE3C}\x{FE3D}\x{FE3E}\x{FE3F}\x{FE40}\x{FE41}\x{FE42}\x{FE43}\x{FE44}\x{FE45}-\x{FE46}\x{FE47}\x{FE48}\x{FE49}-\x{FE4C}\x{FE4D}-\x{FE4F}\x{FE50}\x{FE51}\x{FE52}\x{FE54}\x{FE55}\x{FE56}-\x{FE57}\x{FE58}\x{FE59}\x{FE5A}\x{FE5B}\x{FE5C}\x{FE5D}\x{FE5E}\x{FE5F}\x{FE60}-\x{FE61}\x{FE62}\x{FE63}\x{FE64}-\x{FE66}\x{FE68}\x{FE69}\x{FE6A}\x{FE6B}\x{FE70}-\x{FE74}\x{FE75}\x{FE76}-\x{FEFC}\x{FEFD}-\x{FEFE}\x{FEFF}\x{FF01}-\x{FF02}\x{FF03}\x{FF04}\x{FF05}\x{FF06}-\x{FF07}\x{FF08}\x{FF09}\x{FF0A}\x{FF0B}\x{FF0C}\x{FF0D}\x{FF0E}-\x{FF0F}\x{FF10}-\x{FF19}\x{FF1A}\x{FF1B}\x{FF1C}-\x{FF1E}\x{FF1F}-\x{FF20}\x{FF3B}\x{FF3C}\x{FF3D}\x{FF3E}\x{FF3F}\x{FF40}\x{FF5B}\x{FF5C}\x{FF5D}\x{FF5E}\x{FF5F}\x{FF60}\x{FF61}\x{FF62}\x{FF63}\x{FF64}-\x{FF65}\x{FFE0}-\x{FFE1}\x{FFE2}\x{FFE3}\x{FFE4}\x{FFE5}-\x{FFE6}\x{FFE8}\x{FFE9}-\x{FFEC}\x{FFED}-\x{FFEE}\x{FFF0}-\x{FFF8}\x{FFF9}-\x{FFFB}\x{FFFC}-\x{FFFD}\x{FFFE}-\x{FFFF}\x{10101}\x{10140}-\x{10174}\x{10175}-\x{10178}\x{10179}-\x{10189}\x{1018A}-\x{1018B}\x{1018C}\x{10190}-\x{1019C}\x{101A0}\x{101FD}\x{102E0}\x{102E1}-\x{102FB}\x{10376}-\x{1037A}\x{10800}-\x{10805}\x{10806}-\x{10807}\x{10808}\x{10809}\x{1080A}-\x{10835}\x{10836}\x{10837}-\x{10838}\x{10839}-\x{1083B}\x{1083C}\x{1083D}-\x{1083E}\x{1083F}-\x{10855}\x{10856}\x{10857}\x{10858}-\x{1085F}\x{10860}-\x{10876}\x{10877}-\x{10878}\x{10879}-\x{1087F}\x{10880}-\x{1089E}\x{1089F}-\x{108A6}\x{108A7}-\x{108AF}\x{108B0}-\x{108DF}\x{108E0}-\x{108F2}\x{108F3}\x{108F4}-\x{108F5}\x{108F6}-\x{108FA}\x{108FB}-\x{108FF}\x{10900}-\x{10915}\x{10916}-\x{1091B}\x{1091C}-\x{1091E}\x{1091F}\x{10920}-\x{10939}\x{1093A}-\x{1093E}\x{1093F}\x{10940}-\x{1097F}\x{10980}-\x{109B7}\x{109B8}-\x{109BB}\x{109BC}-\x{109BD}\x{109BE}-\x{109BF}\x{109C0}-\x{109CF}\x{109D0}-\x{109D1}\x{109D2}-\x{109FF}\x{10A00}\x{10A01}-\x{10A03}\x{10A04}\x{10A05}-\x{10A06}\x{10A07}-\x{10A0B}\x{10A0C}-\x{10A0F}\x{10A10}-\x{10A13}\x{10A14}\x{10A15}-\x{10A17}\x{10A18}\x{10A19}-\x{10A35}\x{10A36}-\x{10A37}\x{10A38}-\x{10A3A}\x{10A3B}-\x{10A3E}\x{10A3F}\x{10A40}-\x{10A48}\x{10A49}-\x{10A4F}\x{10A50}-\x{10A58}\x{10A59}-\x{10A5F}\x{10A60}-\x{10A7C}\x{10A7D}-\x{10A7E}\x{10A7F}\x{10A80}-\x{10A9C}\x{10A9D}-\x{10A9F}\x{10AA0}-\x{10ABF}\x{10AC0}-\x{10AC7}\x{10AC8}\x{10AC9}-\x{10AE4}\x{10AE5}-\x{10AE6}\x{10AE7}-\x{10AEA}\x{10AEB}-\x{10AEF}\x{10AF0}-\x{10AF6}\x{10AF7}-\x{10AFF}\x{10B00}-\x{10B35}\x{10B36}-\x{10B38}\x{10B39}-\x{10B3F}\x{10B40}-\x{10B55}\x{10B56}-\x{10B57}\x{10B58}-\x{10B5F}\x{10B60}-\x{10B72}\x{10B73}-\x{10B77}\x{10B78}-\x{10B7F}\x{10B80}-\x{10B91}\x{10B92}-\x{10B98}\x{10B99}-\x{10B9C}\x{10B9D}-\x{10BA8}\x{10BA9}-\x{10BAF}\x{10BB0}-\x{10BFF}\x{10C00}-\x{10C48}\x{10C49}-\x{10C7F}\x{10C80}-\x{10CB2}\x{10CB3}-\x{10CBF}\x{10CC0}-\x{10CF2}\x{10CF3}-\x{10CF9}\x{10CFA}-\x{10CFF}\x{10D00}-\x{10D23}\x{10D24}-\x{10D27}\x{10D28}-\x{10D2F}\x{10D30}-\x{10D39}\x{10D3A}-\x{10D3F}\x{10D40}-\x{10E5F}\x{10E60}-\x{10E7E}\x{10E7F}\x{10E80}-\x{10EA9}\x{10EAA}\x{10EAB}-\x{10EAC}\x{10EAD}\x{10EAE}-\x{10EAF}\x{10EB0}-\x{10EB1}\x{10EB2}-\x{10EFF}\x{10F00}-\x{10F1C}\x{10F1D}-\x{10F26}\x{10F27}\x{10F28}-\x{10F2F}\x{10F30}-\x{10F45}\x{10F46}-\x{10F50}\x{10F51}-\x{10F54}\x{10F55}-\x{10F59}\x{10F5A}-\x{10F6F}\x{10F70}-\x{10FAF}\x{10FB0}-\x{10FC4}\x{10FC5}-\x{10FCB}\x{10FCC}-\x{10FDF}\x{10FE0}-\x{10FF6}\x{10FF7}-\x{10FFF}\x{11001}\x{11038}-\x{11046}\x{11052}-\x{11065}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{111CF}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{11660}-\x{1166C}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{1193B}-\x{1193C}\x{1193E}\x{11943}\x{119D4}-\x{119D7}\x{119DA}-\x{119DB}\x{119E0}\x{11A01}-\x{11A06}\x{11A09}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{11FD5}-\x{11FDC}\x{11FDD}-\x{11FE0}\x{11FE1}-\x{11FF1}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16F4F}\x{16F8F}-\x{16F92}\x{16FE2}\x{16FE4}\x{1BC9D}-\x{1BC9E}\x{1BCA0}-\x{1BCA3}\x{1D167}-\x{1D169}\x{1D173}-\x{1D17A}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D200}-\x{1D241}\x{1D242}-\x{1D244}\x{1D245}\x{1D300}-\x{1D356}\x{1D6DB}\x{1D715}\x{1D74F}\x{1D789}\x{1D7C3}\x{1D7CE}-\x{1D7FF}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E130}-\x{1E136}\x{1E2EC}-\x{1E2EF}\x{1E2FF}\x{1E800}-\x{1E8C4}\x{1E8C5}-\x{1E8C6}\x{1E8C7}-\x{1E8CF}\x{1E8D0}-\x{1E8D6}\x{1E8D7}-\x{1E8FF}\x{1E900}-\x{1E943}\x{1E944}-\x{1E94A}\x{1E94B}\x{1E94C}-\x{1E94F}\x{1E950}-\x{1E959}\x{1E95A}-\x{1E95D}\x{1E95E}-\x{1E95F}\x{1E960}-\x{1EC6F}\x{1EC70}\x{1EC71}-\x{1ECAB}\x{1ECAC}\x{1ECAD}-\x{1ECAF}\x{1ECB0}\x{1ECB1}-\x{1ECB4}\x{1ECB5}-\x{1ECBF}\x{1ECC0}-\x{1ECFF}\x{1ED00}\x{1ED01}-\x{1ED2D}\x{1ED2E}\x{1ED2F}-\x{1ED3D}\x{1ED3E}-\x{1ED4F}\x{1ED50}-\x{1EDFF}\x{1EE00}-\x{1EE03}\x{1EE04}\x{1EE05}-\x{1EE1F}\x{1EE20}\x{1EE21}-\x{1EE22}\x{1EE23}\x{1EE24}\x{1EE25}-\x{1EE26}\x{1EE27}\x{1EE28}\x{1EE29}-\x{1EE32}\x{1EE33}\x{1EE34}-\x{1EE37}\x{1EE38}\x{1EE39}\x{1EE3A}\x{1EE3B}\x{1EE3C}-\x{1EE41}\x{1EE42}\x{1EE43}-\x{1EE46}\x{1EE47}\x{1EE48}\x{1EE49}\x{1EE4A}\x{1EE4B}\x{1EE4C}\x{1EE4D}-\x{1EE4F}\x{1EE50}\x{1EE51}-\x{1EE52}\x{1EE53}\x{1EE54}\x{1EE55}-\x{1EE56}\x{1EE57}\x{1EE58}\x{1EE59}\x{1EE5A}\x{1EE5B}\x{1EE5C}\x{1EE5D}\x{1EE5E}\x{1EE5F}\x{1EE60}\x{1EE61}-\x{1EE62}\x{1EE63}\x{1EE64}\x{1EE65}-\x{1EE66}\x{1EE67}-\x{1EE6A}\x{1EE6B}\x{1EE6C}-\x{1EE72}\x{1EE73}\x{1EE74}-\x{1EE77}\x{1EE78}\x{1EE79}-\x{1EE7C}\x{1EE7D}\x{1EE7E}\x{1EE7F}\x{1EE80}-\x{1EE89}\x{1EE8A}\x{1EE8B}-\x{1EE9B}\x{1EE9C}-\x{1EEA0}\x{1EEA1}-\x{1EEA3}\x{1EEA4}\x{1EEA5}-\x{1EEA9}\x{1EEAA}\x{1EEAB}-\x{1EEBB}\x{1EEBC}-\x{1EEEF}\x{1EEF0}-\x{1EEF1}\x{1EEF2}-\x{1EEFF}\x{1EF00}-\x{1EFFF}\x{1F000}-\x{1F02B}\x{1F030}-\x{1F093}\x{1F0A0}-\x{1F0AE}\x{1F0B1}-\x{1F0BF}\x{1F0C1}-\x{1F0CF}\x{1F0D1}-\x{1F0F5}\x{1F100}-\x{1F10A}\x{1F10B}-\x{1F10C}\x{1F10D}-\x{1F10F}\x{1F12F}\x{1F16A}-\x{1F16F}\x{1F1AD}\x{1F260}-\x{1F265}\x{1F300}-\x{1F3FA}\x{1F3FB}-\x{1F3FF}\x{1F400}-\x{1F6D7}\x{1F6E0}-\x{1F6EC}\x{1F6F0}-\x{1F6FC}\x{1F700}-\x{1F773}\x{1F780}-\x{1F7D8}\x{1F7E0}-\x{1F7EB}\x{1F800}-\x{1F80B}\x{1F810}-\x{1F847}\x{1F850}-\x{1F859}\x{1F860}-\x{1F887}\x{1F890}-\x{1F8AD}\x{1F8B0}-\x{1F8B1}\x{1F900}-\x{1F978}\x{1F97A}-\x{1F9CB}\x{1F9CD}-\x{1FA53}\x{1FA60}-\x{1FA6D}\x{1FA70}-\x{1FA74}\x{1FA78}-\x{1FA7A}\x{1FA80}-\x{1FA86}\x{1FA90}-\x{1FAA8}\x{1FAB0}-\x{1FAB6}\x{1FAC0}-\x{1FAC2}\x{1FAD0}-\x{1FAD6}\x{1FB00}-\x{1FB92}\x{1FB94}-\x{1FBCA}\x{1FBF0}-\x{1FBF9}\x{1FFFE}-\x{1FFFF}\x{2FFFE}-\x{2FFFF}\x{3FFFE}-\x{3FFFF}\x{4FFFE}-\x{4FFFF}\x{5FFFE}-\x{5FFFF}\x{6FFFE}-\x{6FFFF}\x{7FFFE}-\x{7FFFF}\x{8FFFE}-\x{8FFFF}\x{9FFFE}-\x{9FFFF}\x{AFFFE}-\x{AFFFF}\x{BFFFE}-\x{BFFFF}\x{CFFFE}-\x{CFFFF}\x{DFFFE}-\x{E0000}\x{E0001}\x{E0002}-\x{E001F}\x{E0020}-\x{E007F}\x{E0080}-\x{E00FF}\x{E0100}-\x{E01EF}\x{E01F0}-\x{E0FFF}\x{EFFFE}-\x{EFFFF}\x{FFFFE}-\x{FFFFF}\x{10FFFE}-\x{10FFFF}]/u';
+ const BIDI_STEP_1_RTL = '/^[\x{0590}\x{05BE}\x{05C0}\x{05C3}\x{05C6}\x{05C8}-\x{05CF}\x{05D0}-\x{05EA}\x{05EB}-\x{05EE}\x{05EF}-\x{05F2}\x{05F3}-\x{05F4}\x{05F5}-\x{05FF}\x{0608}\x{060B}\x{060D}\x{061B}\x{061C}\x{061D}\x{061E}-\x{061F}\x{0620}-\x{063F}\x{0640}\x{0641}-\x{064A}\x{066D}\x{066E}-\x{066F}\x{0671}-\x{06D3}\x{06D4}\x{06D5}\x{06E5}-\x{06E6}\x{06EE}-\x{06EF}\x{06FA}-\x{06FC}\x{06FD}-\x{06FE}\x{06FF}\x{0700}-\x{070D}\x{070E}\x{070F}\x{0710}\x{0712}-\x{072F}\x{074B}-\x{074C}\x{074D}-\x{07A5}\x{07B1}\x{07B2}-\x{07BF}\x{07C0}-\x{07C9}\x{07CA}-\x{07EA}\x{07F4}-\x{07F5}\x{07FA}\x{07FB}-\x{07FC}\x{07FE}-\x{07FF}\x{0800}-\x{0815}\x{081A}\x{0824}\x{0828}\x{082E}-\x{082F}\x{0830}-\x{083E}\x{083F}\x{0840}-\x{0858}\x{085C}-\x{085D}\x{085E}\x{085F}\x{0860}-\x{086A}\x{086B}-\x{086F}\x{0870}-\x{089F}\x{08A0}-\x{08B4}\x{08B5}\x{08B6}-\x{08C7}\x{08C8}-\x{08D2}\x{200F}\x{FB1D}\x{FB1F}-\x{FB28}\x{FB2A}-\x{FB36}\x{FB37}\x{FB38}-\x{FB3C}\x{FB3D}\x{FB3E}\x{FB3F}\x{FB40}-\x{FB41}\x{FB42}\x{FB43}-\x{FB44}\x{FB45}\x{FB46}-\x{FB4F}\x{FB50}-\x{FBB1}\x{FBB2}-\x{FBC1}\x{FBC2}-\x{FBD2}\x{FBD3}-\x{FD3D}\x{FD40}-\x{FD4F}\x{FD50}-\x{FD8F}\x{FD90}-\x{FD91}\x{FD92}-\x{FDC7}\x{FDC8}-\x{FDCF}\x{FDF0}-\x{FDFB}\x{FDFC}\x{FDFE}-\x{FDFF}\x{FE70}-\x{FE74}\x{FE75}\x{FE76}-\x{FEFC}\x{FEFD}-\x{FEFE}\x{10800}-\x{10805}\x{10806}-\x{10807}\x{10808}\x{10809}\x{1080A}-\x{10835}\x{10836}\x{10837}-\x{10838}\x{10839}-\x{1083B}\x{1083C}\x{1083D}-\x{1083E}\x{1083F}-\x{10855}\x{10856}\x{10857}\x{10858}-\x{1085F}\x{10860}-\x{10876}\x{10877}-\x{10878}\x{10879}-\x{1087F}\x{10880}-\x{1089E}\x{1089F}-\x{108A6}\x{108A7}-\x{108AF}\x{108B0}-\x{108DF}\x{108E0}-\x{108F2}\x{108F3}\x{108F4}-\x{108F5}\x{108F6}-\x{108FA}\x{108FB}-\x{108FF}\x{10900}-\x{10915}\x{10916}-\x{1091B}\x{1091C}-\x{1091E}\x{10920}-\x{10939}\x{1093A}-\x{1093E}\x{1093F}\x{10940}-\x{1097F}\x{10980}-\x{109B7}\x{109B8}-\x{109BB}\x{109BC}-\x{109BD}\x{109BE}-\x{109BF}\x{109C0}-\x{109CF}\x{109D0}-\x{109D1}\x{109D2}-\x{109FF}\x{10A00}\x{10A04}\x{10A07}-\x{10A0B}\x{10A10}-\x{10A13}\x{10A14}\x{10A15}-\x{10A17}\x{10A18}\x{10A19}-\x{10A35}\x{10A36}-\x{10A37}\x{10A3B}-\x{10A3E}\x{10A40}-\x{10A48}\x{10A49}-\x{10A4F}\x{10A50}-\x{10A58}\x{10A59}-\x{10A5F}\x{10A60}-\x{10A7C}\x{10A7D}-\x{10A7E}\x{10A7F}\x{10A80}-\x{10A9C}\x{10A9D}-\x{10A9F}\x{10AA0}-\x{10ABF}\x{10AC0}-\x{10AC7}\x{10AC8}\x{10AC9}-\x{10AE4}\x{10AE7}-\x{10AEA}\x{10AEB}-\x{10AEF}\x{10AF0}-\x{10AF6}\x{10AF7}-\x{10AFF}\x{10B00}-\x{10B35}\x{10B36}-\x{10B38}\x{10B40}-\x{10B55}\x{10B56}-\x{10B57}\x{10B58}-\x{10B5F}\x{10B60}-\x{10B72}\x{10B73}-\x{10B77}\x{10B78}-\x{10B7F}\x{10B80}-\x{10B91}\x{10B92}-\x{10B98}\x{10B99}-\x{10B9C}\x{10B9D}-\x{10BA8}\x{10BA9}-\x{10BAF}\x{10BB0}-\x{10BFF}\x{10C00}-\x{10C48}\x{10C49}-\x{10C7F}\x{10C80}-\x{10CB2}\x{10CB3}-\x{10CBF}\x{10CC0}-\x{10CF2}\x{10CF3}-\x{10CF9}\x{10CFA}-\x{10CFF}\x{10D00}-\x{10D23}\x{10D28}-\x{10D2F}\x{10D3A}-\x{10D3F}\x{10D40}-\x{10E5F}\x{10E7F}\x{10E80}-\x{10EA9}\x{10EAA}\x{10EAD}\x{10EAE}-\x{10EAF}\x{10EB0}-\x{10EB1}\x{10EB2}-\x{10EFF}\x{10F00}-\x{10F1C}\x{10F1D}-\x{10F26}\x{10F27}\x{10F28}-\x{10F2F}\x{10F30}-\x{10F45}\x{10F51}-\x{10F54}\x{10F55}-\x{10F59}\x{10F5A}-\x{10F6F}\x{10F70}-\x{10FAF}\x{10FB0}-\x{10FC4}\x{10FC5}-\x{10FCB}\x{10FCC}-\x{10FDF}\x{10FE0}-\x{10FF6}\x{10FF7}-\x{10FFF}\x{1E800}-\x{1E8C4}\x{1E8C5}-\x{1E8C6}\x{1E8C7}-\x{1E8CF}\x{1E8D7}-\x{1E8FF}\x{1E900}-\x{1E943}\x{1E94B}\x{1E94C}-\x{1E94F}\x{1E950}-\x{1E959}\x{1E95A}-\x{1E95D}\x{1E95E}-\x{1E95F}\x{1E960}-\x{1EC6F}\x{1EC70}\x{1EC71}-\x{1ECAB}\x{1ECAC}\x{1ECAD}-\x{1ECAF}\x{1ECB0}\x{1ECB1}-\x{1ECB4}\x{1ECB5}-\x{1ECBF}\x{1ECC0}-\x{1ECFF}\x{1ED00}\x{1ED01}-\x{1ED2D}\x{1ED2E}\x{1ED2F}-\x{1ED3D}\x{1ED3E}-\x{1ED4F}\x{1ED50}-\x{1EDFF}\x{1EE00}-\x{1EE03}\x{1EE04}\x{1EE05}-\x{1EE1F}\x{1EE20}\x{1EE21}-\x{1EE22}\x{1EE23}\x{1EE24}\x{1EE25}-\x{1EE26}\x{1EE27}\x{1EE28}\x{1EE29}-\x{1EE32}\x{1EE33}\x{1EE34}-\x{1EE37}\x{1EE38}\x{1EE39}\x{1EE3A}\x{1EE3B}\x{1EE3C}-\x{1EE41}\x{1EE42}\x{1EE43}-\x{1EE46}\x{1EE47}\x{1EE48}\x{1EE49}\x{1EE4A}\x{1EE4B}\x{1EE4C}\x{1EE4D}-\x{1EE4F}\x{1EE50}\x{1EE51}-\x{1EE52}\x{1EE53}\x{1EE54}\x{1EE55}-\x{1EE56}\x{1EE57}\x{1EE58}\x{1EE59}\x{1EE5A}\x{1EE5B}\x{1EE5C}\x{1EE5D}\x{1EE5E}\x{1EE5F}\x{1EE60}\x{1EE61}-\x{1EE62}\x{1EE63}\x{1EE64}\x{1EE65}-\x{1EE66}\x{1EE67}-\x{1EE6A}\x{1EE6B}\x{1EE6C}-\x{1EE72}\x{1EE73}\x{1EE74}-\x{1EE77}\x{1EE78}\x{1EE79}-\x{1EE7C}\x{1EE7D}\x{1EE7E}\x{1EE7F}\x{1EE80}-\x{1EE89}\x{1EE8A}\x{1EE8B}-\x{1EE9B}\x{1EE9C}-\x{1EEA0}\x{1EEA1}-\x{1EEA3}\x{1EEA4}\x{1EEA5}-\x{1EEA9}\x{1EEAA}\x{1EEAB}-\x{1EEBB}\x{1EEBC}-\x{1EEEF}\x{1EEF2}-\x{1EEFF}\x{1EF00}-\x{1EFFF}]/u';
+ const BIDI_STEP_2 = '/[^\x{0000}-\x{0008}\x{000E}-\x{001B}\x{0021}-\x{0022}\x{0023}\x{0024}\x{0025}\x{0026}-\x{0027}\x{0028}\x{0029}\x{002A}\x{002B}\x{002C}\x{002D}\x{002E}-\x{002F}\x{0030}-\x{0039}\x{003A}\x{003B}\x{003C}-\x{003E}\x{003F}-\x{0040}\x{005B}\x{005C}\x{005D}\x{005E}\x{005F}\x{0060}\x{007B}\x{007C}\x{007D}\x{007E}\x{007F}-\x{0084}\x{0086}-\x{009F}\x{00A0}\x{00A1}\x{00A2}-\x{00A5}\x{00A6}\x{00A7}\x{00A8}\x{00A9}\x{00AB}\x{00AC}\x{00AD}\x{00AE}\x{00AF}\x{00B0}\x{00B1}\x{00B2}-\x{00B3}\x{00B4}\x{00B6}-\x{00B7}\x{00B8}\x{00B9}\x{00BB}\x{00BC}-\x{00BE}\x{00BF}\x{00D7}\x{00F7}\x{02B9}-\x{02BA}\x{02C2}-\x{02C5}\x{02C6}-\x{02CF}\x{02D2}-\x{02DF}\x{02E5}-\x{02EB}\x{02EC}\x{02ED}\x{02EF}-\x{02FF}\x{0300}-\x{036F}\x{0374}\x{0375}\x{037E}\x{0384}-\x{0385}\x{0387}\x{03F6}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{058A}\x{058D}-\x{058E}\x{058F}\x{0590}\x{0591}-\x{05BD}\x{05BE}\x{05BF}\x{05C0}\x{05C1}-\x{05C2}\x{05C3}\x{05C4}-\x{05C5}\x{05C6}\x{05C7}\x{05C8}-\x{05CF}\x{05D0}-\x{05EA}\x{05EB}-\x{05EE}\x{05EF}-\x{05F2}\x{05F3}-\x{05F4}\x{05F5}-\x{05FF}\x{0600}-\x{0605}\x{0606}-\x{0607}\x{0608}\x{0609}-\x{060A}\x{060B}\x{060C}\x{060D}\x{060E}-\x{060F}\x{0610}-\x{061A}\x{061B}\x{061C}\x{061D}\x{061E}-\x{061F}\x{0620}-\x{063F}\x{0640}\x{0641}-\x{064A}\x{064B}-\x{065F}\x{0660}-\x{0669}\x{066A}\x{066B}-\x{066C}\x{066D}\x{066E}-\x{066F}\x{0670}\x{0671}-\x{06D3}\x{06D4}\x{06D5}\x{06D6}-\x{06DC}\x{06DD}\x{06DE}\x{06DF}-\x{06E4}\x{06E5}-\x{06E6}\x{06E7}-\x{06E8}\x{06E9}\x{06EA}-\x{06ED}\x{06EE}-\x{06EF}\x{06F0}-\x{06F9}\x{06FA}-\x{06FC}\x{06FD}-\x{06FE}\x{06FF}\x{0700}-\x{070D}\x{070E}\x{070F}\x{0710}\x{0711}\x{0712}-\x{072F}\x{0730}-\x{074A}\x{074B}-\x{074C}\x{074D}-\x{07A5}\x{07A6}-\x{07B0}\x{07B1}\x{07B2}-\x{07BF}\x{07C0}-\x{07C9}\x{07CA}-\x{07EA}\x{07EB}-\x{07F3}\x{07F4}-\x{07F5}\x{07F6}\x{07F7}-\x{07F9}\x{07FA}\x{07FB}-\x{07FC}\x{07FD}\x{07FE}-\x{07FF}\x{0800}-\x{0815}\x{0816}-\x{0819}\x{081A}\x{081B}-\x{0823}\x{0824}\x{0825}-\x{0827}\x{0828}\x{0829}-\x{082D}\x{082E}-\x{082F}\x{0830}-\x{083E}\x{083F}\x{0840}-\x{0858}\x{0859}-\x{085B}\x{085C}-\x{085D}\x{085E}\x{085F}\x{0860}-\x{086A}\x{086B}-\x{086F}\x{0870}-\x{089F}\x{08A0}-\x{08B4}\x{08B5}\x{08B6}-\x{08C7}\x{08C8}-\x{08D2}\x{08D3}-\x{08E1}\x{08E2}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09F2}-\x{09F3}\x{09FB}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AF1}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B55}-\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0BF3}-\x{0BF8}\x{0BF9}\x{0BFA}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C78}-\x{0C7E}\x{0C81}\x{0CBC}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0D81}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E3F}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EBC}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F3A}\x{0F3B}\x{0F3C}\x{0F3D}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{135D}-\x{135F}\x{1390}-\x{1399}\x{1400}\x{169B}\x{169C}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17DB}\x{17DD}\x{17F0}-\x{17F9}\x{1800}-\x{1805}\x{1806}\x{1807}-\x{180A}\x{180B}-\x{180D}\x{180E}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1940}\x{1944}-\x{1945}\x{19DE}-\x{19FF}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1ABF}-\x{1AC0}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{1FBD}\x{1FBF}-\x{1FC1}\x{1FCD}-\x{1FCF}\x{1FDD}-\x{1FDF}\x{1FED}-\x{1FEF}\x{1FFD}-\x{1FFE}\x{200B}-\x{200D}\x{200F}\x{2010}-\x{2015}\x{2016}-\x{2017}\x{2018}\x{2019}\x{201A}\x{201B}-\x{201C}\x{201D}\x{201E}\x{201F}\x{2020}-\x{2027}\x{202F}\x{2030}-\x{2034}\x{2035}-\x{2038}\x{2039}\x{203A}\x{203B}-\x{203E}\x{203F}-\x{2040}\x{2041}-\x{2043}\x{2044}\x{2045}\x{2046}\x{2047}-\x{2051}\x{2052}\x{2053}\x{2054}\x{2055}-\x{205E}\x{2060}-\x{2064}\x{2065}\x{206A}-\x{206F}\x{2070}\x{2074}-\x{2079}\x{207A}-\x{207B}\x{207C}\x{207D}\x{207E}\x{2080}-\x{2089}\x{208A}-\x{208B}\x{208C}\x{208D}\x{208E}\x{20A0}-\x{20BF}\x{20C0}-\x{20CF}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2100}-\x{2101}\x{2103}-\x{2106}\x{2108}-\x{2109}\x{2114}\x{2116}-\x{2117}\x{2118}\x{211E}-\x{2123}\x{2125}\x{2127}\x{2129}\x{212E}\x{213A}-\x{213B}\x{2140}-\x{2144}\x{214A}\x{214B}\x{214C}-\x{214D}\x{2150}-\x{215F}\x{2189}\x{218A}-\x{218B}\x{2190}-\x{2194}\x{2195}-\x{2199}\x{219A}-\x{219B}\x{219C}-\x{219F}\x{21A0}\x{21A1}-\x{21A2}\x{21A3}\x{21A4}-\x{21A5}\x{21A6}\x{21A7}-\x{21AD}\x{21AE}\x{21AF}-\x{21CD}\x{21CE}-\x{21CF}\x{21D0}-\x{21D1}\x{21D2}\x{21D3}\x{21D4}\x{21D5}-\x{21F3}\x{21F4}-\x{2211}\x{2212}\x{2213}\x{2214}-\x{22FF}\x{2300}-\x{2307}\x{2308}\x{2309}\x{230A}\x{230B}\x{230C}-\x{231F}\x{2320}-\x{2321}\x{2322}-\x{2328}\x{2329}\x{232A}\x{232B}-\x{2335}\x{237B}\x{237C}\x{237D}-\x{2394}\x{2396}-\x{239A}\x{239B}-\x{23B3}\x{23B4}-\x{23DB}\x{23DC}-\x{23E1}\x{23E2}-\x{2426}\x{2440}-\x{244A}\x{2460}-\x{2487}\x{2488}-\x{249B}\x{24EA}-\x{24FF}\x{2500}-\x{25B6}\x{25B7}\x{25B8}-\x{25C0}\x{25C1}\x{25C2}-\x{25F7}\x{25F8}-\x{25FF}\x{2600}-\x{266E}\x{266F}\x{2670}-\x{26AB}\x{26AD}-\x{2767}\x{2768}\x{2769}\x{276A}\x{276B}\x{276C}\x{276D}\x{276E}\x{276F}\x{2770}\x{2771}\x{2772}\x{2773}\x{2774}\x{2775}\x{2776}-\x{2793}\x{2794}-\x{27BF}\x{27C0}-\x{27C4}\x{27C5}\x{27C6}\x{27C7}-\x{27E5}\x{27E6}\x{27E7}\x{27E8}\x{27E9}\x{27EA}\x{27EB}\x{27EC}\x{27ED}\x{27EE}\x{27EF}\x{27F0}-\x{27FF}\x{2900}-\x{2982}\x{2983}\x{2984}\x{2985}\x{2986}\x{2987}\x{2988}\x{2989}\x{298A}\x{298B}\x{298C}\x{298D}\x{298E}\x{298F}\x{2990}\x{2991}\x{2992}\x{2993}\x{2994}\x{2995}\x{2996}\x{2997}\x{2998}\x{2999}-\x{29D7}\x{29D8}\x{29D9}\x{29DA}\x{29DB}\x{29DC}-\x{29FB}\x{29FC}\x{29FD}\x{29FE}-\x{2AFF}\x{2B00}-\x{2B2F}\x{2B30}-\x{2B44}\x{2B45}-\x{2B46}\x{2B47}-\x{2B4C}\x{2B4D}-\x{2B73}\x{2B76}-\x{2B95}\x{2B97}-\x{2BFF}\x{2CE5}-\x{2CEA}\x{2CEF}-\x{2CF1}\x{2CF9}-\x{2CFC}\x{2CFD}\x{2CFE}-\x{2CFF}\x{2D7F}\x{2DE0}-\x{2DFF}\x{2E00}-\x{2E01}\x{2E02}\x{2E03}\x{2E04}\x{2E05}\x{2E06}-\x{2E08}\x{2E09}\x{2E0A}\x{2E0B}\x{2E0C}\x{2E0D}\x{2E0E}-\x{2E16}\x{2E17}\x{2E18}-\x{2E19}\x{2E1A}\x{2E1B}\x{2E1C}\x{2E1D}\x{2E1E}-\x{2E1F}\x{2E20}\x{2E21}\x{2E22}\x{2E23}\x{2E24}\x{2E25}\x{2E26}\x{2E27}\x{2E28}\x{2E29}\x{2E2A}-\x{2E2E}\x{2E2F}\x{2E30}-\x{2E39}\x{2E3A}-\x{2E3B}\x{2E3C}-\x{2E3F}\x{2E40}\x{2E41}\x{2E42}\x{2E43}-\x{2E4F}\x{2E50}-\x{2E51}\x{2E52}\x{2E80}-\x{2E99}\x{2E9B}-\x{2EF3}\x{2F00}-\x{2FD5}\x{2FF0}-\x{2FFB}\x{3001}-\x{3003}\x{3004}\x{3008}\x{3009}\x{300A}\x{300B}\x{300C}\x{300D}\x{300E}\x{300F}\x{3010}\x{3011}\x{3012}-\x{3013}\x{3014}\x{3015}\x{3016}\x{3017}\x{3018}\x{3019}\x{301A}\x{301B}\x{301C}\x{301D}\x{301E}-\x{301F}\x{3020}\x{302A}-\x{302D}\x{3030}\x{3036}-\x{3037}\x{303D}\x{303E}-\x{303F}\x{3099}-\x{309A}\x{309B}-\x{309C}\x{30A0}\x{30FB}\x{31C0}-\x{31E3}\x{321D}-\x{321E}\x{3250}\x{3251}-\x{325F}\x{327C}-\x{327E}\x{32B1}-\x{32BF}\x{32CC}-\x{32CF}\x{3377}-\x{337A}\x{33DE}-\x{33DF}\x{33FF}\x{4DC0}-\x{4DFF}\x{A490}-\x{A4C6}\x{A60D}-\x{A60F}\x{A66F}\x{A670}-\x{A672}\x{A673}\x{A674}-\x{A67D}\x{A67E}\x{A67F}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A700}-\x{A716}\x{A717}-\x{A71F}\x{A720}-\x{A721}\x{A788}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A828}-\x{A82B}\x{A82C}\x{A838}\x{A839}\x{A874}-\x{A877}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}-\x{A9BD}\x{A9E5}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AAEC}-\x{AAED}\x{AAF6}\x{AB6A}-\x{AB6B}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1D}\x{FB1E}\x{FB1F}-\x{FB28}\x{FB29}\x{FB2A}-\x{FB36}\x{FB37}\x{FB38}-\x{FB3C}\x{FB3D}\x{FB3E}\x{FB3F}\x{FB40}-\x{FB41}\x{FB42}\x{FB43}-\x{FB44}\x{FB45}\x{FB46}-\x{FB4F}\x{FB50}-\x{FBB1}\x{FBB2}-\x{FBC1}\x{FBC2}-\x{FBD2}\x{FBD3}-\x{FD3D}\x{FD3E}\x{FD3F}\x{FD40}-\x{FD4F}\x{FD50}-\x{FD8F}\x{FD90}-\x{FD91}\x{FD92}-\x{FDC7}\x{FDC8}-\x{FDCF}\x{FDD0}-\x{FDEF}\x{FDF0}-\x{FDFB}\x{FDFC}\x{FDFD}\x{FDFE}-\x{FDFF}\x{FE00}-\x{FE0F}\x{FE10}-\x{FE16}\x{FE17}\x{FE18}\x{FE19}\x{FE20}-\x{FE2F}\x{FE30}\x{FE31}-\x{FE32}\x{FE33}-\x{FE34}\x{FE35}\x{FE36}\x{FE37}\x{FE38}\x{FE39}\x{FE3A}\x{FE3B}\x{FE3C}\x{FE3D}\x{FE3E}\x{FE3F}\x{FE40}\x{FE41}\x{FE42}\x{FE43}\x{FE44}\x{FE45}-\x{FE46}\x{FE47}\x{FE48}\x{FE49}-\x{FE4C}\x{FE4D}-\x{FE4F}\x{FE50}\x{FE51}\x{FE52}\x{FE54}\x{FE55}\x{FE56}-\x{FE57}\x{FE58}\x{FE59}\x{FE5A}\x{FE5B}\x{FE5C}\x{FE5D}\x{FE5E}\x{FE5F}\x{FE60}-\x{FE61}\x{FE62}\x{FE63}\x{FE64}-\x{FE66}\x{FE68}\x{FE69}\x{FE6A}\x{FE6B}\x{FE70}-\x{FE74}\x{FE75}\x{FE76}-\x{FEFC}\x{FEFD}-\x{FEFE}\x{FEFF}\x{FF01}-\x{FF02}\x{FF03}\x{FF04}\x{FF05}\x{FF06}-\x{FF07}\x{FF08}\x{FF09}\x{FF0A}\x{FF0B}\x{FF0C}\x{FF0D}\x{FF0E}-\x{FF0F}\x{FF10}-\x{FF19}\x{FF1A}\x{FF1B}\x{FF1C}-\x{FF1E}\x{FF1F}-\x{FF20}\x{FF3B}\x{FF3C}\x{FF3D}\x{FF3E}\x{FF3F}\x{FF40}\x{FF5B}\x{FF5C}\x{FF5D}\x{FF5E}\x{FF5F}\x{FF60}\x{FF61}\x{FF62}\x{FF63}\x{FF64}-\x{FF65}\x{FFE0}-\x{FFE1}\x{FFE2}\x{FFE3}\x{FFE4}\x{FFE5}-\x{FFE6}\x{FFE8}\x{FFE9}-\x{FFEC}\x{FFED}-\x{FFEE}\x{FFF0}-\x{FFF8}\x{FFF9}-\x{FFFB}\x{FFFC}-\x{FFFD}\x{FFFE}-\x{FFFF}\x{10101}\x{10140}-\x{10174}\x{10175}-\x{10178}\x{10179}-\x{10189}\x{1018A}-\x{1018B}\x{1018C}\x{10190}-\x{1019C}\x{101A0}\x{101FD}\x{102E0}\x{102E1}-\x{102FB}\x{10376}-\x{1037A}\x{10800}-\x{10805}\x{10806}-\x{10807}\x{10808}\x{10809}\x{1080A}-\x{10835}\x{10836}\x{10837}-\x{10838}\x{10839}-\x{1083B}\x{1083C}\x{1083D}-\x{1083E}\x{1083F}-\x{10855}\x{10856}\x{10857}\x{10858}-\x{1085F}\x{10860}-\x{10876}\x{10877}-\x{10878}\x{10879}-\x{1087F}\x{10880}-\x{1089E}\x{1089F}-\x{108A6}\x{108A7}-\x{108AF}\x{108B0}-\x{108DF}\x{108E0}-\x{108F2}\x{108F3}\x{108F4}-\x{108F5}\x{108F6}-\x{108FA}\x{108FB}-\x{108FF}\x{10900}-\x{10915}\x{10916}-\x{1091B}\x{1091C}-\x{1091E}\x{1091F}\x{10920}-\x{10939}\x{1093A}-\x{1093E}\x{1093F}\x{10940}-\x{1097F}\x{10980}-\x{109B7}\x{109B8}-\x{109BB}\x{109BC}-\x{109BD}\x{109BE}-\x{109BF}\x{109C0}-\x{109CF}\x{109D0}-\x{109D1}\x{109D2}-\x{109FF}\x{10A00}\x{10A01}-\x{10A03}\x{10A04}\x{10A05}-\x{10A06}\x{10A07}-\x{10A0B}\x{10A0C}-\x{10A0F}\x{10A10}-\x{10A13}\x{10A14}\x{10A15}-\x{10A17}\x{10A18}\x{10A19}-\x{10A35}\x{10A36}-\x{10A37}\x{10A38}-\x{10A3A}\x{10A3B}-\x{10A3E}\x{10A3F}\x{10A40}-\x{10A48}\x{10A49}-\x{10A4F}\x{10A50}-\x{10A58}\x{10A59}-\x{10A5F}\x{10A60}-\x{10A7C}\x{10A7D}-\x{10A7E}\x{10A7F}\x{10A80}-\x{10A9C}\x{10A9D}-\x{10A9F}\x{10AA0}-\x{10ABF}\x{10AC0}-\x{10AC7}\x{10AC8}\x{10AC9}-\x{10AE4}\x{10AE5}-\x{10AE6}\x{10AE7}-\x{10AEA}\x{10AEB}-\x{10AEF}\x{10AF0}-\x{10AF6}\x{10AF7}-\x{10AFF}\x{10B00}-\x{10B35}\x{10B36}-\x{10B38}\x{10B39}-\x{10B3F}\x{10B40}-\x{10B55}\x{10B56}-\x{10B57}\x{10B58}-\x{10B5F}\x{10B60}-\x{10B72}\x{10B73}-\x{10B77}\x{10B78}-\x{10B7F}\x{10B80}-\x{10B91}\x{10B92}-\x{10B98}\x{10B99}-\x{10B9C}\x{10B9D}-\x{10BA8}\x{10BA9}-\x{10BAF}\x{10BB0}-\x{10BFF}\x{10C00}-\x{10C48}\x{10C49}-\x{10C7F}\x{10C80}-\x{10CB2}\x{10CB3}-\x{10CBF}\x{10CC0}-\x{10CF2}\x{10CF3}-\x{10CF9}\x{10CFA}-\x{10CFF}\x{10D00}-\x{10D23}\x{10D24}-\x{10D27}\x{10D28}-\x{10D2F}\x{10D30}-\x{10D39}\x{10D3A}-\x{10D3F}\x{10D40}-\x{10E5F}\x{10E60}-\x{10E7E}\x{10E7F}\x{10E80}-\x{10EA9}\x{10EAA}\x{10EAB}-\x{10EAC}\x{10EAD}\x{10EAE}-\x{10EAF}\x{10EB0}-\x{10EB1}\x{10EB2}-\x{10EFF}\x{10F00}-\x{10F1C}\x{10F1D}-\x{10F26}\x{10F27}\x{10F28}-\x{10F2F}\x{10F30}-\x{10F45}\x{10F46}-\x{10F50}\x{10F51}-\x{10F54}\x{10F55}-\x{10F59}\x{10F5A}-\x{10F6F}\x{10F70}-\x{10FAF}\x{10FB0}-\x{10FC4}\x{10FC5}-\x{10FCB}\x{10FCC}-\x{10FDF}\x{10FE0}-\x{10FF6}\x{10FF7}-\x{10FFF}\x{11001}\x{11038}-\x{11046}\x{11052}-\x{11065}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{111CF}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{11660}-\x{1166C}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{1193B}-\x{1193C}\x{1193E}\x{11943}\x{119D4}-\x{119D7}\x{119DA}-\x{119DB}\x{119E0}\x{11A01}-\x{11A06}\x{11A09}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{11FD5}-\x{11FDC}\x{11FDD}-\x{11FE0}\x{11FE1}-\x{11FF1}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16F4F}\x{16F8F}-\x{16F92}\x{16FE2}\x{16FE4}\x{1BC9D}-\x{1BC9E}\x{1BCA0}-\x{1BCA3}\x{1D167}-\x{1D169}\x{1D173}-\x{1D17A}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D200}-\x{1D241}\x{1D242}-\x{1D244}\x{1D245}\x{1D300}-\x{1D356}\x{1D6DB}\x{1D715}\x{1D74F}\x{1D789}\x{1D7C3}\x{1D7CE}-\x{1D7FF}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E130}-\x{1E136}\x{1E2EC}-\x{1E2EF}\x{1E2FF}\x{1E800}-\x{1E8C4}\x{1E8C5}-\x{1E8C6}\x{1E8C7}-\x{1E8CF}\x{1E8D0}-\x{1E8D6}\x{1E8D7}-\x{1E8FF}\x{1E900}-\x{1E943}\x{1E944}-\x{1E94A}\x{1E94B}\x{1E94C}-\x{1E94F}\x{1E950}-\x{1E959}\x{1E95A}-\x{1E95D}\x{1E95E}-\x{1E95F}\x{1E960}-\x{1EC6F}\x{1EC70}\x{1EC71}-\x{1ECAB}\x{1ECAC}\x{1ECAD}-\x{1ECAF}\x{1ECB0}\x{1ECB1}-\x{1ECB4}\x{1ECB5}-\x{1ECBF}\x{1ECC0}-\x{1ECFF}\x{1ED00}\x{1ED01}-\x{1ED2D}\x{1ED2E}\x{1ED2F}-\x{1ED3D}\x{1ED3E}-\x{1ED4F}\x{1ED50}-\x{1EDFF}\x{1EE00}-\x{1EE03}\x{1EE04}\x{1EE05}-\x{1EE1F}\x{1EE20}\x{1EE21}-\x{1EE22}\x{1EE23}\x{1EE24}\x{1EE25}-\x{1EE26}\x{1EE27}\x{1EE28}\x{1EE29}-\x{1EE32}\x{1EE33}\x{1EE34}-\x{1EE37}\x{1EE38}\x{1EE39}\x{1EE3A}\x{1EE3B}\x{1EE3C}-\x{1EE41}\x{1EE42}\x{1EE43}-\x{1EE46}\x{1EE47}\x{1EE48}\x{1EE49}\x{1EE4A}\x{1EE4B}\x{1EE4C}\x{1EE4D}-\x{1EE4F}\x{1EE50}\x{1EE51}-\x{1EE52}\x{1EE53}\x{1EE54}\x{1EE55}-\x{1EE56}\x{1EE57}\x{1EE58}\x{1EE59}\x{1EE5A}\x{1EE5B}\x{1EE5C}\x{1EE5D}\x{1EE5E}\x{1EE5F}\x{1EE60}\x{1EE61}-\x{1EE62}\x{1EE63}\x{1EE64}\x{1EE65}-\x{1EE66}\x{1EE67}-\x{1EE6A}\x{1EE6B}\x{1EE6C}-\x{1EE72}\x{1EE73}\x{1EE74}-\x{1EE77}\x{1EE78}\x{1EE79}-\x{1EE7C}\x{1EE7D}\x{1EE7E}\x{1EE7F}\x{1EE80}-\x{1EE89}\x{1EE8A}\x{1EE8B}-\x{1EE9B}\x{1EE9C}-\x{1EEA0}\x{1EEA1}-\x{1EEA3}\x{1EEA4}\x{1EEA5}-\x{1EEA9}\x{1EEAA}\x{1EEAB}-\x{1EEBB}\x{1EEBC}-\x{1EEEF}\x{1EEF0}-\x{1EEF1}\x{1EEF2}-\x{1EEFF}\x{1EF00}-\x{1EFFF}\x{1F000}-\x{1F02B}\x{1F030}-\x{1F093}\x{1F0A0}-\x{1F0AE}\x{1F0B1}-\x{1F0BF}\x{1F0C1}-\x{1F0CF}\x{1F0D1}-\x{1F0F5}\x{1F100}-\x{1F10A}\x{1F10B}-\x{1F10C}\x{1F10D}-\x{1F10F}\x{1F12F}\x{1F16A}-\x{1F16F}\x{1F1AD}\x{1F260}-\x{1F265}\x{1F300}-\x{1F3FA}\x{1F3FB}-\x{1F3FF}\x{1F400}-\x{1F6D7}\x{1F6E0}-\x{1F6EC}\x{1F6F0}-\x{1F6FC}\x{1F700}-\x{1F773}\x{1F780}-\x{1F7D8}\x{1F7E0}-\x{1F7EB}\x{1F800}-\x{1F80B}\x{1F810}-\x{1F847}\x{1F850}-\x{1F859}\x{1F860}-\x{1F887}\x{1F890}-\x{1F8AD}\x{1F8B0}-\x{1F8B1}\x{1F900}-\x{1F978}\x{1F97A}-\x{1F9CB}\x{1F9CD}-\x{1FA53}\x{1FA60}-\x{1FA6D}\x{1FA70}-\x{1FA74}\x{1FA78}-\x{1FA7A}\x{1FA80}-\x{1FA86}\x{1FA90}-\x{1FAA8}\x{1FAB0}-\x{1FAB6}\x{1FAC0}-\x{1FAC2}\x{1FAD0}-\x{1FAD6}\x{1FB00}-\x{1FB92}\x{1FB94}-\x{1FBCA}\x{1FBF0}-\x{1FBF9}\x{1FFFE}-\x{1FFFF}\x{2FFFE}-\x{2FFFF}\x{3FFFE}-\x{3FFFF}\x{4FFFE}-\x{4FFFF}\x{5FFFE}-\x{5FFFF}\x{6FFFE}-\x{6FFFF}\x{7FFFE}-\x{7FFFF}\x{8FFFE}-\x{8FFFF}\x{9FFFE}-\x{9FFFF}\x{AFFFE}-\x{AFFFF}\x{BFFFE}-\x{BFFFF}\x{CFFFE}-\x{CFFFF}\x{DFFFE}-\x{E0000}\x{E0001}\x{E0002}-\x{E001F}\x{E0020}-\x{E007F}\x{E0080}-\x{E00FF}\x{E0100}-\x{E01EF}\x{E01F0}-\x{E0FFF}\x{EFFFE}-\x{EFFFF}\x{FFFFE}-\x{FFFFF}\x{10FFFE}-\x{10FFFF}]/u';
+ const BIDI_STEP_3 = '/[\x{0030}-\x{0039}\x{00B2}-\x{00B3}\x{00B9}\x{0590}\x{05BE}\x{05C0}\x{05C3}\x{05C6}\x{05C8}-\x{05CF}\x{05D0}-\x{05EA}\x{05EB}-\x{05EE}\x{05EF}-\x{05F2}\x{05F3}-\x{05F4}\x{05F5}-\x{05FF}\x{0600}-\x{0605}\x{0608}\x{060B}\x{060D}\x{061B}\x{061C}\x{061D}\x{061E}-\x{061F}\x{0620}-\x{063F}\x{0640}\x{0641}-\x{064A}\x{0660}-\x{0669}\x{066B}-\x{066C}\x{066D}\x{066E}-\x{066F}\x{0671}-\x{06D3}\x{06D4}\x{06D5}\x{06DD}\x{06E5}-\x{06E6}\x{06EE}-\x{06EF}\x{06F0}-\x{06F9}\x{06FA}-\x{06FC}\x{06FD}-\x{06FE}\x{06FF}\x{0700}-\x{070D}\x{070E}\x{070F}\x{0710}\x{0712}-\x{072F}\x{074B}-\x{074C}\x{074D}-\x{07A5}\x{07B1}\x{07B2}-\x{07BF}\x{07C0}-\x{07C9}\x{07CA}-\x{07EA}\x{07F4}-\x{07F5}\x{07FA}\x{07FB}-\x{07FC}\x{07FE}-\x{07FF}\x{0800}-\x{0815}\x{081A}\x{0824}\x{0828}\x{082E}-\x{082F}\x{0830}-\x{083E}\x{083F}\x{0840}-\x{0858}\x{085C}-\x{085D}\x{085E}\x{085F}\x{0860}-\x{086A}\x{086B}-\x{086F}\x{0870}-\x{089F}\x{08A0}-\x{08B4}\x{08B5}\x{08B6}-\x{08C7}\x{08C8}-\x{08D2}\x{08E2}\x{200F}\x{2070}\x{2074}-\x{2079}\x{2080}-\x{2089}\x{2488}-\x{249B}\x{FB1D}\x{FB1F}-\x{FB28}\x{FB2A}-\x{FB36}\x{FB37}\x{FB38}-\x{FB3C}\x{FB3D}\x{FB3E}\x{FB3F}\x{FB40}-\x{FB41}\x{FB42}\x{FB43}-\x{FB44}\x{FB45}\x{FB46}-\x{FB4F}\x{FB50}-\x{FBB1}\x{FBB2}-\x{FBC1}\x{FBC2}-\x{FBD2}\x{FBD3}-\x{FD3D}\x{FD40}-\x{FD4F}\x{FD50}-\x{FD8F}\x{FD90}-\x{FD91}\x{FD92}-\x{FDC7}\x{FDC8}-\x{FDCF}\x{FDF0}-\x{FDFB}\x{FDFC}\x{FDFE}-\x{FDFF}\x{FE70}-\x{FE74}\x{FE75}\x{FE76}-\x{FEFC}\x{FEFD}-\x{FEFE}\x{FF10}-\x{FF19}\x{102E1}-\x{102FB}\x{10800}-\x{10805}\x{10806}-\x{10807}\x{10808}\x{10809}\x{1080A}-\x{10835}\x{10836}\x{10837}-\x{10838}\x{10839}-\x{1083B}\x{1083C}\x{1083D}-\x{1083E}\x{1083F}-\x{10855}\x{10856}\x{10857}\x{10858}-\x{1085F}\x{10860}-\x{10876}\x{10877}-\x{10878}\x{10879}-\x{1087F}\x{10880}-\x{1089E}\x{1089F}-\x{108A6}\x{108A7}-\x{108AF}\x{108B0}-\x{108DF}\x{108E0}-\x{108F2}\x{108F3}\x{108F4}-\x{108F5}\x{108F6}-\x{108FA}\x{108FB}-\x{108FF}\x{10900}-\x{10915}\x{10916}-\x{1091B}\x{1091C}-\x{1091E}\x{10920}-\x{10939}\x{1093A}-\x{1093E}\x{1093F}\x{10940}-\x{1097F}\x{10980}-\x{109B7}\x{109B8}-\x{109BB}\x{109BC}-\x{109BD}\x{109BE}-\x{109BF}\x{109C0}-\x{109CF}\x{109D0}-\x{109D1}\x{109D2}-\x{109FF}\x{10A00}\x{10A04}\x{10A07}-\x{10A0B}\x{10A10}-\x{10A13}\x{10A14}\x{10A15}-\x{10A17}\x{10A18}\x{10A19}-\x{10A35}\x{10A36}-\x{10A37}\x{10A3B}-\x{10A3E}\x{10A40}-\x{10A48}\x{10A49}-\x{10A4F}\x{10A50}-\x{10A58}\x{10A59}-\x{10A5F}\x{10A60}-\x{10A7C}\x{10A7D}-\x{10A7E}\x{10A7F}\x{10A80}-\x{10A9C}\x{10A9D}-\x{10A9F}\x{10AA0}-\x{10ABF}\x{10AC0}-\x{10AC7}\x{10AC8}\x{10AC9}-\x{10AE4}\x{10AE7}-\x{10AEA}\x{10AEB}-\x{10AEF}\x{10AF0}-\x{10AF6}\x{10AF7}-\x{10AFF}\x{10B00}-\x{10B35}\x{10B36}-\x{10B38}\x{10B40}-\x{10B55}\x{10B56}-\x{10B57}\x{10B58}-\x{10B5F}\x{10B60}-\x{10B72}\x{10B73}-\x{10B77}\x{10B78}-\x{10B7F}\x{10B80}-\x{10B91}\x{10B92}-\x{10B98}\x{10B99}-\x{10B9C}\x{10B9D}-\x{10BA8}\x{10BA9}-\x{10BAF}\x{10BB0}-\x{10BFF}\x{10C00}-\x{10C48}\x{10C49}-\x{10C7F}\x{10C80}-\x{10CB2}\x{10CB3}-\x{10CBF}\x{10CC0}-\x{10CF2}\x{10CF3}-\x{10CF9}\x{10CFA}-\x{10CFF}\x{10D00}-\x{10D23}\x{10D28}-\x{10D2F}\x{10D30}-\x{10D39}\x{10D3A}-\x{10D3F}\x{10D40}-\x{10E5F}\x{10E60}-\x{10E7E}\x{10E7F}\x{10E80}-\x{10EA9}\x{10EAA}\x{10EAD}\x{10EAE}-\x{10EAF}\x{10EB0}-\x{10EB1}\x{10EB2}-\x{10EFF}\x{10F00}-\x{10F1C}\x{10F1D}-\x{10F26}\x{10F27}\x{10F28}-\x{10F2F}\x{10F30}-\x{10F45}\x{10F51}-\x{10F54}\x{10F55}-\x{10F59}\x{10F5A}-\x{10F6F}\x{10F70}-\x{10FAF}\x{10FB0}-\x{10FC4}\x{10FC5}-\x{10FCB}\x{10FCC}-\x{10FDF}\x{10FE0}-\x{10FF6}\x{10FF7}-\x{10FFF}\x{1D7CE}-\x{1D7FF}\x{1E800}-\x{1E8C4}\x{1E8C5}-\x{1E8C6}\x{1E8C7}-\x{1E8CF}\x{1E8D7}-\x{1E8FF}\x{1E900}-\x{1E943}\x{1E94B}\x{1E94C}-\x{1E94F}\x{1E950}-\x{1E959}\x{1E95A}-\x{1E95D}\x{1E95E}-\x{1E95F}\x{1E960}-\x{1EC6F}\x{1EC70}\x{1EC71}-\x{1ECAB}\x{1ECAC}\x{1ECAD}-\x{1ECAF}\x{1ECB0}\x{1ECB1}-\x{1ECB4}\x{1ECB5}-\x{1ECBF}\x{1ECC0}-\x{1ECFF}\x{1ED00}\x{1ED01}-\x{1ED2D}\x{1ED2E}\x{1ED2F}-\x{1ED3D}\x{1ED3E}-\x{1ED4F}\x{1ED50}-\x{1EDFF}\x{1EE00}-\x{1EE03}\x{1EE04}\x{1EE05}-\x{1EE1F}\x{1EE20}\x{1EE21}-\x{1EE22}\x{1EE23}\x{1EE24}\x{1EE25}-\x{1EE26}\x{1EE27}\x{1EE28}\x{1EE29}-\x{1EE32}\x{1EE33}\x{1EE34}-\x{1EE37}\x{1EE38}\x{1EE39}\x{1EE3A}\x{1EE3B}\x{1EE3C}-\x{1EE41}\x{1EE42}\x{1EE43}-\x{1EE46}\x{1EE47}\x{1EE48}\x{1EE49}\x{1EE4A}\x{1EE4B}\x{1EE4C}\x{1EE4D}-\x{1EE4F}\x{1EE50}\x{1EE51}-\x{1EE52}\x{1EE53}\x{1EE54}\x{1EE55}-\x{1EE56}\x{1EE57}\x{1EE58}\x{1EE59}\x{1EE5A}\x{1EE5B}\x{1EE5C}\x{1EE5D}\x{1EE5E}\x{1EE5F}\x{1EE60}\x{1EE61}-\x{1EE62}\x{1EE63}\x{1EE64}\x{1EE65}-\x{1EE66}\x{1EE67}-\x{1EE6A}\x{1EE6B}\x{1EE6C}-\x{1EE72}\x{1EE73}\x{1EE74}-\x{1EE77}\x{1EE78}\x{1EE79}-\x{1EE7C}\x{1EE7D}\x{1EE7E}\x{1EE7F}\x{1EE80}-\x{1EE89}\x{1EE8A}\x{1EE8B}-\x{1EE9B}\x{1EE9C}-\x{1EEA0}\x{1EEA1}-\x{1EEA3}\x{1EEA4}\x{1EEA5}-\x{1EEA9}\x{1EEAA}\x{1EEAB}-\x{1EEBB}\x{1EEBC}-\x{1EEEF}\x{1EEF2}-\x{1EEFF}\x{1EF00}-\x{1EFFF}\x{1F100}-\x{1F10A}\x{1FBF0}-\x{1FBF9}][\x{0300}-\x{036F}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{0591}-\x{05BD}\x{05BF}\x{05C1}-\x{05C2}\x{05C4}-\x{05C5}\x{05C7}\x{0610}-\x{061A}\x{064B}-\x{065F}\x{0670}\x{06D6}-\x{06DC}\x{06DF}-\x{06E4}\x{06E7}-\x{06E8}\x{06EA}-\x{06ED}\x{0711}\x{0730}-\x{074A}\x{07A6}-\x{07B0}\x{07EB}-\x{07F3}\x{07FD}\x{0816}-\x{0819}\x{081B}-\x{0823}\x{0825}-\x{0827}\x{0829}-\x{082D}\x{0859}-\x{085B}\x{08D3}-\x{08E1}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B55}-\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C81}\x{0CBC}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0D81}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EBC}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{135D}-\x{135F}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17DD}\x{180B}-\x{180D}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1ABF}-\x{1AC0}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2CEF}-\x{2CF1}\x{2D7F}\x{2DE0}-\x{2DFF}\x{302A}-\x{302D}\x{3099}-\x{309A}\x{A66F}\x{A670}-\x{A672}\x{A674}-\x{A67D}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A82C}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}-\x{A9BD}\x{A9E5}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AAEC}-\x{AAED}\x{AAF6}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1E}\x{FE00}-\x{FE0F}\x{FE20}-\x{FE2F}\x{101FD}\x{102E0}\x{10376}-\x{1037A}\x{10A01}-\x{10A03}\x{10A05}-\x{10A06}\x{10A0C}-\x{10A0F}\x{10A38}-\x{10A3A}\x{10A3F}\x{10AE5}-\x{10AE6}\x{10D24}-\x{10D27}\x{10EAB}-\x{10EAC}\x{10F46}-\x{10F50}\x{11001}\x{11038}-\x{11046}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{111CF}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{1193B}-\x{1193C}\x{1193E}\x{11943}\x{119D4}-\x{119D7}\x{119DA}-\x{119DB}\x{119E0}\x{11A01}-\x{11A06}\x{11A09}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16F4F}\x{16F8F}-\x{16F92}\x{16FE4}\x{1BC9D}-\x{1BC9E}\x{1D167}-\x{1D169}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D242}-\x{1D244}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E130}-\x{1E136}\x{1E2EC}-\x{1E2EF}\x{1E8D0}-\x{1E8D6}\x{1E944}-\x{1E94A}\x{E0100}-\x{E01EF}]*$/u';
+ const BIDI_STEP_4_AN = '/[\x{0600}-\x{0605}\x{0660}-\x{0669}\x{066B}-\x{066C}\x{06DD}\x{08E2}\x{10D30}-\x{10D39}\x{10E60}-\x{10E7E}]/u';
+ const BIDI_STEP_4_EN = '/[\x{0030}-\x{0039}\x{00B2}-\x{00B3}\x{00B9}\x{06F0}-\x{06F9}\x{2070}\x{2074}-\x{2079}\x{2080}-\x{2089}\x{2488}-\x{249B}\x{FF10}-\x{FF19}\x{102E1}-\x{102FB}\x{1D7CE}-\x{1D7FF}\x{1F100}-\x{1F10A}\x{1FBF0}-\x{1FBF9}]/u';
+ const BIDI_STEP_5 = '/[\x{0009}\x{000A}\x{000B}\x{000C}\x{000D}\x{001C}-\x{001E}\x{001F}\x{0020}\x{0085}\x{0590}\x{05BE}\x{05C0}\x{05C3}\x{05C6}\x{05C8}-\x{05CF}\x{05D0}-\x{05EA}\x{05EB}-\x{05EE}\x{05EF}-\x{05F2}\x{05F3}-\x{05F4}\x{05F5}-\x{05FF}\x{0600}-\x{0605}\x{0608}\x{060B}\x{060D}\x{061B}\x{061C}\x{061D}\x{061E}-\x{061F}\x{0620}-\x{063F}\x{0640}\x{0641}-\x{064A}\x{0660}-\x{0669}\x{066B}-\x{066C}\x{066D}\x{066E}-\x{066F}\x{0671}-\x{06D3}\x{06D4}\x{06D5}\x{06DD}\x{06E5}-\x{06E6}\x{06EE}-\x{06EF}\x{06FA}-\x{06FC}\x{06FD}-\x{06FE}\x{06FF}\x{0700}-\x{070D}\x{070E}\x{070F}\x{0710}\x{0712}-\x{072F}\x{074B}-\x{074C}\x{074D}-\x{07A5}\x{07B1}\x{07B2}-\x{07BF}\x{07C0}-\x{07C9}\x{07CA}-\x{07EA}\x{07F4}-\x{07F5}\x{07FA}\x{07FB}-\x{07FC}\x{07FE}-\x{07FF}\x{0800}-\x{0815}\x{081A}\x{0824}\x{0828}\x{082E}-\x{082F}\x{0830}-\x{083E}\x{083F}\x{0840}-\x{0858}\x{085C}-\x{085D}\x{085E}\x{085F}\x{0860}-\x{086A}\x{086B}-\x{086F}\x{0870}-\x{089F}\x{08A0}-\x{08B4}\x{08B5}\x{08B6}-\x{08C7}\x{08C8}-\x{08D2}\x{08E2}\x{1680}\x{2000}-\x{200A}\x{200F}\x{2028}\x{2029}\x{202A}\x{202B}\x{202C}\x{202D}\x{202E}\x{205F}\x{2066}\x{2067}\x{2068}\x{2069}\x{3000}\x{FB1D}\x{FB1F}-\x{FB28}\x{FB2A}-\x{FB36}\x{FB37}\x{FB38}-\x{FB3C}\x{FB3D}\x{FB3E}\x{FB3F}\x{FB40}-\x{FB41}\x{FB42}\x{FB43}-\x{FB44}\x{FB45}\x{FB46}-\x{FB4F}\x{FB50}-\x{FBB1}\x{FBB2}-\x{FBC1}\x{FBC2}-\x{FBD2}\x{FBD3}-\x{FD3D}\x{FD40}-\x{FD4F}\x{FD50}-\x{FD8F}\x{FD90}-\x{FD91}\x{FD92}-\x{FDC7}\x{FDC8}-\x{FDCF}\x{FDF0}-\x{FDFB}\x{FDFC}\x{FDFE}-\x{FDFF}\x{FE70}-\x{FE74}\x{FE75}\x{FE76}-\x{FEFC}\x{FEFD}-\x{FEFE}\x{10800}-\x{10805}\x{10806}-\x{10807}\x{10808}\x{10809}\x{1080A}-\x{10835}\x{10836}\x{10837}-\x{10838}\x{10839}-\x{1083B}\x{1083C}\x{1083D}-\x{1083E}\x{1083F}-\x{10855}\x{10856}\x{10857}\x{10858}-\x{1085F}\x{10860}-\x{10876}\x{10877}-\x{10878}\x{10879}-\x{1087F}\x{10880}-\x{1089E}\x{1089F}-\x{108A6}\x{108A7}-\x{108AF}\x{108B0}-\x{108DF}\x{108E0}-\x{108F2}\x{108F3}\x{108F4}-\x{108F5}\x{108F6}-\x{108FA}\x{108FB}-\x{108FF}\x{10900}-\x{10915}\x{10916}-\x{1091B}\x{1091C}-\x{1091E}\x{10920}-\x{10939}\x{1093A}-\x{1093E}\x{1093F}\x{10940}-\x{1097F}\x{10980}-\x{109B7}\x{109B8}-\x{109BB}\x{109BC}-\x{109BD}\x{109BE}-\x{109BF}\x{109C0}-\x{109CF}\x{109D0}-\x{109D1}\x{109D2}-\x{109FF}\x{10A00}\x{10A04}\x{10A07}-\x{10A0B}\x{10A10}-\x{10A13}\x{10A14}\x{10A15}-\x{10A17}\x{10A18}\x{10A19}-\x{10A35}\x{10A36}-\x{10A37}\x{10A3B}-\x{10A3E}\x{10A40}-\x{10A48}\x{10A49}-\x{10A4F}\x{10A50}-\x{10A58}\x{10A59}-\x{10A5F}\x{10A60}-\x{10A7C}\x{10A7D}-\x{10A7E}\x{10A7F}\x{10A80}-\x{10A9C}\x{10A9D}-\x{10A9F}\x{10AA0}-\x{10ABF}\x{10AC0}-\x{10AC7}\x{10AC8}\x{10AC9}-\x{10AE4}\x{10AE7}-\x{10AEA}\x{10AEB}-\x{10AEF}\x{10AF0}-\x{10AF6}\x{10AF7}-\x{10AFF}\x{10B00}-\x{10B35}\x{10B36}-\x{10B38}\x{10B40}-\x{10B55}\x{10B56}-\x{10B57}\x{10B58}-\x{10B5F}\x{10B60}-\x{10B72}\x{10B73}-\x{10B77}\x{10B78}-\x{10B7F}\x{10B80}-\x{10B91}\x{10B92}-\x{10B98}\x{10B99}-\x{10B9C}\x{10B9D}-\x{10BA8}\x{10BA9}-\x{10BAF}\x{10BB0}-\x{10BFF}\x{10C00}-\x{10C48}\x{10C49}-\x{10C7F}\x{10C80}-\x{10CB2}\x{10CB3}-\x{10CBF}\x{10CC0}-\x{10CF2}\x{10CF3}-\x{10CF9}\x{10CFA}-\x{10CFF}\x{10D00}-\x{10D23}\x{10D28}-\x{10D2F}\x{10D30}-\x{10D39}\x{10D3A}-\x{10D3F}\x{10D40}-\x{10E5F}\x{10E60}-\x{10E7E}\x{10E7F}\x{10E80}-\x{10EA9}\x{10EAA}\x{10EAD}\x{10EAE}-\x{10EAF}\x{10EB0}-\x{10EB1}\x{10EB2}-\x{10EFF}\x{10F00}-\x{10F1C}\x{10F1D}-\x{10F26}\x{10F27}\x{10F28}-\x{10F2F}\x{10F30}-\x{10F45}\x{10F51}-\x{10F54}\x{10F55}-\x{10F59}\x{10F5A}-\x{10F6F}\x{10F70}-\x{10FAF}\x{10FB0}-\x{10FC4}\x{10FC5}-\x{10FCB}\x{10FCC}-\x{10FDF}\x{10FE0}-\x{10FF6}\x{10FF7}-\x{10FFF}\x{1E800}-\x{1E8C4}\x{1E8C5}-\x{1E8C6}\x{1E8C7}-\x{1E8CF}\x{1E8D7}-\x{1E8FF}\x{1E900}-\x{1E943}\x{1E94B}\x{1E94C}-\x{1E94F}\x{1E950}-\x{1E959}\x{1E95A}-\x{1E95D}\x{1E95E}-\x{1E95F}\x{1E960}-\x{1EC6F}\x{1EC70}\x{1EC71}-\x{1ECAB}\x{1ECAC}\x{1ECAD}-\x{1ECAF}\x{1ECB0}\x{1ECB1}-\x{1ECB4}\x{1ECB5}-\x{1ECBF}\x{1ECC0}-\x{1ECFF}\x{1ED00}\x{1ED01}-\x{1ED2D}\x{1ED2E}\x{1ED2F}-\x{1ED3D}\x{1ED3E}-\x{1ED4F}\x{1ED50}-\x{1EDFF}\x{1EE00}-\x{1EE03}\x{1EE04}\x{1EE05}-\x{1EE1F}\x{1EE20}\x{1EE21}-\x{1EE22}\x{1EE23}\x{1EE24}\x{1EE25}-\x{1EE26}\x{1EE27}\x{1EE28}\x{1EE29}-\x{1EE32}\x{1EE33}\x{1EE34}-\x{1EE37}\x{1EE38}\x{1EE39}\x{1EE3A}\x{1EE3B}\x{1EE3C}-\x{1EE41}\x{1EE42}\x{1EE43}-\x{1EE46}\x{1EE47}\x{1EE48}\x{1EE49}\x{1EE4A}\x{1EE4B}\x{1EE4C}\x{1EE4D}-\x{1EE4F}\x{1EE50}\x{1EE51}-\x{1EE52}\x{1EE53}\x{1EE54}\x{1EE55}-\x{1EE56}\x{1EE57}\x{1EE58}\x{1EE59}\x{1EE5A}\x{1EE5B}\x{1EE5C}\x{1EE5D}\x{1EE5E}\x{1EE5F}\x{1EE60}\x{1EE61}-\x{1EE62}\x{1EE63}\x{1EE64}\x{1EE65}-\x{1EE66}\x{1EE67}-\x{1EE6A}\x{1EE6B}\x{1EE6C}-\x{1EE72}\x{1EE73}\x{1EE74}-\x{1EE77}\x{1EE78}\x{1EE79}-\x{1EE7C}\x{1EE7D}\x{1EE7E}\x{1EE7F}\x{1EE80}-\x{1EE89}\x{1EE8A}\x{1EE8B}-\x{1EE9B}\x{1EE9C}-\x{1EEA0}\x{1EEA1}-\x{1EEA3}\x{1EEA4}\x{1EEA5}-\x{1EEA9}\x{1EEAA}\x{1EEAB}-\x{1EEBB}\x{1EEBC}-\x{1EEEF}\x{1EEF2}-\x{1EEFF}\x{1EF00}-\x{1EFFF}]/u';
+ const BIDI_STEP_6 = '/[^\x{0000}-\x{0008}\x{0009}\x{000A}\x{000B}\x{000C}\x{000D}\x{000E}-\x{001B}\x{001C}-\x{001E}\x{001F}\x{0020}\x{0021}-\x{0022}\x{0023}\x{0024}\x{0025}\x{0026}-\x{0027}\x{0028}\x{0029}\x{002A}\x{002B}\x{002C}\x{002D}\x{002E}-\x{002F}\x{003A}\x{003B}\x{003C}-\x{003E}\x{003F}-\x{0040}\x{005B}\x{005C}\x{005D}\x{005E}\x{005F}\x{0060}\x{007B}\x{007C}\x{007D}\x{007E}\x{007F}-\x{0084}\x{0085}\x{0086}-\x{009F}\x{00A0}\x{00A1}\x{00A2}-\x{00A5}\x{00A6}\x{00A7}\x{00A8}\x{00A9}\x{00AB}\x{00AC}\x{00AD}\x{00AE}\x{00AF}\x{00B0}\x{00B1}\x{00B4}\x{00B6}-\x{00B7}\x{00B8}\x{00BB}\x{00BC}-\x{00BE}\x{00BF}\x{00D7}\x{00F7}\x{02B9}-\x{02BA}\x{02C2}-\x{02C5}\x{02C6}-\x{02CF}\x{02D2}-\x{02DF}\x{02E5}-\x{02EB}\x{02EC}\x{02ED}\x{02EF}-\x{02FF}\x{0300}-\x{036F}\x{0374}\x{0375}\x{037E}\x{0384}-\x{0385}\x{0387}\x{03F6}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{058A}\x{058D}-\x{058E}\x{058F}\x{0590}\x{0591}-\x{05BD}\x{05BE}\x{05BF}\x{05C0}\x{05C1}-\x{05C2}\x{05C3}\x{05C4}-\x{05C5}\x{05C6}\x{05C7}\x{05C8}-\x{05CF}\x{05D0}-\x{05EA}\x{05EB}-\x{05EE}\x{05EF}-\x{05F2}\x{05F3}-\x{05F4}\x{05F5}-\x{05FF}\x{0600}-\x{0605}\x{0606}-\x{0607}\x{0608}\x{0609}-\x{060A}\x{060B}\x{060C}\x{060D}\x{060E}-\x{060F}\x{0610}-\x{061A}\x{061B}\x{061C}\x{061D}\x{061E}-\x{061F}\x{0620}-\x{063F}\x{0640}\x{0641}-\x{064A}\x{064B}-\x{065F}\x{0660}-\x{0669}\x{066A}\x{066B}-\x{066C}\x{066D}\x{066E}-\x{066F}\x{0670}\x{0671}-\x{06D3}\x{06D4}\x{06D5}\x{06D6}-\x{06DC}\x{06DD}\x{06DE}\x{06DF}-\x{06E4}\x{06E5}-\x{06E6}\x{06E7}-\x{06E8}\x{06E9}\x{06EA}-\x{06ED}\x{06EE}-\x{06EF}\x{06FA}-\x{06FC}\x{06FD}-\x{06FE}\x{06FF}\x{0700}-\x{070D}\x{070E}\x{070F}\x{0710}\x{0711}\x{0712}-\x{072F}\x{0730}-\x{074A}\x{074B}-\x{074C}\x{074D}-\x{07A5}\x{07A6}-\x{07B0}\x{07B1}\x{07B2}-\x{07BF}\x{07C0}-\x{07C9}\x{07CA}-\x{07EA}\x{07EB}-\x{07F3}\x{07F4}-\x{07F5}\x{07F6}\x{07F7}-\x{07F9}\x{07FA}\x{07FB}-\x{07FC}\x{07FD}\x{07FE}-\x{07FF}\x{0800}-\x{0815}\x{0816}-\x{0819}\x{081A}\x{081B}-\x{0823}\x{0824}\x{0825}-\x{0827}\x{0828}\x{0829}-\x{082D}\x{082E}-\x{082F}\x{0830}-\x{083E}\x{083F}\x{0840}-\x{0858}\x{0859}-\x{085B}\x{085C}-\x{085D}\x{085E}\x{085F}\x{0860}-\x{086A}\x{086B}-\x{086F}\x{0870}-\x{089F}\x{08A0}-\x{08B4}\x{08B5}\x{08B6}-\x{08C7}\x{08C8}-\x{08D2}\x{08D3}-\x{08E1}\x{08E2}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09F2}-\x{09F3}\x{09FB}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AF1}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B55}-\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0BF3}-\x{0BF8}\x{0BF9}\x{0BFA}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C78}-\x{0C7E}\x{0C81}\x{0CBC}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0D81}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E3F}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EBC}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F3A}\x{0F3B}\x{0F3C}\x{0F3D}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{135D}-\x{135F}\x{1390}-\x{1399}\x{1400}\x{1680}\x{169B}\x{169C}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17DB}\x{17DD}\x{17F0}-\x{17F9}\x{1800}-\x{1805}\x{1806}\x{1807}-\x{180A}\x{180B}-\x{180D}\x{180E}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1940}\x{1944}-\x{1945}\x{19DE}-\x{19FF}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1ABF}-\x{1AC0}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{1FBD}\x{1FBF}-\x{1FC1}\x{1FCD}-\x{1FCF}\x{1FDD}-\x{1FDF}\x{1FED}-\x{1FEF}\x{1FFD}-\x{1FFE}\x{2000}-\x{200A}\x{200B}-\x{200D}\x{200F}\x{2010}-\x{2015}\x{2016}-\x{2017}\x{2018}\x{2019}\x{201A}\x{201B}-\x{201C}\x{201D}\x{201E}\x{201F}\x{2020}-\x{2027}\x{2028}\x{2029}\x{202A}\x{202B}\x{202C}\x{202D}\x{202E}\x{202F}\x{2030}-\x{2034}\x{2035}-\x{2038}\x{2039}\x{203A}\x{203B}-\x{203E}\x{203F}-\x{2040}\x{2041}-\x{2043}\x{2044}\x{2045}\x{2046}\x{2047}-\x{2051}\x{2052}\x{2053}\x{2054}\x{2055}-\x{205E}\x{205F}\x{2060}-\x{2064}\x{2065}\x{2066}\x{2067}\x{2068}\x{2069}\x{206A}-\x{206F}\x{207A}-\x{207B}\x{207C}\x{207D}\x{207E}\x{208A}-\x{208B}\x{208C}\x{208D}\x{208E}\x{20A0}-\x{20BF}\x{20C0}-\x{20CF}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2100}-\x{2101}\x{2103}-\x{2106}\x{2108}-\x{2109}\x{2114}\x{2116}-\x{2117}\x{2118}\x{211E}-\x{2123}\x{2125}\x{2127}\x{2129}\x{212E}\x{213A}-\x{213B}\x{2140}-\x{2144}\x{214A}\x{214B}\x{214C}-\x{214D}\x{2150}-\x{215F}\x{2189}\x{218A}-\x{218B}\x{2190}-\x{2194}\x{2195}-\x{2199}\x{219A}-\x{219B}\x{219C}-\x{219F}\x{21A0}\x{21A1}-\x{21A2}\x{21A3}\x{21A4}-\x{21A5}\x{21A6}\x{21A7}-\x{21AD}\x{21AE}\x{21AF}-\x{21CD}\x{21CE}-\x{21CF}\x{21D0}-\x{21D1}\x{21D2}\x{21D3}\x{21D4}\x{21D5}-\x{21F3}\x{21F4}-\x{2211}\x{2212}\x{2213}\x{2214}-\x{22FF}\x{2300}-\x{2307}\x{2308}\x{2309}\x{230A}\x{230B}\x{230C}-\x{231F}\x{2320}-\x{2321}\x{2322}-\x{2328}\x{2329}\x{232A}\x{232B}-\x{2335}\x{237B}\x{237C}\x{237D}-\x{2394}\x{2396}-\x{239A}\x{239B}-\x{23B3}\x{23B4}-\x{23DB}\x{23DC}-\x{23E1}\x{23E2}-\x{2426}\x{2440}-\x{244A}\x{2460}-\x{2487}\x{24EA}-\x{24FF}\x{2500}-\x{25B6}\x{25B7}\x{25B8}-\x{25C0}\x{25C1}\x{25C2}-\x{25F7}\x{25F8}-\x{25FF}\x{2600}-\x{266E}\x{266F}\x{2670}-\x{26AB}\x{26AD}-\x{2767}\x{2768}\x{2769}\x{276A}\x{276B}\x{276C}\x{276D}\x{276E}\x{276F}\x{2770}\x{2771}\x{2772}\x{2773}\x{2774}\x{2775}\x{2776}-\x{2793}\x{2794}-\x{27BF}\x{27C0}-\x{27C4}\x{27C5}\x{27C6}\x{27C7}-\x{27E5}\x{27E6}\x{27E7}\x{27E8}\x{27E9}\x{27EA}\x{27EB}\x{27EC}\x{27ED}\x{27EE}\x{27EF}\x{27F0}-\x{27FF}\x{2900}-\x{2982}\x{2983}\x{2984}\x{2985}\x{2986}\x{2987}\x{2988}\x{2989}\x{298A}\x{298B}\x{298C}\x{298D}\x{298E}\x{298F}\x{2990}\x{2991}\x{2992}\x{2993}\x{2994}\x{2995}\x{2996}\x{2997}\x{2998}\x{2999}-\x{29D7}\x{29D8}\x{29D9}\x{29DA}\x{29DB}\x{29DC}-\x{29FB}\x{29FC}\x{29FD}\x{29FE}-\x{2AFF}\x{2B00}-\x{2B2F}\x{2B30}-\x{2B44}\x{2B45}-\x{2B46}\x{2B47}-\x{2B4C}\x{2B4D}-\x{2B73}\x{2B76}-\x{2B95}\x{2B97}-\x{2BFF}\x{2CE5}-\x{2CEA}\x{2CEF}-\x{2CF1}\x{2CF9}-\x{2CFC}\x{2CFD}\x{2CFE}-\x{2CFF}\x{2D7F}\x{2DE0}-\x{2DFF}\x{2E00}-\x{2E01}\x{2E02}\x{2E03}\x{2E04}\x{2E05}\x{2E06}-\x{2E08}\x{2E09}\x{2E0A}\x{2E0B}\x{2E0C}\x{2E0D}\x{2E0E}-\x{2E16}\x{2E17}\x{2E18}-\x{2E19}\x{2E1A}\x{2E1B}\x{2E1C}\x{2E1D}\x{2E1E}-\x{2E1F}\x{2E20}\x{2E21}\x{2E22}\x{2E23}\x{2E24}\x{2E25}\x{2E26}\x{2E27}\x{2E28}\x{2E29}\x{2E2A}-\x{2E2E}\x{2E2F}\x{2E30}-\x{2E39}\x{2E3A}-\x{2E3B}\x{2E3C}-\x{2E3F}\x{2E40}\x{2E41}\x{2E42}\x{2E43}-\x{2E4F}\x{2E50}-\x{2E51}\x{2E52}\x{2E80}-\x{2E99}\x{2E9B}-\x{2EF3}\x{2F00}-\x{2FD5}\x{2FF0}-\x{2FFB}\x{3000}\x{3001}-\x{3003}\x{3004}\x{3008}\x{3009}\x{300A}\x{300B}\x{300C}\x{300D}\x{300E}\x{300F}\x{3010}\x{3011}\x{3012}-\x{3013}\x{3014}\x{3015}\x{3016}\x{3017}\x{3018}\x{3019}\x{301A}\x{301B}\x{301C}\x{301D}\x{301E}-\x{301F}\x{3020}\x{302A}-\x{302D}\x{3030}\x{3036}-\x{3037}\x{303D}\x{303E}-\x{303F}\x{3099}-\x{309A}\x{309B}-\x{309C}\x{30A0}\x{30FB}\x{31C0}-\x{31E3}\x{321D}-\x{321E}\x{3250}\x{3251}-\x{325F}\x{327C}-\x{327E}\x{32B1}-\x{32BF}\x{32CC}-\x{32CF}\x{3377}-\x{337A}\x{33DE}-\x{33DF}\x{33FF}\x{4DC0}-\x{4DFF}\x{A490}-\x{A4C6}\x{A60D}-\x{A60F}\x{A66F}\x{A670}-\x{A672}\x{A673}\x{A674}-\x{A67D}\x{A67E}\x{A67F}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A700}-\x{A716}\x{A717}-\x{A71F}\x{A720}-\x{A721}\x{A788}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A828}-\x{A82B}\x{A82C}\x{A838}\x{A839}\x{A874}-\x{A877}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}-\x{A9BD}\x{A9E5}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AAEC}-\x{AAED}\x{AAF6}\x{AB6A}-\x{AB6B}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1D}\x{FB1E}\x{FB1F}-\x{FB28}\x{FB29}\x{FB2A}-\x{FB36}\x{FB37}\x{FB38}-\x{FB3C}\x{FB3D}\x{FB3E}\x{FB3F}\x{FB40}-\x{FB41}\x{FB42}\x{FB43}-\x{FB44}\x{FB45}\x{FB46}-\x{FB4F}\x{FB50}-\x{FBB1}\x{FBB2}-\x{FBC1}\x{FBC2}-\x{FBD2}\x{FBD3}-\x{FD3D}\x{FD3E}\x{FD3F}\x{FD40}-\x{FD4F}\x{FD50}-\x{FD8F}\x{FD90}-\x{FD91}\x{FD92}-\x{FDC7}\x{FDC8}-\x{FDCF}\x{FDD0}-\x{FDEF}\x{FDF0}-\x{FDFB}\x{FDFC}\x{FDFD}\x{FDFE}-\x{FDFF}\x{FE00}-\x{FE0F}\x{FE10}-\x{FE16}\x{FE17}\x{FE18}\x{FE19}\x{FE20}-\x{FE2F}\x{FE30}\x{FE31}-\x{FE32}\x{FE33}-\x{FE34}\x{FE35}\x{FE36}\x{FE37}\x{FE38}\x{FE39}\x{FE3A}\x{FE3B}\x{FE3C}\x{FE3D}\x{FE3E}\x{FE3F}\x{FE40}\x{FE41}\x{FE42}\x{FE43}\x{FE44}\x{FE45}-\x{FE46}\x{FE47}\x{FE48}\x{FE49}-\x{FE4C}\x{FE4D}-\x{FE4F}\x{FE50}\x{FE51}\x{FE52}\x{FE54}\x{FE55}\x{FE56}-\x{FE57}\x{FE58}\x{FE59}\x{FE5A}\x{FE5B}\x{FE5C}\x{FE5D}\x{FE5E}\x{FE5F}\x{FE60}-\x{FE61}\x{FE62}\x{FE63}\x{FE64}-\x{FE66}\x{FE68}\x{FE69}\x{FE6A}\x{FE6B}\x{FE70}-\x{FE74}\x{FE75}\x{FE76}-\x{FEFC}\x{FEFD}-\x{FEFE}\x{FEFF}\x{FF01}-\x{FF02}\x{FF03}\x{FF04}\x{FF05}\x{FF06}-\x{FF07}\x{FF08}\x{FF09}\x{FF0A}\x{FF0B}\x{FF0C}\x{FF0D}\x{FF0E}-\x{FF0F}\x{FF1A}\x{FF1B}\x{FF1C}-\x{FF1E}\x{FF1F}-\x{FF20}\x{FF3B}\x{FF3C}\x{FF3D}\x{FF3E}\x{FF3F}\x{FF40}\x{FF5B}\x{FF5C}\x{FF5D}\x{FF5E}\x{FF5F}\x{FF60}\x{FF61}\x{FF62}\x{FF63}\x{FF64}-\x{FF65}\x{FFE0}-\x{FFE1}\x{FFE2}\x{FFE3}\x{FFE4}\x{FFE5}-\x{FFE6}\x{FFE8}\x{FFE9}-\x{FFEC}\x{FFED}-\x{FFEE}\x{FFF0}-\x{FFF8}\x{FFF9}-\x{FFFB}\x{FFFC}-\x{FFFD}\x{FFFE}-\x{FFFF}\x{10101}\x{10140}-\x{10174}\x{10175}-\x{10178}\x{10179}-\x{10189}\x{1018A}-\x{1018B}\x{1018C}\x{10190}-\x{1019C}\x{101A0}\x{101FD}\x{102E0}\x{10376}-\x{1037A}\x{10800}-\x{10805}\x{10806}-\x{10807}\x{10808}\x{10809}\x{1080A}-\x{10835}\x{10836}\x{10837}-\x{10838}\x{10839}-\x{1083B}\x{1083C}\x{1083D}-\x{1083E}\x{1083F}-\x{10855}\x{10856}\x{10857}\x{10858}-\x{1085F}\x{10860}-\x{10876}\x{10877}-\x{10878}\x{10879}-\x{1087F}\x{10880}-\x{1089E}\x{1089F}-\x{108A6}\x{108A7}-\x{108AF}\x{108B0}-\x{108DF}\x{108E0}-\x{108F2}\x{108F3}\x{108F4}-\x{108F5}\x{108F6}-\x{108FA}\x{108FB}-\x{108FF}\x{10900}-\x{10915}\x{10916}-\x{1091B}\x{1091C}-\x{1091E}\x{1091F}\x{10920}-\x{10939}\x{1093A}-\x{1093E}\x{1093F}\x{10940}-\x{1097F}\x{10980}-\x{109B7}\x{109B8}-\x{109BB}\x{109BC}-\x{109BD}\x{109BE}-\x{109BF}\x{109C0}-\x{109CF}\x{109D0}-\x{109D1}\x{109D2}-\x{109FF}\x{10A00}\x{10A01}-\x{10A03}\x{10A04}\x{10A05}-\x{10A06}\x{10A07}-\x{10A0B}\x{10A0C}-\x{10A0F}\x{10A10}-\x{10A13}\x{10A14}\x{10A15}-\x{10A17}\x{10A18}\x{10A19}-\x{10A35}\x{10A36}-\x{10A37}\x{10A38}-\x{10A3A}\x{10A3B}-\x{10A3E}\x{10A3F}\x{10A40}-\x{10A48}\x{10A49}-\x{10A4F}\x{10A50}-\x{10A58}\x{10A59}-\x{10A5F}\x{10A60}-\x{10A7C}\x{10A7D}-\x{10A7E}\x{10A7F}\x{10A80}-\x{10A9C}\x{10A9D}-\x{10A9F}\x{10AA0}-\x{10ABF}\x{10AC0}-\x{10AC7}\x{10AC8}\x{10AC9}-\x{10AE4}\x{10AE5}-\x{10AE6}\x{10AE7}-\x{10AEA}\x{10AEB}-\x{10AEF}\x{10AF0}-\x{10AF6}\x{10AF7}-\x{10AFF}\x{10B00}-\x{10B35}\x{10B36}-\x{10B38}\x{10B39}-\x{10B3F}\x{10B40}-\x{10B55}\x{10B56}-\x{10B57}\x{10B58}-\x{10B5F}\x{10B60}-\x{10B72}\x{10B73}-\x{10B77}\x{10B78}-\x{10B7F}\x{10B80}-\x{10B91}\x{10B92}-\x{10B98}\x{10B99}-\x{10B9C}\x{10B9D}-\x{10BA8}\x{10BA9}-\x{10BAF}\x{10BB0}-\x{10BFF}\x{10C00}-\x{10C48}\x{10C49}-\x{10C7F}\x{10C80}-\x{10CB2}\x{10CB3}-\x{10CBF}\x{10CC0}-\x{10CF2}\x{10CF3}-\x{10CF9}\x{10CFA}-\x{10CFF}\x{10D00}-\x{10D23}\x{10D24}-\x{10D27}\x{10D28}-\x{10D2F}\x{10D30}-\x{10D39}\x{10D3A}-\x{10D3F}\x{10D40}-\x{10E5F}\x{10E60}-\x{10E7E}\x{10E7F}\x{10E80}-\x{10EA9}\x{10EAA}\x{10EAB}-\x{10EAC}\x{10EAD}\x{10EAE}-\x{10EAF}\x{10EB0}-\x{10EB1}\x{10EB2}-\x{10EFF}\x{10F00}-\x{10F1C}\x{10F1D}-\x{10F26}\x{10F27}\x{10F28}-\x{10F2F}\x{10F30}-\x{10F45}\x{10F46}-\x{10F50}\x{10F51}-\x{10F54}\x{10F55}-\x{10F59}\x{10F5A}-\x{10F6F}\x{10F70}-\x{10FAF}\x{10FB0}-\x{10FC4}\x{10FC5}-\x{10FCB}\x{10FCC}-\x{10FDF}\x{10FE0}-\x{10FF6}\x{10FF7}-\x{10FFF}\x{11001}\x{11038}-\x{11046}\x{11052}-\x{11065}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{111CF}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{11660}-\x{1166C}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{1193B}-\x{1193C}\x{1193E}\x{11943}\x{119D4}-\x{119D7}\x{119DA}-\x{119DB}\x{119E0}\x{11A01}-\x{11A06}\x{11A09}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{11FD5}-\x{11FDC}\x{11FDD}-\x{11FE0}\x{11FE1}-\x{11FF1}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16F4F}\x{16F8F}-\x{16F92}\x{16FE2}\x{16FE4}\x{1BC9D}-\x{1BC9E}\x{1BCA0}-\x{1BCA3}\x{1D167}-\x{1D169}\x{1D173}-\x{1D17A}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D200}-\x{1D241}\x{1D242}-\x{1D244}\x{1D245}\x{1D300}-\x{1D356}\x{1D6DB}\x{1D715}\x{1D74F}\x{1D789}\x{1D7C3}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E130}-\x{1E136}\x{1E2EC}-\x{1E2EF}\x{1E2FF}\x{1E800}-\x{1E8C4}\x{1E8C5}-\x{1E8C6}\x{1E8C7}-\x{1E8CF}\x{1E8D0}-\x{1E8D6}\x{1E8D7}-\x{1E8FF}\x{1E900}-\x{1E943}\x{1E944}-\x{1E94A}\x{1E94B}\x{1E94C}-\x{1E94F}\x{1E950}-\x{1E959}\x{1E95A}-\x{1E95D}\x{1E95E}-\x{1E95F}\x{1E960}-\x{1EC6F}\x{1EC70}\x{1EC71}-\x{1ECAB}\x{1ECAC}\x{1ECAD}-\x{1ECAF}\x{1ECB0}\x{1ECB1}-\x{1ECB4}\x{1ECB5}-\x{1ECBF}\x{1ECC0}-\x{1ECFF}\x{1ED00}\x{1ED01}-\x{1ED2D}\x{1ED2E}\x{1ED2F}-\x{1ED3D}\x{1ED3E}-\x{1ED4F}\x{1ED50}-\x{1EDFF}\x{1EE00}-\x{1EE03}\x{1EE04}\x{1EE05}-\x{1EE1F}\x{1EE20}\x{1EE21}-\x{1EE22}\x{1EE23}\x{1EE24}\x{1EE25}-\x{1EE26}\x{1EE27}\x{1EE28}\x{1EE29}-\x{1EE32}\x{1EE33}\x{1EE34}-\x{1EE37}\x{1EE38}\x{1EE39}\x{1EE3A}\x{1EE3B}\x{1EE3C}-\x{1EE41}\x{1EE42}\x{1EE43}-\x{1EE46}\x{1EE47}\x{1EE48}\x{1EE49}\x{1EE4A}\x{1EE4B}\x{1EE4C}\x{1EE4D}-\x{1EE4F}\x{1EE50}\x{1EE51}-\x{1EE52}\x{1EE53}\x{1EE54}\x{1EE55}-\x{1EE56}\x{1EE57}\x{1EE58}\x{1EE59}\x{1EE5A}\x{1EE5B}\x{1EE5C}\x{1EE5D}\x{1EE5E}\x{1EE5F}\x{1EE60}\x{1EE61}-\x{1EE62}\x{1EE63}\x{1EE64}\x{1EE65}-\x{1EE66}\x{1EE67}-\x{1EE6A}\x{1EE6B}\x{1EE6C}-\x{1EE72}\x{1EE73}\x{1EE74}-\x{1EE77}\x{1EE78}\x{1EE79}-\x{1EE7C}\x{1EE7D}\x{1EE7E}\x{1EE7F}\x{1EE80}-\x{1EE89}\x{1EE8A}\x{1EE8B}-\x{1EE9B}\x{1EE9C}-\x{1EEA0}\x{1EEA1}-\x{1EEA3}\x{1EEA4}\x{1EEA5}-\x{1EEA9}\x{1EEAA}\x{1EEAB}-\x{1EEBB}\x{1EEBC}-\x{1EEEF}\x{1EEF0}-\x{1EEF1}\x{1EEF2}-\x{1EEFF}\x{1EF00}-\x{1EFFF}\x{1F000}-\x{1F02B}\x{1F030}-\x{1F093}\x{1F0A0}-\x{1F0AE}\x{1F0B1}-\x{1F0BF}\x{1F0C1}-\x{1F0CF}\x{1F0D1}-\x{1F0F5}\x{1F10B}-\x{1F10C}\x{1F10D}-\x{1F10F}\x{1F12F}\x{1F16A}-\x{1F16F}\x{1F1AD}\x{1F260}-\x{1F265}\x{1F300}-\x{1F3FA}\x{1F3FB}-\x{1F3FF}\x{1F400}-\x{1F6D7}\x{1F6E0}-\x{1F6EC}\x{1F6F0}-\x{1F6FC}\x{1F700}-\x{1F773}\x{1F780}-\x{1F7D8}\x{1F7E0}-\x{1F7EB}\x{1F800}-\x{1F80B}\x{1F810}-\x{1F847}\x{1F850}-\x{1F859}\x{1F860}-\x{1F887}\x{1F890}-\x{1F8AD}\x{1F8B0}-\x{1F8B1}\x{1F900}-\x{1F978}\x{1F97A}-\x{1F9CB}\x{1F9CD}-\x{1FA53}\x{1FA60}-\x{1FA6D}\x{1FA70}-\x{1FA74}\x{1FA78}-\x{1FA7A}\x{1FA80}-\x{1FA86}\x{1FA90}-\x{1FAA8}\x{1FAB0}-\x{1FAB6}\x{1FAC0}-\x{1FAC2}\x{1FAD0}-\x{1FAD6}\x{1FB00}-\x{1FB92}\x{1FB94}-\x{1FBCA}\x{1FFFE}-\x{1FFFF}\x{2FFFE}-\x{2FFFF}\x{3FFFE}-\x{3FFFF}\x{4FFFE}-\x{4FFFF}\x{5FFFE}-\x{5FFFF}\x{6FFFE}-\x{6FFFF}\x{7FFFE}-\x{7FFFF}\x{8FFFE}-\x{8FFFF}\x{9FFFE}-\x{9FFFF}\x{AFFFE}-\x{AFFFF}\x{BFFFE}-\x{BFFFF}\x{CFFFE}-\x{CFFFF}\x{DFFFE}-\x{E0000}\x{E0001}\x{E0002}-\x{E001F}\x{E0020}-\x{E007F}\x{E0080}-\x{E00FF}\x{E0100}-\x{E01EF}\x{E01F0}-\x{E0FFF}\x{EFFFE}-\x{EFFFF}\x{FFFFE}-\x{FFFFF}\x{10FFFE}-\x{10FFFF}][\x{0300}-\x{036F}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{0591}-\x{05BD}\x{05BF}\x{05C1}-\x{05C2}\x{05C4}-\x{05C5}\x{05C7}\x{0610}-\x{061A}\x{064B}-\x{065F}\x{0670}\x{06D6}-\x{06DC}\x{06DF}-\x{06E4}\x{06E7}-\x{06E8}\x{06EA}-\x{06ED}\x{0711}\x{0730}-\x{074A}\x{07A6}-\x{07B0}\x{07EB}-\x{07F3}\x{07FD}\x{0816}-\x{0819}\x{081B}-\x{0823}\x{0825}-\x{0827}\x{0829}-\x{082D}\x{0859}-\x{085B}\x{08D3}-\x{08E1}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B55}-\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C81}\x{0CBC}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0D81}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EBC}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{135D}-\x{135F}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17DD}\x{180B}-\x{180D}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1ABF}-\x{1AC0}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2CEF}-\x{2CF1}\x{2D7F}\x{2DE0}-\x{2DFF}\x{302A}-\x{302D}\x{3099}-\x{309A}\x{A66F}\x{A670}-\x{A672}\x{A674}-\x{A67D}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A82C}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}-\x{A9BD}\x{A9E5}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AAEC}-\x{AAED}\x{AAF6}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1E}\x{FE00}-\x{FE0F}\x{FE20}-\x{FE2F}\x{101FD}\x{102E0}\x{10376}-\x{1037A}\x{10A01}-\x{10A03}\x{10A05}-\x{10A06}\x{10A0C}-\x{10A0F}\x{10A38}-\x{10A3A}\x{10A3F}\x{10AE5}-\x{10AE6}\x{10D24}-\x{10D27}\x{10EAB}-\x{10EAC}\x{10F46}-\x{10F50}\x{11001}\x{11038}-\x{11046}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{111CF}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{1193B}-\x{1193C}\x{1193E}\x{11943}\x{119D4}-\x{119D7}\x{119DA}-\x{119DB}\x{119E0}\x{11A01}-\x{11A06}\x{11A09}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16F4F}\x{16F8F}-\x{16F92}\x{16FE4}\x{1BC9D}-\x{1BC9E}\x{1D167}-\x{1D169}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D242}-\x{1D244}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E130}-\x{1E136}\x{1E2EC}-\x{1E2EF}\x{1E8D0}-\x{1E8D6}\x{1E944}-\x{1E94A}\x{E0100}-\x{E01EF}]*$/u';
+
+ const ZWNJ = '/([\x{A872}\x{10ACD}\x{10AD7}\x{10D00}\x{10FCB}\x{0620}\x{0626}\x{0628}\x{062A}-\x{062E}\x{0633}-\x{063F}\x{0641}-\x{0647}\x{0649}-\x{064A}\x{066E}-\x{066F}\x{0678}-\x{0687}\x{069A}-\x{06BF}\x{06C1}-\x{06C2}\x{06CC}\x{06CE}\x{06D0}-\x{06D1}\x{06FA}-\x{06FC}\x{06FF}\x{0712}-\x{0714}\x{071A}-\x{071D}\x{071F}-\x{0727}\x{0729}\x{072B}\x{072D}-\x{072E}\x{074E}-\x{0758}\x{075C}-\x{076A}\x{076D}-\x{0770}\x{0772}\x{0775}-\x{0777}\x{077A}-\x{077F}\x{07CA}-\x{07EA}\x{0841}-\x{0845}\x{0848}\x{084A}-\x{0853}\x{0855}\x{0860}\x{0862}-\x{0865}\x{0868}\x{08A0}-\x{08A9}\x{08AF}-\x{08B0}\x{08B3}-\x{08B4}\x{08B6}-\x{08B8}\x{08BA}-\x{08C7}\x{1807}\x{1820}-\x{1842}\x{1843}\x{1844}-\x{1878}\x{1887}-\x{18A8}\x{18AA}\x{A840}-\x{A871}\x{10AC0}-\x{10AC4}\x{10AD3}-\x{10AD6}\x{10AD8}-\x{10ADC}\x{10ADE}-\x{10AE0}\x{10AEB}-\x{10AEE}\x{10B80}\x{10B82}\x{10B86}-\x{10B88}\x{10B8A}-\x{10B8B}\x{10B8D}\x{10B90}\x{10BAD}-\x{10BAE}\x{10D01}-\x{10D21}\x{10D23}\x{10F30}-\x{10F32}\x{10F34}-\x{10F44}\x{10F51}-\x{10F53}\x{10FB0}\x{10FB2}-\x{10FB3}\x{10FB8}\x{10FBB}-\x{10FBC}\x{10FBE}-\x{10FBF}\x{10FC1}\x{10FC4}\x{10FCA}\x{1E900}-\x{1E943}][\x{00AD}\x{0300}-\x{036F}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{0591}-\x{05BD}\x{05BF}\x{05C1}-\x{05C2}\x{05C4}-\x{05C5}\x{05C7}\x{0610}-\x{061A}\x{061C}\x{064B}-\x{065F}\x{0670}\x{06D6}-\x{06DC}\x{06DF}-\x{06E4}\x{06E7}-\x{06E8}\x{06EA}-\x{06ED}\x{070F}\x{0711}\x{0730}-\x{074A}\x{07A6}-\x{07B0}\x{07EB}-\x{07F3}\x{07FD}\x{0816}-\x{0819}\x{081B}-\x{0823}\x{0825}-\x{0827}\x{0829}-\x{082D}\x{0859}-\x{085B}\x{08D3}-\x{08E1}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B55}-\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C81}\x{0CBC}\x{0CBF}\x{0CC6}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0D81}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EBC}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{135D}-\x{135F}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17DD}\x{180B}-\x{180D}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1ABF}-\x{1AC0}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{200B}\x{200E}-\x{200F}\x{202A}-\x{202E}\x{2060}-\x{2064}\x{206A}-\x{206F}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2CEF}-\x{2CF1}\x{2D7F}\x{2DE0}-\x{2DFF}\x{302A}-\x{302D}\x{3099}-\x{309A}\x{A66F}\x{A670}-\x{A672}\x{A674}-\x{A67D}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A82C}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}-\x{A9BD}\x{A9E5}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AAEC}-\x{AAED}\x{AAF6}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1E}\x{FE00}-\x{FE0F}\x{FE20}-\x{FE2F}\x{FEFF}\x{FFF9}-\x{FFFB}\x{101FD}\x{102E0}\x{10376}-\x{1037A}\x{10A01}-\x{10A03}\x{10A05}-\x{10A06}\x{10A0C}-\x{10A0F}\x{10A38}-\x{10A3A}\x{10A3F}\x{10AE5}-\x{10AE6}\x{10D24}-\x{10D27}\x{10EAB}-\x{10EAC}\x{10F46}-\x{10F50}\x{11001}\x{11038}-\x{11046}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{111CF}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{1193B}-\x{1193C}\x{1193E}\x{11943}\x{119D4}-\x{119D7}\x{119DA}-\x{119DB}\x{119E0}\x{11A01}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C3F}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{13430}-\x{13438}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16F4F}\x{16F8F}-\x{16F92}\x{16FE4}\x{1BC9D}-\x{1BC9E}\x{1BCA0}-\x{1BCA3}\x{1D167}-\x{1D169}\x{1D173}-\x{1D17A}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D242}-\x{1D244}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E130}-\x{1E136}\x{1E2EC}-\x{1E2EF}\x{1E8D0}-\x{1E8D6}\x{1E944}-\x{1E94A}\x{1E94B}\x{E0001}\x{E0020}-\x{E007F}\x{E0100}-\x{E01EF}]*\x{200C}[\x{00AD}\x{0300}-\x{036F}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{0591}-\x{05BD}\x{05BF}\x{05C1}-\x{05C2}\x{05C4}-\x{05C5}\x{05C7}\x{0610}-\x{061A}\x{061C}\x{064B}-\x{065F}\x{0670}\x{06D6}-\x{06DC}\x{06DF}-\x{06E4}\x{06E7}-\x{06E8}\x{06EA}-\x{06ED}\x{070F}\x{0711}\x{0730}-\x{074A}\x{07A6}-\x{07B0}\x{07EB}-\x{07F3}\x{07FD}\x{0816}-\x{0819}\x{081B}-\x{0823}\x{0825}-\x{0827}\x{0829}-\x{082D}\x{0859}-\x{085B}\x{08D3}-\x{08E1}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B55}-\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C81}\x{0CBC}\x{0CBF}\x{0CC6}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0D81}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EBC}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{135D}-\x{135F}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17DD}\x{180B}-\x{180D}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1ABF}-\x{1AC0}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{200B}\x{200E}-\x{200F}\x{202A}-\x{202E}\x{2060}-\x{2064}\x{206A}-\x{206F}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2CEF}-\x{2CF1}\x{2D7F}\x{2DE0}-\x{2DFF}\x{302A}-\x{302D}\x{3099}-\x{309A}\x{A66F}\x{A670}-\x{A672}\x{A674}-\x{A67D}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A82C}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}-\x{A9BD}\x{A9E5}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AAEC}-\x{AAED}\x{AAF6}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1E}\x{FE00}-\x{FE0F}\x{FE20}-\x{FE2F}\x{FEFF}\x{FFF9}-\x{FFFB}\x{101FD}\x{102E0}\x{10376}-\x{1037A}\x{10A01}-\x{10A03}\x{10A05}-\x{10A06}\x{10A0C}-\x{10A0F}\x{10A38}-\x{10A3A}\x{10A3F}\x{10AE5}-\x{10AE6}\x{10D24}-\x{10D27}\x{10EAB}-\x{10EAC}\x{10F46}-\x{10F50}\x{11001}\x{11038}-\x{11046}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{111CF}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{1193B}-\x{1193C}\x{1193E}\x{11943}\x{119D4}-\x{119D7}\x{119DA}-\x{119DB}\x{119E0}\x{11A01}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C3F}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{13430}-\x{13438}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16F4F}\x{16F8F}-\x{16F92}\x{16FE4}\x{1BC9D}-\x{1BC9E}\x{1BCA0}-\x{1BCA3}\x{1D167}-\x{1D169}\x{1D173}-\x{1D17A}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D242}-\x{1D244}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E130}-\x{1E136}\x{1E2EC}-\x{1E2EF}\x{1E8D0}-\x{1E8D6}\x{1E944}-\x{1E94A}\x{1E94B}\x{E0001}\x{E0020}-\x{E007F}\x{E0100}-\x{E01EF}]*)[\x{0622}-\x{0625}\x{0627}\x{0629}\x{062F}-\x{0632}\x{0648}\x{0671}-\x{0673}\x{0675}-\x{0677}\x{0688}-\x{0699}\x{06C0}\x{06C3}-\x{06CB}\x{06CD}\x{06CF}\x{06D2}-\x{06D3}\x{06D5}\x{06EE}-\x{06EF}\x{0710}\x{0715}-\x{0719}\x{071E}\x{0728}\x{072A}\x{072C}\x{072F}\x{074D}\x{0759}-\x{075B}\x{076B}-\x{076C}\x{0771}\x{0773}-\x{0774}\x{0778}-\x{0779}\x{0840}\x{0846}-\x{0847}\x{0849}\x{0854}\x{0856}-\x{0858}\x{0867}\x{0869}-\x{086A}\x{08AA}-\x{08AC}\x{08AE}\x{08B1}-\x{08B2}\x{08B9}\x{10AC5}\x{10AC7}\x{10AC9}-\x{10ACA}\x{10ACE}-\x{10AD2}\x{10ADD}\x{10AE1}\x{10AE4}\x{10AEF}\x{10B81}\x{10B83}-\x{10B85}\x{10B89}\x{10B8C}\x{10B8E}-\x{10B8F}\x{10B91}\x{10BA9}-\x{10BAC}\x{10D22}\x{10F33}\x{10F54}\x{10FB4}-\x{10FB6}\x{10FB9}-\x{10FBA}\x{10FBD}\x{10FC2}-\x{10FC3}\x{10FC9}\x{0620}\x{0626}\x{0628}\x{062A}-\x{062E}\x{0633}-\x{063F}\x{0641}-\x{0647}\x{0649}-\x{064A}\x{066E}-\x{066F}\x{0678}-\x{0687}\x{069A}-\x{06BF}\x{06C1}-\x{06C2}\x{06CC}\x{06CE}\x{06D0}-\x{06D1}\x{06FA}-\x{06FC}\x{06FF}\x{0712}-\x{0714}\x{071A}-\x{071D}\x{071F}-\x{0727}\x{0729}\x{072B}\x{072D}-\x{072E}\x{074E}-\x{0758}\x{075C}-\x{076A}\x{076D}-\x{0770}\x{0772}\x{0775}-\x{0777}\x{077A}-\x{077F}\x{07CA}-\x{07EA}\x{0841}-\x{0845}\x{0848}\x{084A}-\x{0853}\x{0855}\x{0860}\x{0862}-\x{0865}\x{0868}\x{08A0}-\x{08A9}\x{08AF}-\x{08B0}\x{08B3}-\x{08B4}\x{08B6}-\x{08B8}\x{08BA}-\x{08C7}\x{1807}\x{1820}-\x{1842}\x{1843}\x{1844}-\x{1878}\x{1887}-\x{18A8}\x{18AA}\x{A840}-\x{A871}\x{10AC0}-\x{10AC4}\x{10AD3}-\x{10AD6}\x{10AD8}-\x{10ADC}\x{10ADE}-\x{10AE0}\x{10AEB}-\x{10AEE}\x{10B80}\x{10B82}\x{10B86}-\x{10B88}\x{10B8A}-\x{10B8B}\x{10B8D}\x{10B90}\x{10BAD}-\x{10BAE}\x{10D01}-\x{10D21}\x{10D23}\x{10F30}-\x{10F32}\x{10F34}-\x{10F44}\x{10F51}-\x{10F53}\x{10FB0}\x{10FB2}-\x{10FB3}\x{10FB8}\x{10FBB}-\x{10FBC}\x{10FBE}-\x{10FBF}\x{10FC1}\x{10FC4}\x{10FCA}\x{1E900}-\x{1E943}]/u';
+}
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/deviation.php b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/deviation.php
new file mode 100644
index 00000000..0bbd3356
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/deviation.php
@@ -0,0 +1,8 @@
+ 'ss',
+ 962 => 'σ',
+ 8204 => '',
+ 8205 => '',
+);
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed.php b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed.php
new file mode 100644
index 00000000..25a5f564
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed.php
@@ -0,0 +1,2638 @@
+ true,
+ 889 => true,
+ 896 => true,
+ 897 => true,
+ 898 => true,
+ 899 => true,
+ 907 => true,
+ 909 => true,
+ 930 => true,
+ 1216 => true,
+ 1328 => true,
+ 1367 => true,
+ 1368 => true,
+ 1419 => true,
+ 1420 => true,
+ 1424 => true,
+ 1480 => true,
+ 1481 => true,
+ 1482 => true,
+ 1483 => true,
+ 1484 => true,
+ 1485 => true,
+ 1486 => true,
+ 1487 => true,
+ 1515 => true,
+ 1516 => true,
+ 1517 => true,
+ 1518 => true,
+ 1525 => true,
+ 1526 => true,
+ 1527 => true,
+ 1528 => true,
+ 1529 => true,
+ 1530 => true,
+ 1531 => true,
+ 1532 => true,
+ 1533 => true,
+ 1534 => true,
+ 1535 => true,
+ 1536 => true,
+ 1537 => true,
+ 1538 => true,
+ 1539 => true,
+ 1540 => true,
+ 1541 => true,
+ 1564 => true,
+ 1565 => true,
+ 1757 => true,
+ 1806 => true,
+ 1807 => true,
+ 1867 => true,
+ 1868 => true,
+ 1970 => true,
+ 1971 => true,
+ 1972 => true,
+ 1973 => true,
+ 1974 => true,
+ 1975 => true,
+ 1976 => true,
+ 1977 => true,
+ 1978 => true,
+ 1979 => true,
+ 1980 => true,
+ 1981 => true,
+ 1982 => true,
+ 1983 => true,
+ 2043 => true,
+ 2044 => true,
+ 2094 => true,
+ 2095 => true,
+ 2111 => true,
+ 2140 => true,
+ 2141 => true,
+ 2143 => true,
+ 2229 => true,
+ 2248 => true,
+ 2249 => true,
+ 2250 => true,
+ 2251 => true,
+ 2252 => true,
+ 2253 => true,
+ 2254 => true,
+ 2255 => true,
+ 2256 => true,
+ 2257 => true,
+ 2258 => true,
+ 2274 => true,
+ 2436 => true,
+ 2445 => true,
+ 2446 => true,
+ 2449 => true,
+ 2450 => true,
+ 2473 => true,
+ 2481 => true,
+ 2483 => true,
+ 2484 => true,
+ 2485 => true,
+ 2490 => true,
+ 2491 => true,
+ 2501 => true,
+ 2502 => true,
+ 2505 => true,
+ 2506 => true,
+ 2511 => true,
+ 2512 => true,
+ 2513 => true,
+ 2514 => true,
+ 2515 => true,
+ 2516 => true,
+ 2517 => true,
+ 2518 => true,
+ 2520 => true,
+ 2521 => true,
+ 2522 => true,
+ 2523 => true,
+ 2526 => true,
+ 2532 => true,
+ 2533 => true,
+ 2559 => true,
+ 2560 => true,
+ 2564 => true,
+ 2571 => true,
+ 2572 => true,
+ 2573 => true,
+ 2574 => true,
+ 2577 => true,
+ 2578 => true,
+ 2601 => true,
+ 2609 => true,
+ 2612 => true,
+ 2615 => true,
+ 2618 => true,
+ 2619 => true,
+ 2621 => true,
+ 2627 => true,
+ 2628 => true,
+ 2629 => true,
+ 2630 => true,
+ 2633 => true,
+ 2634 => true,
+ 2638 => true,
+ 2639 => true,
+ 2640 => true,
+ 2642 => true,
+ 2643 => true,
+ 2644 => true,
+ 2645 => true,
+ 2646 => true,
+ 2647 => true,
+ 2648 => true,
+ 2653 => true,
+ 2655 => true,
+ 2656 => true,
+ 2657 => true,
+ 2658 => true,
+ 2659 => true,
+ 2660 => true,
+ 2661 => true,
+ 2679 => true,
+ 2680 => true,
+ 2681 => true,
+ 2682 => true,
+ 2683 => true,
+ 2684 => true,
+ 2685 => true,
+ 2686 => true,
+ 2687 => true,
+ 2688 => true,
+ 2692 => true,
+ 2702 => true,
+ 2706 => true,
+ 2729 => true,
+ 2737 => true,
+ 2740 => true,
+ 2746 => true,
+ 2747 => true,
+ 2758 => true,
+ 2762 => true,
+ 2766 => true,
+ 2767 => true,
+ 2769 => true,
+ 2770 => true,
+ 2771 => true,
+ 2772 => true,
+ 2773 => true,
+ 2774 => true,
+ 2775 => true,
+ 2776 => true,
+ 2777 => true,
+ 2778 => true,
+ 2779 => true,
+ 2780 => true,
+ 2781 => true,
+ 2782 => true,
+ 2783 => true,
+ 2788 => true,
+ 2789 => true,
+ 2802 => true,
+ 2803 => true,
+ 2804 => true,
+ 2805 => true,
+ 2806 => true,
+ 2807 => true,
+ 2808 => true,
+ 2816 => true,
+ 2820 => true,
+ 2829 => true,
+ 2830 => true,
+ 2833 => true,
+ 2834 => true,
+ 2857 => true,
+ 2865 => true,
+ 2868 => true,
+ 2874 => true,
+ 2875 => true,
+ 2885 => true,
+ 2886 => true,
+ 2889 => true,
+ 2890 => true,
+ 2894 => true,
+ 2895 => true,
+ 2896 => true,
+ 2897 => true,
+ 2898 => true,
+ 2899 => true,
+ 2900 => true,
+ 2904 => true,
+ 2905 => true,
+ 2906 => true,
+ 2907 => true,
+ 2910 => true,
+ 2916 => true,
+ 2917 => true,
+ 2936 => true,
+ 2937 => true,
+ 2938 => true,
+ 2939 => true,
+ 2940 => true,
+ 2941 => true,
+ 2942 => true,
+ 2943 => true,
+ 2944 => true,
+ 2945 => true,
+ 2948 => true,
+ 2955 => true,
+ 2956 => true,
+ 2957 => true,
+ 2961 => true,
+ 2966 => true,
+ 2967 => true,
+ 2968 => true,
+ 2971 => true,
+ 2973 => true,
+ 2976 => true,
+ 2977 => true,
+ 2978 => true,
+ 2981 => true,
+ 2982 => true,
+ 2983 => true,
+ 2987 => true,
+ 2988 => true,
+ 2989 => true,
+ 3002 => true,
+ 3003 => true,
+ 3004 => true,
+ 3005 => true,
+ 3011 => true,
+ 3012 => true,
+ 3013 => true,
+ 3017 => true,
+ 3022 => true,
+ 3023 => true,
+ 3025 => true,
+ 3026 => true,
+ 3027 => true,
+ 3028 => true,
+ 3029 => true,
+ 3030 => true,
+ 3032 => true,
+ 3033 => true,
+ 3034 => true,
+ 3035 => true,
+ 3036 => true,
+ 3037 => true,
+ 3038 => true,
+ 3039 => true,
+ 3040 => true,
+ 3041 => true,
+ 3042 => true,
+ 3043 => true,
+ 3044 => true,
+ 3045 => true,
+ 3067 => true,
+ 3068 => true,
+ 3069 => true,
+ 3070 => true,
+ 3071 => true,
+ 3085 => true,
+ 3089 => true,
+ 3113 => true,
+ 3130 => true,
+ 3131 => true,
+ 3132 => true,
+ 3141 => true,
+ 3145 => true,
+ 3150 => true,
+ 3151 => true,
+ 3152 => true,
+ 3153 => true,
+ 3154 => true,
+ 3155 => true,
+ 3156 => true,
+ 3159 => true,
+ 3163 => true,
+ 3164 => true,
+ 3165 => true,
+ 3166 => true,
+ 3167 => true,
+ 3172 => true,
+ 3173 => true,
+ 3184 => true,
+ 3185 => true,
+ 3186 => true,
+ 3187 => true,
+ 3188 => true,
+ 3189 => true,
+ 3190 => true,
+ 3213 => true,
+ 3217 => true,
+ 3241 => true,
+ 3252 => true,
+ 3258 => true,
+ 3259 => true,
+ 3269 => true,
+ 3273 => true,
+ 3278 => true,
+ 3279 => true,
+ 3280 => true,
+ 3281 => true,
+ 3282 => true,
+ 3283 => true,
+ 3284 => true,
+ 3287 => true,
+ 3288 => true,
+ 3289 => true,
+ 3290 => true,
+ 3291 => true,
+ 3292 => true,
+ 3293 => true,
+ 3295 => true,
+ 3300 => true,
+ 3301 => true,
+ 3312 => true,
+ 3315 => true,
+ 3316 => true,
+ 3317 => true,
+ 3318 => true,
+ 3319 => true,
+ 3320 => true,
+ 3321 => true,
+ 3322 => true,
+ 3323 => true,
+ 3324 => true,
+ 3325 => true,
+ 3326 => true,
+ 3327 => true,
+ 3341 => true,
+ 3345 => true,
+ 3397 => true,
+ 3401 => true,
+ 3408 => true,
+ 3409 => true,
+ 3410 => true,
+ 3411 => true,
+ 3428 => true,
+ 3429 => true,
+ 3456 => true,
+ 3460 => true,
+ 3479 => true,
+ 3480 => true,
+ 3481 => true,
+ 3506 => true,
+ 3516 => true,
+ 3518 => true,
+ 3519 => true,
+ 3527 => true,
+ 3528 => true,
+ 3529 => true,
+ 3531 => true,
+ 3532 => true,
+ 3533 => true,
+ 3534 => true,
+ 3541 => true,
+ 3543 => true,
+ 3552 => true,
+ 3553 => true,
+ 3554 => true,
+ 3555 => true,
+ 3556 => true,
+ 3557 => true,
+ 3568 => true,
+ 3569 => true,
+ 3573 => true,
+ 3574 => true,
+ 3575 => true,
+ 3576 => true,
+ 3577 => true,
+ 3578 => true,
+ 3579 => true,
+ 3580 => true,
+ 3581 => true,
+ 3582 => true,
+ 3583 => true,
+ 3584 => true,
+ 3643 => true,
+ 3644 => true,
+ 3645 => true,
+ 3646 => true,
+ 3715 => true,
+ 3717 => true,
+ 3723 => true,
+ 3748 => true,
+ 3750 => true,
+ 3774 => true,
+ 3775 => true,
+ 3781 => true,
+ 3783 => true,
+ 3790 => true,
+ 3791 => true,
+ 3802 => true,
+ 3803 => true,
+ 3912 => true,
+ 3949 => true,
+ 3950 => true,
+ 3951 => true,
+ 3952 => true,
+ 3992 => true,
+ 4029 => true,
+ 4045 => true,
+ 4294 => true,
+ 4296 => true,
+ 4297 => true,
+ 4298 => true,
+ 4299 => true,
+ 4300 => true,
+ 4302 => true,
+ 4303 => true,
+ 4447 => true,
+ 4448 => true,
+ 4681 => true,
+ 4686 => true,
+ 4687 => true,
+ 4695 => true,
+ 4697 => true,
+ 4702 => true,
+ 4703 => true,
+ 4745 => true,
+ 4750 => true,
+ 4751 => true,
+ 4785 => true,
+ 4790 => true,
+ 4791 => true,
+ 4799 => true,
+ 4801 => true,
+ 4806 => true,
+ 4807 => true,
+ 4823 => true,
+ 4881 => true,
+ 4886 => true,
+ 4887 => true,
+ 4955 => true,
+ 4956 => true,
+ 4989 => true,
+ 4990 => true,
+ 4991 => true,
+ 5018 => true,
+ 5019 => true,
+ 5020 => true,
+ 5021 => true,
+ 5022 => true,
+ 5023 => true,
+ 5110 => true,
+ 5111 => true,
+ 5118 => true,
+ 5119 => true,
+ 5760 => true,
+ 5789 => true,
+ 5790 => true,
+ 5791 => true,
+ 5881 => true,
+ 5882 => true,
+ 5883 => true,
+ 5884 => true,
+ 5885 => true,
+ 5886 => true,
+ 5887 => true,
+ 5901 => true,
+ 5909 => true,
+ 5910 => true,
+ 5911 => true,
+ 5912 => true,
+ 5913 => true,
+ 5914 => true,
+ 5915 => true,
+ 5916 => true,
+ 5917 => true,
+ 5918 => true,
+ 5919 => true,
+ 5943 => true,
+ 5944 => true,
+ 5945 => true,
+ 5946 => true,
+ 5947 => true,
+ 5948 => true,
+ 5949 => true,
+ 5950 => true,
+ 5951 => true,
+ 5972 => true,
+ 5973 => true,
+ 5974 => true,
+ 5975 => true,
+ 5976 => true,
+ 5977 => true,
+ 5978 => true,
+ 5979 => true,
+ 5980 => true,
+ 5981 => true,
+ 5982 => true,
+ 5983 => true,
+ 5997 => true,
+ 6001 => true,
+ 6004 => true,
+ 6005 => true,
+ 6006 => true,
+ 6007 => true,
+ 6008 => true,
+ 6009 => true,
+ 6010 => true,
+ 6011 => true,
+ 6012 => true,
+ 6013 => true,
+ 6014 => true,
+ 6015 => true,
+ 6068 => true,
+ 6069 => true,
+ 6110 => true,
+ 6111 => true,
+ 6122 => true,
+ 6123 => true,
+ 6124 => true,
+ 6125 => true,
+ 6126 => true,
+ 6127 => true,
+ 6138 => true,
+ 6139 => true,
+ 6140 => true,
+ 6141 => true,
+ 6142 => true,
+ 6143 => true,
+ 6150 => true,
+ 6158 => true,
+ 6159 => true,
+ 6170 => true,
+ 6171 => true,
+ 6172 => true,
+ 6173 => true,
+ 6174 => true,
+ 6175 => true,
+ 6265 => true,
+ 6266 => true,
+ 6267 => true,
+ 6268 => true,
+ 6269 => true,
+ 6270 => true,
+ 6271 => true,
+ 6315 => true,
+ 6316 => true,
+ 6317 => true,
+ 6318 => true,
+ 6319 => true,
+ 6390 => true,
+ 6391 => true,
+ 6392 => true,
+ 6393 => true,
+ 6394 => true,
+ 6395 => true,
+ 6396 => true,
+ 6397 => true,
+ 6398 => true,
+ 6399 => true,
+ 6431 => true,
+ 6444 => true,
+ 6445 => true,
+ 6446 => true,
+ 6447 => true,
+ 6460 => true,
+ 6461 => true,
+ 6462 => true,
+ 6463 => true,
+ 6465 => true,
+ 6466 => true,
+ 6467 => true,
+ 6510 => true,
+ 6511 => true,
+ 6517 => true,
+ 6518 => true,
+ 6519 => true,
+ 6520 => true,
+ 6521 => true,
+ 6522 => true,
+ 6523 => true,
+ 6524 => true,
+ 6525 => true,
+ 6526 => true,
+ 6527 => true,
+ 6572 => true,
+ 6573 => true,
+ 6574 => true,
+ 6575 => true,
+ 6602 => true,
+ 6603 => true,
+ 6604 => true,
+ 6605 => true,
+ 6606 => true,
+ 6607 => true,
+ 6619 => true,
+ 6620 => true,
+ 6621 => true,
+ 6684 => true,
+ 6685 => true,
+ 6751 => true,
+ 6781 => true,
+ 6782 => true,
+ 6794 => true,
+ 6795 => true,
+ 6796 => true,
+ 6797 => true,
+ 6798 => true,
+ 6799 => true,
+ 6810 => true,
+ 6811 => true,
+ 6812 => true,
+ 6813 => true,
+ 6814 => true,
+ 6815 => true,
+ 6830 => true,
+ 6831 => true,
+ 6988 => true,
+ 6989 => true,
+ 6990 => true,
+ 6991 => true,
+ 7037 => true,
+ 7038 => true,
+ 7039 => true,
+ 7156 => true,
+ 7157 => true,
+ 7158 => true,
+ 7159 => true,
+ 7160 => true,
+ 7161 => true,
+ 7162 => true,
+ 7163 => true,
+ 7224 => true,
+ 7225 => true,
+ 7226 => true,
+ 7242 => true,
+ 7243 => true,
+ 7244 => true,
+ 7305 => true,
+ 7306 => true,
+ 7307 => true,
+ 7308 => true,
+ 7309 => true,
+ 7310 => true,
+ 7311 => true,
+ 7355 => true,
+ 7356 => true,
+ 7368 => true,
+ 7369 => true,
+ 7370 => true,
+ 7371 => true,
+ 7372 => true,
+ 7373 => true,
+ 7374 => true,
+ 7375 => true,
+ 7419 => true,
+ 7420 => true,
+ 7421 => true,
+ 7422 => true,
+ 7423 => true,
+ 7674 => true,
+ 7958 => true,
+ 7959 => true,
+ 7966 => true,
+ 7967 => true,
+ 8006 => true,
+ 8007 => true,
+ 8014 => true,
+ 8015 => true,
+ 8024 => true,
+ 8026 => true,
+ 8028 => true,
+ 8030 => true,
+ 8062 => true,
+ 8063 => true,
+ 8117 => true,
+ 8133 => true,
+ 8148 => true,
+ 8149 => true,
+ 8156 => true,
+ 8176 => true,
+ 8177 => true,
+ 8181 => true,
+ 8191 => true,
+ 8206 => true,
+ 8207 => true,
+ 8228 => true,
+ 8229 => true,
+ 8230 => true,
+ 8232 => true,
+ 8233 => true,
+ 8234 => true,
+ 8235 => true,
+ 8236 => true,
+ 8237 => true,
+ 8238 => true,
+ 8289 => true,
+ 8290 => true,
+ 8291 => true,
+ 8293 => true,
+ 8294 => true,
+ 8295 => true,
+ 8296 => true,
+ 8297 => true,
+ 8298 => true,
+ 8299 => true,
+ 8300 => true,
+ 8301 => true,
+ 8302 => true,
+ 8303 => true,
+ 8306 => true,
+ 8307 => true,
+ 8335 => true,
+ 8349 => true,
+ 8350 => true,
+ 8351 => true,
+ 8384 => true,
+ 8385 => true,
+ 8386 => true,
+ 8387 => true,
+ 8388 => true,
+ 8389 => true,
+ 8390 => true,
+ 8391 => true,
+ 8392 => true,
+ 8393 => true,
+ 8394 => true,
+ 8395 => true,
+ 8396 => true,
+ 8397 => true,
+ 8398 => true,
+ 8399 => true,
+ 8433 => true,
+ 8434 => true,
+ 8435 => true,
+ 8436 => true,
+ 8437 => true,
+ 8438 => true,
+ 8439 => true,
+ 8440 => true,
+ 8441 => true,
+ 8442 => true,
+ 8443 => true,
+ 8444 => true,
+ 8445 => true,
+ 8446 => true,
+ 8447 => true,
+ 8498 => true,
+ 8579 => true,
+ 8588 => true,
+ 8589 => true,
+ 8590 => true,
+ 8591 => true,
+ 9255 => true,
+ 9256 => true,
+ 9257 => true,
+ 9258 => true,
+ 9259 => true,
+ 9260 => true,
+ 9261 => true,
+ 9262 => true,
+ 9263 => true,
+ 9264 => true,
+ 9265 => true,
+ 9266 => true,
+ 9267 => true,
+ 9268 => true,
+ 9269 => true,
+ 9270 => true,
+ 9271 => true,
+ 9272 => true,
+ 9273 => true,
+ 9274 => true,
+ 9275 => true,
+ 9276 => true,
+ 9277 => true,
+ 9278 => true,
+ 9279 => true,
+ 9291 => true,
+ 9292 => true,
+ 9293 => true,
+ 9294 => true,
+ 9295 => true,
+ 9296 => true,
+ 9297 => true,
+ 9298 => true,
+ 9299 => true,
+ 9300 => true,
+ 9301 => true,
+ 9302 => true,
+ 9303 => true,
+ 9304 => true,
+ 9305 => true,
+ 9306 => true,
+ 9307 => true,
+ 9308 => true,
+ 9309 => true,
+ 9310 => true,
+ 9311 => true,
+ 9352 => true,
+ 9353 => true,
+ 9354 => true,
+ 9355 => true,
+ 9356 => true,
+ 9357 => true,
+ 9358 => true,
+ 9359 => true,
+ 9360 => true,
+ 9361 => true,
+ 9362 => true,
+ 9363 => true,
+ 9364 => true,
+ 9365 => true,
+ 9366 => true,
+ 9367 => true,
+ 9368 => true,
+ 9369 => true,
+ 9370 => true,
+ 9371 => true,
+ 11124 => true,
+ 11125 => true,
+ 11158 => true,
+ 11311 => true,
+ 11359 => true,
+ 11508 => true,
+ 11509 => true,
+ 11510 => true,
+ 11511 => true,
+ 11512 => true,
+ 11558 => true,
+ 11560 => true,
+ 11561 => true,
+ 11562 => true,
+ 11563 => true,
+ 11564 => true,
+ 11566 => true,
+ 11567 => true,
+ 11624 => true,
+ 11625 => true,
+ 11626 => true,
+ 11627 => true,
+ 11628 => true,
+ 11629 => true,
+ 11630 => true,
+ 11633 => true,
+ 11634 => true,
+ 11635 => true,
+ 11636 => true,
+ 11637 => true,
+ 11638 => true,
+ 11639 => true,
+ 11640 => true,
+ 11641 => true,
+ 11642 => true,
+ 11643 => true,
+ 11644 => true,
+ 11645 => true,
+ 11646 => true,
+ 11671 => true,
+ 11672 => true,
+ 11673 => true,
+ 11674 => true,
+ 11675 => true,
+ 11676 => true,
+ 11677 => true,
+ 11678 => true,
+ 11679 => true,
+ 11687 => true,
+ 11695 => true,
+ 11703 => true,
+ 11711 => true,
+ 11719 => true,
+ 11727 => true,
+ 11735 => true,
+ 11743 => true,
+ 11930 => true,
+ 12020 => true,
+ 12021 => true,
+ 12022 => true,
+ 12023 => true,
+ 12024 => true,
+ 12025 => true,
+ 12026 => true,
+ 12027 => true,
+ 12028 => true,
+ 12029 => true,
+ 12030 => true,
+ 12031 => true,
+ 12246 => true,
+ 12247 => true,
+ 12248 => true,
+ 12249 => true,
+ 12250 => true,
+ 12251 => true,
+ 12252 => true,
+ 12253 => true,
+ 12254 => true,
+ 12255 => true,
+ 12256 => true,
+ 12257 => true,
+ 12258 => true,
+ 12259 => true,
+ 12260 => true,
+ 12261 => true,
+ 12262 => true,
+ 12263 => true,
+ 12264 => true,
+ 12265 => true,
+ 12266 => true,
+ 12267 => true,
+ 12268 => true,
+ 12269 => true,
+ 12270 => true,
+ 12271 => true,
+ 12272 => true,
+ 12273 => true,
+ 12274 => true,
+ 12275 => true,
+ 12276 => true,
+ 12277 => true,
+ 12278 => true,
+ 12279 => true,
+ 12280 => true,
+ 12281 => true,
+ 12282 => true,
+ 12283 => true,
+ 12284 => true,
+ 12285 => true,
+ 12286 => true,
+ 12287 => true,
+ 12352 => true,
+ 12439 => true,
+ 12440 => true,
+ 12544 => true,
+ 12545 => true,
+ 12546 => true,
+ 12547 => true,
+ 12548 => true,
+ 12592 => true,
+ 12644 => true,
+ 12687 => true,
+ 12772 => true,
+ 12773 => true,
+ 12774 => true,
+ 12775 => true,
+ 12776 => true,
+ 12777 => true,
+ 12778 => true,
+ 12779 => true,
+ 12780 => true,
+ 12781 => true,
+ 12782 => true,
+ 12783 => true,
+ 12831 => true,
+ 13250 => true,
+ 13255 => true,
+ 13272 => true,
+ 40957 => true,
+ 40958 => true,
+ 40959 => true,
+ 42125 => true,
+ 42126 => true,
+ 42127 => true,
+ 42183 => true,
+ 42184 => true,
+ 42185 => true,
+ 42186 => true,
+ 42187 => true,
+ 42188 => true,
+ 42189 => true,
+ 42190 => true,
+ 42191 => true,
+ 42540 => true,
+ 42541 => true,
+ 42542 => true,
+ 42543 => true,
+ 42544 => true,
+ 42545 => true,
+ 42546 => true,
+ 42547 => true,
+ 42548 => true,
+ 42549 => true,
+ 42550 => true,
+ 42551 => true,
+ 42552 => true,
+ 42553 => true,
+ 42554 => true,
+ 42555 => true,
+ 42556 => true,
+ 42557 => true,
+ 42558 => true,
+ 42559 => true,
+ 42744 => true,
+ 42745 => true,
+ 42746 => true,
+ 42747 => true,
+ 42748 => true,
+ 42749 => true,
+ 42750 => true,
+ 42751 => true,
+ 42944 => true,
+ 42945 => true,
+ 43053 => true,
+ 43054 => true,
+ 43055 => true,
+ 43066 => true,
+ 43067 => true,
+ 43068 => true,
+ 43069 => true,
+ 43070 => true,
+ 43071 => true,
+ 43128 => true,
+ 43129 => true,
+ 43130 => true,
+ 43131 => true,
+ 43132 => true,
+ 43133 => true,
+ 43134 => true,
+ 43135 => true,
+ 43206 => true,
+ 43207 => true,
+ 43208 => true,
+ 43209 => true,
+ 43210 => true,
+ 43211 => true,
+ 43212 => true,
+ 43213 => true,
+ 43226 => true,
+ 43227 => true,
+ 43228 => true,
+ 43229 => true,
+ 43230 => true,
+ 43231 => true,
+ 43348 => true,
+ 43349 => true,
+ 43350 => true,
+ 43351 => true,
+ 43352 => true,
+ 43353 => true,
+ 43354 => true,
+ 43355 => true,
+ 43356 => true,
+ 43357 => true,
+ 43358 => true,
+ 43389 => true,
+ 43390 => true,
+ 43391 => true,
+ 43470 => true,
+ 43482 => true,
+ 43483 => true,
+ 43484 => true,
+ 43485 => true,
+ 43519 => true,
+ 43575 => true,
+ 43576 => true,
+ 43577 => true,
+ 43578 => true,
+ 43579 => true,
+ 43580 => true,
+ 43581 => true,
+ 43582 => true,
+ 43583 => true,
+ 43598 => true,
+ 43599 => true,
+ 43610 => true,
+ 43611 => true,
+ 43715 => true,
+ 43716 => true,
+ 43717 => true,
+ 43718 => true,
+ 43719 => true,
+ 43720 => true,
+ 43721 => true,
+ 43722 => true,
+ 43723 => true,
+ 43724 => true,
+ 43725 => true,
+ 43726 => true,
+ 43727 => true,
+ 43728 => true,
+ 43729 => true,
+ 43730 => true,
+ 43731 => true,
+ 43732 => true,
+ 43733 => true,
+ 43734 => true,
+ 43735 => true,
+ 43736 => true,
+ 43737 => true,
+ 43738 => true,
+ 43767 => true,
+ 43768 => true,
+ 43769 => true,
+ 43770 => true,
+ 43771 => true,
+ 43772 => true,
+ 43773 => true,
+ 43774 => true,
+ 43775 => true,
+ 43776 => true,
+ 43783 => true,
+ 43784 => true,
+ 43791 => true,
+ 43792 => true,
+ 43799 => true,
+ 43800 => true,
+ 43801 => true,
+ 43802 => true,
+ 43803 => true,
+ 43804 => true,
+ 43805 => true,
+ 43806 => true,
+ 43807 => true,
+ 43815 => true,
+ 43823 => true,
+ 43884 => true,
+ 43885 => true,
+ 43886 => true,
+ 43887 => true,
+ 44014 => true,
+ 44015 => true,
+ 44026 => true,
+ 44027 => true,
+ 44028 => true,
+ 44029 => true,
+ 44030 => true,
+ 44031 => true,
+ 55204 => true,
+ 55205 => true,
+ 55206 => true,
+ 55207 => true,
+ 55208 => true,
+ 55209 => true,
+ 55210 => true,
+ 55211 => true,
+ 55212 => true,
+ 55213 => true,
+ 55214 => true,
+ 55215 => true,
+ 55239 => true,
+ 55240 => true,
+ 55241 => true,
+ 55242 => true,
+ 55292 => true,
+ 55293 => true,
+ 55294 => true,
+ 55295 => true,
+ 64110 => true,
+ 64111 => true,
+ 64263 => true,
+ 64264 => true,
+ 64265 => true,
+ 64266 => true,
+ 64267 => true,
+ 64268 => true,
+ 64269 => true,
+ 64270 => true,
+ 64271 => true,
+ 64272 => true,
+ 64273 => true,
+ 64274 => true,
+ 64280 => true,
+ 64281 => true,
+ 64282 => true,
+ 64283 => true,
+ 64284 => true,
+ 64311 => true,
+ 64317 => true,
+ 64319 => true,
+ 64322 => true,
+ 64325 => true,
+ 64450 => true,
+ 64451 => true,
+ 64452 => true,
+ 64453 => true,
+ 64454 => true,
+ 64455 => true,
+ 64456 => true,
+ 64457 => true,
+ 64458 => true,
+ 64459 => true,
+ 64460 => true,
+ 64461 => true,
+ 64462 => true,
+ 64463 => true,
+ 64464 => true,
+ 64465 => true,
+ 64466 => true,
+ 64832 => true,
+ 64833 => true,
+ 64834 => true,
+ 64835 => true,
+ 64836 => true,
+ 64837 => true,
+ 64838 => true,
+ 64839 => true,
+ 64840 => true,
+ 64841 => true,
+ 64842 => true,
+ 64843 => true,
+ 64844 => true,
+ 64845 => true,
+ 64846 => true,
+ 64847 => true,
+ 64912 => true,
+ 64913 => true,
+ 64968 => true,
+ 64969 => true,
+ 64970 => true,
+ 64971 => true,
+ 64972 => true,
+ 64973 => true,
+ 64974 => true,
+ 64975 => true,
+ 65022 => true,
+ 65023 => true,
+ 65042 => true,
+ 65049 => true,
+ 65050 => true,
+ 65051 => true,
+ 65052 => true,
+ 65053 => true,
+ 65054 => true,
+ 65055 => true,
+ 65072 => true,
+ 65106 => true,
+ 65107 => true,
+ 65127 => true,
+ 65132 => true,
+ 65133 => true,
+ 65134 => true,
+ 65135 => true,
+ 65141 => true,
+ 65277 => true,
+ 65278 => true,
+ 65280 => true,
+ 65440 => true,
+ 65471 => true,
+ 65472 => true,
+ 65473 => true,
+ 65480 => true,
+ 65481 => true,
+ 65488 => true,
+ 65489 => true,
+ 65496 => true,
+ 65497 => true,
+ 65501 => true,
+ 65502 => true,
+ 65503 => true,
+ 65511 => true,
+ 65519 => true,
+ 65520 => true,
+ 65521 => true,
+ 65522 => true,
+ 65523 => true,
+ 65524 => true,
+ 65525 => true,
+ 65526 => true,
+ 65527 => true,
+ 65528 => true,
+ 65529 => true,
+ 65530 => true,
+ 65531 => true,
+ 65532 => true,
+ 65533 => true,
+ 65534 => true,
+ 65535 => true,
+ 65548 => true,
+ 65575 => true,
+ 65595 => true,
+ 65598 => true,
+ 65614 => true,
+ 65615 => true,
+ 65787 => true,
+ 65788 => true,
+ 65789 => true,
+ 65790 => true,
+ 65791 => true,
+ 65795 => true,
+ 65796 => true,
+ 65797 => true,
+ 65798 => true,
+ 65844 => true,
+ 65845 => true,
+ 65846 => true,
+ 65935 => true,
+ 65949 => true,
+ 65950 => true,
+ 65951 => true,
+ 66205 => true,
+ 66206 => true,
+ 66207 => true,
+ 66257 => true,
+ 66258 => true,
+ 66259 => true,
+ 66260 => true,
+ 66261 => true,
+ 66262 => true,
+ 66263 => true,
+ 66264 => true,
+ 66265 => true,
+ 66266 => true,
+ 66267 => true,
+ 66268 => true,
+ 66269 => true,
+ 66270 => true,
+ 66271 => true,
+ 66300 => true,
+ 66301 => true,
+ 66302 => true,
+ 66303 => true,
+ 66340 => true,
+ 66341 => true,
+ 66342 => true,
+ 66343 => true,
+ 66344 => true,
+ 66345 => true,
+ 66346 => true,
+ 66347 => true,
+ 66348 => true,
+ 66379 => true,
+ 66380 => true,
+ 66381 => true,
+ 66382 => true,
+ 66383 => true,
+ 66427 => true,
+ 66428 => true,
+ 66429 => true,
+ 66430 => true,
+ 66431 => true,
+ 66462 => true,
+ 66500 => true,
+ 66501 => true,
+ 66502 => true,
+ 66503 => true,
+ 66718 => true,
+ 66719 => true,
+ 66730 => true,
+ 66731 => true,
+ 66732 => true,
+ 66733 => true,
+ 66734 => true,
+ 66735 => true,
+ 66772 => true,
+ 66773 => true,
+ 66774 => true,
+ 66775 => true,
+ 66812 => true,
+ 66813 => true,
+ 66814 => true,
+ 66815 => true,
+ 66856 => true,
+ 66857 => true,
+ 66858 => true,
+ 66859 => true,
+ 66860 => true,
+ 66861 => true,
+ 66862 => true,
+ 66863 => true,
+ 66916 => true,
+ 66917 => true,
+ 66918 => true,
+ 66919 => true,
+ 66920 => true,
+ 66921 => true,
+ 66922 => true,
+ 66923 => true,
+ 66924 => true,
+ 66925 => true,
+ 66926 => true,
+ 67383 => true,
+ 67384 => true,
+ 67385 => true,
+ 67386 => true,
+ 67387 => true,
+ 67388 => true,
+ 67389 => true,
+ 67390 => true,
+ 67391 => true,
+ 67414 => true,
+ 67415 => true,
+ 67416 => true,
+ 67417 => true,
+ 67418 => true,
+ 67419 => true,
+ 67420 => true,
+ 67421 => true,
+ 67422 => true,
+ 67423 => true,
+ 67590 => true,
+ 67591 => true,
+ 67593 => true,
+ 67638 => true,
+ 67641 => true,
+ 67642 => true,
+ 67643 => true,
+ 67645 => true,
+ 67646 => true,
+ 67670 => true,
+ 67743 => true,
+ 67744 => true,
+ 67745 => true,
+ 67746 => true,
+ 67747 => true,
+ 67748 => true,
+ 67749 => true,
+ 67750 => true,
+ 67827 => true,
+ 67830 => true,
+ 67831 => true,
+ 67832 => true,
+ 67833 => true,
+ 67834 => true,
+ 67868 => true,
+ 67869 => true,
+ 67870 => true,
+ 67898 => true,
+ 67899 => true,
+ 67900 => true,
+ 67901 => true,
+ 67902 => true,
+ 68024 => true,
+ 68025 => true,
+ 68026 => true,
+ 68027 => true,
+ 68048 => true,
+ 68049 => true,
+ 68100 => true,
+ 68103 => true,
+ 68104 => true,
+ 68105 => true,
+ 68106 => true,
+ 68107 => true,
+ 68116 => true,
+ 68120 => true,
+ 68150 => true,
+ 68151 => true,
+ 68155 => true,
+ 68156 => true,
+ 68157 => true,
+ 68158 => true,
+ 68169 => true,
+ 68170 => true,
+ 68171 => true,
+ 68172 => true,
+ 68173 => true,
+ 68174 => true,
+ 68175 => true,
+ 68185 => true,
+ 68186 => true,
+ 68187 => true,
+ 68188 => true,
+ 68189 => true,
+ 68190 => true,
+ 68191 => true,
+ 68327 => true,
+ 68328 => true,
+ 68329 => true,
+ 68330 => true,
+ 68343 => true,
+ 68344 => true,
+ 68345 => true,
+ 68346 => true,
+ 68347 => true,
+ 68348 => true,
+ 68349 => true,
+ 68350 => true,
+ 68351 => true,
+ 68406 => true,
+ 68407 => true,
+ 68408 => true,
+ 68438 => true,
+ 68439 => true,
+ 68467 => true,
+ 68468 => true,
+ 68469 => true,
+ 68470 => true,
+ 68471 => true,
+ 68498 => true,
+ 68499 => true,
+ 68500 => true,
+ 68501 => true,
+ 68502 => true,
+ 68503 => true,
+ 68504 => true,
+ 68509 => true,
+ 68510 => true,
+ 68511 => true,
+ 68512 => true,
+ 68513 => true,
+ 68514 => true,
+ 68515 => true,
+ 68516 => true,
+ 68517 => true,
+ 68518 => true,
+ 68519 => true,
+ 68520 => true,
+ 68787 => true,
+ 68788 => true,
+ 68789 => true,
+ 68790 => true,
+ 68791 => true,
+ 68792 => true,
+ 68793 => true,
+ 68794 => true,
+ 68795 => true,
+ 68796 => true,
+ 68797 => true,
+ 68798 => true,
+ 68799 => true,
+ 68851 => true,
+ 68852 => true,
+ 68853 => true,
+ 68854 => true,
+ 68855 => true,
+ 68856 => true,
+ 68857 => true,
+ 68904 => true,
+ 68905 => true,
+ 68906 => true,
+ 68907 => true,
+ 68908 => true,
+ 68909 => true,
+ 68910 => true,
+ 68911 => true,
+ 69247 => true,
+ 69290 => true,
+ 69294 => true,
+ 69295 => true,
+ 69416 => true,
+ 69417 => true,
+ 69418 => true,
+ 69419 => true,
+ 69420 => true,
+ 69421 => true,
+ 69422 => true,
+ 69423 => true,
+ 69580 => true,
+ 69581 => true,
+ 69582 => true,
+ 69583 => true,
+ 69584 => true,
+ 69585 => true,
+ 69586 => true,
+ 69587 => true,
+ 69588 => true,
+ 69589 => true,
+ 69590 => true,
+ 69591 => true,
+ 69592 => true,
+ 69593 => true,
+ 69594 => true,
+ 69595 => true,
+ 69596 => true,
+ 69597 => true,
+ 69598 => true,
+ 69599 => true,
+ 69623 => true,
+ 69624 => true,
+ 69625 => true,
+ 69626 => true,
+ 69627 => true,
+ 69628 => true,
+ 69629 => true,
+ 69630 => true,
+ 69631 => true,
+ 69710 => true,
+ 69711 => true,
+ 69712 => true,
+ 69713 => true,
+ 69744 => true,
+ 69745 => true,
+ 69746 => true,
+ 69747 => true,
+ 69748 => true,
+ 69749 => true,
+ 69750 => true,
+ 69751 => true,
+ 69752 => true,
+ 69753 => true,
+ 69754 => true,
+ 69755 => true,
+ 69756 => true,
+ 69757 => true,
+ 69758 => true,
+ 69821 => true,
+ 69826 => true,
+ 69827 => true,
+ 69828 => true,
+ 69829 => true,
+ 69830 => true,
+ 69831 => true,
+ 69832 => true,
+ 69833 => true,
+ 69834 => true,
+ 69835 => true,
+ 69836 => true,
+ 69837 => true,
+ 69838 => true,
+ 69839 => true,
+ 69865 => true,
+ 69866 => true,
+ 69867 => true,
+ 69868 => true,
+ 69869 => true,
+ 69870 => true,
+ 69871 => true,
+ 69882 => true,
+ 69883 => true,
+ 69884 => true,
+ 69885 => true,
+ 69886 => true,
+ 69887 => true,
+ 69941 => true,
+ 69960 => true,
+ 69961 => true,
+ 69962 => true,
+ 69963 => true,
+ 69964 => true,
+ 69965 => true,
+ 69966 => true,
+ 69967 => true,
+ 70007 => true,
+ 70008 => true,
+ 70009 => true,
+ 70010 => true,
+ 70011 => true,
+ 70012 => true,
+ 70013 => true,
+ 70014 => true,
+ 70015 => true,
+ 70112 => true,
+ 70133 => true,
+ 70134 => true,
+ 70135 => true,
+ 70136 => true,
+ 70137 => true,
+ 70138 => true,
+ 70139 => true,
+ 70140 => true,
+ 70141 => true,
+ 70142 => true,
+ 70143 => true,
+ 70162 => true,
+ 70279 => true,
+ 70281 => true,
+ 70286 => true,
+ 70302 => true,
+ 70314 => true,
+ 70315 => true,
+ 70316 => true,
+ 70317 => true,
+ 70318 => true,
+ 70319 => true,
+ 70379 => true,
+ 70380 => true,
+ 70381 => true,
+ 70382 => true,
+ 70383 => true,
+ 70394 => true,
+ 70395 => true,
+ 70396 => true,
+ 70397 => true,
+ 70398 => true,
+ 70399 => true,
+ 70404 => true,
+ 70413 => true,
+ 70414 => true,
+ 70417 => true,
+ 70418 => true,
+ 70441 => true,
+ 70449 => true,
+ 70452 => true,
+ 70458 => true,
+ 70469 => true,
+ 70470 => true,
+ 70473 => true,
+ 70474 => true,
+ 70478 => true,
+ 70479 => true,
+ 70481 => true,
+ 70482 => true,
+ 70483 => true,
+ 70484 => true,
+ 70485 => true,
+ 70486 => true,
+ 70488 => true,
+ 70489 => true,
+ 70490 => true,
+ 70491 => true,
+ 70492 => true,
+ 70500 => true,
+ 70501 => true,
+ 70509 => true,
+ 70510 => true,
+ 70511 => true,
+ 70748 => true,
+ 70754 => true,
+ 70755 => true,
+ 70756 => true,
+ 70757 => true,
+ 70758 => true,
+ 70759 => true,
+ 70760 => true,
+ 70761 => true,
+ 70762 => true,
+ 70763 => true,
+ 70764 => true,
+ 70765 => true,
+ 70766 => true,
+ 70767 => true,
+ 70768 => true,
+ 70769 => true,
+ 70770 => true,
+ 70771 => true,
+ 70772 => true,
+ 70773 => true,
+ 70774 => true,
+ 70775 => true,
+ 70776 => true,
+ 70777 => true,
+ 70778 => true,
+ 70779 => true,
+ 70780 => true,
+ 70781 => true,
+ 70782 => true,
+ 70783 => true,
+ 70856 => true,
+ 70857 => true,
+ 70858 => true,
+ 70859 => true,
+ 70860 => true,
+ 70861 => true,
+ 70862 => true,
+ 70863 => true,
+ 71094 => true,
+ 71095 => true,
+ 71237 => true,
+ 71238 => true,
+ 71239 => true,
+ 71240 => true,
+ 71241 => true,
+ 71242 => true,
+ 71243 => true,
+ 71244 => true,
+ 71245 => true,
+ 71246 => true,
+ 71247 => true,
+ 71258 => true,
+ 71259 => true,
+ 71260 => true,
+ 71261 => true,
+ 71262 => true,
+ 71263 => true,
+ 71277 => true,
+ 71278 => true,
+ 71279 => true,
+ 71280 => true,
+ 71281 => true,
+ 71282 => true,
+ 71283 => true,
+ 71284 => true,
+ 71285 => true,
+ 71286 => true,
+ 71287 => true,
+ 71288 => true,
+ 71289 => true,
+ 71290 => true,
+ 71291 => true,
+ 71292 => true,
+ 71293 => true,
+ 71294 => true,
+ 71295 => true,
+ 71353 => true,
+ 71354 => true,
+ 71355 => true,
+ 71356 => true,
+ 71357 => true,
+ 71358 => true,
+ 71359 => true,
+ 71451 => true,
+ 71452 => true,
+ 71468 => true,
+ 71469 => true,
+ 71470 => true,
+ 71471 => true,
+ 71923 => true,
+ 71924 => true,
+ 71925 => true,
+ 71926 => true,
+ 71927 => true,
+ 71928 => true,
+ 71929 => true,
+ 71930 => true,
+ 71931 => true,
+ 71932 => true,
+ 71933 => true,
+ 71934 => true,
+ 71943 => true,
+ 71944 => true,
+ 71946 => true,
+ 71947 => true,
+ 71956 => true,
+ 71959 => true,
+ 71990 => true,
+ 71993 => true,
+ 71994 => true,
+ 72007 => true,
+ 72008 => true,
+ 72009 => true,
+ 72010 => true,
+ 72011 => true,
+ 72012 => true,
+ 72013 => true,
+ 72014 => true,
+ 72015 => true,
+ 72104 => true,
+ 72105 => true,
+ 72152 => true,
+ 72153 => true,
+ 72165 => true,
+ 72166 => true,
+ 72167 => true,
+ 72168 => true,
+ 72169 => true,
+ 72170 => true,
+ 72171 => true,
+ 72172 => true,
+ 72173 => true,
+ 72174 => true,
+ 72175 => true,
+ 72176 => true,
+ 72177 => true,
+ 72178 => true,
+ 72179 => true,
+ 72180 => true,
+ 72181 => true,
+ 72182 => true,
+ 72183 => true,
+ 72184 => true,
+ 72185 => true,
+ 72186 => true,
+ 72187 => true,
+ 72188 => true,
+ 72189 => true,
+ 72190 => true,
+ 72191 => true,
+ 72264 => true,
+ 72265 => true,
+ 72266 => true,
+ 72267 => true,
+ 72268 => true,
+ 72269 => true,
+ 72270 => true,
+ 72271 => true,
+ 72355 => true,
+ 72356 => true,
+ 72357 => true,
+ 72358 => true,
+ 72359 => true,
+ 72360 => true,
+ 72361 => true,
+ 72362 => true,
+ 72363 => true,
+ 72364 => true,
+ 72365 => true,
+ 72366 => true,
+ 72367 => true,
+ 72368 => true,
+ 72369 => true,
+ 72370 => true,
+ 72371 => true,
+ 72372 => true,
+ 72373 => true,
+ 72374 => true,
+ 72375 => true,
+ 72376 => true,
+ 72377 => true,
+ 72378 => true,
+ 72379 => true,
+ 72380 => true,
+ 72381 => true,
+ 72382 => true,
+ 72383 => true,
+ 72713 => true,
+ 72759 => true,
+ 72774 => true,
+ 72775 => true,
+ 72776 => true,
+ 72777 => true,
+ 72778 => true,
+ 72779 => true,
+ 72780 => true,
+ 72781 => true,
+ 72782 => true,
+ 72783 => true,
+ 72813 => true,
+ 72814 => true,
+ 72815 => true,
+ 72848 => true,
+ 72849 => true,
+ 72872 => true,
+ 72967 => true,
+ 72970 => true,
+ 73015 => true,
+ 73016 => true,
+ 73017 => true,
+ 73019 => true,
+ 73022 => true,
+ 73032 => true,
+ 73033 => true,
+ 73034 => true,
+ 73035 => true,
+ 73036 => true,
+ 73037 => true,
+ 73038 => true,
+ 73039 => true,
+ 73050 => true,
+ 73051 => true,
+ 73052 => true,
+ 73053 => true,
+ 73054 => true,
+ 73055 => true,
+ 73062 => true,
+ 73065 => true,
+ 73103 => true,
+ 73106 => true,
+ 73113 => true,
+ 73114 => true,
+ 73115 => true,
+ 73116 => true,
+ 73117 => true,
+ 73118 => true,
+ 73119 => true,
+ 73649 => true,
+ 73650 => true,
+ 73651 => true,
+ 73652 => true,
+ 73653 => true,
+ 73654 => true,
+ 73655 => true,
+ 73656 => true,
+ 73657 => true,
+ 73658 => true,
+ 73659 => true,
+ 73660 => true,
+ 73661 => true,
+ 73662 => true,
+ 73663 => true,
+ 73714 => true,
+ 73715 => true,
+ 73716 => true,
+ 73717 => true,
+ 73718 => true,
+ 73719 => true,
+ 73720 => true,
+ 73721 => true,
+ 73722 => true,
+ 73723 => true,
+ 73724 => true,
+ 73725 => true,
+ 73726 => true,
+ 74863 => true,
+ 74869 => true,
+ 74870 => true,
+ 74871 => true,
+ 74872 => true,
+ 74873 => true,
+ 74874 => true,
+ 74875 => true,
+ 74876 => true,
+ 74877 => true,
+ 74878 => true,
+ 74879 => true,
+ 78895 => true,
+ 78896 => true,
+ 78897 => true,
+ 78898 => true,
+ 78899 => true,
+ 78900 => true,
+ 78901 => true,
+ 78902 => true,
+ 78903 => true,
+ 78904 => true,
+ 92729 => true,
+ 92730 => true,
+ 92731 => true,
+ 92732 => true,
+ 92733 => true,
+ 92734 => true,
+ 92735 => true,
+ 92767 => true,
+ 92778 => true,
+ 92779 => true,
+ 92780 => true,
+ 92781 => true,
+ 92910 => true,
+ 92911 => true,
+ 92918 => true,
+ 92919 => true,
+ 92920 => true,
+ 92921 => true,
+ 92922 => true,
+ 92923 => true,
+ 92924 => true,
+ 92925 => true,
+ 92926 => true,
+ 92927 => true,
+ 92998 => true,
+ 92999 => true,
+ 93000 => true,
+ 93001 => true,
+ 93002 => true,
+ 93003 => true,
+ 93004 => true,
+ 93005 => true,
+ 93006 => true,
+ 93007 => true,
+ 93018 => true,
+ 93026 => true,
+ 93048 => true,
+ 93049 => true,
+ 93050 => true,
+ 93051 => true,
+ 93052 => true,
+ 94027 => true,
+ 94028 => true,
+ 94029 => true,
+ 94030 => true,
+ 94088 => true,
+ 94089 => true,
+ 94090 => true,
+ 94091 => true,
+ 94092 => true,
+ 94093 => true,
+ 94094 => true,
+ 94181 => true,
+ 94182 => true,
+ 94183 => true,
+ 94184 => true,
+ 94185 => true,
+ 94186 => true,
+ 94187 => true,
+ 94188 => true,
+ 94189 => true,
+ 94190 => true,
+ 94191 => true,
+ 94194 => true,
+ 94195 => true,
+ 94196 => true,
+ 94197 => true,
+ 94198 => true,
+ 94199 => true,
+ 94200 => true,
+ 94201 => true,
+ 94202 => true,
+ 94203 => true,
+ 94204 => true,
+ 94205 => true,
+ 94206 => true,
+ 94207 => true,
+ 100344 => true,
+ 100345 => true,
+ 100346 => true,
+ 100347 => true,
+ 100348 => true,
+ 100349 => true,
+ 100350 => true,
+ 100351 => true,
+ 110931 => true,
+ 110932 => true,
+ 110933 => true,
+ 110934 => true,
+ 110935 => true,
+ 110936 => true,
+ 110937 => true,
+ 110938 => true,
+ 110939 => true,
+ 110940 => true,
+ 110941 => true,
+ 110942 => true,
+ 110943 => true,
+ 110944 => true,
+ 110945 => true,
+ 110946 => true,
+ 110947 => true,
+ 110952 => true,
+ 110953 => true,
+ 110954 => true,
+ 110955 => true,
+ 110956 => true,
+ 110957 => true,
+ 110958 => true,
+ 110959 => true,
+ 113771 => true,
+ 113772 => true,
+ 113773 => true,
+ 113774 => true,
+ 113775 => true,
+ 113789 => true,
+ 113790 => true,
+ 113791 => true,
+ 113801 => true,
+ 113802 => true,
+ 113803 => true,
+ 113804 => true,
+ 113805 => true,
+ 113806 => true,
+ 113807 => true,
+ 113818 => true,
+ 113819 => true,
+ 119030 => true,
+ 119031 => true,
+ 119032 => true,
+ 119033 => true,
+ 119034 => true,
+ 119035 => true,
+ 119036 => true,
+ 119037 => true,
+ 119038 => true,
+ 119039 => true,
+ 119079 => true,
+ 119080 => true,
+ 119155 => true,
+ 119156 => true,
+ 119157 => true,
+ 119158 => true,
+ 119159 => true,
+ 119160 => true,
+ 119161 => true,
+ 119162 => true,
+ 119273 => true,
+ 119274 => true,
+ 119275 => true,
+ 119276 => true,
+ 119277 => true,
+ 119278 => true,
+ 119279 => true,
+ 119280 => true,
+ 119281 => true,
+ 119282 => true,
+ 119283 => true,
+ 119284 => true,
+ 119285 => true,
+ 119286 => true,
+ 119287 => true,
+ 119288 => true,
+ 119289 => true,
+ 119290 => true,
+ 119291 => true,
+ 119292 => true,
+ 119293 => true,
+ 119294 => true,
+ 119295 => true,
+ 119540 => true,
+ 119541 => true,
+ 119542 => true,
+ 119543 => true,
+ 119544 => true,
+ 119545 => true,
+ 119546 => true,
+ 119547 => true,
+ 119548 => true,
+ 119549 => true,
+ 119550 => true,
+ 119551 => true,
+ 119639 => true,
+ 119640 => true,
+ 119641 => true,
+ 119642 => true,
+ 119643 => true,
+ 119644 => true,
+ 119645 => true,
+ 119646 => true,
+ 119647 => true,
+ 119893 => true,
+ 119965 => true,
+ 119968 => true,
+ 119969 => true,
+ 119971 => true,
+ 119972 => true,
+ 119975 => true,
+ 119976 => true,
+ 119981 => true,
+ 119994 => true,
+ 119996 => true,
+ 120004 => true,
+ 120070 => true,
+ 120075 => true,
+ 120076 => true,
+ 120085 => true,
+ 120093 => true,
+ 120122 => true,
+ 120127 => true,
+ 120133 => true,
+ 120135 => true,
+ 120136 => true,
+ 120137 => true,
+ 120145 => true,
+ 120486 => true,
+ 120487 => true,
+ 120780 => true,
+ 120781 => true,
+ 121484 => true,
+ 121485 => true,
+ 121486 => true,
+ 121487 => true,
+ 121488 => true,
+ 121489 => true,
+ 121490 => true,
+ 121491 => true,
+ 121492 => true,
+ 121493 => true,
+ 121494 => true,
+ 121495 => true,
+ 121496 => true,
+ 121497 => true,
+ 121498 => true,
+ 121504 => true,
+ 122887 => true,
+ 122905 => true,
+ 122906 => true,
+ 122914 => true,
+ 122917 => true,
+ 123181 => true,
+ 123182 => true,
+ 123183 => true,
+ 123198 => true,
+ 123199 => true,
+ 123210 => true,
+ 123211 => true,
+ 123212 => true,
+ 123213 => true,
+ 123642 => true,
+ 123643 => true,
+ 123644 => true,
+ 123645 => true,
+ 123646 => true,
+ 125125 => true,
+ 125126 => true,
+ 125260 => true,
+ 125261 => true,
+ 125262 => true,
+ 125263 => true,
+ 125274 => true,
+ 125275 => true,
+ 125276 => true,
+ 125277 => true,
+ 126468 => true,
+ 126496 => true,
+ 126499 => true,
+ 126501 => true,
+ 126502 => true,
+ 126504 => true,
+ 126515 => true,
+ 126520 => true,
+ 126522 => true,
+ 126524 => true,
+ 126525 => true,
+ 126526 => true,
+ 126527 => true,
+ 126528 => true,
+ 126529 => true,
+ 126531 => true,
+ 126532 => true,
+ 126533 => true,
+ 126534 => true,
+ 126536 => true,
+ 126538 => true,
+ 126540 => true,
+ 126544 => true,
+ 126547 => true,
+ 126549 => true,
+ 126550 => true,
+ 126552 => true,
+ 126554 => true,
+ 126556 => true,
+ 126558 => true,
+ 126560 => true,
+ 126563 => true,
+ 126565 => true,
+ 126566 => true,
+ 126571 => true,
+ 126579 => true,
+ 126584 => true,
+ 126589 => true,
+ 126591 => true,
+ 126602 => true,
+ 126620 => true,
+ 126621 => true,
+ 126622 => true,
+ 126623 => true,
+ 126624 => true,
+ 126628 => true,
+ 126634 => true,
+ 127020 => true,
+ 127021 => true,
+ 127022 => true,
+ 127023 => true,
+ 127124 => true,
+ 127125 => true,
+ 127126 => true,
+ 127127 => true,
+ 127128 => true,
+ 127129 => true,
+ 127130 => true,
+ 127131 => true,
+ 127132 => true,
+ 127133 => true,
+ 127134 => true,
+ 127135 => true,
+ 127151 => true,
+ 127152 => true,
+ 127168 => true,
+ 127184 => true,
+ 127222 => true,
+ 127223 => true,
+ 127224 => true,
+ 127225 => true,
+ 127226 => true,
+ 127227 => true,
+ 127228 => true,
+ 127229 => true,
+ 127230 => true,
+ 127231 => true,
+ 127232 => true,
+ 127491 => true,
+ 127492 => true,
+ 127493 => true,
+ 127494 => true,
+ 127495 => true,
+ 127496 => true,
+ 127497 => true,
+ 127498 => true,
+ 127499 => true,
+ 127500 => true,
+ 127501 => true,
+ 127502 => true,
+ 127503 => true,
+ 127548 => true,
+ 127549 => true,
+ 127550 => true,
+ 127551 => true,
+ 127561 => true,
+ 127562 => true,
+ 127563 => true,
+ 127564 => true,
+ 127565 => true,
+ 127566 => true,
+ 127567 => true,
+ 127570 => true,
+ 127571 => true,
+ 127572 => true,
+ 127573 => true,
+ 127574 => true,
+ 127575 => true,
+ 127576 => true,
+ 127577 => true,
+ 127578 => true,
+ 127579 => true,
+ 127580 => true,
+ 127581 => true,
+ 127582 => true,
+ 127583 => true,
+ 128728 => true,
+ 128729 => true,
+ 128730 => true,
+ 128731 => true,
+ 128732 => true,
+ 128733 => true,
+ 128734 => true,
+ 128735 => true,
+ 128749 => true,
+ 128750 => true,
+ 128751 => true,
+ 128765 => true,
+ 128766 => true,
+ 128767 => true,
+ 128884 => true,
+ 128885 => true,
+ 128886 => true,
+ 128887 => true,
+ 128888 => true,
+ 128889 => true,
+ 128890 => true,
+ 128891 => true,
+ 128892 => true,
+ 128893 => true,
+ 128894 => true,
+ 128895 => true,
+ 128985 => true,
+ 128986 => true,
+ 128987 => true,
+ 128988 => true,
+ 128989 => true,
+ 128990 => true,
+ 128991 => true,
+ 129004 => true,
+ 129005 => true,
+ 129006 => true,
+ 129007 => true,
+ 129008 => true,
+ 129009 => true,
+ 129010 => true,
+ 129011 => true,
+ 129012 => true,
+ 129013 => true,
+ 129014 => true,
+ 129015 => true,
+ 129016 => true,
+ 129017 => true,
+ 129018 => true,
+ 129019 => true,
+ 129020 => true,
+ 129021 => true,
+ 129022 => true,
+ 129023 => true,
+ 129036 => true,
+ 129037 => true,
+ 129038 => true,
+ 129039 => true,
+ 129096 => true,
+ 129097 => true,
+ 129098 => true,
+ 129099 => true,
+ 129100 => true,
+ 129101 => true,
+ 129102 => true,
+ 129103 => true,
+ 129114 => true,
+ 129115 => true,
+ 129116 => true,
+ 129117 => true,
+ 129118 => true,
+ 129119 => true,
+ 129160 => true,
+ 129161 => true,
+ 129162 => true,
+ 129163 => true,
+ 129164 => true,
+ 129165 => true,
+ 129166 => true,
+ 129167 => true,
+ 129198 => true,
+ 129199 => true,
+ 129401 => true,
+ 129484 => true,
+ 129620 => true,
+ 129621 => true,
+ 129622 => true,
+ 129623 => true,
+ 129624 => true,
+ 129625 => true,
+ 129626 => true,
+ 129627 => true,
+ 129628 => true,
+ 129629 => true,
+ 129630 => true,
+ 129631 => true,
+ 129646 => true,
+ 129647 => true,
+ 129653 => true,
+ 129654 => true,
+ 129655 => true,
+ 129659 => true,
+ 129660 => true,
+ 129661 => true,
+ 129662 => true,
+ 129663 => true,
+ 129671 => true,
+ 129672 => true,
+ 129673 => true,
+ 129674 => true,
+ 129675 => true,
+ 129676 => true,
+ 129677 => true,
+ 129678 => true,
+ 129679 => true,
+ 129705 => true,
+ 129706 => true,
+ 129707 => true,
+ 129708 => true,
+ 129709 => true,
+ 129710 => true,
+ 129711 => true,
+ 129719 => true,
+ 129720 => true,
+ 129721 => true,
+ 129722 => true,
+ 129723 => true,
+ 129724 => true,
+ 129725 => true,
+ 129726 => true,
+ 129727 => true,
+ 129731 => true,
+ 129732 => true,
+ 129733 => true,
+ 129734 => true,
+ 129735 => true,
+ 129736 => true,
+ 129737 => true,
+ 129738 => true,
+ 129739 => true,
+ 129740 => true,
+ 129741 => true,
+ 129742 => true,
+ 129743 => true,
+ 129939 => true,
+ 131070 => true,
+ 131071 => true,
+ 177973 => true,
+ 177974 => true,
+ 177975 => true,
+ 177976 => true,
+ 177977 => true,
+ 177978 => true,
+ 177979 => true,
+ 177980 => true,
+ 177981 => true,
+ 177982 => true,
+ 177983 => true,
+ 178206 => true,
+ 178207 => true,
+ 183970 => true,
+ 183971 => true,
+ 183972 => true,
+ 183973 => true,
+ 183974 => true,
+ 183975 => true,
+ 183976 => true,
+ 183977 => true,
+ 183978 => true,
+ 183979 => true,
+ 183980 => true,
+ 183981 => true,
+ 183982 => true,
+ 183983 => true,
+ 194664 => true,
+ 194676 => true,
+ 194847 => true,
+ 194911 => true,
+ 195007 => true,
+ 196606 => true,
+ 196607 => true,
+ 262142 => true,
+ 262143 => true,
+ 327678 => true,
+ 327679 => true,
+ 393214 => true,
+ 393215 => true,
+ 458750 => true,
+ 458751 => true,
+ 524286 => true,
+ 524287 => true,
+ 589822 => true,
+ 589823 => true,
+ 655358 => true,
+ 655359 => true,
+ 720894 => true,
+ 720895 => true,
+ 786430 => true,
+ 786431 => true,
+ 851966 => true,
+ 851967 => true,
+ 917502 => true,
+ 917503 => true,
+ 917504 => true,
+ 917505 => true,
+ 917506 => true,
+ 917507 => true,
+ 917508 => true,
+ 917509 => true,
+ 917510 => true,
+ 917511 => true,
+ 917512 => true,
+ 917513 => true,
+ 917514 => true,
+ 917515 => true,
+ 917516 => true,
+ 917517 => true,
+ 917518 => true,
+ 917519 => true,
+ 917520 => true,
+ 917521 => true,
+ 917522 => true,
+ 917523 => true,
+ 917524 => true,
+ 917525 => true,
+ 917526 => true,
+ 917527 => true,
+ 917528 => true,
+ 917529 => true,
+ 917530 => true,
+ 917531 => true,
+ 917532 => true,
+ 917533 => true,
+ 917534 => true,
+ 917535 => true,
+ 983038 => true,
+ 983039 => true,
+ 1048574 => true,
+ 1048575 => true,
+ 1114110 => true,
+ 1114111 => true,
+);
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_mapped.php b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_mapped.php
new file mode 100644
index 00000000..54f21cc0
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_mapped.php
@@ -0,0 +1,308 @@
+ ' ',
+ 168 => ' ̈',
+ 175 => ' ̄',
+ 180 => ' ́',
+ 184 => ' ̧',
+ 728 => ' ̆',
+ 729 => ' ̇',
+ 730 => ' ̊',
+ 731 => ' ̨',
+ 732 => ' ̃',
+ 733 => ' ̋',
+ 890 => ' ι',
+ 894 => ';',
+ 900 => ' ́',
+ 901 => ' ̈́',
+ 8125 => ' ̓',
+ 8127 => ' ̓',
+ 8128 => ' ͂',
+ 8129 => ' ̈͂',
+ 8141 => ' ̓̀',
+ 8142 => ' ̓́',
+ 8143 => ' ̓͂',
+ 8157 => ' ̔̀',
+ 8158 => ' ̔́',
+ 8159 => ' ̔͂',
+ 8173 => ' ̈̀',
+ 8174 => ' ̈́',
+ 8175 => '`',
+ 8189 => ' ́',
+ 8190 => ' ̔',
+ 8192 => ' ',
+ 8193 => ' ',
+ 8194 => ' ',
+ 8195 => ' ',
+ 8196 => ' ',
+ 8197 => ' ',
+ 8198 => ' ',
+ 8199 => ' ',
+ 8200 => ' ',
+ 8201 => ' ',
+ 8202 => ' ',
+ 8215 => ' ̳',
+ 8239 => ' ',
+ 8252 => '!!',
+ 8254 => ' ̅',
+ 8263 => '??',
+ 8264 => '?!',
+ 8265 => '!?',
+ 8287 => ' ',
+ 8314 => '+',
+ 8316 => '=',
+ 8317 => '(',
+ 8318 => ')',
+ 8330 => '+',
+ 8332 => '=',
+ 8333 => '(',
+ 8334 => ')',
+ 8448 => 'a/c',
+ 8449 => 'a/s',
+ 8453 => 'c/o',
+ 8454 => 'c/u',
+ 9332 => '(1)',
+ 9333 => '(2)',
+ 9334 => '(3)',
+ 9335 => '(4)',
+ 9336 => '(5)',
+ 9337 => '(6)',
+ 9338 => '(7)',
+ 9339 => '(8)',
+ 9340 => '(9)',
+ 9341 => '(10)',
+ 9342 => '(11)',
+ 9343 => '(12)',
+ 9344 => '(13)',
+ 9345 => '(14)',
+ 9346 => '(15)',
+ 9347 => '(16)',
+ 9348 => '(17)',
+ 9349 => '(18)',
+ 9350 => '(19)',
+ 9351 => '(20)',
+ 9372 => '(a)',
+ 9373 => '(b)',
+ 9374 => '(c)',
+ 9375 => '(d)',
+ 9376 => '(e)',
+ 9377 => '(f)',
+ 9378 => '(g)',
+ 9379 => '(h)',
+ 9380 => '(i)',
+ 9381 => '(j)',
+ 9382 => '(k)',
+ 9383 => '(l)',
+ 9384 => '(m)',
+ 9385 => '(n)',
+ 9386 => '(o)',
+ 9387 => '(p)',
+ 9388 => '(q)',
+ 9389 => '(r)',
+ 9390 => '(s)',
+ 9391 => '(t)',
+ 9392 => '(u)',
+ 9393 => '(v)',
+ 9394 => '(w)',
+ 9395 => '(x)',
+ 9396 => '(y)',
+ 9397 => '(z)',
+ 10868 => '::=',
+ 10869 => '==',
+ 10870 => '===',
+ 12288 => ' ',
+ 12443 => ' ゙',
+ 12444 => ' ゚',
+ 12800 => '(ᄀ)',
+ 12801 => '(ᄂ)',
+ 12802 => '(ᄃ)',
+ 12803 => '(ᄅ)',
+ 12804 => '(ᄆ)',
+ 12805 => '(ᄇ)',
+ 12806 => '(ᄉ)',
+ 12807 => '(ᄋ)',
+ 12808 => '(ᄌ)',
+ 12809 => '(ᄎ)',
+ 12810 => '(ᄏ)',
+ 12811 => '(ᄐ)',
+ 12812 => '(ᄑ)',
+ 12813 => '(ᄒ)',
+ 12814 => '(가)',
+ 12815 => '(나)',
+ 12816 => '(다)',
+ 12817 => '(라)',
+ 12818 => '(마)',
+ 12819 => '(바)',
+ 12820 => '(사)',
+ 12821 => '(아)',
+ 12822 => '(자)',
+ 12823 => '(차)',
+ 12824 => '(카)',
+ 12825 => '(타)',
+ 12826 => '(파)',
+ 12827 => '(하)',
+ 12828 => '(주)',
+ 12829 => '(오전)',
+ 12830 => '(오후)',
+ 12832 => '(一)',
+ 12833 => '(二)',
+ 12834 => '(三)',
+ 12835 => '(四)',
+ 12836 => '(五)',
+ 12837 => '(六)',
+ 12838 => '(七)',
+ 12839 => '(八)',
+ 12840 => '(九)',
+ 12841 => '(十)',
+ 12842 => '(月)',
+ 12843 => '(火)',
+ 12844 => '(水)',
+ 12845 => '(木)',
+ 12846 => '(金)',
+ 12847 => '(土)',
+ 12848 => '(日)',
+ 12849 => '(株)',
+ 12850 => '(有)',
+ 12851 => '(社)',
+ 12852 => '(名)',
+ 12853 => '(特)',
+ 12854 => '(財)',
+ 12855 => '(祝)',
+ 12856 => '(労)',
+ 12857 => '(代)',
+ 12858 => '(呼)',
+ 12859 => '(学)',
+ 12860 => '(監)',
+ 12861 => '(企)',
+ 12862 => '(資)',
+ 12863 => '(協)',
+ 12864 => '(祭)',
+ 12865 => '(休)',
+ 12866 => '(自)',
+ 12867 => '(至)',
+ 64297 => '+',
+ 64606 => ' ٌّ',
+ 64607 => ' ٍّ',
+ 64608 => ' َّ',
+ 64609 => ' ُّ',
+ 64610 => ' ِّ',
+ 64611 => ' ّٰ',
+ 65018 => 'صلى الله عليه وسلم',
+ 65019 => 'جل جلاله',
+ 65040 => ',',
+ 65043 => ':',
+ 65044 => ';',
+ 65045 => '!',
+ 65046 => '?',
+ 65075 => '_',
+ 65076 => '_',
+ 65077 => '(',
+ 65078 => ')',
+ 65079 => '{',
+ 65080 => '}',
+ 65095 => '[',
+ 65096 => ']',
+ 65097 => ' ̅',
+ 65098 => ' ̅',
+ 65099 => ' ̅',
+ 65100 => ' ̅',
+ 65101 => '_',
+ 65102 => '_',
+ 65103 => '_',
+ 65104 => ',',
+ 65108 => ';',
+ 65109 => ':',
+ 65110 => '?',
+ 65111 => '!',
+ 65113 => '(',
+ 65114 => ')',
+ 65115 => '{',
+ 65116 => '}',
+ 65119 => '#',
+ 65120 => '&',
+ 65121 => '*',
+ 65122 => '+',
+ 65124 => '<',
+ 65125 => '>',
+ 65126 => '=',
+ 65128 => '\\',
+ 65129 => '$',
+ 65130 => '%',
+ 65131 => '@',
+ 65136 => ' ً',
+ 65138 => ' ٌ',
+ 65140 => ' ٍ',
+ 65142 => ' َ',
+ 65144 => ' ُ',
+ 65146 => ' ِ',
+ 65148 => ' ّ',
+ 65150 => ' ْ',
+ 65281 => '!',
+ 65282 => '"',
+ 65283 => '#',
+ 65284 => '$',
+ 65285 => '%',
+ 65286 => '&',
+ 65287 => '\'',
+ 65288 => '(',
+ 65289 => ')',
+ 65290 => '*',
+ 65291 => '+',
+ 65292 => ',',
+ 65295 => '/',
+ 65306 => ':',
+ 65307 => ';',
+ 65308 => '<',
+ 65309 => '=',
+ 65310 => '>',
+ 65311 => '?',
+ 65312 => '@',
+ 65339 => '[',
+ 65340 => '\\',
+ 65341 => ']',
+ 65342 => '^',
+ 65343 => '_',
+ 65344 => '`',
+ 65371 => '{',
+ 65372 => '|',
+ 65373 => '}',
+ 65374 => '~',
+ 65507 => ' ̄',
+ 127233 => '0,',
+ 127234 => '1,',
+ 127235 => '2,',
+ 127236 => '3,',
+ 127237 => '4,',
+ 127238 => '5,',
+ 127239 => '6,',
+ 127240 => '7,',
+ 127241 => '8,',
+ 127242 => '9,',
+ 127248 => '(a)',
+ 127249 => '(b)',
+ 127250 => '(c)',
+ 127251 => '(d)',
+ 127252 => '(e)',
+ 127253 => '(f)',
+ 127254 => '(g)',
+ 127255 => '(h)',
+ 127256 => '(i)',
+ 127257 => '(j)',
+ 127258 => '(k)',
+ 127259 => '(l)',
+ 127260 => '(m)',
+ 127261 => '(n)',
+ 127262 => '(o)',
+ 127263 => '(p)',
+ 127264 => '(q)',
+ 127265 => '(r)',
+ 127266 => '(s)',
+ 127267 => '(t)',
+ 127268 => '(u)',
+ 127269 => '(v)',
+ 127270 => '(w)',
+ 127271 => '(x)',
+ 127272 => '(y)',
+ 127273 => '(z)',
+);
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_valid.php b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_valid.php
new file mode 100644
index 00000000..223396ec
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_valid.php
@@ -0,0 +1,71 @@
+ true,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true,
+ 10 => true,
+ 11 => true,
+ 12 => true,
+ 13 => true,
+ 14 => true,
+ 15 => true,
+ 16 => true,
+ 17 => true,
+ 18 => true,
+ 19 => true,
+ 20 => true,
+ 21 => true,
+ 22 => true,
+ 23 => true,
+ 24 => true,
+ 25 => true,
+ 26 => true,
+ 27 => true,
+ 28 => true,
+ 29 => true,
+ 30 => true,
+ 31 => true,
+ 32 => true,
+ 33 => true,
+ 34 => true,
+ 35 => true,
+ 36 => true,
+ 37 => true,
+ 38 => true,
+ 39 => true,
+ 40 => true,
+ 41 => true,
+ 42 => true,
+ 43 => true,
+ 44 => true,
+ 47 => true,
+ 58 => true,
+ 59 => true,
+ 60 => true,
+ 61 => true,
+ 62 => true,
+ 63 => true,
+ 64 => true,
+ 91 => true,
+ 92 => true,
+ 93 => true,
+ 94 => true,
+ 95 => true,
+ 96 => true,
+ 123 => true,
+ 124 => true,
+ 125 => true,
+ 126 => true,
+ 127 => true,
+ 8800 => true,
+ 8814 => true,
+ 8815 => true,
+);
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/ignored.php b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/ignored.php
new file mode 100644
index 00000000..b3778441
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/ignored.php
@@ -0,0 +1,273 @@
+ true,
+ 847 => true,
+ 6155 => true,
+ 6156 => true,
+ 6157 => true,
+ 8203 => true,
+ 8288 => true,
+ 8292 => true,
+ 65024 => true,
+ 65025 => true,
+ 65026 => true,
+ 65027 => true,
+ 65028 => true,
+ 65029 => true,
+ 65030 => true,
+ 65031 => true,
+ 65032 => true,
+ 65033 => true,
+ 65034 => true,
+ 65035 => true,
+ 65036 => true,
+ 65037 => true,
+ 65038 => true,
+ 65039 => true,
+ 65279 => true,
+ 113824 => true,
+ 113825 => true,
+ 113826 => true,
+ 113827 => true,
+ 917760 => true,
+ 917761 => true,
+ 917762 => true,
+ 917763 => true,
+ 917764 => true,
+ 917765 => true,
+ 917766 => true,
+ 917767 => true,
+ 917768 => true,
+ 917769 => true,
+ 917770 => true,
+ 917771 => true,
+ 917772 => true,
+ 917773 => true,
+ 917774 => true,
+ 917775 => true,
+ 917776 => true,
+ 917777 => true,
+ 917778 => true,
+ 917779 => true,
+ 917780 => true,
+ 917781 => true,
+ 917782 => true,
+ 917783 => true,
+ 917784 => true,
+ 917785 => true,
+ 917786 => true,
+ 917787 => true,
+ 917788 => true,
+ 917789 => true,
+ 917790 => true,
+ 917791 => true,
+ 917792 => true,
+ 917793 => true,
+ 917794 => true,
+ 917795 => true,
+ 917796 => true,
+ 917797 => true,
+ 917798 => true,
+ 917799 => true,
+ 917800 => true,
+ 917801 => true,
+ 917802 => true,
+ 917803 => true,
+ 917804 => true,
+ 917805 => true,
+ 917806 => true,
+ 917807 => true,
+ 917808 => true,
+ 917809 => true,
+ 917810 => true,
+ 917811 => true,
+ 917812 => true,
+ 917813 => true,
+ 917814 => true,
+ 917815 => true,
+ 917816 => true,
+ 917817 => true,
+ 917818 => true,
+ 917819 => true,
+ 917820 => true,
+ 917821 => true,
+ 917822 => true,
+ 917823 => true,
+ 917824 => true,
+ 917825 => true,
+ 917826 => true,
+ 917827 => true,
+ 917828 => true,
+ 917829 => true,
+ 917830 => true,
+ 917831 => true,
+ 917832 => true,
+ 917833 => true,
+ 917834 => true,
+ 917835 => true,
+ 917836 => true,
+ 917837 => true,
+ 917838 => true,
+ 917839 => true,
+ 917840 => true,
+ 917841 => true,
+ 917842 => true,
+ 917843 => true,
+ 917844 => true,
+ 917845 => true,
+ 917846 => true,
+ 917847 => true,
+ 917848 => true,
+ 917849 => true,
+ 917850 => true,
+ 917851 => true,
+ 917852 => true,
+ 917853 => true,
+ 917854 => true,
+ 917855 => true,
+ 917856 => true,
+ 917857 => true,
+ 917858 => true,
+ 917859 => true,
+ 917860 => true,
+ 917861 => true,
+ 917862 => true,
+ 917863 => true,
+ 917864 => true,
+ 917865 => true,
+ 917866 => true,
+ 917867 => true,
+ 917868 => true,
+ 917869 => true,
+ 917870 => true,
+ 917871 => true,
+ 917872 => true,
+ 917873 => true,
+ 917874 => true,
+ 917875 => true,
+ 917876 => true,
+ 917877 => true,
+ 917878 => true,
+ 917879 => true,
+ 917880 => true,
+ 917881 => true,
+ 917882 => true,
+ 917883 => true,
+ 917884 => true,
+ 917885 => true,
+ 917886 => true,
+ 917887 => true,
+ 917888 => true,
+ 917889 => true,
+ 917890 => true,
+ 917891 => true,
+ 917892 => true,
+ 917893 => true,
+ 917894 => true,
+ 917895 => true,
+ 917896 => true,
+ 917897 => true,
+ 917898 => true,
+ 917899 => true,
+ 917900 => true,
+ 917901 => true,
+ 917902 => true,
+ 917903 => true,
+ 917904 => true,
+ 917905 => true,
+ 917906 => true,
+ 917907 => true,
+ 917908 => true,
+ 917909 => true,
+ 917910 => true,
+ 917911 => true,
+ 917912 => true,
+ 917913 => true,
+ 917914 => true,
+ 917915 => true,
+ 917916 => true,
+ 917917 => true,
+ 917918 => true,
+ 917919 => true,
+ 917920 => true,
+ 917921 => true,
+ 917922 => true,
+ 917923 => true,
+ 917924 => true,
+ 917925 => true,
+ 917926 => true,
+ 917927 => true,
+ 917928 => true,
+ 917929 => true,
+ 917930 => true,
+ 917931 => true,
+ 917932 => true,
+ 917933 => true,
+ 917934 => true,
+ 917935 => true,
+ 917936 => true,
+ 917937 => true,
+ 917938 => true,
+ 917939 => true,
+ 917940 => true,
+ 917941 => true,
+ 917942 => true,
+ 917943 => true,
+ 917944 => true,
+ 917945 => true,
+ 917946 => true,
+ 917947 => true,
+ 917948 => true,
+ 917949 => true,
+ 917950 => true,
+ 917951 => true,
+ 917952 => true,
+ 917953 => true,
+ 917954 => true,
+ 917955 => true,
+ 917956 => true,
+ 917957 => true,
+ 917958 => true,
+ 917959 => true,
+ 917960 => true,
+ 917961 => true,
+ 917962 => true,
+ 917963 => true,
+ 917964 => true,
+ 917965 => true,
+ 917966 => true,
+ 917967 => true,
+ 917968 => true,
+ 917969 => true,
+ 917970 => true,
+ 917971 => true,
+ 917972 => true,
+ 917973 => true,
+ 917974 => true,
+ 917975 => true,
+ 917976 => true,
+ 917977 => true,
+ 917978 => true,
+ 917979 => true,
+ 917980 => true,
+ 917981 => true,
+ 917982 => true,
+ 917983 => true,
+ 917984 => true,
+ 917985 => true,
+ 917986 => true,
+ 917987 => true,
+ 917988 => true,
+ 917989 => true,
+ 917990 => true,
+ 917991 => true,
+ 917992 => true,
+ 917993 => true,
+ 917994 => true,
+ 917995 => true,
+ 917996 => true,
+ 917997 => true,
+ 917998 => true,
+ 917999 => true,
+);
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/mapped.php b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/mapped.php
new file mode 100644
index 00000000..9b85fe9d
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/mapped.php
@@ -0,0 +1,5778 @@
+ 'a',
+ 66 => 'b',
+ 67 => 'c',
+ 68 => 'd',
+ 69 => 'e',
+ 70 => 'f',
+ 71 => 'g',
+ 72 => 'h',
+ 73 => 'i',
+ 74 => 'j',
+ 75 => 'k',
+ 76 => 'l',
+ 77 => 'm',
+ 78 => 'n',
+ 79 => 'o',
+ 80 => 'p',
+ 81 => 'q',
+ 82 => 'r',
+ 83 => 's',
+ 84 => 't',
+ 85 => 'u',
+ 86 => 'v',
+ 87 => 'w',
+ 88 => 'x',
+ 89 => 'y',
+ 90 => 'z',
+ 170 => 'a',
+ 178 => '2',
+ 179 => '3',
+ 181 => 'μ',
+ 185 => '1',
+ 186 => 'o',
+ 188 => '1⁄4',
+ 189 => '1⁄2',
+ 190 => '3⁄4',
+ 192 => 'à',
+ 193 => 'á',
+ 194 => 'â',
+ 195 => 'ã',
+ 196 => 'ä',
+ 197 => 'å',
+ 198 => 'æ',
+ 199 => 'ç',
+ 200 => 'è',
+ 201 => 'é',
+ 202 => 'ê',
+ 203 => 'ë',
+ 204 => 'ì',
+ 205 => 'í',
+ 206 => 'î',
+ 207 => 'ï',
+ 208 => 'ð',
+ 209 => 'ñ',
+ 210 => 'ò',
+ 211 => 'ó',
+ 212 => 'ô',
+ 213 => 'õ',
+ 214 => 'ö',
+ 216 => 'ø',
+ 217 => 'ù',
+ 218 => 'ú',
+ 219 => 'û',
+ 220 => 'ü',
+ 221 => 'ý',
+ 222 => 'þ',
+ 256 => 'ā',
+ 258 => 'ă',
+ 260 => 'ą',
+ 262 => 'ć',
+ 264 => 'ĉ',
+ 266 => 'ċ',
+ 268 => 'č',
+ 270 => 'ď',
+ 272 => 'đ',
+ 274 => 'ē',
+ 276 => 'ĕ',
+ 278 => 'ė',
+ 280 => 'ę',
+ 282 => 'ě',
+ 284 => 'ĝ',
+ 286 => 'ğ',
+ 288 => 'ġ',
+ 290 => 'ģ',
+ 292 => 'ĥ',
+ 294 => 'ħ',
+ 296 => 'ĩ',
+ 298 => 'ī',
+ 300 => 'ĭ',
+ 302 => 'į',
+ 304 => 'i̇',
+ 306 => 'ij',
+ 307 => 'ij',
+ 308 => 'ĵ',
+ 310 => 'ķ',
+ 313 => 'ĺ',
+ 315 => 'ļ',
+ 317 => 'ľ',
+ 319 => 'l·',
+ 320 => 'l·',
+ 321 => 'ł',
+ 323 => 'ń',
+ 325 => 'ņ',
+ 327 => 'ň',
+ 329 => 'ʼn',
+ 330 => 'ŋ',
+ 332 => 'ō',
+ 334 => 'ŏ',
+ 336 => 'ő',
+ 338 => 'œ',
+ 340 => 'ŕ',
+ 342 => 'ŗ',
+ 344 => 'ř',
+ 346 => 'ś',
+ 348 => 'ŝ',
+ 350 => 'ş',
+ 352 => 'š',
+ 354 => 'ţ',
+ 356 => 'ť',
+ 358 => 'ŧ',
+ 360 => 'ũ',
+ 362 => 'ū',
+ 364 => 'ŭ',
+ 366 => 'ů',
+ 368 => 'ű',
+ 370 => 'ų',
+ 372 => 'ŵ',
+ 374 => 'ŷ',
+ 376 => 'ÿ',
+ 377 => 'ź',
+ 379 => 'ż',
+ 381 => 'ž',
+ 383 => 's',
+ 385 => 'ɓ',
+ 386 => 'ƃ',
+ 388 => 'ƅ',
+ 390 => 'ɔ',
+ 391 => 'ƈ',
+ 393 => 'ɖ',
+ 394 => 'ɗ',
+ 395 => 'ƌ',
+ 398 => 'ǝ',
+ 399 => 'ə',
+ 400 => 'ɛ',
+ 401 => 'ƒ',
+ 403 => 'ɠ',
+ 404 => 'ɣ',
+ 406 => 'ɩ',
+ 407 => 'ɨ',
+ 408 => 'ƙ',
+ 412 => 'ɯ',
+ 413 => 'ɲ',
+ 415 => 'ɵ',
+ 416 => 'ơ',
+ 418 => 'ƣ',
+ 420 => 'ƥ',
+ 422 => 'ʀ',
+ 423 => 'ƨ',
+ 425 => 'ʃ',
+ 428 => 'ƭ',
+ 430 => 'ʈ',
+ 431 => 'ư',
+ 433 => 'ʊ',
+ 434 => 'ʋ',
+ 435 => 'ƴ',
+ 437 => 'ƶ',
+ 439 => 'ʒ',
+ 440 => 'ƹ',
+ 444 => 'ƽ',
+ 452 => 'dž',
+ 453 => 'dž',
+ 454 => 'dž',
+ 455 => 'lj',
+ 456 => 'lj',
+ 457 => 'lj',
+ 458 => 'nj',
+ 459 => 'nj',
+ 460 => 'nj',
+ 461 => 'ǎ',
+ 463 => 'ǐ',
+ 465 => 'ǒ',
+ 467 => 'ǔ',
+ 469 => 'ǖ',
+ 471 => 'ǘ',
+ 473 => 'ǚ',
+ 475 => 'ǜ',
+ 478 => 'ǟ',
+ 480 => 'ǡ',
+ 482 => 'ǣ',
+ 484 => 'ǥ',
+ 486 => 'ǧ',
+ 488 => 'ǩ',
+ 490 => 'ǫ',
+ 492 => 'ǭ',
+ 494 => 'ǯ',
+ 497 => 'dz',
+ 498 => 'dz',
+ 499 => 'dz',
+ 500 => 'ǵ',
+ 502 => 'ƕ',
+ 503 => 'ƿ',
+ 504 => 'ǹ',
+ 506 => 'ǻ',
+ 508 => 'ǽ',
+ 510 => 'ǿ',
+ 512 => 'ȁ',
+ 514 => 'ȃ',
+ 516 => 'ȅ',
+ 518 => 'ȇ',
+ 520 => 'ȉ',
+ 522 => 'ȋ',
+ 524 => 'ȍ',
+ 526 => 'ȏ',
+ 528 => 'ȑ',
+ 530 => 'ȓ',
+ 532 => 'ȕ',
+ 534 => 'ȗ',
+ 536 => 'ș',
+ 538 => 'ț',
+ 540 => 'ȝ',
+ 542 => 'ȟ',
+ 544 => 'ƞ',
+ 546 => 'ȣ',
+ 548 => 'ȥ',
+ 550 => 'ȧ',
+ 552 => 'ȩ',
+ 554 => 'ȫ',
+ 556 => 'ȭ',
+ 558 => 'ȯ',
+ 560 => 'ȱ',
+ 562 => 'ȳ',
+ 570 => 'ⱥ',
+ 571 => 'ȼ',
+ 573 => 'ƚ',
+ 574 => 'ⱦ',
+ 577 => 'ɂ',
+ 579 => 'ƀ',
+ 580 => 'ʉ',
+ 581 => 'ʌ',
+ 582 => 'ɇ',
+ 584 => 'ɉ',
+ 586 => 'ɋ',
+ 588 => 'ɍ',
+ 590 => 'ɏ',
+ 688 => 'h',
+ 689 => 'ɦ',
+ 690 => 'j',
+ 691 => 'r',
+ 692 => 'ɹ',
+ 693 => 'ɻ',
+ 694 => 'ʁ',
+ 695 => 'w',
+ 696 => 'y',
+ 736 => 'ɣ',
+ 737 => 'l',
+ 738 => 's',
+ 739 => 'x',
+ 740 => 'ʕ',
+ 832 => '̀',
+ 833 => '́',
+ 835 => '̓',
+ 836 => '̈́',
+ 837 => 'ι',
+ 880 => 'ͱ',
+ 882 => 'ͳ',
+ 884 => 'ʹ',
+ 886 => 'ͷ',
+ 895 => 'ϳ',
+ 902 => 'ά',
+ 903 => '·',
+ 904 => 'έ',
+ 905 => 'ή',
+ 906 => 'ί',
+ 908 => 'ό',
+ 910 => 'ύ',
+ 911 => 'ώ',
+ 913 => 'α',
+ 914 => 'β',
+ 915 => 'γ',
+ 916 => 'δ',
+ 917 => 'ε',
+ 918 => 'ζ',
+ 919 => 'η',
+ 920 => 'θ',
+ 921 => 'ι',
+ 922 => 'κ',
+ 923 => 'λ',
+ 924 => 'μ',
+ 925 => 'ν',
+ 926 => 'ξ',
+ 927 => 'ο',
+ 928 => 'π',
+ 929 => 'ρ',
+ 931 => 'σ',
+ 932 => 'τ',
+ 933 => 'υ',
+ 934 => 'φ',
+ 935 => 'χ',
+ 936 => 'ψ',
+ 937 => 'ω',
+ 938 => 'ϊ',
+ 939 => 'ϋ',
+ 975 => 'ϗ',
+ 976 => 'β',
+ 977 => 'θ',
+ 978 => 'υ',
+ 979 => 'ύ',
+ 980 => 'ϋ',
+ 981 => 'φ',
+ 982 => 'π',
+ 984 => 'ϙ',
+ 986 => 'ϛ',
+ 988 => 'ϝ',
+ 990 => 'ϟ',
+ 992 => 'ϡ',
+ 994 => 'ϣ',
+ 996 => 'ϥ',
+ 998 => 'ϧ',
+ 1000 => 'ϩ',
+ 1002 => 'ϫ',
+ 1004 => 'ϭ',
+ 1006 => 'ϯ',
+ 1008 => 'κ',
+ 1009 => 'ρ',
+ 1010 => 'σ',
+ 1012 => 'θ',
+ 1013 => 'ε',
+ 1015 => 'ϸ',
+ 1017 => 'σ',
+ 1018 => 'ϻ',
+ 1021 => 'ͻ',
+ 1022 => 'ͼ',
+ 1023 => 'ͽ',
+ 1024 => 'ѐ',
+ 1025 => 'ё',
+ 1026 => 'ђ',
+ 1027 => 'ѓ',
+ 1028 => 'є',
+ 1029 => 'ѕ',
+ 1030 => 'і',
+ 1031 => 'ї',
+ 1032 => 'ј',
+ 1033 => 'љ',
+ 1034 => 'њ',
+ 1035 => 'ћ',
+ 1036 => 'ќ',
+ 1037 => 'ѝ',
+ 1038 => 'ў',
+ 1039 => 'џ',
+ 1040 => 'а',
+ 1041 => 'б',
+ 1042 => 'в',
+ 1043 => 'г',
+ 1044 => 'д',
+ 1045 => 'е',
+ 1046 => 'ж',
+ 1047 => 'з',
+ 1048 => 'и',
+ 1049 => 'й',
+ 1050 => 'к',
+ 1051 => 'л',
+ 1052 => 'м',
+ 1053 => 'н',
+ 1054 => 'о',
+ 1055 => 'п',
+ 1056 => 'р',
+ 1057 => 'с',
+ 1058 => 'т',
+ 1059 => 'у',
+ 1060 => 'ф',
+ 1061 => 'х',
+ 1062 => 'ц',
+ 1063 => 'ч',
+ 1064 => 'ш',
+ 1065 => 'щ',
+ 1066 => 'ъ',
+ 1067 => 'ы',
+ 1068 => 'ь',
+ 1069 => 'э',
+ 1070 => 'ю',
+ 1071 => 'я',
+ 1120 => 'ѡ',
+ 1122 => 'ѣ',
+ 1124 => 'ѥ',
+ 1126 => 'ѧ',
+ 1128 => 'ѩ',
+ 1130 => 'ѫ',
+ 1132 => 'ѭ',
+ 1134 => 'ѯ',
+ 1136 => 'ѱ',
+ 1138 => 'ѳ',
+ 1140 => 'ѵ',
+ 1142 => 'ѷ',
+ 1144 => 'ѹ',
+ 1146 => 'ѻ',
+ 1148 => 'ѽ',
+ 1150 => 'ѿ',
+ 1152 => 'ҁ',
+ 1162 => 'ҋ',
+ 1164 => 'ҍ',
+ 1166 => 'ҏ',
+ 1168 => 'ґ',
+ 1170 => 'ғ',
+ 1172 => 'ҕ',
+ 1174 => 'җ',
+ 1176 => 'ҙ',
+ 1178 => 'қ',
+ 1180 => 'ҝ',
+ 1182 => 'ҟ',
+ 1184 => 'ҡ',
+ 1186 => 'ң',
+ 1188 => 'ҥ',
+ 1190 => 'ҧ',
+ 1192 => 'ҩ',
+ 1194 => 'ҫ',
+ 1196 => 'ҭ',
+ 1198 => 'ү',
+ 1200 => 'ұ',
+ 1202 => 'ҳ',
+ 1204 => 'ҵ',
+ 1206 => 'ҷ',
+ 1208 => 'ҹ',
+ 1210 => 'һ',
+ 1212 => 'ҽ',
+ 1214 => 'ҿ',
+ 1217 => 'ӂ',
+ 1219 => 'ӄ',
+ 1221 => 'ӆ',
+ 1223 => 'ӈ',
+ 1225 => 'ӊ',
+ 1227 => 'ӌ',
+ 1229 => 'ӎ',
+ 1232 => 'ӑ',
+ 1234 => 'ӓ',
+ 1236 => 'ӕ',
+ 1238 => 'ӗ',
+ 1240 => 'ә',
+ 1242 => 'ӛ',
+ 1244 => 'ӝ',
+ 1246 => 'ӟ',
+ 1248 => 'ӡ',
+ 1250 => 'ӣ',
+ 1252 => 'ӥ',
+ 1254 => 'ӧ',
+ 1256 => 'ө',
+ 1258 => 'ӫ',
+ 1260 => 'ӭ',
+ 1262 => 'ӯ',
+ 1264 => 'ӱ',
+ 1266 => 'ӳ',
+ 1268 => 'ӵ',
+ 1270 => 'ӷ',
+ 1272 => 'ӹ',
+ 1274 => 'ӻ',
+ 1276 => 'ӽ',
+ 1278 => 'ӿ',
+ 1280 => 'ԁ',
+ 1282 => 'ԃ',
+ 1284 => 'ԅ',
+ 1286 => 'ԇ',
+ 1288 => 'ԉ',
+ 1290 => 'ԋ',
+ 1292 => 'ԍ',
+ 1294 => 'ԏ',
+ 1296 => 'ԑ',
+ 1298 => 'ԓ',
+ 1300 => 'ԕ',
+ 1302 => 'ԗ',
+ 1304 => 'ԙ',
+ 1306 => 'ԛ',
+ 1308 => 'ԝ',
+ 1310 => 'ԟ',
+ 1312 => 'ԡ',
+ 1314 => 'ԣ',
+ 1316 => 'ԥ',
+ 1318 => 'ԧ',
+ 1320 => 'ԩ',
+ 1322 => 'ԫ',
+ 1324 => 'ԭ',
+ 1326 => 'ԯ',
+ 1329 => 'ա',
+ 1330 => 'բ',
+ 1331 => 'գ',
+ 1332 => 'դ',
+ 1333 => 'ե',
+ 1334 => 'զ',
+ 1335 => 'է',
+ 1336 => 'ը',
+ 1337 => 'թ',
+ 1338 => 'ժ',
+ 1339 => 'ի',
+ 1340 => 'լ',
+ 1341 => 'խ',
+ 1342 => 'ծ',
+ 1343 => 'կ',
+ 1344 => 'հ',
+ 1345 => 'ձ',
+ 1346 => 'ղ',
+ 1347 => 'ճ',
+ 1348 => 'մ',
+ 1349 => 'յ',
+ 1350 => 'ն',
+ 1351 => 'շ',
+ 1352 => 'ո',
+ 1353 => 'չ',
+ 1354 => 'պ',
+ 1355 => 'ջ',
+ 1356 => 'ռ',
+ 1357 => 'ս',
+ 1358 => 'վ',
+ 1359 => 'տ',
+ 1360 => 'ր',
+ 1361 => 'ց',
+ 1362 => 'ւ',
+ 1363 => 'փ',
+ 1364 => 'ք',
+ 1365 => 'օ',
+ 1366 => 'ֆ',
+ 1415 => 'եւ',
+ 1653 => 'اٴ',
+ 1654 => 'وٴ',
+ 1655 => 'ۇٴ',
+ 1656 => 'يٴ',
+ 2392 => 'क़',
+ 2393 => 'ख़',
+ 2394 => 'ग़',
+ 2395 => 'ज़',
+ 2396 => 'ड़',
+ 2397 => 'ढ़',
+ 2398 => 'फ़',
+ 2399 => 'य़',
+ 2524 => 'ড়',
+ 2525 => 'ঢ়',
+ 2527 => 'য়',
+ 2611 => 'ਲ਼',
+ 2614 => 'ਸ਼',
+ 2649 => 'ਖ਼',
+ 2650 => 'ਗ਼',
+ 2651 => 'ਜ਼',
+ 2654 => 'ਫ਼',
+ 2908 => 'ଡ଼',
+ 2909 => 'ଢ଼',
+ 3635 => 'ํา',
+ 3763 => 'ໍາ',
+ 3804 => 'ຫນ',
+ 3805 => 'ຫມ',
+ 3852 => '་',
+ 3907 => 'གྷ',
+ 3917 => 'ཌྷ',
+ 3922 => 'དྷ',
+ 3927 => 'བྷ',
+ 3932 => 'ཛྷ',
+ 3945 => 'ཀྵ',
+ 3955 => 'ཱི',
+ 3957 => 'ཱུ',
+ 3958 => 'ྲྀ',
+ 3959 => 'ྲཱྀ',
+ 3960 => 'ླྀ',
+ 3961 => 'ླཱྀ',
+ 3969 => 'ཱྀ',
+ 3987 => 'ྒྷ',
+ 3997 => 'ྜྷ',
+ 4002 => 'ྡྷ',
+ 4007 => 'ྦྷ',
+ 4012 => 'ྫྷ',
+ 4025 => 'ྐྵ',
+ 4295 => 'ⴧ',
+ 4301 => 'ⴭ',
+ 4348 => 'ნ',
+ 5112 => 'Ᏸ',
+ 5113 => 'Ᏹ',
+ 5114 => 'Ᏺ',
+ 5115 => 'Ᏻ',
+ 5116 => 'Ᏼ',
+ 5117 => 'Ᏽ',
+ 7296 => 'в',
+ 7297 => 'д',
+ 7298 => 'о',
+ 7299 => 'с',
+ 7300 => 'т',
+ 7301 => 'т',
+ 7302 => 'ъ',
+ 7303 => 'ѣ',
+ 7304 => 'ꙋ',
+ 7312 => 'ა',
+ 7313 => 'ბ',
+ 7314 => 'გ',
+ 7315 => 'დ',
+ 7316 => 'ე',
+ 7317 => 'ვ',
+ 7318 => 'ზ',
+ 7319 => 'თ',
+ 7320 => 'ი',
+ 7321 => 'კ',
+ 7322 => 'ლ',
+ 7323 => 'მ',
+ 7324 => 'ნ',
+ 7325 => 'ო',
+ 7326 => 'პ',
+ 7327 => 'ჟ',
+ 7328 => 'რ',
+ 7329 => 'ს',
+ 7330 => 'ტ',
+ 7331 => 'უ',
+ 7332 => 'ფ',
+ 7333 => 'ქ',
+ 7334 => 'ღ',
+ 7335 => 'ყ',
+ 7336 => 'შ',
+ 7337 => 'ჩ',
+ 7338 => 'ც',
+ 7339 => 'ძ',
+ 7340 => 'წ',
+ 7341 => 'ჭ',
+ 7342 => 'ხ',
+ 7343 => 'ჯ',
+ 7344 => 'ჰ',
+ 7345 => 'ჱ',
+ 7346 => 'ჲ',
+ 7347 => 'ჳ',
+ 7348 => 'ჴ',
+ 7349 => 'ჵ',
+ 7350 => 'ჶ',
+ 7351 => 'ჷ',
+ 7352 => 'ჸ',
+ 7353 => 'ჹ',
+ 7354 => 'ჺ',
+ 7357 => 'ჽ',
+ 7358 => 'ჾ',
+ 7359 => 'ჿ',
+ 7468 => 'a',
+ 7469 => 'æ',
+ 7470 => 'b',
+ 7472 => 'd',
+ 7473 => 'e',
+ 7474 => 'ǝ',
+ 7475 => 'g',
+ 7476 => 'h',
+ 7477 => 'i',
+ 7478 => 'j',
+ 7479 => 'k',
+ 7480 => 'l',
+ 7481 => 'm',
+ 7482 => 'n',
+ 7484 => 'o',
+ 7485 => 'ȣ',
+ 7486 => 'p',
+ 7487 => 'r',
+ 7488 => 't',
+ 7489 => 'u',
+ 7490 => 'w',
+ 7491 => 'a',
+ 7492 => 'ɐ',
+ 7493 => 'ɑ',
+ 7494 => 'ᴂ',
+ 7495 => 'b',
+ 7496 => 'd',
+ 7497 => 'e',
+ 7498 => 'ə',
+ 7499 => 'ɛ',
+ 7500 => 'ɜ',
+ 7501 => 'g',
+ 7503 => 'k',
+ 7504 => 'm',
+ 7505 => 'ŋ',
+ 7506 => 'o',
+ 7507 => 'ɔ',
+ 7508 => 'ᴖ',
+ 7509 => 'ᴗ',
+ 7510 => 'p',
+ 7511 => 't',
+ 7512 => 'u',
+ 7513 => 'ᴝ',
+ 7514 => 'ɯ',
+ 7515 => 'v',
+ 7516 => 'ᴥ',
+ 7517 => 'β',
+ 7518 => 'γ',
+ 7519 => 'δ',
+ 7520 => 'φ',
+ 7521 => 'χ',
+ 7522 => 'i',
+ 7523 => 'r',
+ 7524 => 'u',
+ 7525 => 'v',
+ 7526 => 'β',
+ 7527 => 'γ',
+ 7528 => 'ρ',
+ 7529 => 'φ',
+ 7530 => 'χ',
+ 7544 => 'н',
+ 7579 => 'ɒ',
+ 7580 => 'c',
+ 7581 => 'ɕ',
+ 7582 => 'ð',
+ 7583 => 'ɜ',
+ 7584 => 'f',
+ 7585 => 'ɟ',
+ 7586 => 'ɡ',
+ 7587 => 'ɥ',
+ 7588 => 'ɨ',
+ 7589 => 'ɩ',
+ 7590 => 'ɪ',
+ 7591 => 'ᵻ',
+ 7592 => 'ʝ',
+ 7593 => 'ɭ',
+ 7594 => 'ᶅ',
+ 7595 => 'ʟ',
+ 7596 => 'ɱ',
+ 7597 => 'ɰ',
+ 7598 => 'ɲ',
+ 7599 => 'ɳ',
+ 7600 => 'ɴ',
+ 7601 => 'ɵ',
+ 7602 => 'ɸ',
+ 7603 => 'ʂ',
+ 7604 => 'ʃ',
+ 7605 => 'ƫ',
+ 7606 => 'ʉ',
+ 7607 => 'ʊ',
+ 7608 => 'ᴜ',
+ 7609 => 'ʋ',
+ 7610 => 'ʌ',
+ 7611 => 'z',
+ 7612 => 'ʐ',
+ 7613 => 'ʑ',
+ 7614 => 'ʒ',
+ 7615 => 'θ',
+ 7680 => 'ḁ',
+ 7682 => 'ḃ',
+ 7684 => 'ḅ',
+ 7686 => 'ḇ',
+ 7688 => 'ḉ',
+ 7690 => 'ḋ',
+ 7692 => 'ḍ',
+ 7694 => 'ḏ',
+ 7696 => 'ḑ',
+ 7698 => 'ḓ',
+ 7700 => 'ḕ',
+ 7702 => 'ḗ',
+ 7704 => 'ḙ',
+ 7706 => 'ḛ',
+ 7708 => 'ḝ',
+ 7710 => 'ḟ',
+ 7712 => 'ḡ',
+ 7714 => 'ḣ',
+ 7716 => 'ḥ',
+ 7718 => 'ḧ',
+ 7720 => 'ḩ',
+ 7722 => 'ḫ',
+ 7724 => 'ḭ',
+ 7726 => 'ḯ',
+ 7728 => 'ḱ',
+ 7730 => 'ḳ',
+ 7732 => 'ḵ',
+ 7734 => 'ḷ',
+ 7736 => 'ḹ',
+ 7738 => 'ḻ',
+ 7740 => 'ḽ',
+ 7742 => 'ḿ',
+ 7744 => 'ṁ',
+ 7746 => 'ṃ',
+ 7748 => 'ṅ',
+ 7750 => 'ṇ',
+ 7752 => 'ṉ',
+ 7754 => 'ṋ',
+ 7756 => 'ṍ',
+ 7758 => 'ṏ',
+ 7760 => 'ṑ',
+ 7762 => 'ṓ',
+ 7764 => 'ṕ',
+ 7766 => 'ṗ',
+ 7768 => 'ṙ',
+ 7770 => 'ṛ',
+ 7772 => 'ṝ',
+ 7774 => 'ṟ',
+ 7776 => 'ṡ',
+ 7778 => 'ṣ',
+ 7780 => 'ṥ',
+ 7782 => 'ṧ',
+ 7784 => 'ṩ',
+ 7786 => 'ṫ',
+ 7788 => 'ṭ',
+ 7790 => 'ṯ',
+ 7792 => 'ṱ',
+ 7794 => 'ṳ',
+ 7796 => 'ṵ',
+ 7798 => 'ṷ',
+ 7800 => 'ṹ',
+ 7802 => 'ṻ',
+ 7804 => 'ṽ',
+ 7806 => 'ṿ',
+ 7808 => 'ẁ',
+ 7810 => 'ẃ',
+ 7812 => 'ẅ',
+ 7814 => 'ẇ',
+ 7816 => 'ẉ',
+ 7818 => 'ẋ',
+ 7820 => 'ẍ',
+ 7822 => 'ẏ',
+ 7824 => 'ẑ',
+ 7826 => 'ẓ',
+ 7828 => 'ẕ',
+ 7834 => 'aʾ',
+ 7835 => 'ṡ',
+ 7838 => 'ss',
+ 7840 => 'ạ',
+ 7842 => 'ả',
+ 7844 => 'ấ',
+ 7846 => 'ầ',
+ 7848 => 'ẩ',
+ 7850 => 'ẫ',
+ 7852 => 'ậ',
+ 7854 => 'ắ',
+ 7856 => 'ằ',
+ 7858 => 'ẳ',
+ 7860 => 'ẵ',
+ 7862 => 'ặ',
+ 7864 => 'ẹ',
+ 7866 => 'ẻ',
+ 7868 => 'ẽ',
+ 7870 => 'ế',
+ 7872 => 'ề',
+ 7874 => 'ể',
+ 7876 => 'ễ',
+ 7878 => 'ệ',
+ 7880 => 'ỉ',
+ 7882 => 'ị',
+ 7884 => 'ọ',
+ 7886 => 'ỏ',
+ 7888 => 'ố',
+ 7890 => 'ồ',
+ 7892 => 'ổ',
+ 7894 => 'ỗ',
+ 7896 => 'ộ',
+ 7898 => 'ớ',
+ 7900 => 'ờ',
+ 7902 => 'ở',
+ 7904 => 'ỡ',
+ 7906 => 'ợ',
+ 7908 => 'ụ',
+ 7910 => 'ủ',
+ 7912 => 'ứ',
+ 7914 => 'ừ',
+ 7916 => 'ử',
+ 7918 => 'ữ',
+ 7920 => 'ự',
+ 7922 => 'ỳ',
+ 7924 => 'ỵ',
+ 7926 => 'ỷ',
+ 7928 => 'ỹ',
+ 7930 => 'ỻ',
+ 7932 => 'ỽ',
+ 7934 => 'ỿ',
+ 7944 => 'ἀ',
+ 7945 => 'ἁ',
+ 7946 => 'ἂ',
+ 7947 => 'ἃ',
+ 7948 => 'ἄ',
+ 7949 => 'ἅ',
+ 7950 => 'ἆ',
+ 7951 => 'ἇ',
+ 7960 => 'ἐ',
+ 7961 => 'ἑ',
+ 7962 => 'ἒ',
+ 7963 => 'ἓ',
+ 7964 => 'ἔ',
+ 7965 => 'ἕ',
+ 7976 => 'ἠ',
+ 7977 => 'ἡ',
+ 7978 => 'ἢ',
+ 7979 => 'ἣ',
+ 7980 => 'ἤ',
+ 7981 => 'ἥ',
+ 7982 => 'ἦ',
+ 7983 => 'ἧ',
+ 7992 => 'ἰ',
+ 7993 => 'ἱ',
+ 7994 => 'ἲ',
+ 7995 => 'ἳ',
+ 7996 => 'ἴ',
+ 7997 => 'ἵ',
+ 7998 => 'ἶ',
+ 7999 => 'ἷ',
+ 8008 => 'ὀ',
+ 8009 => 'ὁ',
+ 8010 => 'ὂ',
+ 8011 => 'ὃ',
+ 8012 => 'ὄ',
+ 8013 => 'ὅ',
+ 8025 => 'ὑ',
+ 8027 => 'ὓ',
+ 8029 => 'ὕ',
+ 8031 => 'ὗ',
+ 8040 => 'ὠ',
+ 8041 => 'ὡ',
+ 8042 => 'ὢ',
+ 8043 => 'ὣ',
+ 8044 => 'ὤ',
+ 8045 => 'ὥ',
+ 8046 => 'ὦ',
+ 8047 => 'ὧ',
+ 8049 => 'ά',
+ 8051 => 'έ',
+ 8053 => 'ή',
+ 8055 => 'ί',
+ 8057 => 'ό',
+ 8059 => 'ύ',
+ 8061 => 'ώ',
+ 8064 => 'ἀι',
+ 8065 => 'ἁι',
+ 8066 => 'ἂι',
+ 8067 => 'ἃι',
+ 8068 => 'ἄι',
+ 8069 => 'ἅι',
+ 8070 => 'ἆι',
+ 8071 => 'ἇι',
+ 8072 => 'ἀι',
+ 8073 => 'ἁι',
+ 8074 => 'ἂι',
+ 8075 => 'ἃι',
+ 8076 => 'ἄι',
+ 8077 => 'ἅι',
+ 8078 => 'ἆι',
+ 8079 => 'ἇι',
+ 8080 => 'ἠι',
+ 8081 => 'ἡι',
+ 8082 => 'ἢι',
+ 8083 => 'ἣι',
+ 8084 => 'ἤι',
+ 8085 => 'ἥι',
+ 8086 => 'ἦι',
+ 8087 => 'ἧι',
+ 8088 => 'ἠι',
+ 8089 => 'ἡι',
+ 8090 => 'ἢι',
+ 8091 => 'ἣι',
+ 8092 => 'ἤι',
+ 8093 => 'ἥι',
+ 8094 => 'ἦι',
+ 8095 => 'ἧι',
+ 8096 => 'ὠι',
+ 8097 => 'ὡι',
+ 8098 => 'ὢι',
+ 8099 => 'ὣι',
+ 8100 => 'ὤι',
+ 8101 => 'ὥι',
+ 8102 => 'ὦι',
+ 8103 => 'ὧι',
+ 8104 => 'ὠι',
+ 8105 => 'ὡι',
+ 8106 => 'ὢι',
+ 8107 => 'ὣι',
+ 8108 => 'ὤι',
+ 8109 => 'ὥι',
+ 8110 => 'ὦι',
+ 8111 => 'ὧι',
+ 8114 => 'ὰι',
+ 8115 => 'αι',
+ 8116 => 'άι',
+ 8119 => 'ᾶι',
+ 8120 => 'ᾰ',
+ 8121 => 'ᾱ',
+ 8122 => 'ὰ',
+ 8123 => 'ά',
+ 8124 => 'αι',
+ 8126 => 'ι',
+ 8130 => 'ὴι',
+ 8131 => 'ηι',
+ 8132 => 'ήι',
+ 8135 => 'ῆι',
+ 8136 => 'ὲ',
+ 8137 => 'έ',
+ 8138 => 'ὴ',
+ 8139 => 'ή',
+ 8140 => 'ηι',
+ 8147 => 'ΐ',
+ 8152 => 'ῐ',
+ 8153 => 'ῑ',
+ 8154 => 'ὶ',
+ 8155 => 'ί',
+ 8163 => 'ΰ',
+ 8168 => 'ῠ',
+ 8169 => 'ῡ',
+ 8170 => 'ὺ',
+ 8171 => 'ύ',
+ 8172 => 'ῥ',
+ 8178 => 'ὼι',
+ 8179 => 'ωι',
+ 8180 => 'ώι',
+ 8183 => 'ῶι',
+ 8184 => 'ὸ',
+ 8185 => 'ό',
+ 8186 => 'ὼ',
+ 8187 => 'ώ',
+ 8188 => 'ωι',
+ 8209 => '‐',
+ 8243 => '′′',
+ 8244 => '′′′',
+ 8246 => '‵‵',
+ 8247 => '‵‵‵',
+ 8279 => '′′′′',
+ 8304 => '0',
+ 8305 => 'i',
+ 8308 => '4',
+ 8309 => '5',
+ 8310 => '6',
+ 8311 => '7',
+ 8312 => '8',
+ 8313 => '9',
+ 8315 => '−',
+ 8319 => 'n',
+ 8320 => '0',
+ 8321 => '1',
+ 8322 => '2',
+ 8323 => '3',
+ 8324 => '4',
+ 8325 => '5',
+ 8326 => '6',
+ 8327 => '7',
+ 8328 => '8',
+ 8329 => '9',
+ 8331 => '−',
+ 8336 => 'a',
+ 8337 => 'e',
+ 8338 => 'o',
+ 8339 => 'x',
+ 8340 => 'ə',
+ 8341 => 'h',
+ 8342 => 'k',
+ 8343 => 'l',
+ 8344 => 'm',
+ 8345 => 'n',
+ 8346 => 'p',
+ 8347 => 's',
+ 8348 => 't',
+ 8360 => 'rs',
+ 8450 => 'c',
+ 8451 => '°c',
+ 8455 => 'ɛ',
+ 8457 => '°f',
+ 8458 => 'g',
+ 8459 => 'h',
+ 8460 => 'h',
+ 8461 => 'h',
+ 8462 => 'h',
+ 8463 => 'ħ',
+ 8464 => 'i',
+ 8465 => 'i',
+ 8466 => 'l',
+ 8467 => 'l',
+ 8469 => 'n',
+ 8470 => 'no',
+ 8473 => 'p',
+ 8474 => 'q',
+ 8475 => 'r',
+ 8476 => 'r',
+ 8477 => 'r',
+ 8480 => 'sm',
+ 8481 => 'tel',
+ 8482 => 'tm',
+ 8484 => 'z',
+ 8486 => 'ω',
+ 8488 => 'z',
+ 8490 => 'k',
+ 8491 => 'å',
+ 8492 => 'b',
+ 8493 => 'c',
+ 8495 => 'e',
+ 8496 => 'e',
+ 8497 => 'f',
+ 8499 => 'm',
+ 8500 => 'o',
+ 8501 => 'א',
+ 8502 => 'ב',
+ 8503 => 'ג',
+ 8504 => 'ד',
+ 8505 => 'i',
+ 8507 => 'fax',
+ 8508 => 'π',
+ 8509 => 'γ',
+ 8510 => 'γ',
+ 8511 => 'π',
+ 8512 => '∑',
+ 8517 => 'd',
+ 8518 => 'd',
+ 8519 => 'e',
+ 8520 => 'i',
+ 8521 => 'j',
+ 8528 => '1⁄7',
+ 8529 => '1⁄9',
+ 8530 => '1⁄10',
+ 8531 => '1⁄3',
+ 8532 => '2⁄3',
+ 8533 => '1⁄5',
+ 8534 => '2⁄5',
+ 8535 => '3⁄5',
+ 8536 => '4⁄5',
+ 8537 => '1⁄6',
+ 8538 => '5⁄6',
+ 8539 => '1⁄8',
+ 8540 => '3⁄8',
+ 8541 => '5⁄8',
+ 8542 => '7⁄8',
+ 8543 => '1⁄',
+ 8544 => 'i',
+ 8545 => 'ii',
+ 8546 => 'iii',
+ 8547 => 'iv',
+ 8548 => 'v',
+ 8549 => 'vi',
+ 8550 => 'vii',
+ 8551 => 'viii',
+ 8552 => 'ix',
+ 8553 => 'x',
+ 8554 => 'xi',
+ 8555 => 'xii',
+ 8556 => 'l',
+ 8557 => 'c',
+ 8558 => 'd',
+ 8559 => 'm',
+ 8560 => 'i',
+ 8561 => 'ii',
+ 8562 => 'iii',
+ 8563 => 'iv',
+ 8564 => 'v',
+ 8565 => 'vi',
+ 8566 => 'vii',
+ 8567 => 'viii',
+ 8568 => 'ix',
+ 8569 => 'x',
+ 8570 => 'xi',
+ 8571 => 'xii',
+ 8572 => 'l',
+ 8573 => 'c',
+ 8574 => 'd',
+ 8575 => 'm',
+ 8585 => '0⁄3',
+ 8748 => '∫∫',
+ 8749 => '∫∫∫',
+ 8751 => '∮∮',
+ 8752 => '∮∮∮',
+ 9001 => '〈',
+ 9002 => '〉',
+ 9312 => '1',
+ 9313 => '2',
+ 9314 => '3',
+ 9315 => '4',
+ 9316 => '5',
+ 9317 => '6',
+ 9318 => '7',
+ 9319 => '8',
+ 9320 => '9',
+ 9321 => '10',
+ 9322 => '11',
+ 9323 => '12',
+ 9324 => '13',
+ 9325 => '14',
+ 9326 => '15',
+ 9327 => '16',
+ 9328 => '17',
+ 9329 => '18',
+ 9330 => '19',
+ 9331 => '20',
+ 9398 => 'a',
+ 9399 => 'b',
+ 9400 => 'c',
+ 9401 => 'd',
+ 9402 => 'e',
+ 9403 => 'f',
+ 9404 => 'g',
+ 9405 => 'h',
+ 9406 => 'i',
+ 9407 => 'j',
+ 9408 => 'k',
+ 9409 => 'l',
+ 9410 => 'm',
+ 9411 => 'n',
+ 9412 => 'o',
+ 9413 => 'p',
+ 9414 => 'q',
+ 9415 => 'r',
+ 9416 => 's',
+ 9417 => 't',
+ 9418 => 'u',
+ 9419 => 'v',
+ 9420 => 'w',
+ 9421 => 'x',
+ 9422 => 'y',
+ 9423 => 'z',
+ 9424 => 'a',
+ 9425 => 'b',
+ 9426 => 'c',
+ 9427 => 'd',
+ 9428 => 'e',
+ 9429 => 'f',
+ 9430 => 'g',
+ 9431 => 'h',
+ 9432 => 'i',
+ 9433 => 'j',
+ 9434 => 'k',
+ 9435 => 'l',
+ 9436 => 'm',
+ 9437 => 'n',
+ 9438 => 'o',
+ 9439 => 'p',
+ 9440 => 'q',
+ 9441 => 'r',
+ 9442 => 's',
+ 9443 => 't',
+ 9444 => 'u',
+ 9445 => 'v',
+ 9446 => 'w',
+ 9447 => 'x',
+ 9448 => 'y',
+ 9449 => 'z',
+ 9450 => '0',
+ 10764 => '∫∫∫∫',
+ 10972 => '⫝̸',
+ 11264 => 'ⰰ',
+ 11265 => 'ⰱ',
+ 11266 => 'ⰲ',
+ 11267 => 'ⰳ',
+ 11268 => 'ⰴ',
+ 11269 => 'ⰵ',
+ 11270 => 'ⰶ',
+ 11271 => 'ⰷ',
+ 11272 => 'ⰸ',
+ 11273 => 'ⰹ',
+ 11274 => 'ⰺ',
+ 11275 => 'ⰻ',
+ 11276 => 'ⰼ',
+ 11277 => 'ⰽ',
+ 11278 => 'ⰾ',
+ 11279 => 'ⰿ',
+ 11280 => 'ⱀ',
+ 11281 => 'ⱁ',
+ 11282 => 'ⱂ',
+ 11283 => 'ⱃ',
+ 11284 => 'ⱄ',
+ 11285 => 'ⱅ',
+ 11286 => 'ⱆ',
+ 11287 => 'ⱇ',
+ 11288 => 'ⱈ',
+ 11289 => 'ⱉ',
+ 11290 => 'ⱊ',
+ 11291 => 'ⱋ',
+ 11292 => 'ⱌ',
+ 11293 => 'ⱍ',
+ 11294 => 'ⱎ',
+ 11295 => 'ⱏ',
+ 11296 => 'ⱐ',
+ 11297 => 'ⱑ',
+ 11298 => 'ⱒ',
+ 11299 => 'ⱓ',
+ 11300 => 'ⱔ',
+ 11301 => 'ⱕ',
+ 11302 => 'ⱖ',
+ 11303 => 'ⱗ',
+ 11304 => 'ⱘ',
+ 11305 => 'ⱙ',
+ 11306 => 'ⱚ',
+ 11307 => 'ⱛ',
+ 11308 => 'ⱜ',
+ 11309 => 'ⱝ',
+ 11310 => 'ⱞ',
+ 11360 => 'ⱡ',
+ 11362 => 'ɫ',
+ 11363 => 'ᵽ',
+ 11364 => 'ɽ',
+ 11367 => 'ⱨ',
+ 11369 => 'ⱪ',
+ 11371 => 'ⱬ',
+ 11373 => 'ɑ',
+ 11374 => 'ɱ',
+ 11375 => 'ɐ',
+ 11376 => 'ɒ',
+ 11378 => 'ⱳ',
+ 11381 => 'ⱶ',
+ 11388 => 'j',
+ 11389 => 'v',
+ 11390 => 'ȿ',
+ 11391 => 'ɀ',
+ 11392 => 'ⲁ',
+ 11394 => 'ⲃ',
+ 11396 => 'ⲅ',
+ 11398 => 'ⲇ',
+ 11400 => 'ⲉ',
+ 11402 => 'ⲋ',
+ 11404 => 'ⲍ',
+ 11406 => 'ⲏ',
+ 11408 => 'ⲑ',
+ 11410 => 'ⲓ',
+ 11412 => 'ⲕ',
+ 11414 => 'ⲗ',
+ 11416 => 'ⲙ',
+ 11418 => 'ⲛ',
+ 11420 => 'ⲝ',
+ 11422 => 'ⲟ',
+ 11424 => 'ⲡ',
+ 11426 => 'ⲣ',
+ 11428 => 'ⲥ',
+ 11430 => 'ⲧ',
+ 11432 => 'ⲩ',
+ 11434 => 'ⲫ',
+ 11436 => 'ⲭ',
+ 11438 => 'ⲯ',
+ 11440 => 'ⲱ',
+ 11442 => 'ⲳ',
+ 11444 => 'ⲵ',
+ 11446 => 'ⲷ',
+ 11448 => 'ⲹ',
+ 11450 => 'ⲻ',
+ 11452 => 'ⲽ',
+ 11454 => 'ⲿ',
+ 11456 => 'ⳁ',
+ 11458 => 'ⳃ',
+ 11460 => 'ⳅ',
+ 11462 => 'ⳇ',
+ 11464 => 'ⳉ',
+ 11466 => 'ⳋ',
+ 11468 => 'ⳍ',
+ 11470 => 'ⳏ',
+ 11472 => 'ⳑ',
+ 11474 => 'ⳓ',
+ 11476 => 'ⳕ',
+ 11478 => 'ⳗ',
+ 11480 => 'ⳙ',
+ 11482 => 'ⳛ',
+ 11484 => 'ⳝ',
+ 11486 => 'ⳟ',
+ 11488 => 'ⳡ',
+ 11490 => 'ⳣ',
+ 11499 => 'ⳬ',
+ 11501 => 'ⳮ',
+ 11506 => 'ⳳ',
+ 11631 => 'ⵡ',
+ 11935 => '母',
+ 12019 => '龟',
+ 12032 => '一',
+ 12033 => '丨',
+ 12034 => '丶',
+ 12035 => '丿',
+ 12036 => '乙',
+ 12037 => '亅',
+ 12038 => '二',
+ 12039 => '亠',
+ 12040 => '人',
+ 12041 => '儿',
+ 12042 => '入',
+ 12043 => '八',
+ 12044 => '冂',
+ 12045 => '冖',
+ 12046 => '冫',
+ 12047 => '几',
+ 12048 => '凵',
+ 12049 => '刀',
+ 12050 => '力',
+ 12051 => '勹',
+ 12052 => '匕',
+ 12053 => '匚',
+ 12054 => '匸',
+ 12055 => '十',
+ 12056 => '卜',
+ 12057 => '卩',
+ 12058 => '厂',
+ 12059 => '厶',
+ 12060 => '又',
+ 12061 => '口',
+ 12062 => '囗',
+ 12063 => '土',
+ 12064 => '士',
+ 12065 => '夂',
+ 12066 => '夊',
+ 12067 => '夕',
+ 12068 => '大',
+ 12069 => '女',
+ 12070 => '子',
+ 12071 => '宀',
+ 12072 => '寸',
+ 12073 => '小',
+ 12074 => '尢',
+ 12075 => '尸',
+ 12076 => '屮',
+ 12077 => '山',
+ 12078 => '巛',
+ 12079 => '工',
+ 12080 => '己',
+ 12081 => '巾',
+ 12082 => '干',
+ 12083 => '幺',
+ 12084 => '广',
+ 12085 => '廴',
+ 12086 => '廾',
+ 12087 => '弋',
+ 12088 => '弓',
+ 12089 => '彐',
+ 12090 => '彡',
+ 12091 => '彳',
+ 12092 => '心',
+ 12093 => '戈',
+ 12094 => '戶',
+ 12095 => '手',
+ 12096 => '支',
+ 12097 => '攴',
+ 12098 => '文',
+ 12099 => '斗',
+ 12100 => '斤',
+ 12101 => '方',
+ 12102 => '无',
+ 12103 => '日',
+ 12104 => '曰',
+ 12105 => '月',
+ 12106 => '木',
+ 12107 => '欠',
+ 12108 => '止',
+ 12109 => '歹',
+ 12110 => '殳',
+ 12111 => '毋',
+ 12112 => '比',
+ 12113 => '毛',
+ 12114 => '氏',
+ 12115 => '气',
+ 12116 => '水',
+ 12117 => '火',
+ 12118 => '爪',
+ 12119 => '父',
+ 12120 => '爻',
+ 12121 => '爿',
+ 12122 => '片',
+ 12123 => '牙',
+ 12124 => '牛',
+ 12125 => '犬',
+ 12126 => '玄',
+ 12127 => '玉',
+ 12128 => '瓜',
+ 12129 => '瓦',
+ 12130 => '甘',
+ 12131 => '生',
+ 12132 => '用',
+ 12133 => '田',
+ 12134 => '疋',
+ 12135 => '疒',
+ 12136 => '癶',
+ 12137 => '白',
+ 12138 => '皮',
+ 12139 => '皿',
+ 12140 => '目',
+ 12141 => '矛',
+ 12142 => '矢',
+ 12143 => '石',
+ 12144 => '示',
+ 12145 => '禸',
+ 12146 => '禾',
+ 12147 => '穴',
+ 12148 => '立',
+ 12149 => '竹',
+ 12150 => '米',
+ 12151 => '糸',
+ 12152 => '缶',
+ 12153 => '网',
+ 12154 => '羊',
+ 12155 => '羽',
+ 12156 => '老',
+ 12157 => '而',
+ 12158 => '耒',
+ 12159 => '耳',
+ 12160 => '聿',
+ 12161 => '肉',
+ 12162 => '臣',
+ 12163 => '自',
+ 12164 => '至',
+ 12165 => '臼',
+ 12166 => '舌',
+ 12167 => '舛',
+ 12168 => '舟',
+ 12169 => '艮',
+ 12170 => '色',
+ 12171 => '艸',
+ 12172 => '虍',
+ 12173 => '虫',
+ 12174 => '血',
+ 12175 => '行',
+ 12176 => '衣',
+ 12177 => '襾',
+ 12178 => '見',
+ 12179 => '角',
+ 12180 => '言',
+ 12181 => '谷',
+ 12182 => '豆',
+ 12183 => '豕',
+ 12184 => '豸',
+ 12185 => '貝',
+ 12186 => '赤',
+ 12187 => '走',
+ 12188 => '足',
+ 12189 => '身',
+ 12190 => '車',
+ 12191 => '辛',
+ 12192 => '辰',
+ 12193 => '辵',
+ 12194 => '邑',
+ 12195 => '酉',
+ 12196 => '釆',
+ 12197 => '里',
+ 12198 => '金',
+ 12199 => '長',
+ 12200 => '門',
+ 12201 => '阜',
+ 12202 => '隶',
+ 12203 => '隹',
+ 12204 => '雨',
+ 12205 => '靑',
+ 12206 => '非',
+ 12207 => '面',
+ 12208 => '革',
+ 12209 => '韋',
+ 12210 => '韭',
+ 12211 => '音',
+ 12212 => '頁',
+ 12213 => '風',
+ 12214 => '飛',
+ 12215 => '食',
+ 12216 => '首',
+ 12217 => '香',
+ 12218 => '馬',
+ 12219 => '骨',
+ 12220 => '高',
+ 12221 => '髟',
+ 12222 => '鬥',
+ 12223 => '鬯',
+ 12224 => '鬲',
+ 12225 => '鬼',
+ 12226 => '魚',
+ 12227 => '鳥',
+ 12228 => '鹵',
+ 12229 => '鹿',
+ 12230 => '麥',
+ 12231 => '麻',
+ 12232 => '黃',
+ 12233 => '黍',
+ 12234 => '黑',
+ 12235 => '黹',
+ 12236 => '黽',
+ 12237 => '鼎',
+ 12238 => '鼓',
+ 12239 => '鼠',
+ 12240 => '鼻',
+ 12241 => '齊',
+ 12242 => '齒',
+ 12243 => '龍',
+ 12244 => '龜',
+ 12245 => '龠',
+ 12290 => '.',
+ 12342 => '〒',
+ 12344 => '十',
+ 12345 => '卄',
+ 12346 => '卅',
+ 12447 => 'より',
+ 12543 => 'コト',
+ 12593 => 'ᄀ',
+ 12594 => 'ᄁ',
+ 12595 => 'ᆪ',
+ 12596 => 'ᄂ',
+ 12597 => 'ᆬ',
+ 12598 => 'ᆭ',
+ 12599 => 'ᄃ',
+ 12600 => 'ᄄ',
+ 12601 => 'ᄅ',
+ 12602 => 'ᆰ',
+ 12603 => 'ᆱ',
+ 12604 => 'ᆲ',
+ 12605 => 'ᆳ',
+ 12606 => 'ᆴ',
+ 12607 => 'ᆵ',
+ 12608 => 'ᄚ',
+ 12609 => 'ᄆ',
+ 12610 => 'ᄇ',
+ 12611 => 'ᄈ',
+ 12612 => 'ᄡ',
+ 12613 => 'ᄉ',
+ 12614 => 'ᄊ',
+ 12615 => 'ᄋ',
+ 12616 => 'ᄌ',
+ 12617 => 'ᄍ',
+ 12618 => 'ᄎ',
+ 12619 => 'ᄏ',
+ 12620 => 'ᄐ',
+ 12621 => 'ᄑ',
+ 12622 => 'ᄒ',
+ 12623 => 'ᅡ',
+ 12624 => 'ᅢ',
+ 12625 => 'ᅣ',
+ 12626 => 'ᅤ',
+ 12627 => 'ᅥ',
+ 12628 => 'ᅦ',
+ 12629 => 'ᅧ',
+ 12630 => 'ᅨ',
+ 12631 => 'ᅩ',
+ 12632 => 'ᅪ',
+ 12633 => 'ᅫ',
+ 12634 => 'ᅬ',
+ 12635 => 'ᅭ',
+ 12636 => 'ᅮ',
+ 12637 => 'ᅯ',
+ 12638 => 'ᅰ',
+ 12639 => 'ᅱ',
+ 12640 => 'ᅲ',
+ 12641 => 'ᅳ',
+ 12642 => 'ᅴ',
+ 12643 => 'ᅵ',
+ 12645 => 'ᄔ',
+ 12646 => 'ᄕ',
+ 12647 => 'ᇇ',
+ 12648 => 'ᇈ',
+ 12649 => 'ᇌ',
+ 12650 => 'ᇎ',
+ 12651 => 'ᇓ',
+ 12652 => 'ᇗ',
+ 12653 => 'ᇙ',
+ 12654 => 'ᄜ',
+ 12655 => 'ᇝ',
+ 12656 => 'ᇟ',
+ 12657 => 'ᄝ',
+ 12658 => 'ᄞ',
+ 12659 => 'ᄠ',
+ 12660 => 'ᄢ',
+ 12661 => 'ᄣ',
+ 12662 => 'ᄧ',
+ 12663 => 'ᄩ',
+ 12664 => 'ᄫ',
+ 12665 => 'ᄬ',
+ 12666 => 'ᄭ',
+ 12667 => 'ᄮ',
+ 12668 => 'ᄯ',
+ 12669 => 'ᄲ',
+ 12670 => 'ᄶ',
+ 12671 => 'ᅀ',
+ 12672 => 'ᅇ',
+ 12673 => 'ᅌ',
+ 12674 => 'ᇱ',
+ 12675 => 'ᇲ',
+ 12676 => 'ᅗ',
+ 12677 => 'ᅘ',
+ 12678 => 'ᅙ',
+ 12679 => 'ᆄ',
+ 12680 => 'ᆅ',
+ 12681 => 'ᆈ',
+ 12682 => 'ᆑ',
+ 12683 => 'ᆒ',
+ 12684 => 'ᆔ',
+ 12685 => 'ᆞ',
+ 12686 => 'ᆡ',
+ 12690 => '一',
+ 12691 => '二',
+ 12692 => '三',
+ 12693 => '四',
+ 12694 => '上',
+ 12695 => '中',
+ 12696 => '下',
+ 12697 => '甲',
+ 12698 => '乙',
+ 12699 => '丙',
+ 12700 => '丁',
+ 12701 => '天',
+ 12702 => '地',
+ 12703 => '人',
+ 12868 => '問',
+ 12869 => '幼',
+ 12870 => '文',
+ 12871 => '箏',
+ 12880 => 'pte',
+ 12881 => '21',
+ 12882 => '22',
+ 12883 => '23',
+ 12884 => '24',
+ 12885 => '25',
+ 12886 => '26',
+ 12887 => '27',
+ 12888 => '28',
+ 12889 => '29',
+ 12890 => '30',
+ 12891 => '31',
+ 12892 => '32',
+ 12893 => '33',
+ 12894 => '34',
+ 12895 => '35',
+ 12896 => 'ᄀ',
+ 12897 => 'ᄂ',
+ 12898 => 'ᄃ',
+ 12899 => 'ᄅ',
+ 12900 => 'ᄆ',
+ 12901 => 'ᄇ',
+ 12902 => 'ᄉ',
+ 12903 => 'ᄋ',
+ 12904 => 'ᄌ',
+ 12905 => 'ᄎ',
+ 12906 => 'ᄏ',
+ 12907 => 'ᄐ',
+ 12908 => 'ᄑ',
+ 12909 => 'ᄒ',
+ 12910 => '가',
+ 12911 => '나',
+ 12912 => '다',
+ 12913 => '라',
+ 12914 => '마',
+ 12915 => '바',
+ 12916 => '사',
+ 12917 => '아',
+ 12918 => '자',
+ 12919 => '차',
+ 12920 => '카',
+ 12921 => '타',
+ 12922 => '파',
+ 12923 => '하',
+ 12924 => '참고',
+ 12925 => '주의',
+ 12926 => '우',
+ 12928 => '一',
+ 12929 => '二',
+ 12930 => '三',
+ 12931 => '四',
+ 12932 => '五',
+ 12933 => '六',
+ 12934 => '七',
+ 12935 => '八',
+ 12936 => '九',
+ 12937 => '十',
+ 12938 => '月',
+ 12939 => '火',
+ 12940 => '水',
+ 12941 => '木',
+ 12942 => '金',
+ 12943 => '土',
+ 12944 => '日',
+ 12945 => '株',
+ 12946 => '有',
+ 12947 => '社',
+ 12948 => '名',
+ 12949 => '特',
+ 12950 => '財',
+ 12951 => '祝',
+ 12952 => '労',
+ 12953 => '秘',
+ 12954 => '男',
+ 12955 => '女',
+ 12956 => '適',
+ 12957 => '優',
+ 12958 => '印',
+ 12959 => '注',
+ 12960 => '項',
+ 12961 => '休',
+ 12962 => '写',
+ 12963 => '正',
+ 12964 => '上',
+ 12965 => '中',
+ 12966 => '下',
+ 12967 => '左',
+ 12968 => '右',
+ 12969 => '医',
+ 12970 => '宗',
+ 12971 => '学',
+ 12972 => '監',
+ 12973 => '企',
+ 12974 => '資',
+ 12975 => '協',
+ 12976 => '夜',
+ 12977 => '36',
+ 12978 => '37',
+ 12979 => '38',
+ 12980 => '39',
+ 12981 => '40',
+ 12982 => '41',
+ 12983 => '42',
+ 12984 => '43',
+ 12985 => '44',
+ 12986 => '45',
+ 12987 => '46',
+ 12988 => '47',
+ 12989 => '48',
+ 12990 => '49',
+ 12991 => '50',
+ 12992 => '1月',
+ 12993 => '2月',
+ 12994 => '3月',
+ 12995 => '4月',
+ 12996 => '5月',
+ 12997 => '6月',
+ 12998 => '7月',
+ 12999 => '8月',
+ 13000 => '9月',
+ 13001 => '10月',
+ 13002 => '11月',
+ 13003 => '12月',
+ 13004 => 'hg',
+ 13005 => 'erg',
+ 13006 => 'ev',
+ 13007 => 'ltd',
+ 13008 => 'ア',
+ 13009 => 'イ',
+ 13010 => 'ウ',
+ 13011 => 'エ',
+ 13012 => 'オ',
+ 13013 => 'カ',
+ 13014 => 'キ',
+ 13015 => 'ク',
+ 13016 => 'ケ',
+ 13017 => 'コ',
+ 13018 => 'サ',
+ 13019 => 'シ',
+ 13020 => 'ス',
+ 13021 => 'セ',
+ 13022 => 'ソ',
+ 13023 => 'タ',
+ 13024 => 'チ',
+ 13025 => 'ツ',
+ 13026 => 'テ',
+ 13027 => 'ト',
+ 13028 => 'ナ',
+ 13029 => 'ニ',
+ 13030 => 'ヌ',
+ 13031 => 'ネ',
+ 13032 => 'ノ',
+ 13033 => 'ハ',
+ 13034 => 'ヒ',
+ 13035 => 'フ',
+ 13036 => 'ヘ',
+ 13037 => 'ホ',
+ 13038 => 'マ',
+ 13039 => 'ミ',
+ 13040 => 'ム',
+ 13041 => 'メ',
+ 13042 => 'モ',
+ 13043 => 'ヤ',
+ 13044 => 'ユ',
+ 13045 => 'ヨ',
+ 13046 => 'ラ',
+ 13047 => 'リ',
+ 13048 => 'ル',
+ 13049 => 'レ',
+ 13050 => 'ロ',
+ 13051 => 'ワ',
+ 13052 => 'ヰ',
+ 13053 => 'ヱ',
+ 13054 => 'ヲ',
+ 13055 => '令和',
+ 13056 => 'アパート',
+ 13057 => 'アルファ',
+ 13058 => 'アンペア',
+ 13059 => 'アール',
+ 13060 => 'イニング',
+ 13061 => 'インチ',
+ 13062 => 'ウォン',
+ 13063 => 'エスクード',
+ 13064 => 'エーカー',
+ 13065 => 'オンス',
+ 13066 => 'オーム',
+ 13067 => 'カイリ',
+ 13068 => 'カラット',
+ 13069 => 'カロリー',
+ 13070 => 'ガロン',
+ 13071 => 'ガンマ',
+ 13072 => 'ギガ',
+ 13073 => 'ギニー',
+ 13074 => 'キュリー',
+ 13075 => 'ギルダー',
+ 13076 => 'キロ',
+ 13077 => 'キログラム',
+ 13078 => 'キロメートル',
+ 13079 => 'キロワット',
+ 13080 => 'グラム',
+ 13081 => 'グラムトン',
+ 13082 => 'クルゼイロ',
+ 13083 => 'クローネ',
+ 13084 => 'ケース',
+ 13085 => 'コルナ',
+ 13086 => 'コーポ',
+ 13087 => 'サイクル',
+ 13088 => 'サンチーム',
+ 13089 => 'シリング',
+ 13090 => 'センチ',
+ 13091 => 'セント',
+ 13092 => 'ダース',
+ 13093 => 'デシ',
+ 13094 => 'ドル',
+ 13095 => 'トン',
+ 13096 => 'ナノ',
+ 13097 => 'ノット',
+ 13098 => 'ハイツ',
+ 13099 => 'パーセント',
+ 13100 => 'パーツ',
+ 13101 => 'バーレル',
+ 13102 => 'ピアストル',
+ 13103 => 'ピクル',
+ 13104 => 'ピコ',
+ 13105 => 'ビル',
+ 13106 => 'ファラッド',
+ 13107 => 'フィート',
+ 13108 => 'ブッシェル',
+ 13109 => 'フラン',
+ 13110 => 'ヘクタール',
+ 13111 => 'ペソ',
+ 13112 => 'ペニヒ',
+ 13113 => 'ヘルツ',
+ 13114 => 'ペンス',
+ 13115 => 'ページ',
+ 13116 => 'ベータ',
+ 13117 => 'ポイント',
+ 13118 => 'ボルト',
+ 13119 => 'ホン',
+ 13120 => 'ポンド',
+ 13121 => 'ホール',
+ 13122 => 'ホーン',
+ 13123 => 'マイクロ',
+ 13124 => 'マイル',
+ 13125 => 'マッハ',
+ 13126 => 'マルク',
+ 13127 => 'マンション',
+ 13128 => 'ミクロン',
+ 13129 => 'ミリ',
+ 13130 => 'ミリバール',
+ 13131 => 'メガ',
+ 13132 => 'メガトン',
+ 13133 => 'メートル',
+ 13134 => 'ヤード',
+ 13135 => 'ヤール',
+ 13136 => 'ユアン',
+ 13137 => 'リットル',
+ 13138 => 'リラ',
+ 13139 => 'ルピー',
+ 13140 => 'ルーブル',
+ 13141 => 'レム',
+ 13142 => 'レントゲン',
+ 13143 => 'ワット',
+ 13144 => '0点',
+ 13145 => '1点',
+ 13146 => '2点',
+ 13147 => '3点',
+ 13148 => '4点',
+ 13149 => '5点',
+ 13150 => '6点',
+ 13151 => '7点',
+ 13152 => '8点',
+ 13153 => '9点',
+ 13154 => '10点',
+ 13155 => '11点',
+ 13156 => '12点',
+ 13157 => '13点',
+ 13158 => '14点',
+ 13159 => '15点',
+ 13160 => '16点',
+ 13161 => '17点',
+ 13162 => '18点',
+ 13163 => '19点',
+ 13164 => '20点',
+ 13165 => '21点',
+ 13166 => '22点',
+ 13167 => '23点',
+ 13168 => '24点',
+ 13169 => 'hpa',
+ 13170 => 'da',
+ 13171 => 'au',
+ 13172 => 'bar',
+ 13173 => 'ov',
+ 13174 => 'pc',
+ 13175 => 'dm',
+ 13176 => 'dm2',
+ 13177 => 'dm3',
+ 13178 => 'iu',
+ 13179 => '平成',
+ 13180 => '昭和',
+ 13181 => '大正',
+ 13182 => '明治',
+ 13183 => '株式会社',
+ 13184 => 'pa',
+ 13185 => 'na',
+ 13186 => 'μa',
+ 13187 => 'ma',
+ 13188 => 'ka',
+ 13189 => 'kb',
+ 13190 => 'mb',
+ 13191 => 'gb',
+ 13192 => 'cal',
+ 13193 => 'kcal',
+ 13194 => 'pf',
+ 13195 => 'nf',
+ 13196 => 'μf',
+ 13197 => 'μg',
+ 13198 => 'mg',
+ 13199 => 'kg',
+ 13200 => 'hz',
+ 13201 => 'khz',
+ 13202 => 'mhz',
+ 13203 => 'ghz',
+ 13204 => 'thz',
+ 13205 => 'μl',
+ 13206 => 'ml',
+ 13207 => 'dl',
+ 13208 => 'kl',
+ 13209 => 'fm',
+ 13210 => 'nm',
+ 13211 => 'μm',
+ 13212 => 'mm',
+ 13213 => 'cm',
+ 13214 => 'km',
+ 13215 => 'mm2',
+ 13216 => 'cm2',
+ 13217 => 'm2',
+ 13218 => 'km2',
+ 13219 => 'mm3',
+ 13220 => 'cm3',
+ 13221 => 'm3',
+ 13222 => 'km3',
+ 13223 => 'm∕s',
+ 13224 => 'm∕s2',
+ 13225 => 'pa',
+ 13226 => 'kpa',
+ 13227 => 'mpa',
+ 13228 => 'gpa',
+ 13229 => 'rad',
+ 13230 => 'rad∕s',
+ 13231 => 'rad∕s2',
+ 13232 => 'ps',
+ 13233 => 'ns',
+ 13234 => 'μs',
+ 13235 => 'ms',
+ 13236 => 'pv',
+ 13237 => 'nv',
+ 13238 => 'μv',
+ 13239 => 'mv',
+ 13240 => 'kv',
+ 13241 => 'mv',
+ 13242 => 'pw',
+ 13243 => 'nw',
+ 13244 => 'μw',
+ 13245 => 'mw',
+ 13246 => 'kw',
+ 13247 => 'mw',
+ 13248 => 'kω',
+ 13249 => 'mω',
+ 13251 => 'bq',
+ 13252 => 'cc',
+ 13253 => 'cd',
+ 13254 => 'c∕kg',
+ 13256 => 'db',
+ 13257 => 'gy',
+ 13258 => 'ha',
+ 13259 => 'hp',
+ 13260 => 'in',
+ 13261 => 'kk',
+ 13262 => 'km',
+ 13263 => 'kt',
+ 13264 => 'lm',
+ 13265 => 'ln',
+ 13266 => 'log',
+ 13267 => 'lx',
+ 13268 => 'mb',
+ 13269 => 'mil',
+ 13270 => 'mol',
+ 13271 => 'ph',
+ 13273 => 'ppm',
+ 13274 => 'pr',
+ 13275 => 'sr',
+ 13276 => 'sv',
+ 13277 => 'wb',
+ 13278 => 'v∕m',
+ 13279 => 'a∕m',
+ 13280 => '1日',
+ 13281 => '2日',
+ 13282 => '3日',
+ 13283 => '4日',
+ 13284 => '5日',
+ 13285 => '6日',
+ 13286 => '7日',
+ 13287 => '8日',
+ 13288 => '9日',
+ 13289 => '10日',
+ 13290 => '11日',
+ 13291 => '12日',
+ 13292 => '13日',
+ 13293 => '14日',
+ 13294 => '15日',
+ 13295 => '16日',
+ 13296 => '17日',
+ 13297 => '18日',
+ 13298 => '19日',
+ 13299 => '20日',
+ 13300 => '21日',
+ 13301 => '22日',
+ 13302 => '23日',
+ 13303 => '24日',
+ 13304 => '25日',
+ 13305 => '26日',
+ 13306 => '27日',
+ 13307 => '28日',
+ 13308 => '29日',
+ 13309 => '30日',
+ 13310 => '31日',
+ 13311 => 'gal',
+ 42560 => 'ꙁ',
+ 42562 => 'ꙃ',
+ 42564 => 'ꙅ',
+ 42566 => 'ꙇ',
+ 42568 => 'ꙉ',
+ 42570 => 'ꙋ',
+ 42572 => 'ꙍ',
+ 42574 => 'ꙏ',
+ 42576 => 'ꙑ',
+ 42578 => 'ꙓ',
+ 42580 => 'ꙕ',
+ 42582 => 'ꙗ',
+ 42584 => 'ꙙ',
+ 42586 => 'ꙛ',
+ 42588 => 'ꙝ',
+ 42590 => 'ꙟ',
+ 42592 => 'ꙡ',
+ 42594 => 'ꙣ',
+ 42596 => 'ꙥ',
+ 42598 => 'ꙧ',
+ 42600 => 'ꙩ',
+ 42602 => 'ꙫ',
+ 42604 => 'ꙭ',
+ 42624 => 'ꚁ',
+ 42626 => 'ꚃ',
+ 42628 => 'ꚅ',
+ 42630 => 'ꚇ',
+ 42632 => 'ꚉ',
+ 42634 => 'ꚋ',
+ 42636 => 'ꚍ',
+ 42638 => 'ꚏ',
+ 42640 => 'ꚑ',
+ 42642 => 'ꚓ',
+ 42644 => 'ꚕ',
+ 42646 => 'ꚗ',
+ 42648 => 'ꚙ',
+ 42650 => 'ꚛ',
+ 42652 => 'ъ',
+ 42653 => 'ь',
+ 42786 => 'ꜣ',
+ 42788 => 'ꜥ',
+ 42790 => 'ꜧ',
+ 42792 => 'ꜩ',
+ 42794 => 'ꜫ',
+ 42796 => 'ꜭ',
+ 42798 => 'ꜯ',
+ 42802 => 'ꜳ',
+ 42804 => 'ꜵ',
+ 42806 => 'ꜷ',
+ 42808 => 'ꜹ',
+ 42810 => 'ꜻ',
+ 42812 => 'ꜽ',
+ 42814 => 'ꜿ',
+ 42816 => 'ꝁ',
+ 42818 => 'ꝃ',
+ 42820 => 'ꝅ',
+ 42822 => 'ꝇ',
+ 42824 => 'ꝉ',
+ 42826 => 'ꝋ',
+ 42828 => 'ꝍ',
+ 42830 => 'ꝏ',
+ 42832 => 'ꝑ',
+ 42834 => 'ꝓ',
+ 42836 => 'ꝕ',
+ 42838 => 'ꝗ',
+ 42840 => 'ꝙ',
+ 42842 => 'ꝛ',
+ 42844 => 'ꝝ',
+ 42846 => 'ꝟ',
+ 42848 => 'ꝡ',
+ 42850 => 'ꝣ',
+ 42852 => 'ꝥ',
+ 42854 => 'ꝧ',
+ 42856 => 'ꝩ',
+ 42858 => 'ꝫ',
+ 42860 => 'ꝭ',
+ 42862 => 'ꝯ',
+ 42864 => 'ꝯ',
+ 42873 => 'ꝺ',
+ 42875 => 'ꝼ',
+ 42877 => 'ᵹ',
+ 42878 => 'ꝿ',
+ 42880 => 'ꞁ',
+ 42882 => 'ꞃ',
+ 42884 => 'ꞅ',
+ 42886 => 'ꞇ',
+ 42891 => 'ꞌ',
+ 42893 => 'ɥ',
+ 42896 => 'ꞑ',
+ 42898 => 'ꞓ',
+ 42902 => 'ꞗ',
+ 42904 => 'ꞙ',
+ 42906 => 'ꞛ',
+ 42908 => 'ꞝ',
+ 42910 => 'ꞟ',
+ 42912 => 'ꞡ',
+ 42914 => 'ꞣ',
+ 42916 => 'ꞥ',
+ 42918 => 'ꞧ',
+ 42920 => 'ꞩ',
+ 42922 => 'ɦ',
+ 42923 => 'ɜ',
+ 42924 => 'ɡ',
+ 42925 => 'ɬ',
+ 42926 => 'ɪ',
+ 42928 => 'ʞ',
+ 42929 => 'ʇ',
+ 42930 => 'ʝ',
+ 42931 => 'ꭓ',
+ 42932 => 'ꞵ',
+ 42934 => 'ꞷ',
+ 42936 => 'ꞹ',
+ 42938 => 'ꞻ',
+ 42940 => 'ꞽ',
+ 42942 => 'ꞿ',
+ 42946 => 'ꟃ',
+ 42948 => 'ꞔ',
+ 42949 => 'ʂ',
+ 42950 => 'ᶎ',
+ 42951 => 'ꟈ',
+ 42953 => 'ꟊ',
+ 42997 => 'ꟶ',
+ 43000 => 'ħ',
+ 43001 => 'œ',
+ 43868 => 'ꜧ',
+ 43869 => 'ꬷ',
+ 43870 => 'ɫ',
+ 43871 => 'ꭒ',
+ 43881 => 'ʍ',
+ 43888 => 'Ꭰ',
+ 43889 => 'Ꭱ',
+ 43890 => 'Ꭲ',
+ 43891 => 'Ꭳ',
+ 43892 => 'Ꭴ',
+ 43893 => 'Ꭵ',
+ 43894 => 'Ꭶ',
+ 43895 => 'Ꭷ',
+ 43896 => 'Ꭸ',
+ 43897 => 'Ꭹ',
+ 43898 => 'Ꭺ',
+ 43899 => 'Ꭻ',
+ 43900 => 'Ꭼ',
+ 43901 => 'Ꭽ',
+ 43902 => 'Ꭾ',
+ 43903 => 'Ꭿ',
+ 43904 => 'Ꮀ',
+ 43905 => 'Ꮁ',
+ 43906 => 'Ꮂ',
+ 43907 => 'Ꮃ',
+ 43908 => 'Ꮄ',
+ 43909 => 'Ꮅ',
+ 43910 => 'Ꮆ',
+ 43911 => 'Ꮇ',
+ 43912 => 'Ꮈ',
+ 43913 => 'Ꮉ',
+ 43914 => 'Ꮊ',
+ 43915 => 'Ꮋ',
+ 43916 => 'Ꮌ',
+ 43917 => 'Ꮍ',
+ 43918 => 'Ꮎ',
+ 43919 => 'Ꮏ',
+ 43920 => 'Ꮐ',
+ 43921 => 'Ꮑ',
+ 43922 => 'Ꮒ',
+ 43923 => 'Ꮓ',
+ 43924 => 'Ꮔ',
+ 43925 => 'Ꮕ',
+ 43926 => 'Ꮖ',
+ 43927 => 'Ꮗ',
+ 43928 => 'Ꮘ',
+ 43929 => 'Ꮙ',
+ 43930 => 'Ꮚ',
+ 43931 => 'Ꮛ',
+ 43932 => 'Ꮜ',
+ 43933 => 'Ꮝ',
+ 43934 => 'Ꮞ',
+ 43935 => 'Ꮟ',
+ 43936 => 'Ꮠ',
+ 43937 => 'Ꮡ',
+ 43938 => 'Ꮢ',
+ 43939 => 'Ꮣ',
+ 43940 => 'Ꮤ',
+ 43941 => 'Ꮥ',
+ 43942 => 'Ꮦ',
+ 43943 => 'Ꮧ',
+ 43944 => 'Ꮨ',
+ 43945 => 'Ꮩ',
+ 43946 => 'Ꮪ',
+ 43947 => 'Ꮫ',
+ 43948 => 'Ꮬ',
+ 43949 => 'Ꮭ',
+ 43950 => 'Ꮮ',
+ 43951 => 'Ꮯ',
+ 43952 => 'Ꮰ',
+ 43953 => 'Ꮱ',
+ 43954 => 'Ꮲ',
+ 43955 => 'Ꮳ',
+ 43956 => 'Ꮴ',
+ 43957 => 'Ꮵ',
+ 43958 => 'Ꮶ',
+ 43959 => 'Ꮷ',
+ 43960 => 'Ꮸ',
+ 43961 => 'Ꮹ',
+ 43962 => 'Ꮺ',
+ 43963 => 'Ꮻ',
+ 43964 => 'Ꮼ',
+ 43965 => 'Ꮽ',
+ 43966 => 'Ꮾ',
+ 43967 => 'Ꮿ',
+ 63744 => '豈',
+ 63745 => '更',
+ 63746 => '車',
+ 63747 => '賈',
+ 63748 => '滑',
+ 63749 => '串',
+ 63750 => '句',
+ 63751 => '龜',
+ 63752 => '龜',
+ 63753 => '契',
+ 63754 => '金',
+ 63755 => '喇',
+ 63756 => '奈',
+ 63757 => '懶',
+ 63758 => '癩',
+ 63759 => '羅',
+ 63760 => '蘿',
+ 63761 => '螺',
+ 63762 => '裸',
+ 63763 => '邏',
+ 63764 => '樂',
+ 63765 => '洛',
+ 63766 => '烙',
+ 63767 => '珞',
+ 63768 => '落',
+ 63769 => '酪',
+ 63770 => '駱',
+ 63771 => '亂',
+ 63772 => '卵',
+ 63773 => '欄',
+ 63774 => '爛',
+ 63775 => '蘭',
+ 63776 => '鸞',
+ 63777 => '嵐',
+ 63778 => '濫',
+ 63779 => '藍',
+ 63780 => '襤',
+ 63781 => '拉',
+ 63782 => '臘',
+ 63783 => '蠟',
+ 63784 => '廊',
+ 63785 => '朗',
+ 63786 => '浪',
+ 63787 => '狼',
+ 63788 => '郎',
+ 63789 => '來',
+ 63790 => '冷',
+ 63791 => '勞',
+ 63792 => '擄',
+ 63793 => '櫓',
+ 63794 => '爐',
+ 63795 => '盧',
+ 63796 => '老',
+ 63797 => '蘆',
+ 63798 => '虜',
+ 63799 => '路',
+ 63800 => '露',
+ 63801 => '魯',
+ 63802 => '鷺',
+ 63803 => '碌',
+ 63804 => '祿',
+ 63805 => '綠',
+ 63806 => '菉',
+ 63807 => '錄',
+ 63808 => '鹿',
+ 63809 => '論',
+ 63810 => '壟',
+ 63811 => '弄',
+ 63812 => '籠',
+ 63813 => '聾',
+ 63814 => '牢',
+ 63815 => '磊',
+ 63816 => '賂',
+ 63817 => '雷',
+ 63818 => '壘',
+ 63819 => '屢',
+ 63820 => '樓',
+ 63821 => '淚',
+ 63822 => '漏',
+ 63823 => '累',
+ 63824 => '縷',
+ 63825 => '陋',
+ 63826 => '勒',
+ 63827 => '肋',
+ 63828 => '凜',
+ 63829 => '凌',
+ 63830 => '稜',
+ 63831 => '綾',
+ 63832 => '菱',
+ 63833 => '陵',
+ 63834 => '讀',
+ 63835 => '拏',
+ 63836 => '樂',
+ 63837 => '諾',
+ 63838 => '丹',
+ 63839 => '寧',
+ 63840 => '怒',
+ 63841 => '率',
+ 63842 => '異',
+ 63843 => '北',
+ 63844 => '磻',
+ 63845 => '便',
+ 63846 => '復',
+ 63847 => '不',
+ 63848 => '泌',
+ 63849 => '數',
+ 63850 => '索',
+ 63851 => '參',
+ 63852 => '塞',
+ 63853 => '省',
+ 63854 => '葉',
+ 63855 => '說',
+ 63856 => '殺',
+ 63857 => '辰',
+ 63858 => '沈',
+ 63859 => '拾',
+ 63860 => '若',
+ 63861 => '掠',
+ 63862 => '略',
+ 63863 => '亮',
+ 63864 => '兩',
+ 63865 => '凉',
+ 63866 => '梁',
+ 63867 => '糧',
+ 63868 => '良',
+ 63869 => '諒',
+ 63870 => '量',
+ 63871 => '勵',
+ 63872 => '呂',
+ 63873 => '女',
+ 63874 => '廬',
+ 63875 => '旅',
+ 63876 => '濾',
+ 63877 => '礪',
+ 63878 => '閭',
+ 63879 => '驪',
+ 63880 => '麗',
+ 63881 => '黎',
+ 63882 => '力',
+ 63883 => '曆',
+ 63884 => '歷',
+ 63885 => '轢',
+ 63886 => '年',
+ 63887 => '憐',
+ 63888 => '戀',
+ 63889 => '撚',
+ 63890 => '漣',
+ 63891 => '煉',
+ 63892 => '璉',
+ 63893 => '秊',
+ 63894 => '練',
+ 63895 => '聯',
+ 63896 => '輦',
+ 63897 => '蓮',
+ 63898 => '連',
+ 63899 => '鍊',
+ 63900 => '列',
+ 63901 => '劣',
+ 63902 => '咽',
+ 63903 => '烈',
+ 63904 => '裂',
+ 63905 => '說',
+ 63906 => '廉',
+ 63907 => '念',
+ 63908 => '捻',
+ 63909 => '殮',
+ 63910 => '簾',
+ 63911 => '獵',
+ 63912 => '令',
+ 63913 => '囹',
+ 63914 => '寧',
+ 63915 => '嶺',
+ 63916 => '怜',
+ 63917 => '玲',
+ 63918 => '瑩',
+ 63919 => '羚',
+ 63920 => '聆',
+ 63921 => '鈴',
+ 63922 => '零',
+ 63923 => '靈',
+ 63924 => '領',
+ 63925 => '例',
+ 63926 => '禮',
+ 63927 => '醴',
+ 63928 => '隸',
+ 63929 => '惡',
+ 63930 => '了',
+ 63931 => '僚',
+ 63932 => '寮',
+ 63933 => '尿',
+ 63934 => '料',
+ 63935 => '樂',
+ 63936 => '燎',
+ 63937 => '療',
+ 63938 => '蓼',
+ 63939 => '遼',
+ 63940 => '龍',
+ 63941 => '暈',
+ 63942 => '阮',
+ 63943 => '劉',
+ 63944 => '杻',
+ 63945 => '柳',
+ 63946 => '流',
+ 63947 => '溜',
+ 63948 => '琉',
+ 63949 => '留',
+ 63950 => '硫',
+ 63951 => '紐',
+ 63952 => '類',
+ 63953 => '六',
+ 63954 => '戮',
+ 63955 => '陸',
+ 63956 => '倫',
+ 63957 => '崙',
+ 63958 => '淪',
+ 63959 => '輪',
+ 63960 => '律',
+ 63961 => '慄',
+ 63962 => '栗',
+ 63963 => '率',
+ 63964 => '隆',
+ 63965 => '利',
+ 63966 => '吏',
+ 63967 => '履',
+ 63968 => '易',
+ 63969 => '李',
+ 63970 => '梨',
+ 63971 => '泥',
+ 63972 => '理',
+ 63973 => '痢',
+ 63974 => '罹',
+ 63975 => '裏',
+ 63976 => '裡',
+ 63977 => '里',
+ 63978 => '離',
+ 63979 => '匿',
+ 63980 => '溺',
+ 63981 => '吝',
+ 63982 => '燐',
+ 63983 => '璘',
+ 63984 => '藺',
+ 63985 => '隣',
+ 63986 => '鱗',
+ 63987 => '麟',
+ 63988 => '林',
+ 63989 => '淋',
+ 63990 => '臨',
+ 63991 => '立',
+ 63992 => '笠',
+ 63993 => '粒',
+ 63994 => '狀',
+ 63995 => '炙',
+ 63996 => '識',
+ 63997 => '什',
+ 63998 => '茶',
+ 63999 => '刺',
+ 64000 => '切',
+ 64001 => '度',
+ 64002 => '拓',
+ 64003 => '糖',
+ 64004 => '宅',
+ 64005 => '洞',
+ 64006 => '暴',
+ 64007 => '輻',
+ 64008 => '行',
+ 64009 => '降',
+ 64010 => '見',
+ 64011 => '廓',
+ 64012 => '兀',
+ 64013 => '嗀',
+ 64016 => '塚',
+ 64018 => '晴',
+ 64021 => '凞',
+ 64022 => '猪',
+ 64023 => '益',
+ 64024 => '礼',
+ 64025 => '神',
+ 64026 => '祥',
+ 64027 => '福',
+ 64028 => '靖',
+ 64029 => '精',
+ 64030 => '羽',
+ 64032 => '蘒',
+ 64034 => '諸',
+ 64037 => '逸',
+ 64038 => '都',
+ 64042 => '飯',
+ 64043 => '飼',
+ 64044 => '館',
+ 64045 => '鶴',
+ 64046 => '郞',
+ 64047 => '隷',
+ 64048 => '侮',
+ 64049 => '僧',
+ 64050 => '免',
+ 64051 => '勉',
+ 64052 => '勤',
+ 64053 => '卑',
+ 64054 => '喝',
+ 64055 => '嘆',
+ 64056 => '器',
+ 64057 => '塀',
+ 64058 => '墨',
+ 64059 => '層',
+ 64060 => '屮',
+ 64061 => '悔',
+ 64062 => '慨',
+ 64063 => '憎',
+ 64064 => '懲',
+ 64065 => '敏',
+ 64066 => '既',
+ 64067 => '暑',
+ 64068 => '梅',
+ 64069 => '海',
+ 64070 => '渚',
+ 64071 => '漢',
+ 64072 => '煮',
+ 64073 => '爫',
+ 64074 => '琢',
+ 64075 => '碑',
+ 64076 => '社',
+ 64077 => '祉',
+ 64078 => '祈',
+ 64079 => '祐',
+ 64080 => '祖',
+ 64081 => '祝',
+ 64082 => '禍',
+ 64083 => '禎',
+ 64084 => '穀',
+ 64085 => '突',
+ 64086 => '節',
+ 64087 => '練',
+ 64088 => '縉',
+ 64089 => '繁',
+ 64090 => '署',
+ 64091 => '者',
+ 64092 => '臭',
+ 64093 => '艹',
+ 64094 => '艹',
+ 64095 => '著',
+ 64096 => '褐',
+ 64097 => '視',
+ 64098 => '謁',
+ 64099 => '謹',
+ 64100 => '賓',
+ 64101 => '贈',
+ 64102 => '辶',
+ 64103 => '逸',
+ 64104 => '難',
+ 64105 => '響',
+ 64106 => '頻',
+ 64107 => '恵',
+ 64108 => '𤋮',
+ 64109 => '舘',
+ 64112 => '並',
+ 64113 => '况',
+ 64114 => '全',
+ 64115 => '侀',
+ 64116 => '充',
+ 64117 => '冀',
+ 64118 => '勇',
+ 64119 => '勺',
+ 64120 => '喝',
+ 64121 => '啕',
+ 64122 => '喙',
+ 64123 => '嗢',
+ 64124 => '塚',
+ 64125 => '墳',
+ 64126 => '奄',
+ 64127 => '奔',
+ 64128 => '婢',
+ 64129 => '嬨',
+ 64130 => '廒',
+ 64131 => '廙',
+ 64132 => '彩',
+ 64133 => '徭',
+ 64134 => '惘',
+ 64135 => '慎',
+ 64136 => '愈',
+ 64137 => '憎',
+ 64138 => '慠',
+ 64139 => '懲',
+ 64140 => '戴',
+ 64141 => '揄',
+ 64142 => '搜',
+ 64143 => '摒',
+ 64144 => '敖',
+ 64145 => '晴',
+ 64146 => '朗',
+ 64147 => '望',
+ 64148 => '杖',
+ 64149 => '歹',
+ 64150 => '殺',
+ 64151 => '流',
+ 64152 => '滛',
+ 64153 => '滋',
+ 64154 => '漢',
+ 64155 => '瀞',
+ 64156 => '煮',
+ 64157 => '瞧',
+ 64158 => '爵',
+ 64159 => '犯',
+ 64160 => '猪',
+ 64161 => '瑱',
+ 64162 => '甆',
+ 64163 => '画',
+ 64164 => '瘝',
+ 64165 => '瘟',
+ 64166 => '益',
+ 64167 => '盛',
+ 64168 => '直',
+ 64169 => '睊',
+ 64170 => '着',
+ 64171 => '磌',
+ 64172 => '窱',
+ 64173 => '節',
+ 64174 => '类',
+ 64175 => '絛',
+ 64176 => '練',
+ 64177 => '缾',
+ 64178 => '者',
+ 64179 => '荒',
+ 64180 => '華',
+ 64181 => '蝹',
+ 64182 => '襁',
+ 64183 => '覆',
+ 64184 => '視',
+ 64185 => '調',
+ 64186 => '諸',
+ 64187 => '請',
+ 64188 => '謁',
+ 64189 => '諾',
+ 64190 => '諭',
+ 64191 => '謹',
+ 64192 => '變',
+ 64193 => '贈',
+ 64194 => '輸',
+ 64195 => '遲',
+ 64196 => '醙',
+ 64197 => '鉶',
+ 64198 => '陼',
+ 64199 => '難',
+ 64200 => '靖',
+ 64201 => '韛',
+ 64202 => '響',
+ 64203 => '頋',
+ 64204 => '頻',
+ 64205 => '鬒',
+ 64206 => '龜',
+ 64207 => '𢡊',
+ 64208 => '𢡄',
+ 64209 => '𣏕',
+ 64210 => '㮝',
+ 64211 => '䀘',
+ 64212 => '䀹',
+ 64213 => '𥉉',
+ 64214 => '𥳐',
+ 64215 => '𧻓',
+ 64216 => '齃',
+ 64217 => '龎',
+ 64256 => 'ff',
+ 64257 => 'fi',
+ 64258 => 'fl',
+ 64259 => 'ffi',
+ 64260 => 'ffl',
+ 64261 => 'st',
+ 64262 => 'st',
+ 64275 => 'մն',
+ 64276 => 'մե',
+ 64277 => 'մի',
+ 64278 => 'վն',
+ 64279 => 'մխ',
+ 64285 => 'יִ',
+ 64287 => 'ײַ',
+ 64288 => 'ע',
+ 64289 => 'א',
+ 64290 => 'ד',
+ 64291 => 'ה',
+ 64292 => 'כ',
+ 64293 => 'ל',
+ 64294 => 'ם',
+ 64295 => 'ר',
+ 64296 => 'ת',
+ 64298 => 'שׁ',
+ 64299 => 'שׂ',
+ 64300 => 'שּׁ',
+ 64301 => 'שּׂ',
+ 64302 => 'אַ',
+ 64303 => 'אָ',
+ 64304 => 'אּ',
+ 64305 => 'בּ',
+ 64306 => 'גּ',
+ 64307 => 'דּ',
+ 64308 => 'הּ',
+ 64309 => 'וּ',
+ 64310 => 'זּ',
+ 64312 => 'טּ',
+ 64313 => 'יּ',
+ 64314 => 'ךּ',
+ 64315 => 'כּ',
+ 64316 => 'לּ',
+ 64318 => 'מּ',
+ 64320 => 'נּ',
+ 64321 => 'סּ',
+ 64323 => 'ףּ',
+ 64324 => 'פּ',
+ 64326 => 'צּ',
+ 64327 => 'קּ',
+ 64328 => 'רּ',
+ 64329 => 'שּ',
+ 64330 => 'תּ',
+ 64331 => 'וֹ',
+ 64332 => 'בֿ',
+ 64333 => 'כֿ',
+ 64334 => 'פֿ',
+ 64335 => 'אל',
+ 64336 => 'ٱ',
+ 64337 => 'ٱ',
+ 64338 => 'ٻ',
+ 64339 => 'ٻ',
+ 64340 => 'ٻ',
+ 64341 => 'ٻ',
+ 64342 => 'پ',
+ 64343 => 'پ',
+ 64344 => 'پ',
+ 64345 => 'پ',
+ 64346 => 'ڀ',
+ 64347 => 'ڀ',
+ 64348 => 'ڀ',
+ 64349 => 'ڀ',
+ 64350 => 'ٺ',
+ 64351 => 'ٺ',
+ 64352 => 'ٺ',
+ 64353 => 'ٺ',
+ 64354 => 'ٿ',
+ 64355 => 'ٿ',
+ 64356 => 'ٿ',
+ 64357 => 'ٿ',
+ 64358 => 'ٹ',
+ 64359 => 'ٹ',
+ 64360 => 'ٹ',
+ 64361 => 'ٹ',
+ 64362 => 'ڤ',
+ 64363 => 'ڤ',
+ 64364 => 'ڤ',
+ 64365 => 'ڤ',
+ 64366 => 'ڦ',
+ 64367 => 'ڦ',
+ 64368 => 'ڦ',
+ 64369 => 'ڦ',
+ 64370 => 'ڄ',
+ 64371 => 'ڄ',
+ 64372 => 'ڄ',
+ 64373 => 'ڄ',
+ 64374 => 'ڃ',
+ 64375 => 'ڃ',
+ 64376 => 'ڃ',
+ 64377 => 'ڃ',
+ 64378 => 'چ',
+ 64379 => 'چ',
+ 64380 => 'چ',
+ 64381 => 'چ',
+ 64382 => 'ڇ',
+ 64383 => 'ڇ',
+ 64384 => 'ڇ',
+ 64385 => 'ڇ',
+ 64386 => 'ڍ',
+ 64387 => 'ڍ',
+ 64388 => 'ڌ',
+ 64389 => 'ڌ',
+ 64390 => 'ڎ',
+ 64391 => 'ڎ',
+ 64392 => 'ڈ',
+ 64393 => 'ڈ',
+ 64394 => 'ژ',
+ 64395 => 'ژ',
+ 64396 => 'ڑ',
+ 64397 => 'ڑ',
+ 64398 => 'ک',
+ 64399 => 'ک',
+ 64400 => 'ک',
+ 64401 => 'ک',
+ 64402 => 'گ',
+ 64403 => 'گ',
+ 64404 => 'گ',
+ 64405 => 'گ',
+ 64406 => 'ڳ',
+ 64407 => 'ڳ',
+ 64408 => 'ڳ',
+ 64409 => 'ڳ',
+ 64410 => 'ڱ',
+ 64411 => 'ڱ',
+ 64412 => 'ڱ',
+ 64413 => 'ڱ',
+ 64414 => 'ں',
+ 64415 => 'ں',
+ 64416 => 'ڻ',
+ 64417 => 'ڻ',
+ 64418 => 'ڻ',
+ 64419 => 'ڻ',
+ 64420 => 'ۀ',
+ 64421 => 'ۀ',
+ 64422 => 'ہ',
+ 64423 => 'ہ',
+ 64424 => 'ہ',
+ 64425 => 'ہ',
+ 64426 => 'ھ',
+ 64427 => 'ھ',
+ 64428 => 'ھ',
+ 64429 => 'ھ',
+ 64430 => 'ے',
+ 64431 => 'ے',
+ 64432 => 'ۓ',
+ 64433 => 'ۓ',
+ 64467 => 'ڭ',
+ 64468 => 'ڭ',
+ 64469 => 'ڭ',
+ 64470 => 'ڭ',
+ 64471 => 'ۇ',
+ 64472 => 'ۇ',
+ 64473 => 'ۆ',
+ 64474 => 'ۆ',
+ 64475 => 'ۈ',
+ 64476 => 'ۈ',
+ 64477 => 'ۇٴ',
+ 64478 => 'ۋ',
+ 64479 => 'ۋ',
+ 64480 => 'ۅ',
+ 64481 => 'ۅ',
+ 64482 => 'ۉ',
+ 64483 => 'ۉ',
+ 64484 => 'ې',
+ 64485 => 'ې',
+ 64486 => 'ې',
+ 64487 => 'ې',
+ 64488 => 'ى',
+ 64489 => 'ى',
+ 64490 => 'ئا',
+ 64491 => 'ئا',
+ 64492 => 'ئە',
+ 64493 => 'ئە',
+ 64494 => 'ئو',
+ 64495 => 'ئو',
+ 64496 => 'ئۇ',
+ 64497 => 'ئۇ',
+ 64498 => 'ئۆ',
+ 64499 => 'ئۆ',
+ 64500 => 'ئۈ',
+ 64501 => 'ئۈ',
+ 64502 => 'ئې',
+ 64503 => 'ئې',
+ 64504 => 'ئې',
+ 64505 => 'ئى',
+ 64506 => 'ئى',
+ 64507 => 'ئى',
+ 64508 => 'ی',
+ 64509 => 'ی',
+ 64510 => 'ی',
+ 64511 => 'ی',
+ 64512 => 'ئج',
+ 64513 => 'ئح',
+ 64514 => 'ئم',
+ 64515 => 'ئى',
+ 64516 => 'ئي',
+ 64517 => 'بج',
+ 64518 => 'بح',
+ 64519 => 'بخ',
+ 64520 => 'بم',
+ 64521 => 'بى',
+ 64522 => 'بي',
+ 64523 => 'تج',
+ 64524 => 'تح',
+ 64525 => 'تخ',
+ 64526 => 'تم',
+ 64527 => 'تى',
+ 64528 => 'تي',
+ 64529 => 'ثج',
+ 64530 => 'ثم',
+ 64531 => 'ثى',
+ 64532 => 'ثي',
+ 64533 => 'جح',
+ 64534 => 'جم',
+ 64535 => 'حج',
+ 64536 => 'حم',
+ 64537 => 'خج',
+ 64538 => 'خح',
+ 64539 => 'خم',
+ 64540 => 'سج',
+ 64541 => 'سح',
+ 64542 => 'سخ',
+ 64543 => 'سم',
+ 64544 => 'صح',
+ 64545 => 'صم',
+ 64546 => 'ضج',
+ 64547 => 'ضح',
+ 64548 => 'ضخ',
+ 64549 => 'ضم',
+ 64550 => 'طح',
+ 64551 => 'طم',
+ 64552 => 'ظم',
+ 64553 => 'عج',
+ 64554 => 'عم',
+ 64555 => 'غج',
+ 64556 => 'غم',
+ 64557 => 'فج',
+ 64558 => 'فح',
+ 64559 => 'فخ',
+ 64560 => 'فم',
+ 64561 => 'فى',
+ 64562 => 'في',
+ 64563 => 'قح',
+ 64564 => 'قم',
+ 64565 => 'قى',
+ 64566 => 'قي',
+ 64567 => 'كا',
+ 64568 => 'كج',
+ 64569 => 'كح',
+ 64570 => 'كخ',
+ 64571 => 'كل',
+ 64572 => 'كم',
+ 64573 => 'كى',
+ 64574 => 'كي',
+ 64575 => 'لج',
+ 64576 => 'لح',
+ 64577 => 'لخ',
+ 64578 => 'لم',
+ 64579 => 'لى',
+ 64580 => 'لي',
+ 64581 => 'مج',
+ 64582 => 'مح',
+ 64583 => 'مخ',
+ 64584 => 'مم',
+ 64585 => 'مى',
+ 64586 => 'مي',
+ 64587 => 'نج',
+ 64588 => 'نح',
+ 64589 => 'نخ',
+ 64590 => 'نم',
+ 64591 => 'نى',
+ 64592 => 'ني',
+ 64593 => 'هج',
+ 64594 => 'هم',
+ 64595 => 'هى',
+ 64596 => 'هي',
+ 64597 => 'يج',
+ 64598 => 'يح',
+ 64599 => 'يخ',
+ 64600 => 'يم',
+ 64601 => 'يى',
+ 64602 => 'يي',
+ 64603 => 'ذٰ',
+ 64604 => 'رٰ',
+ 64605 => 'ىٰ',
+ 64612 => 'ئر',
+ 64613 => 'ئز',
+ 64614 => 'ئم',
+ 64615 => 'ئن',
+ 64616 => 'ئى',
+ 64617 => 'ئي',
+ 64618 => 'بر',
+ 64619 => 'بز',
+ 64620 => 'بم',
+ 64621 => 'بن',
+ 64622 => 'بى',
+ 64623 => 'بي',
+ 64624 => 'تر',
+ 64625 => 'تز',
+ 64626 => 'تم',
+ 64627 => 'تن',
+ 64628 => 'تى',
+ 64629 => 'تي',
+ 64630 => 'ثر',
+ 64631 => 'ثز',
+ 64632 => 'ثم',
+ 64633 => 'ثن',
+ 64634 => 'ثى',
+ 64635 => 'ثي',
+ 64636 => 'فى',
+ 64637 => 'في',
+ 64638 => 'قى',
+ 64639 => 'قي',
+ 64640 => 'كا',
+ 64641 => 'كل',
+ 64642 => 'كم',
+ 64643 => 'كى',
+ 64644 => 'كي',
+ 64645 => 'لم',
+ 64646 => 'لى',
+ 64647 => 'لي',
+ 64648 => 'ما',
+ 64649 => 'مم',
+ 64650 => 'نر',
+ 64651 => 'نز',
+ 64652 => 'نم',
+ 64653 => 'نن',
+ 64654 => 'نى',
+ 64655 => 'ني',
+ 64656 => 'ىٰ',
+ 64657 => 'ير',
+ 64658 => 'يز',
+ 64659 => 'يم',
+ 64660 => 'ين',
+ 64661 => 'يى',
+ 64662 => 'يي',
+ 64663 => 'ئج',
+ 64664 => 'ئح',
+ 64665 => 'ئخ',
+ 64666 => 'ئم',
+ 64667 => 'ئه',
+ 64668 => 'بج',
+ 64669 => 'بح',
+ 64670 => 'بخ',
+ 64671 => 'بم',
+ 64672 => 'به',
+ 64673 => 'تج',
+ 64674 => 'تح',
+ 64675 => 'تخ',
+ 64676 => 'تم',
+ 64677 => 'ته',
+ 64678 => 'ثم',
+ 64679 => 'جح',
+ 64680 => 'جم',
+ 64681 => 'حج',
+ 64682 => 'حم',
+ 64683 => 'خج',
+ 64684 => 'خم',
+ 64685 => 'سج',
+ 64686 => 'سح',
+ 64687 => 'سخ',
+ 64688 => 'سم',
+ 64689 => 'صح',
+ 64690 => 'صخ',
+ 64691 => 'صم',
+ 64692 => 'ضج',
+ 64693 => 'ضح',
+ 64694 => 'ضخ',
+ 64695 => 'ضم',
+ 64696 => 'طح',
+ 64697 => 'ظم',
+ 64698 => 'عج',
+ 64699 => 'عم',
+ 64700 => 'غج',
+ 64701 => 'غم',
+ 64702 => 'فج',
+ 64703 => 'فح',
+ 64704 => 'فخ',
+ 64705 => 'فم',
+ 64706 => 'قح',
+ 64707 => 'قم',
+ 64708 => 'كج',
+ 64709 => 'كح',
+ 64710 => 'كخ',
+ 64711 => 'كل',
+ 64712 => 'كم',
+ 64713 => 'لج',
+ 64714 => 'لح',
+ 64715 => 'لخ',
+ 64716 => 'لم',
+ 64717 => 'له',
+ 64718 => 'مج',
+ 64719 => 'مح',
+ 64720 => 'مخ',
+ 64721 => 'مم',
+ 64722 => 'نج',
+ 64723 => 'نح',
+ 64724 => 'نخ',
+ 64725 => 'نم',
+ 64726 => 'نه',
+ 64727 => 'هج',
+ 64728 => 'هم',
+ 64729 => 'هٰ',
+ 64730 => 'يج',
+ 64731 => 'يح',
+ 64732 => 'يخ',
+ 64733 => 'يم',
+ 64734 => 'يه',
+ 64735 => 'ئم',
+ 64736 => 'ئه',
+ 64737 => 'بم',
+ 64738 => 'به',
+ 64739 => 'تم',
+ 64740 => 'ته',
+ 64741 => 'ثم',
+ 64742 => 'ثه',
+ 64743 => 'سم',
+ 64744 => 'سه',
+ 64745 => 'شم',
+ 64746 => 'شه',
+ 64747 => 'كل',
+ 64748 => 'كم',
+ 64749 => 'لم',
+ 64750 => 'نم',
+ 64751 => 'نه',
+ 64752 => 'يم',
+ 64753 => 'يه',
+ 64754 => 'ـَّ',
+ 64755 => 'ـُّ',
+ 64756 => 'ـِّ',
+ 64757 => 'طى',
+ 64758 => 'طي',
+ 64759 => 'عى',
+ 64760 => 'عي',
+ 64761 => 'غى',
+ 64762 => 'غي',
+ 64763 => 'سى',
+ 64764 => 'سي',
+ 64765 => 'شى',
+ 64766 => 'شي',
+ 64767 => 'حى',
+ 64768 => 'حي',
+ 64769 => 'جى',
+ 64770 => 'جي',
+ 64771 => 'خى',
+ 64772 => 'خي',
+ 64773 => 'صى',
+ 64774 => 'صي',
+ 64775 => 'ضى',
+ 64776 => 'ضي',
+ 64777 => 'شج',
+ 64778 => 'شح',
+ 64779 => 'شخ',
+ 64780 => 'شم',
+ 64781 => 'شر',
+ 64782 => 'سر',
+ 64783 => 'صر',
+ 64784 => 'ضر',
+ 64785 => 'طى',
+ 64786 => 'طي',
+ 64787 => 'عى',
+ 64788 => 'عي',
+ 64789 => 'غى',
+ 64790 => 'غي',
+ 64791 => 'سى',
+ 64792 => 'سي',
+ 64793 => 'شى',
+ 64794 => 'شي',
+ 64795 => 'حى',
+ 64796 => 'حي',
+ 64797 => 'جى',
+ 64798 => 'جي',
+ 64799 => 'خى',
+ 64800 => 'خي',
+ 64801 => 'صى',
+ 64802 => 'صي',
+ 64803 => 'ضى',
+ 64804 => 'ضي',
+ 64805 => 'شج',
+ 64806 => 'شح',
+ 64807 => 'شخ',
+ 64808 => 'شم',
+ 64809 => 'شر',
+ 64810 => 'سر',
+ 64811 => 'صر',
+ 64812 => 'ضر',
+ 64813 => 'شج',
+ 64814 => 'شح',
+ 64815 => 'شخ',
+ 64816 => 'شم',
+ 64817 => 'سه',
+ 64818 => 'شه',
+ 64819 => 'طم',
+ 64820 => 'سج',
+ 64821 => 'سح',
+ 64822 => 'سخ',
+ 64823 => 'شج',
+ 64824 => 'شح',
+ 64825 => 'شخ',
+ 64826 => 'طم',
+ 64827 => 'ظم',
+ 64828 => 'اً',
+ 64829 => 'اً',
+ 64848 => 'تجم',
+ 64849 => 'تحج',
+ 64850 => 'تحج',
+ 64851 => 'تحم',
+ 64852 => 'تخم',
+ 64853 => 'تمج',
+ 64854 => 'تمح',
+ 64855 => 'تمخ',
+ 64856 => 'جمح',
+ 64857 => 'جمح',
+ 64858 => 'حمي',
+ 64859 => 'حمى',
+ 64860 => 'سحج',
+ 64861 => 'سجح',
+ 64862 => 'سجى',
+ 64863 => 'سمح',
+ 64864 => 'سمح',
+ 64865 => 'سمج',
+ 64866 => 'سمم',
+ 64867 => 'سمم',
+ 64868 => 'صحح',
+ 64869 => 'صحح',
+ 64870 => 'صمم',
+ 64871 => 'شحم',
+ 64872 => 'شحم',
+ 64873 => 'شجي',
+ 64874 => 'شمخ',
+ 64875 => 'شمخ',
+ 64876 => 'شمم',
+ 64877 => 'شمم',
+ 64878 => 'ضحى',
+ 64879 => 'ضخم',
+ 64880 => 'ضخم',
+ 64881 => 'طمح',
+ 64882 => 'طمح',
+ 64883 => 'طمم',
+ 64884 => 'طمي',
+ 64885 => 'عجم',
+ 64886 => 'عمم',
+ 64887 => 'عمم',
+ 64888 => 'عمى',
+ 64889 => 'غمم',
+ 64890 => 'غمي',
+ 64891 => 'غمى',
+ 64892 => 'فخم',
+ 64893 => 'فخم',
+ 64894 => 'قمح',
+ 64895 => 'قمم',
+ 64896 => 'لحم',
+ 64897 => 'لحي',
+ 64898 => 'لحى',
+ 64899 => 'لجج',
+ 64900 => 'لجج',
+ 64901 => 'لخم',
+ 64902 => 'لخم',
+ 64903 => 'لمح',
+ 64904 => 'لمح',
+ 64905 => 'محج',
+ 64906 => 'محم',
+ 64907 => 'محي',
+ 64908 => 'مجح',
+ 64909 => 'مجم',
+ 64910 => 'مخج',
+ 64911 => 'مخم',
+ 64914 => 'مجخ',
+ 64915 => 'همج',
+ 64916 => 'همم',
+ 64917 => 'نحم',
+ 64918 => 'نحى',
+ 64919 => 'نجم',
+ 64920 => 'نجم',
+ 64921 => 'نجى',
+ 64922 => 'نمي',
+ 64923 => 'نمى',
+ 64924 => 'يمم',
+ 64925 => 'يمم',
+ 64926 => 'بخي',
+ 64927 => 'تجي',
+ 64928 => 'تجى',
+ 64929 => 'تخي',
+ 64930 => 'تخى',
+ 64931 => 'تمي',
+ 64932 => 'تمى',
+ 64933 => 'جمي',
+ 64934 => 'جحى',
+ 64935 => 'جمى',
+ 64936 => 'سخى',
+ 64937 => 'صحي',
+ 64938 => 'شحي',
+ 64939 => 'ضحي',
+ 64940 => 'لجي',
+ 64941 => 'لمي',
+ 64942 => 'يحي',
+ 64943 => 'يجي',
+ 64944 => 'يمي',
+ 64945 => 'ممي',
+ 64946 => 'قمي',
+ 64947 => 'نحي',
+ 64948 => 'قمح',
+ 64949 => 'لحم',
+ 64950 => 'عمي',
+ 64951 => 'كمي',
+ 64952 => 'نجح',
+ 64953 => 'مخي',
+ 64954 => 'لجم',
+ 64955 => 'كمم',
+ 64956 => 'لجم',
+ 64957 => 'نجح',
+ 64958 => 'جحي',
+ 64959 => 'حجي',
+ 64960 => 'مجي',
+ 64961 => 'فمي',
+ 64962 => 'بحي',
+ 64963 => 'كمم',
+ 64964 => 'عجم',
+ 64965 => 'صمم',
+ 64966 => 'سخي',
+ 64967 => 'نجي',
+ 65008 => 'صلے',
+ 65009 => 'قلے',
+ 65010 => 'الله',
+ 65011 => 'اكبر',
+ 65012 => 'محمد',
+ 65013 => 'صلعم',
+ 65014 => 'رسول',
+ 65015 => 'عليه',
+ 65016 => 'وسلم',
+ 65017 => 'صلى',
+ 65020 => 'ریال',
+ 65041 => '、',
+ 65047 => '〖',
+ 65048 => '〗',
+ 65073 => '—',
+ 65074 => '–',
+ 65081 => '〔',
+ 65082 => '〕',
+ 65083 => '【',
+ 65084 => '】',
+ 65085 => '《',
+ 65086 => '》',
+ 65087 => '〈',
+ 65088 => '〉',
+ 65089 => '「',
+ 65090 => '」',
+ 65091 => '『',
+ 65092 => '』',
+ 65105 => '、',
+ 65112 => '—',
+ 65117 => '〔',
+ 65118 => '〕',
+ 65123 => '-',
+ 65137 => 'ـً',
+ 65143 => 'ـَ',
+ 65145 => 'ـُ',
+ 65147 => 'ـِ',
+ 65149 => 'ـّ',
+ 65151 => 'ـْ',
+ 65152 => 'ء',
+ 65153 => 'آ',
+ 65154 => 'آ',
+ 65155 => 'أ',
+ 65156 => 'أ',
+ 65157 => 'ؤ',
+ 65158 => 'ؤ',
+ 65159 => 'إ',
+ 65160 => 'إ',
+ 65161 => 'ئ',
+ 65162 => 'ئ',
+ 65163 => 'ئ',
+ 65164 => 'ئ',
+ 65165 => 'ا',
+ 65166 => 'ا',
+ 65167 => 'ب',
+ 65168 => 'ب',
+ 65169 => 'ب',
+ 65170 => 'ب',
+ 65171 => 'ة',
+ 65172 => 'ة',
+ 65173 => 'ت',
+ 65174 => 'ت',
+ 65175 => 'ت',
+ 65176 => 'ت',
+ 65177 => 'ث',
+ 65178 => 'ث',
+ 65179 => 'ث',
+ 65180 => 'ث',
+ 65181 => 'ج',
+ 65182 => 'ج',
+ 65183 => 'ج',
+ 65184 => 'ج',
+ 65185 => 'ح',
+ 65186 => 'ح',
+ 65187 => 'ح',
+ 65188 => 'ح',
+ 65189 => 'خ',
+ 65190 => 'خ',
+ 65191 => 'خ',
+ 65192 => 'خ',
+ 65193 => 'د',
+ 65194 => 'د',
+ 65195 => 'ذ',
+ 65196 => 'ذ',
+ 65197 => 'ر',
+ 65198 => 'ر',
+ 65199 => 'ز',
+ 65200 => 'ز',
+ 65201 => 'س',
+ 65202 => 'س',
+ 65203 => 'س',
+ 65204 => 'س',
+ 65205 => 'ش',
+ 65206 => 'ش',
+ 65207 => 'ش',
+ 65208 => 'ش',
+ 65209 => 'ص',
+ 65210 => 'ص',
+ 65211 => 'ص',
+ 65212 => 'ص',
+ 65213 => 'ض',
+ 65214 => 'ض',
+ 65215 => 'ض',
+ 65216 => 'ض',
+ 65217 => 'ط',
+ 65218 => 'ط',
+ 65219 => 'ط',
+ 65220 => 'ط',
+ 65221 => 'ظ',
+ 65222 => 'ظ',
+ 65223 => 'ظ',
+ 65224 => 'ظ',
+ 65225 => 'ع',
+ 65226 => 'ع',
+ 65227 => 'ع',
+ 65228 => 'ع',
+ 65229 => 'غ',
+ 65230 => 'غ',
+ 65231 => 'غ',
+ 65232 => 'غ',
+ 65233 => 'ف',
+ 65234 => 'ف',
+ 65235 => 'ف',
+ 65236 => 'ف',
+ 65237 => 'ق',
+ 65238 => 'ق',
+ 65239 => 'ق',
+ 65240 => 'ق',
+ 65241 => 'ك',
+ 65242 => 'ك',
+ 65243 => 'ك',
+ 65244 => 'ك',
+ 65245 => 'ل',
+ 65246 => 'ل',
+ 65247 => 'ل',
+ 65248 => 'ل',
+ 65249 => 'م',
+ 65250 => 'م',
+ 65251 => 'م',
+ 65252 => 'م',
+ 65253 => 'ن',
+ 65254 => 'ن',
+ 65255 => 'ن',
+ 65256 => 'ن',
+ 65257 => 'ه',
+ 65258 => 'ه',
+ 65259 => 'ه',
+ 65260 => 'ه',
+ 65261 => 'و',
+ 65262 => 'و',
+ 65263 => 'ى',
+ 65264 => 'ى',
+ 65265 => 'ي',
+ 65266 => 'ي',
+ 65267 => 'ي',
+ 65268 => 'ي',
+ 65269 => 'لآ',
+ 65270 => 'لآ',
+ 65271 => 'لأ',
+ 65272 => 'لأ',
+ 65273 => 'لإ',
+ 65274 => 'لإ',
+ 65275 => 'لا',
+ 65276 => 'لا',
+ 65293 => '-',
+ 65294 => '.',
+ 65296 => '0',
+ 65297 => '1',
+ 65298 => '2',
+ 65299 => '3',
+ 65300 => '4',
+ 65301 => '5',
+ 65302 => '6',
+ 65303 => '7',
+ 65304 => '8',
+ 65305 => '9',
+ 65313 => 'a',
+ 65314 => 'b',
+ 65315 => 'c',
+ 65316 => 'd',
+ 65317 => 'e',
+ 65318 => 'f',
+ 65319 => 'g',
+ 65320 => 'h',
+ 65321 => 'i',
+ 65322 => 'j',
+ 65323 => 'k',
+ 65324 => 'l',
+ 65325 => 'm',
+ 65326 => 'n',
+ 65327 => 'o',
+ 65328 => 'p',
+ 65329 => 'q',
+ 65330 => 'r',
+ 65331 => 's',
+ 65332 => 't',
+ 65333 => 'u',
+ 65334 => 'v',
+ 65335 => 'w',
+ 65336 => 'x',
+ 65337 => 'y',
+ 65338 => 'z',
+ 65345 => 'a',
+ 65346 => 'b',
+ 65347 => 'c',
+ 65348 => 'd',
+ 65349 => 'e',
+ 65350 => 'f',
+ 65351 => 'g',
+ 65352 => 'h',
+ 65353 => 'i',
+ 65354 => 'j',
+ 65355 => 'k',
+ 65356 => 'l',
+ 65357 => 'm',
+ 65358 => 'n',
+ 65359 => 'o',
+ 65360 => 'p',
+ 65361 => 'q',
+ 65362 => 'r',
+ 65363 => 's',
+ 65364 => 't',
+ 65365 => 'u',
+ 65366 => 'v',
+ 65367 => 'w',
+ 65368 => 'x',
+ 65369 => 'y',
+ 65370 => 'z',
+ 65375 => '⦅',
+ 65376 => '⦆',
+ 65377 => '.',
+ 65378 => '「',
+ 65379 => '」',
+ 65380 => '、',
+ 65381 => '・',
+ 65382 => 'ヲ',
+ 65383 => 'ァ',
+ 65384 => 'ィ',
+ 65385 => 'ゥ',
+ 65386 => 'ェ',
+ 65387 => 'ォ',
+ 65388 => 'ャ',
+ 65389 => 'ュ',
+ 65390 => 'ョ',
+ 65391 => 'ッ',
+ 65392 => 'ー',
+ 65393 => 'ア',
+ 65394 => 'イ',
+ 65395 => 'ウ',
+ 65396 => 'エ',
+ 65397 => 'オ',
+ 65398 => 'カ',
+ 65399 => 'キ',
+ 65400 => 'ク',
+ 65401 => 'ケ',
+ 65402 => 'コ',
+ 65403 => 'サ',
+ 65404 => 'シ',
+ 65405 => 'ス',
+ 65406 => 'セ',
+ 65407 => 'ソ',
+ 65408 => 'タ',
+ 65409 => 'チ',
+ 65410 => 'ツ',
+ 65411 => 'テ',
+ 65412 => 'ト',
+ 65413 => 'ナ',
+ 65414 => 'ニ',
+ 65415 => 'ヌ',
+ 65416 => 'ネ',
+ 65417 => 'ノ',
+ 65418 => 'ハ',
+ 65419 => 'ヒ',
+ 65420 => 'フ',
+ 65421 => 'ヘ',
+ 65422 => 'ホ',
+ 65423 => 'マ',
+ 65424 => 'ミ',
+ 65425 => 'ム',
+ 65426 => 'メ',
+ 65427 => 'モ',
+ 65428 => 'ヤ',
+ 65429 => 'ユ',
+ 65430 => 'ヨ',
+ 65431 => 'ラ',
+ 65432 => 'リ',
+ 65433 => 'ル',
+ 65434 => 'レ',
+ 65435 => 'ロ',
+ 65436 => 'ワ',
+ 65437 => 'ン',
+ 65438 => '゙',
+ 65439 => '゚',
+ 65441 => 'ᄀ',
+ 65442 => 'ᄁ',
+ 65443 => 'ᆪ',
+ 65444 => 'ᄂ',
+ 65445 => 'ᆬ',
+ 65446 => 'ᆭ',
+ 65447 => 'ᄃ',
+ 65448 => 'ᄄ',
+ 65449 => 'ᄅ',
+ 65450 => 'ᆰ',
+ 65451 => 'ᆱ',
+ 65452 => 'ᆲ',
+ 65453 => 'ᆳ',
+ 65454 => 'ᆴ',
+ 65455 => 'ᆵ',
+ 65456 => 'ᄚ',
+ 65457 => 'ᄆ',
+ 65458 => 'ᄇ',
+ 65459 => 'ᄈ',
+ 65460 => 'ᄡ',
+ 65461 => 'ᄉ',
+ 65462 => 'ᄊ',
+ 65463 => 'ᄋ',
+ 65464 => 'ᄌ',
+ 65465 => 'ᄍ',
+ 65466 => 'ᄎ',
+ 65467 => 'ᄏ',
+ 65468 => 'ᄐ',
+ 65469 => 'ᄑ',
+ 65470 => 'ᄒ',
+ 65474 => 'ᅡ',
+ 65475 => 'ᅢ',
+ 65476 => 'ᅣ',
+ 65477 => 'ᅤ',
+ 65478 => 'ᅥ',
+ 65479 => 'ᅦ',
+ 65482 => 'ᅧ',
+ 65483 => 'ᅨ',
+ 65484 => 'ᅩ',
+ 65485 => 'ᅪ',
+ 65486 => 'ᅫ',
+ 65487 => 'ᅬ',
+ 65490 => 'ᅭ',
+ 65491 => 'ᅮ',
+ 65492 => 'ᅯ',
+ 65493 => 'ᅰ',
+ 65494 => 'ᅱ',
+ 65495 => 'ᅲ',
+ 65498 => 'ᅳ',
+ 65499 => 'ᅴ',
+ 65500 => 'ᅵ',
+ 65504 => '¢',
+ 65505 => '£',
+ 65506 => '¬',
+ 65508 => '¦',
+ 65509 => '¥',
+ 65510 => '₩',
+ 65512 => '│',
+ 65513 => '←',
+ 65514 => '↑',
+ 65515 => '→',
+ 65516 => '↓',
+ 65517 => '■',
+ 65518 => '○',
+ 66560 => '𐐨',
+ 66561 => '𐐩',
+ 66562 => '𐐪',
+ 66563 => '𐐫',
+ 66564 => '𐐬',
+ 66565 => '𐐭',
+ 66566 => '𐐮',
+ 66567 => '𐐯',
+ 66568 => '𐐰',
+ 66569 => '𐐱',
+ 66570 => '𐐲',
+ 66571 => '𐐳',
+ 66572 => '𐐴',
+ 66573 => '𐐵',
+ 66574 => '𐐶',
+ 66575 => '𐐷',
+ 66576 => '𐐸',
+ 66577 => '𐐹',
+ 66578 => '𐐺',
+ 66579 => '𐐻',
+ 66580 => '𐐼',
+ 66581 => '𐐽',
+ 66582 => '𐐾',
+ 66583 => '𐐿',
+ 66584 => '𐑀',
+ 66585 => '𐑁',
+ 66586 => '𐑂',
+ 66587 => '𐑃',
+ 66588 => '𐑄',
+ 66589 => '𐑅',
+ 66590 => '𐑆',
+ 66591 => '𐑇',
+ 66592 => '𐑈',
+ 66593 => '𐑉',
+ 66594 => '𐑊',
+ 66595 => '𐑋',
+ 66596 => '𐑌',
+ 66597 => '𐑍',
+ 66598 => '𐑎',
+ 66599 => '𐑏',
+ 66736 => '𐓘',
+ 66737 => '𐓙',
+ 66738 => '𐓚',
+ 66739 => '𐓛',
+ 66740 => '𐓜',
+ 66741 => '𐓝',
+ 66742 => '𐓞',
+ 66743 => '𐓟',
+ 66744 => '𐓠',
+ 66745 => '𐓡',
+ 66746 => '𐓢',
+ 66747 => '𐓣',
+ 66748 => '𐓤',
+ 66749 => '𐓥',
+ 66750 => '𐓦',
+ 66751 => '𐓧',
+ 66752 => '𐓨',
+ 66753 => '𐓩',
+ 66754 => '𐓪',
+ 66755 => '𐓫',
+ 66756 => '𐓬',
+ 66757 => '𐓭',
+ 66758 => '𐓮',
+ 66759 => '𐓯',
+ 66760 => '𐓰',
+ 66761 => '𐓱',
+ 66762 => '𐓲',
+ 66763 => '𐓳',
+ 66764 => '𐓴',
+ 66765 => '𐓵',
+ 66766 => '𐓶',
+ 66767 => '𐓷',
+ 66768 => '𐓸',
+ 66769 => '𐓹',
+ 66770 => '𐓺',
+ 66771 => '𐓻',
+ 68736 => '𐳀',
+ 68737 => '𐳁',
+ 68738 => '𐳂',
+ 68739 => '𐳃',
+ 68740 => '𐳄',
+ 68741 => '𐳅',
+ 68742 => '𐳆',
+ 68743 => '𐳇',
+ 68744 => '𐳈',
+ 68745 => '𐳉',
+ 68746 => '𐳊',
+ 68747 => '𐳋',
+ 68748 => '𐳌',
+ 68749 => '𐳍',
+ 68750 => '𐳎',
+ 68751 => '𐳏',
+ 68752 => '𐳐',
+ 68753 => '𐳑',
+ 68754 => '𐳒',
+ 68755 => '𐳓',
+ 68756 => '𐳔',
+ 68757 => '𐳕',
+ 68758 => '𐳖',
+ 68759 => '𐳗',
+ 68760 => '𐳘',
+ 68761 => '𐳙',
+ 68762 => '𐳚',
+ 68763 => '𐳛',
+ 68764 => '𐳜',
+ 68765 => '𐳝',
+ 68766 => '𐳞',
+ 68767 => '𐳟',
+ 68768 => '𐳠',
+ 68769 => '𐳡',
+ 68770 => '𐳢',
+ 68771 => '𐳣',
+ 68772 => '𐳤',
+ 68773 => '𐳥',
+ 68774 => '𐳦',
+ 68775 => '𐳧',
+ 68776 => '𐳨',
+ 68777 => '𐳩',
+ 68778 => '𐳪',
+ 68779 => '𐳫',
+ 68780 => '𐳬',
+ 68781 => '𐳭',
+ 68782 => '𐳮',
+ 68783 => '𐳯',
+ 68784 => '𐳰',
+ 68785 => '𐳱',
+ 68786 => '𐳲',
+ 71840 => '𑣀',
+ 71841 => '𑣁',
+ 71842 => '𑣂',
+ 71843 => '𑣃',
+ 71844 => '𑣄',
+ 71845 => '𑣅',
+ 71846 => '𑣆',
+ 71847 => '𑣇',
+ 71848 => '𑣈',
+ 71849 => '𑣉',
+ 71850 => '𑣊',
+ 71851 => '𑣋',
+ 71852 => '𑣌',
+ 71853 => '𑣍',
+ 71854 => '𑣎',
+ 71855 => '𑣏',
+ 71856 => '𑣐',
+ 71857 => '𑣑',
+ 71858 => '𑣒',
+ 71859 => '𑣓',
+ 71860 => '𑣔',
+ 71861 => '𑣕',
+ 71862 => '𑣖',
+ 71863 => '𑣗',
+ 71864 => '𑣘',
+ 71865 => '𑣙',
+ 71866 => '𑣚',
+ 71867 => '𑣛',
+ 71868 => '𑣜',
+ 71869 => '𑣝',
+ 71870 => '𑣞',
+ 71871 => '𑣟',
+ 93760 => '𖹠',
+ 93761 => '𖹡',
+ 93762 => '𖹢',
+ 93763 => '𖹣',
+ 93764 => '𖹤',
+ 93765 => '𖹥',
+ 93766 => '𖹦',
+ 93767 => '𖹧',
+ 93768 => '𖹨',
+ 93769 => '𖹩',
+ 93770 => '𖹪',
+ 93771 => '𖹫',
+ 93772 => '𖹬',
+ 93773 => '𖹭',
+ 93774 => '𖹮',
+ 93775 => '𖹯',
+ 93776 => '𖹰',
+ 93777 => '𖹱',
+ 93778 => '𖹲',
+ 93779 => '𖹳',
+ 93780 => '𖹴',
+ 93781 => '𖹵',
+ 93782 => '𖹶',
+ 93783 => '𖹷',
+ 93784 => '𖹸',
+ 93785 => '𖹹',
+ 93786 => '𖹺',
+ 93787 => '𖹻',
+ 93788 => '𖹼',
+ 93789 => '𖹽',
+ 93790 => '𖹾',
+ 93791 => '𖹿',
+ 119134 => '𝅗𝅥',
+ 119135 => '𝅘𝅥',
+ 119136 => '𝅘𝅥𝅮',
+ 119137 => '𝅘𝅥𝅯',
+ 119138 => '𝅘𝅥𝅰',
+ 119139 => '𝅘𝅥𝅱',
+ 119140 => '𝅘𝅥𝅲',
+ 119227 => '𝆹𝅥',
+ 119228 => '𝆺𝅥',
+ 119229 => '𝆹𝅥𝅮',
+ 119230 => '𝆺𝅥𝅮',
+ 119231 => '𝆹𝅥𝅯',
+ 119232 => '𝆺𝅥𝅯',
+ 119808 => 'a',
+ 119809 => 'b',
+ 119810 => 'c',
+ 119811 => 'd',
+ 119812 => 'e',
+ 119813 => 'f',
+ 119814 => 'g',
+ 119815 => 'h',
+ 119816 => 'i',
+ 119817 => 'j',
+ 119818 => 'k',
+ 119819 => 'l',
+ 119820 => 'm',
+ 119821 => 'n',
+ 119822 => 'o',
+ 119823 => 'p',
+ 119824 => 'q',
+ 119825 => 'r',
+ 119826 => 's',
+ 119827 => 't',
+ 119828 => 'u',
+ 119829 => 'v',
+ 119830 => 'w',
+ 119831 => 'x',
+ 119832 => 'y',
+ 119833 => 'z',
+ 119834 => 'a',
+ 119835 => 'b',
+ 119836 => 'c',
+ 119837 => 'd',
+ 119838 => 'e',
+ 119839 => 'f',
+ 119840 => 'g',
+ 119841 => 'h',
+ 119842 => 'i',
+ 119843 => 'j',
+ 119844 => 'k',
+ 119845 => 'l',
+ 119846 => 'm',
+ 119847 => 'n',
+ 119848 => 'o',
+ 119849 => 'p',
+ 119850 => 'q',
+ 119851 => 'r',
+ 119852 => 's',
+ 119853 => 't',
+ 119854 => 'u',
+ 119855 => 'v',
+ 119856 => 'w',
+ 119857 => 'x',
+ 119858 => 'y',
+ 119859 => 'z',
+ 119860 => 'a',
+ 119861 => 'b',
+ 119862 => 'c',
+ 119863 => 'd',
+ 119864 => 'e',
+ 119865 => 'f',
+ 119866 => 'g',
+ 119867 => 'h',
+ 119868 => 'i',
+ 119869 => 'j',
+ 119870 => 'k',
+ 119871 => 'l',
+ 119872 => 'm',
+ 119873 => 'n',
+ 119874 => 'o',
+ 119875 => 'p',
+ 119876 => 'q',
+ 119877 => 'r',
+ 119878 => 's',
+ 119879 => 't',
+ 119880 => 'u',
+ 119881 => 'v',
+ 119882 => 'w',
+ 119883 => 'x',
+ 119884 => 'y',
+ 119885 => 'z',
+ 119886 => 'a',
+ 119887 => 'b',
+ 119888 => 'c',
+ 119889 => 'd',
+ 119890 => 'e',
+ 119891 => 'f',
+ 119892 => 'g',
+ 119894 => 'i',
+ 119895 => 'j',
+ 119896 => 'k',
+ 119897 => 'l',
+ 119898 => 'm',
+ 119899 => 'n',
+ 119900 => 'o',
+ 119901 => 'p',
+ 119902 => 'q',
+ 119903 => 'r',
+ 119904 => 's',
+ 119905 => 't',
+ 119906 => 'u',
+ 119907 => 'v',
+ 119908 => 'w',
+ 119909 => 'x',
+ 119910 => 'y',
+ 119911 => 'z',
+ 119912 => 'a',
+ 119913 => 'b',
+ 119914 => 'c',
+ 119915 => 'd',
+ 119916 => 'e',
+ 119917 => 'f',
+ 119918 => 'g',
+ 119919 => 'h',
+ 119920 => 'i',
+ 119921 => 'j',
+ 119922 => 'k',
+ 119923 => 'l',
+ 119924 => 'm',
+ 119925 => 'n',
+ 119926 => 'o',
+ 119927 => 'p',
+ 119928 => 'q',
+ 119929 => 'r',
+ 119930 => 's',
+ 119931 => 't',
+ 119932 => 'u',
+ 119933 => 'v',
+ 119934 => 'w',
+ 119935 => 'x',
+ 119936 => 'y',
+ 119937 => 'z',
+ 119938 => 'a',
+ 119939 => 'b',
+ 119940 => 'c',
+ 119941 => 'd',
+ 119942 => 'e',
+ 119943 => 'f',
+ 119944 => 'g',
+ 119945 => 'h',
+ 119946 => 'i',
+ 119947 => 'j',
+ 119948 => 'k',
+ 119949 => 'l',
+ 119950 => 'm',
+ 119951 => 'n',
+ 119952 => 'o',
+ 119953 => 'p',
+ 119954 => 'q',
+ 119955 => 'r',
+ 119956 => 's',
+ 119957 => 't',
+ 119958 => 'u',
+ 119959 => 'v',
+ 119960 => 'w',
+ 119961 => 'x',
+ 119962 => 'y',
+ 119963 => 'z',
+ 119964 => 'a',
+ 119966 => 'c',
+ 119967 => 'd',
+ 119970 => 'g',
+ 119973 => 'j',
+ 119974 => 'k',
+ 119977 => 'n',
+ 119978 => 'o',
+ 119979 => 'p',
+ 119980 => 'q',
+ 119982 => 's',
+ 119983 => 't',
+ 119984 => 'u',
+ 119985 => 'v',
+ 119986 => 'w',
+ 119987 => 'x',
+ 119988 => 'y',
+ 119989 => 'z',
+ 119990 => 'a',
+ 119991 => 'b',
+ 119992 => 'c',
+ 119993 => 'd',
+ 119995 => 'f',
+ 119997 => 'h',
+ 119998 => 'i',
+ 119999 => 'j',
+ 120000 => 'k',
+ 120001 => 'l',
+ 120002 => 'm',
+ 120003 => 'n',
+ 120005 => 'p',
+ 120006 => 'q',
+ 120007 => 'r',
+ 120008 => 's',
+ 120009 => 't',
+ 120010 => 'u',
+ 120011 => 'v',
+ 120012 => 'w',
+ 120013 => 'x',
+ 120014 => 'y',
+ 120015 => 'z',
+ 120016 => 'a',
+ 120017 => 'b',
+ 120018 => 'c',
+ 120019 => 'd',
+ 120020 => 'e',
+ 120021 => 'f',
+ 120022 => 'g',
+ 120023 => 'h',
+ 120024 => 'i',
+ 120025 => 'j',
+ 120026 => 'k',
+ 120027 => 'l',
+ 120028 => 'm',
+ 120029 => 'n',
+ 120030 => 'o',
+ 120031 => 'p',
+ 120032 => 'q',
+ 120033 => 'r',
+ 120034 => 's',
+ 120035 => 't',
+ 120036 => 'u',
+ 120037 => 'v',
+ 120038 => 'w',
+ 120039 => 'x',
+ 120040 => 'y',
+ 120041 => 'z',
+ 120042 => 'a',
+ 120043 => 'b',
+ 120044 => 'c',
+ 120045 => 'd',
+ 120046 => 'e',
+ 120047 => 'f',
+ 120048 => 'g',
+ 120049 => 'h',
+ 120050 => 'i',
+ 120051 => 'j',
+ 120052 => 'k',
+ 120053 => 'l',
+ 120054 => 'm',
+ 120055 => 'n',
+ 120056 => 'o',
+ 120057 => 'p',
+ 120058 => 'q',
+ 120059 => 'r',
+ 120060 => 's',
+ 120061 => 't',
+ 120062 => 'u',
+ 120063 => 'v',
+ 120064 => 'w',
+ 120065 => 'x',
+ 120066 => 'y',
+ 120067 => 'z',
+ 120068 => 'a',
+ 120069 => 'b',
+ 120071 => 'd',
+ 120072 => 'e',
+ 120073 => 'f',
+ 120074 => 'g',
+ 120077 => 'j',
+ 120078 => 'k',
+ 120079 => 'l',
+ 120080 => 'm',
+ 120081 => 'n',
+ 120082 => 'o',
+ 120083 => 'p',
+ 120084 => 'q',
+ 120086 => 's',
+ 120087 => 't',
+ 120088 => 'u',
+ 120089 => 'v',
+ 120090 => 'w',
+ 120091 => 'x',
+ 120092 => 'y',
+ 120094 => 'a',
+ 120095 => 'b',
+ 120096 => 'c',
+ 120097 => 'd',
+ 120098 => 'e',
+ 120099 => 'f',
+ 120100 => 'g',
+ 120101 => 'h',
+ 120102 => 'i',
+ 120103 => 'j',
+ 120104 => 'k',
+ 120105 => 'l',
+ 120106 => 'm',
+ 120107 => 'n',
+ 120108 => 'o',
+ 120109 => 'p',
+ 120110 => 'q',
+ 120111 => 'r',
+ 120112 => 's',
+ 120113 => 't',
+ 120114 => 'u',
+ 120115 => 'v',
+ 120116 => 'w',
+ 120117 => 'x',
+ 120118 => 'y',
+ 120119 => 'z',
+ 120120 => 'a',
+ 120121 => 'b',
+ 120123 => 'd',
+ 120124 => 'e',
+ 120125 => 'f',
+ 120126 => 'g',
+ 120128 => 'i',
+ 120129 => 'j',
+ 120130 => 'k',
+ 120131 => 'l',
+ 120132 => 'm',
+ 120134 => 'o',
+ 120138 => 's',
+ 120139 => 't',
+ 120140 => 'u',
+ 120141 => 'v',
+ 120142 => 'w',
+ 120143 => 'x',
+ 120144 => 'y',
+ 120146 => 'a',
+ 120147 => 'b',
+ 120148 => 'c',
+ 120149 => 'd',
+ 120150 => 'e',
+ 120151 => 'f',
+ 120152 => 'g',
+ 120153 => 'h',
+ 120154 => 'i',
+ 120155 => 'j',
+ 120156 => 'k',
+ 120157 => 'l',
+ 120158 => 'm',
+ 120159 => 'n',
+ 120160 => 'o',
+ 120161 => 'p',
+ 120162 => 'q',
+ 120163 => 'r',
+ 120164 => 's',
+ 120165 => 't',
+ 120166 => 'u',
+ 120167 => 'v',
+ 120168 => 'w',
+ 120169 => 'x',
+ 120170 => 'y',
+ 120171 => 'z',
+ 120172 => 'a',
+ 120173 => 'b',
+ 120174 => 'c',
+ 120175 => 'd',
+ 120176 => 'e',
+ 120177 => 'f',
+ 120178 => 'g',
+ 120179 => 'h',
+ 120180 => 'i',
+ 120181 => 'j',
+ 120182 => 'k',
+ 120183 => 'l',
+ 120184 => 'm',
+ 120185 => 'n',
+ 120186 => 'o',
+ 120187 => 'p',
+ 120188 => 'q',
+ 120189 => 'r',
+ 120190 => 's',
+ 120191 => 't',
+ 120192 => 'u',
+ 120193 => 'v',
+ 120194 => 'w',
+ 120195 => 'x',
+ 120196 => 'y',
+ 120197 => 'z',
+ 120198 => 'a',
+ 120199 => 'b',
+ 120200 => 'c',
+ 120201 => 'd',
+ 120202 => 'e',
+ 120203 => 'f',
+ 120204 => 'g',
+ 120205 => 'h',
+ 120206 => 'i',
+ 120207 => 'j',
+ 120208 => 'k',
+ 120209 => 'l',
+ 120210 => 'm',
+ 120211 => 'n',
+ 120212 => 'o',
+ 120213 => 'p',
+ 120214 => 'q',
+ 120215 => 'r',
+ 120216 => 's',
+ 120217 => 't',
+ 120218 => 'u',
+ 120219 => 'v',
+ 120220 => 'w',
+ 120221 => 'x',
+ 120222 => 'y',
+ 120223 => 'z',
+ 120224 => 'a',
+ 120225 => 'b',
+ 120226 => 'c',
+ 120227 => 'd',
+ 120228 => 'e',
+ 120229 => 'f',
+ 120230 => 'g',
+ 120231 => 'h',
+ 120232 => 'i',
+ 120233 => 'j',
+ 120234 => 'k',
+ 120235 => 'l',
+ 120236 => 'm',
+ 120237 => 'n',
+ 120238 => 'o',
+ 120239 => 'p',
+ 120240 => 'q',
+ 120241 => 'r',
+ 120242 => 's',
+ 120243 => 't',
+ 120244 => 'u',
+ 120245 => 'v',
+ 120246 => 'w',
+ 120247 => 'x',
+ 120248 => 'y',
+ 120249 => 'z',
+ 120250 => 'a',
+ 120251 => 'b',
+ 120252 => 'c',
+ 120253 => 'd',
+ 120254 => 'e',
+ 120255 => 'f',
+ 120256 => 'g',
+ 120257 => 'h',
+ 120258 => 'i',
+ 120259 => 'j',
+ 120260 => 'k',
+ 120261 => 'l',
+ 120262 => 'm',
+ 120263 => 'n',
+ 120264 => 'o',
+ 120265 => 'p',
+ 120266 => 'q',
+ 120267 => 'r',
+ 120268 => 's',
+ 120269 => 't',
+ 120270 => 'u',
+ 120271 => 'v',
+ 120272 => 'w',
+ 120273 => 'x',
+ 120274 => 'y',
+ 120275 => 'z',
+ 120276 => 'a',
+ 120277 => 'b',
+ 120278 => 'c',
+ 120279 => 'd',
+ 120280 => 'e',
+ 120281 => 'f',
+ 120282 => 'g',
+ 120283 => 'h',
+ 120284 => 'i',
+ 120285 => 'j',
+ 120286 => 'k',
+ 120287 => 'l',
+ 120288 => 'm',
+ 120289 => 'n',
+ 120290 => 'o',
+ 120291 => 'p',
+ 120292 => 'q',
+ 120293 => 'r',
+ 120294 => 's',
+ 120295 => 't',
+ 120296 => 'u',
+ 120297 => 'v',
+ 120298 => 'w',
+ 120299 => 'x',
+ 120300 => 'y',
+ 120301 => 'z',
+ 120302 => 'a',
+ 120303 => 'b',
+ 120304 => 'c',
+ 120305 => 'd',
+ 120306 => 'e',
+ 120307 => 'f',
+ 120308 => 'g',
+ 120309 => 'h',
+ 120310 => 'i',
+ 120311 => 'j',
+ 120312 => 'k',
+ 120313 => 'l',
+ 120314 => 'm',
+ 120315 => 'n',
+ 120316 => 'o',
+ 120317 => 'p',
+ 120318 => 'q',
+ 120319 => 'r',
+ 120320 => 's',
+ 120321 => 't',
+ 120322 => 'u',
+ 120323 => 'v',
+ 120324 => 'w',
+ 120325 => 'x',
+ 120326 => 'y',
+ 120327 => 'z',
+ 120328 => 'a',
+ 120329 => 'b',
+ 120330 => 'c',
+ 120331 => 'd',
+ 120332 => 'e',
+ 120333 => 'f',
+ 120334 => 'g',
+ 120335 => 'h',
+ 120336 => 'i',
+ 120337 => 'j',
+ 120338 => 'k',
+ 120339 => 'l',
+ 120340 => 'm',
+ 120341 => 'n',
+ 120342 => 'o',
+ 120343 => 'p',
+ 120344 => 'q',
+ 120345 => 'r',
+ 120346 => 's',
+ 120347 => 't',
+ 120348 => 'u',
+ 120349 => 'v',
+ 120350 => 'w',
+ 120351 => 'x',
+ 120352 => 'y',
+ 120353 => 'z',
+ 120354 => 'a',
+ 120355 => 'b',
+ 120356 => 'c',
+ 120357 => 'd',
+ 120358 => 'e',
+ 120359 => 'f',
+ 120360 => 'g',
+ 120361 => 'h',
+ 120362 => 'i',
+ 120363 => 'j',
+ 120364 => 'k',
+ 120365 => 'l',
+ 120366 => 'm',
+ 120367 => 'n',
+ 120368 => 'o',
+ 120369 => 'p',
+ 120370 => 'q',
+ 120371 => 'r',
+ 120372 => 's',
+ 120373 => 't',
+ 120374 => 'u',
+ 120375 => 'v',
+ 120376 => 'w',
+ 120377 => 'x',
+ 120378 => 'y',
+ 120379 => 'z',
+ 120380 => 'a',
+ 120381 => 'b',
+ 120382 => 'c',
+ 120383 => 'd',
+ 120384 => 'e',
+ 120385 => 'f',
+ 120386 => 'g',
+ 120387 => 'h',
+ 120388 => 'i',
+ 120389 => 'j',
+ 120390 => 'k',
+ 120391 => 'l',
+ 120392 => 'm',
+ 120393 => 'n',
+ 120394 => 'o',
+ 120395 => 'p',
+ 120396 => 'q',
+ 120397 => 'r',
+ 120398 => 's',
+ 120399 => 't',
+ 120400 => 'u',
+ 120401 => 'v',
+ 120402 => 'w',
+ 120403 => 'x',
+ 120404 => 'y',
+ 120405 => 'z',
+ 120406 => 'a',
+ 120407 => 'b',
+ 120408 => 'c',
+ 120409 => 'd',
+ 120410 => 'e',
+ 120411 => 'f',
+ 120412 => 'g',
+ 120413 => 'h',
+ 120414 => 'i',
+ 120415 => 'j',
+ 120416 => 'k',
+ 120417 => 'l',
+ 120418 => 'm',
+ 120419 => 'n',
+ 120420 => 'o',
+ 120421 => 'p',
+ 120422 => 'q',
+ 120423 => 'r',
+ 120424 => 's',
+ 120425 => 't',
+ 120426 => 'u',
+ 120427 => 'v',
+ 120428 => 'w',
+ 120429 => 'x',
+ 120430 => 'y',
+ 120431 => 'z',
+ 120432 => 'a',
+ 120433 => 'b',
+ 120434 => 'c',
+ 120435 => 'd',
+ 120436 => 'e',
+ 120437 => 'f',
+ 120438 => 'g',
+ 120439 => 'h',
+ 120440 => 'i',
+ 120441 => 'j',
+ 120442 => 'k',
+ 120443 => 'l',
+ 120444 => 'm',
+ 120445 => 'n',
+ 120446 => 'o',
+ 120447 => 'p',
+ 120448 => 'q',
+ 120449 => 'r',
+ 120450 => 's',
+ 120451 => 't',
+ 120452 => 'u',
+ 120453 => 'v',
+ 120454 => 'w',
+ 120455 => 'x',
+ 120456 => 'y',
+ 120457 => 'z',
+ 120458 => 'a',
+ 120459 => 'b',
+ 120460 => 'c',
+ 120461 => 'd',
+ 120462 => 'e',
+ 120463 => 'f',
+ 120464 => 'g',
+ 120465 => 'h',
+ 120466 => 'i',
+ 120467 => 'j',
+ 120468 => 'k',
+ 120469 => 'l',
+ 120470 => 'm',
+ 120471 => 'n',
+ 120472 => 'o',
+ 120473 => 'p',
+ 120474 => 'q',
+ 120475 => 'r',
+ 120476 => 's',
+ 120477 => 't',
+ 120478 => 'u',
+ 120479 => 'v',
+ 120480 => 'w',
+ 120481 => 'x',
+ 120482 => 'y',
+ 120483 => 'z',
+ 120484 => 'ı',
+ 120485 => 'ȷ',
+ 120488 => 'α',
+ 120489 => 'β',
+ 120490 => 'γ',
+ 120491 => 'δ',
+ 120492 => 'ε',
+ 120493 => 'ζ',
+ 120494 => 'η',
+ 120495 => 'θ',
+ 120496 => 'ι',
+ 120497 => 'κ',
+ 120498 => 'λ',
+ 120499 => 'μ',
+ 120500 => 'ν',
+ 120501 => 'ξ',
+ 120502 => 'ο',
+ 120503 => 'π',
+ 120504 => 'ρ',
+ 120505 => 'θ',
+ 120506 => 'σ',
+ 120507 => 'τ',
+ 120508 => 'υ',
+ 120509 => 'φ',
+ 120510 => 'χ',
+ 120511 => 'ψ',
+ 120512 => 'ω',
+ 120513 => '∇',
+ 120514 => 'α',
+ 120515 => 'β',
+ 120516 => 'γ',
+ 120517 => 'δ',
+ 120518 => 'ε',
+ 120519 => 'ζ',
+ 120520 => 'η',
+ 120521 => 'θ',
+ 120522 => 'ι',
+ 120523 => 'κ',
+ 120524 => 'λ',
+ 120525 => 'μ',
+ 120526 => 'ν',
+ 120527 => 'ξ',
+ 120528 => 'ο',
+ 120529 => 'π',
+ 120530 => 'ρ',
+ 120531 => 'σ',
+ 120532 => 'σ',
+ 120533 => 'τ',
+ 120534 => 'υ',
+ 120535 => 'φ',
+ 120536 => 'χ',
+ 120537 => 'ψ',
+ 120538 => 'ω',
+ 120539 => '∂',
+ 120540 => 'ε',
+ 120541 => 'θ',
+ 120542 => 'κ',
+ 120543 => 'φ',
+ 120544 => 'ρ',
+ 120545 => 'π',
+ 120546 => 'α',
+ 120547 => 'β',
+ 120548 => 'γ',
+ 120549 => 'δ',
+ 120550 => 'ε',
+ 120551 => 'ζ',
+ 120552 => 'η',
+ 120553 => 'θ',
+ 120554 => 'ι',
+ 120555 => 'κ',
+ 120556 => 'λ',
+ 120557 => 'μ',
+ 120558 => 'ν',
+ 120559 => 'ξ',
+ 120560 => 'ο',
+ 120561 => 'π',
+ 120562 => 'ρ',
+ 120563 => 'θ',
+ 120564 => 'σ',
+ 120565 => 'τ',
+ 120566 => 'υ',
+ 120567 => 'φ',
+ 120568 => 'χ',
+ 120569 => 'ψ',
+ 120570 => 'ω',
+ 120571 => '∇',
+ 120572 => 'α',
+ 120573 => 'β',
+ 120574 => 'γ',
+ 120575 => 'δ',
+ 120576 => 'ε',
+ 120577 => 'ζ',
+ 120578 => 'η',
+ 120579 => 'θ',
+ 120580 => 'ι',
+ 120581 => 'κ',
+ 120582 => 'λ',
+ 120583 => 'μ',
+ 120584 => 'ν',
+ 120585 => 'ξ',
+ 120586 => 'ο',
+ 120587 => 'π',
+ 120588 => 'ρ',
+ 120589 => 'σ',
+ 120590 => 'σ',
+ 120591 => 'τ',
+ 120592 => 'υ',
+ 120593 => 'φ',
+ 120594 => 'χ',
+ 120595 => 'ψ',
+ 120596 => 'ω',
+ 120597 => '∂',
+ 120598 => 'ε',
+ 120599 => 'θ',
+ 120600 => 'κ',
+ 120601 => 'φ',
+ 120602 => 'ρ',
+ 120603 => 'π',
+ 120604 => 'α',
+ 120605 => 'β',
+ 120606 => 'γ',
+ 120607 => 'δ',
+ 120608 => 'ε',
+ 120609 => 'ζ',
+ 120610 => 'η',
+ 120611 => 'θ',
+ 120612 => 'ι',
+ 120613 => 'κ',
+ 120614 => 'λ',
+ 120615 => 'μ',
+ 120616 => 'ν',
+ 120617 => 'ξ',
+ 120618 => 'ο',
+ 120619 => 'π',
+ 120620 => 'ρ',
+ 120621 => 'θ',
+ 120622 => 'σ',
+ 120623 => 'τ',
+ 120624 => 'υ',
+ 120625 => 'φ',
+ 120626 => 'χ',
+ 120627 => 'ψ',
+ 120628 => 'ω',
+ 120629 => '∇',
+ 120630 => 'α',
+ 120631 => 'β',
+ 120632 => 'γ',
+ 120633 => 'δ',
+ 120634 => 'ε',
+ 120635 => 'ζ',
+ 120636 => 'η',
+ 120637 => 'θ',
+ 120638 => 'ι',
+ 120639 => 'κ',
+ 120640 => 'λ',
+ 120641 => 'μ',
+ 120642 => 'ν',
+ 120643 => 'ξ',
+ 120644 => 'ο',
+ 120645 => 'π',
+ 120646 => 'ρ',
+ 120647 => 'σ',
+ 120648 => 'σ',
+ 120649 => 'τ',
+ 120650 => 'υ',
+ 120651 => 'φ',
+ 120652 => 'χ',
+ 120653 => 'ψ',
+ 120654 => 'ω',
+ 120655 => '∂',
+ 120656 => 'ε',
+ 120657 => 'θ',
+ 120658 => 'κ',
+ 120659 => 'φ',
+ 120660 => 'ρ',
+ 120661 => 'π',
+ 120662 => 'α',
+ 120663 => 'β',
+ 120664 => 'γ',
+ 120665 => 'δ',
+ 120666 => 'ε',
+ 120667 => 'ζ',
+ 120668 => 'η',
+ 120669 => 'θ',
+ 120670 => 'ι',
+ 120671 => 'κ',
+ 120672 => 'λ',
+ 120673 => 'μ',
+ 120674 => 'ν',
+ 120675 => 'ξ',
+ 120676 => 'ο',
+ 120677 => 'π',
+ 120678 => 'ρ',
+ 120679 => 'θ',
+ 120680 => 'σ',
+ 120681 => 'τ',
+ 120682 => 'υ',
+ 120683 => 'φ',
+ 120684 => 'χ',
+ 120685 => 'ψ',
+ 120686 => 'ω',
+ 120687 => '∇',
+ 120688 => 'α',
+ 120689 => 'β',
+ 120690 => 'γ',
+ 120691 => 'δ',
+ 120692 => 'ε',
+ 120693 => 'ζ',
+ 120694 => 'η',
+ 120695 => 'θ',
+ 120696 => 'ι',
+ 120697 => 'κ',
+ 120698 => 'λ',
+ 120699 => 'μ',
+ 120700 => 'ν',
+ 120701 => 'ξ',
+ 120702 => 'ο',
+ 120703 => 'π',
+ 120704 => 'ρ',
+ 120705 => 'σ',
+ 120706 => 'σ',
+ 120707 => 'τ',
+ 120708 => 'υ',
+ 120709 => 'φ',
+ 120710 => 'χ',
+ 120711 => 'ψ',
+ 120712 => 'ω',
+ 120713 => '∂',
+ 120714 => 'ε',
+ 120715 => 'θ',
+ 120716 => 'κ',
+ 120717 => 'φ',
+ 120718 => 'ρ',
+ 120719 => 'π',
+ 120720 => 'α',
+ 120721 => 'β',
+ 120722 => 'γ',
+ 120723 => 'δ',
+ 120724 => 'ε',
+ 120725 => 'ζ',
+ 120726 => 'η',
+ 120727 => 'θ',
+ 120728 => 'ι',
+ 120729 => 'κ',
+ 120730 => 'λ',
+ 120731 => 'μ',
+ 120732 => 'ν',
+ 120733 => 'ξ',
+ 120734 => 'ο',
+ 120735 => 'π',
+ 120736 => 'ρ',
+ 120737 => 'θ',
+ 120738 => 'σ',
+ 120739 => 'τ',
+ 120740 => 'υ',
+ 120741 => 'φ',
+ 120742 => 'χ',
+ 120743 => 'ψ',
+ 120744 => 'ω',
+ 120745 => '∇',
+ 120746 => 'α',
+ 120747 => 'β',
+ 120748 => 'γ',
+ 120749 => 'δ',
+ 120750 => 'ε',
+ 120751 => 'ζ',
+ 120752 => 'η',
+ 120753 => 'θ',
+ 120754 => 'ι',
+ 120755 => 'κ',
+ 120756 => 'λ',
+ 120757 => 'μ',
+ 120758 => 'ν',
+ 120759 => 'ξ',
+ 120760 => 'ο',
+ 120761 => 'π',
+ 120762 => 'ρ',
+ 120763 => 'σ',
+ 120764 => 'σ',
+ 120765 => 'τ',
+ 120766 => 'υ',
+ 120767 => 'φ',
+ 120768 => 'χ',
+ 120769 => 'ψ',
+ 120770 => 'ω',
+ 120771 => '∂',
+ 120772 => 'ε',
+ 120773 => 'θ',
+ 120774 => 'κ',
+ 120775 => 'φ',
+ 120776 => 'ρ',
+ 120777 => 'π',
+ 120778 => 'ϝ',
+ 120779 => 'ϝ',
+ 120782 => '0',
+ 120783 => '1',
+ 120784 => '2',
+ 120785 => '3',
+ 120786 => '4',
+ 120787 => '5',
+ 120788 => '6',
+ 120789 => '7',
+ 120790 => '8',
+ 120791 => '9',
+ 120792 => '0',
+ 120793 => '1',
+ 120794 => '2',
+ 120795 => '3',
+ 120796 => '4',
+ 120797 => '5',
+ 120798 => '6',
+ 120799 => '7',
+ 120800 => '8',
+ 120801 => '9',
+ 120802 => '0',
+ 120803 => '1',
+ 120804 => '2',
+ 120805 => '3',
+ 120806 => '4',
+ 120807 => '5',
+ 120808 => '6',
+ 120809 => '7',
+ 120810 => '8',
+ 120811 => '9',
+ 120812 => '0',
+ 120813 => '1',
+ 120814 => '2',
+ 120815 => '3',
+ 120816 => '4',
+ 120817 => '5',
+ 120818 => '6',
+ 120819 => '7',
+ 120820 => '8',
+ 120821 => '9',
+ 120822 => '0',
+ 120823 => '1',
+ 120824 => '2',
+ 120825 => '3',
+ 120826 => '4',
+ 120827 => '5',
+ 120828 => '6',
+ 120829 => '7',
+ 120830 => '8',
+ 120831 => '9',
+ 125184 => '𞤢',
+ 125185 => '𞤣',
+ 125186 => '𞤤',
+ 125187 => '𞤥',
+ 125188 => '𞤦',
+ 125189 => '𞤧',
+ 125190 => '𞤨',
+ 125191 => '𞤩',
+ 125192 => '𞤪',
+ 125193 => '𞤫',
+ 125194 => '𞤬',
+ 125195 => '𞤭',
+ 125196 => '𞤮',
+ 125197 => '𞤯',
+ 125198 => '𞤰',
+ 125199 => '𞤱',
+ 125200 => '𞤲',
+ 125201 => '𞤳',
+ 125202 => '𞤴',
+ 125203 => '𞤵',
+ 125204 => '𞤶',
+ 125205 => '𞤷',
+ 125206 => '𞤸',
+ 125207 => '𞤹',
+ 125208 => '𞤺',
+ 125209 => '𞤻',
+ 125210 => '𞤼',
+ 125211 => '𞤽',
+ 125212 => '𞤾',
+ 125213 => '𞤿',
+ 125214 => '𞥀',
+ 125215 => '𞥁',
+ 125216 => '𞥂',
+ 125217 => '𞥃',
+ 126464 => 'ا',
+ 126465 => 'ب',
+ 126466 => 'ج',
+ 126467 => 'د',
+ 126469 => 'و',
+ 126470 => 'ز',
+ 126471 => 'ح',
+ 126472 => 'ط',
+ 126473 => 'ي',
+ 126474 => 'ك',
+ 126475 => 'ل',
+ 126476 => 'م',
+ 126477 => 'ن',
+ 126478 => 'س',
+ 126479 => 'ع',
+ 126480 => 'ف',
+ 126481 => 'ص',
+ 126482 => 'ق',
+ 126483 => 'ر',
+ 126484 => 'ش',
+ 126485 => 'ت',
+ 126486 => 'ث',
+ 126487 => 'خ',
+ 126488 => 'ذ',
+ 126489 => 'ض',
+ 126490 => 'ظ',
+ 126491 => 'غ',
+ 126492 => 'ٮ',
+ 126493 => 'ں',
+ 126494 => 'ڡ',
+ 126495 => 'ٯ',
+ 126497 => 'ب',
+ 126498 => 'ج',
+ 126500 => 'ه',
+ 126503 => 'ح',
+ 126505 => 'ي',
+ 126506 => 'ك',
+ 126507 => 'ل',
+ 126508 => 'م',
+ 126509 => 'ن',
+ 126510 => 'س',
+ 126511 => 'ع',
+ 126512 => 'ف',
+ 126513 => 'ص',
+ 126514 => 'ق',
+ 126516 => 'ش',
+ 126517 => 'ت',
+ 126518 => 'ث',
+ 126519 => 'خ',
+ 126521 => 'ض',
+ 126523 => 'غ',
+ 126530 => 'ج',
+ 126535 => 'ح',
+ 126537 => 'ي',
+ 126539 => 'ل',
+ 126541 => 'ن',
+ 126542 => 'س',
+ 126543 => 'ع',
+ 126545 => 'ص',
+ 126546 => 'ق',
+ 126548 => 'ش',
+ 126551 => 'خ',
+ 126553 => 'ض',
+ 126555 => 'غ',
+ 126557 => 'ں',
+ 126559 => 'ٯ',
+ 126561 => 'ب',
+ 126562 => 'ج',
+ 126564 => 'ه',
+ 126567 => 'ح',
+ 126568 => 'ط',
+ 126569 => 'ي',
+ 126570 => 'ك',
+ 126572 => 'م',
+ 126573 => 'ن',
+ 126574 => 'س',
+ 126575 => 'ع',
+ 126576 => 'ف',
+ 126577 => 'ص',
+ 126578 => 'ق',
+ 126580 => 'ش',
+ 126581 => 'ت',
+ 126582 => 'ث',
+ 126583 => 'خ',
+ 126585 => 'ض',
+ 126586 => 'ظ',
+ 126587 => 'غ',
+ 126588 => 'ٮ',
+ 126590 => 'ڡ',
+ 126592 => 'ا',
+ 126593 => 'ب',
+ 126594 => 'ج',
+ 126595 => 'د',
+ 126596 => 'ه',
+ 126597 => 'و',
+ 126598 => 'ز',
+ 126599 => 'ح',
+ 126600 => 'ط',
+ 126601 => 'ي',
+ 126603 => 'ل',
+ 126604 => 'م',
+ 126605 => 'ن',
+ 126606 => 'س',
+ 126607 => 'ع',
+ 126608 => 'ف',
+ 126609 => 'ص',
+ 126610 => 'ق',
+ 126611 => 'ر',
+ 126612 => 'ش',
+ 126613 => 'ت',
+ 126614 => 'ث',
+ 126615 => 'خ',
+ 126616 => 'ذ',
+ 126617 => 'ض',
+ 126618 => 'ظ',
+ 126619 => 'غ',
+ 126625 => 'ب',
+ 126626 => 'ج',
+ 126627 => 'د',
+ 126629 => 'و',
+ 126630 => 'ز',
+ 126631 => 'ح',
+ 126632 => 'ط',
+ 126633 => 'ي',
+ 126635 => 'ل',
+ 126636 => 'م',
+ 126637 => 'ن',
+ 126638 => 'س',
+ 126639 => 'ع',
+ 126640 => 'ف',
+ 126641 => 'ص',
+ 126642 => 'ق',
+ 126643 => 'ر',
+ 126644 => 'ش',
+ 126645 => 'ت',
+ 126646 => 'ث',
+ 126647 => 'خ',
+ 126648 => 'ذ',
+ 126649 => 'ض',
+ 126650 => 'ظ',
+ 126651 => 'غ',
+ 127274 => '〔s〕',
+ 127275 => 'c',
+ 127276 => 'r',
+ 127277 => 'cd',
+ 127278 => 'wz',
+ 127280 => 'a',
+ 127281 => 'b',
+ 127282 => 'c',
+ 127283 => 'd',
+ 127284 => 'e',
+ 127285 => 'f',
+ 127286 => 'g',
+ 127287 => 'h',
+ 127288 => 'i',
+ 127289 => 'j',
+ 127290 => 'k',
+ 127291 => 'l',
+ 127292 => 'm',
+ 127293 => 'n',
+ 127294 => 'o',
+ 127295 => 'p',
+ 127296 => 'q',
+ 127297 => 'r',
+ 127298 => 's',
+ 127299 => 't',
+ 127300 => 'u',
+ 127301 => 'v',
+ 127302 => 'w',
+ 127303 => 'x',
+ 127304 => 'y',
+ 127305 => 'z',
+ 127306 => 'hv',
+ 127307 => 'mv',
+ 127308 => 'sd',
+ 127309 => 'ss',
+ 127310 => 'ppv',
+ 127311 => 'wc',
+ 127338 => 'mc',
+ 127339 => 'md',
+ 127340 => 'mr',
+ 127376 => 'dj',
+ 127488 => 'ほか',
+ 127489 => 'ココ',
+ 127490 => 'サ',
+ 127504 => '手',
+ 127505 => '字',
+ 127506 => '双',
+ 127507 => 'デ',
+ 127508 => '二',
+ 127509 => '多',
+ 127510 => '解',
+ 127511 => '天',
+ 127512 => '交',
+ 127513 => '映',
+ 127514 => '無',
+ 127515 => '料',
+ 127516 => '前',
+ 127517 => '後',
+ 127518 => '再',
+ 127519 => '新',
+ 127520 => '初',
+ 127521 => '終',
+ 127522 => '生',
+ 127523 => '販',
+ 127524 => '声',
+ 127525 => '吹',
+ 127526 => '演',
+ 127527 => '投',
+ 127528 => '捕',
+ 127529 => '一',
+ 127530 => '三',
+ 127531 => '遊',
+ 127532 => '左',
+ 127533 => '中',
+ 127534 => '右',
+ 127535 => '指',
+ 127536 => '走',
+ 127537 => '打',
+ 127538 => '禁',
+ 127539 => '空',
+ 127540 => '合',
+ 127541 => '満',
+ 127542 => '有',
+ 127543 => '月',
+ 127544 => '申',
+ 127545 => '割',
+ 127546 => '営',
+ 127547 => '配',
+ 127552 => '〔本〕',
+ 127553 => '〔三〕',
+ 127554 => '〔二〕',
+ 127555 => '〔安〕',
+ 127556 => '〔点〕',
+ 127557 => '〔打〕',
+ 127558 => '〔盗〕',
+ 127559 => '〔勝〕',
+ 127560 => '〔敗〕',
+ 127568 => '得',
+ 127569 => '可',
+ 130032 => '0',
+ 130033 => '1',
+ 130034 => '2',
+ 130035 => '3',
+ 130036 => '4',
+ 130037 => '5',
+ 130038 => '6',
+ 130039 => '7',
+ 130040 => '8',
+ 130041 => '9',
+ 194560 => '丽',
+ 194561 => '丸',
+ 194562 => '乁',
+ 194563 => '𠄢',
+ 194564 => '你',
+ 194565 => '侮',
+ 194566 => '侻',
+ 194567 => '倂',
+ 194568 => '偺',
+ 194569 => '備',
+ 194570 => '僧',
+ 194571 => '像',
+ 194572 => '㒞',
+ 194573 => '𠘺',
+ 194574 => '免',
+ 194575 => '兔',
+ 194576 => '兤',
+ 194577 => '具',
+ 194578 => '𠔜',
+ 194579 => '㒹',
+ 194580 => '內',
+ 194581 => '再',
+ 194582 => '𠕋',
+ 194583 => '冗',
+ 194584 => '冤',
+ 194585 => '仌',
+ 194586 => '冬',
+ 194587 => '况',
+ 194588 => '𩇟',
+ 194589 => '凵',
+ 194590 => '刃',
+ 194591 => '㓟',
+ 194592 => '刻',
+ 194593 => '剆',
+ 194594 => '割',
+ 194595 => '剷',
+ 194596 => '㔕',
+ 194597 => '勇',
+ 194598 => '勉',
+ 194599 => '勤',
+ 194600 => '勺',
+ 194601 => '包',
+ 194602 => '匆',
+ 194603 => '北',
+ 194604 => '卉',
+ 194605 => '卑',
+ 194606 => '博',
+ 194607 => '即',
+ 194608 => '卽',
+ 194609 => '卿',
+ 194610 => '卿',
+ 194611 => '卿',
+ 194612 => '𠨬',
+ 194613 => '灰',
+ 194614 => '及',
+ 194615 => '叟',
+ 194616 => '𠭣',
+ 194617 => '叫',
+ 194618 => '叱',
+ 194619 => '吆',
+ 194620 => '咞',
+ 194621 => '吸',
+ 194622 => '呈',
+ 194623 => '周',
+ 194624 => '咢',
+ 194625 => '哶',
+ 194626 => '唐',
+ 194627 => '啓',
+ 194628 => '啣',
+ 194629 => '善',
+ 194630 => '善',
+ 194631 => '喙',
+ 194632 => '喫',
+ 194633 => '喳',
+ 194634 => '嗂',
+ 194635 => '圖',
+ 194636 => '嘆',
+ 194637 => '圗',
+ 194638 => '噑',
+ 194639 => '噴',
+ 194640 => '切',
+ 194641 => '壮',
+ 194642 => '城',
+ 194643 => '埴',
+ 194644 => '堍',
+ 194645 => '型',
+ 194646 => '堲',
+ 194647 => '報',
+ 194648 => '墬',
+ 194649 => '𡓤',
+ 194650 => '売',
+ 194651 => '壷',
+ 194652 => '夆',
+ 194653 => '多',
+ 194654 => '夢',
+ 194655 => '奢',
+ 194656 => '𡚨',
+ 194657 => '𡛪',
+ 194658 => '姬',
+ 194659 => '娛',
+ 194660 => '娧',
+ 194661 => '姘',
+ 194662 => '婦',
+ 194663 => '㛮',
+ 194665 => '嬈',
+ 194666 => '嬾',
+ 194667 => '嬾',
+ 194668 => '𡧈',
+ 194669 => '寃',
+ 194670 => '寘',
+ 194671 => '寧',
+ 194672 => '寳',
+ 194673 => '𡬘',
+ 194674 => '寿',
+ 194675 => '将',
+ 194677 => '尢',
+ 194678 => '㞁',
+ 194679 => '屠',
+ 194680 => '屮',
+ 194681 => '峀',
+ 194682 => '岍',
+ 194683 => '𡷤',
+ 194684 => '嵃',
+ 194685 => '𡷦',
+ 194686 => '嵮',
+ 194687 => '嵫',
+ 194688 => '嵼',
+ 194689 => '巡',
+ 194690 => '巢',
+ 194691 => '㠯',
+ 194692 => '巽',
+ 194693 => '帨',
+ 194694 => '帽',
+ 194695 => '幩',
+ 194696 => '㡢',
+ 194697 => '𢆃',
+ 194698 => '㡼',
+ 194699 => '庰',
+ 194700 => '庳',
+ 194701 => '庶',
+ 194702 => '廊',
+ 194703 => '𪎒',
+ 194704 => '廾',
+ 194705 => '𢌱',
+ 194706 => '𢌱',
+ 194707 => '舁',
+ 194708 => '弢',
+ 194709 => '弢',
+ 194710 => '㣇',
+ 194711 => '𣊸',
+ 194712 => '𦇚',
+ 194713 => '形',
+ 194714 => '彫',
+ 194715 => '㣣',
+ 194716 => '徚',
+ 194717 => '忍',
+ 194718 => '志',
+ 194719 => '忹',
+ 194720 => '悁',
+ 194721 => '㤺',
+ 194722 => '㤜',
+ 194723 => '悔',
+ 194724 => '𢛔',
+ 194725 => '惇',
+ 194726 => '慈',
+ 194727 => '慌',
+ 194728 => '慎',
+ 194729 => '慌',
+ 194730 => '慺',
+ 194731 => '憎',
+ 194732 => '憲',
+ 194733 => '憤',
+ 194734 => '憯',
+ 194735 => '懞',
+ 194736 => '懲',
+ 194737 => '懶',
+ 194738 => '成',
+ 194739 => '戛',
+ 194740 => '扝',
+ 194741 => '抱',
+ 194742 => '拔',
+ 194743 => '捐',
+ 194744 => '𢬌',
+ 194745 => '挽',
+ 194746 => '拼',
+ 194747 => '捨',
+ 194748 => '掃',
+ 194749 => '揤',
+ 194750 => '𢯱',
+ 194751 => '搢',
+ 194752 => '揅',
+ 194753 => '掩',
+ 194754 => '㨮',
+ 194755 => '摩',
+ 194756 => '摾',
+ 194757 => '撝',
+ 194758 => '摷',
+ 194759 => '㩬',
+ 194760 => '敏',
+ 194761 => '敬',
+ 194762 => '𣀊',
+ 194763 => '旣',
+ 194764 => '書',
+ 194765 => '晉',
+ 194766 => '㬙',
+ 194767 => '暑',
+ 194768 => '㬈',
+ 194769 => '㫤',
+ 194770 => '冒',
+ 194771 => '冕',
+ 194772 => '最',
+ 194773 => '暜',
+ 194774 => '肭',
+ 194775 => '䏙',
+ 194776 => '朗',
+ 194777 => '望',
+ 194778 => '朡',
+ 194779 => '杞',
+ 194780 => '杓',
+ 194781 => '𣏃',
+ 194782 => '㭉',
+ 194783 => '柺',
+ 194784 => '枅',
+ 194785 => '桒',
+ 194786 => '梅',
+ 194787 => '𣑭',
+ 194788 => '梎',
+ 194789 => '栟',
+ 194790 => '椔',
+ 194791 => '㮝',
+ 194792 => '楂',
+ 194793 => '榣',
+ 194794 => '槪',
+ 194795 => '檨',
+ 194796 => '𣚣',
+ 194797 => '櫛',
+ 194798 => '㰘',
+ 194799 => '次',
+ 194800 => '𣢧',
+ 194801 => '歔',
+ 194802 => '㱎',
+ 194803 => '歲',
+ 194804 => '殟',
+ 194805 => '殺',
+ 194806 => '殻',
+ 194807 => '𣪍',
+ 194808 => '𡴋',
+ 194809 => '𣫺',
+ 194810 => '汎',
+ 194811 => '𣲼',
+ 194812 => '沿',
+ 194813 => '泍',
+ 194814 => '汧',
+ 194815 => '洖',
+ 194816 => '派',
+ 194817 => '海',
+ 194818 => '流',
+ 194819 => '浩',
+ 194820 => '浸',
+ 194821 => '涅',
+ 194822 => '𣴞',
+ 194823 => '洴',
+ 194824 => '港',
+ 194825 => '湮',
+ 194826 => '㴳',
+ 194827 => '滋',
+ 194828 => '滇',
+ 194829 => '𣻑',
+ 194830 => '淹',
+ 194831 => '潮',
+ 194832 => '𣽞',
+ 194833 => '𣾎',
+ 194834 => '濆',
+ 194835 => '瀹',
+ 194836 => '瀞',
+ 194837 => '瀛',
+ 194838 => '㶖',
+ 194839 => '灊',
+ 194840 => '災',
+ 194841 => '灷',
+ 194842 => '炭',
+ 194843 => '𠔥',
+ 194844 => '煅',
+ 194845 => '𤉣',
+ 194846 => '熜',
+ 194848 => '爨',
+ 194849 => '爵',
+ 194850 => '牐',
+ 194851 => '𤘈',
+ 194852 => '犀',
+ 194853 => '犕',
+ 194854 => '𤜵',
+ 194855 => '𤠔',
+ 194856 => '獺',
+ 194857 => '王',
+ 194858 => '㺬',
+ 194859 => '玥',
+ 194860 => '㺸',
+ 194861 => '㺸',
+ 194862 => '瑇',
+ 194863 => '瑜',
+ 194864 => '瑱',
+ 194865 => '璅',
+ 194866 => '瓊',
+ 194867 => '㼛',
+ 194868 => '甤',
+ 194869 => '𤰶',
+ 194870 => '甾',
+ 194871 => '𤲒',
+ 194872 => '異',
+ 194873 => '𢆟',
+ 194874 => '瘐',
+ 194875 => '𤾡',
+ 194876 => '𤾸',
+ 194877 => '𥁄',
+ 194878 => '㿼',
+ 194879 => '䀈',
+ 194880 => '直',
+ 194881 => '𥃳',
+ 194882 => '𥃲',
+ 194883 => '𥄙',
+ 194884 => '𥄳',
+ 194885 => '眞',
+ 194886 => '真',
+ 194887 => '真',
+ 194888 => '睊',
+ 194889 => '䀹',
+ 194890 => '瞋',
+ 194891 => '䁆',
+ 194892 => '䂖',
+ 194893 => '𥐝',
+ 194894 => '硎',
+ 194895 => '碌',
+ 194896 => '磌',
+ 194897 => '䃣',
+ 194898 => '𥘦',
+ 194899 => '祖',
+ 194900 => '𥚚',
+ 194901 => '𥛅',
+ 194902 => '福',
+ 194903 => '秫',
+ 194904 => '䄯',
+ 194905 => '穀',
+ 194906 => '穊',
+ 194907 => '穏',
+ 194908 => '𥥼',
+ 194909 => '𥪧',
+ 194910 => '𥪧',
+ 194912 => '䈂',
+ 194913 => '𥮫',
+ 194914 => '篆',
+ 194915 => '築',
+ 194916 => '䈧',
+ 194917 => '𥲀',
+ 194918 => '糒',
+ 194919 => '䊠',
+ 194920 => '糨',
+ 194921 => '糣',
+ 194922 => '紀',
+ 194923 => '𥾆',
+ 194924 => '絣',
+ 194925 => '䌁',
+ 194926 => '緇',
+ 194927 => '縂',
+ 194928 => '繅',
+ 194929 => '䌴',
+ 194930 => '𦈨',
+ 194931 => '𦉇',
+ 194932 => '䍙',
+ 194933 => '𦋙',
+ 194934 => '罺',
+ 194935 => '𦌾',
+ 194936 => '羕',
+ 194937 => '翺',
+ 194938 => '者',
+ 194939 => '𦓚',
+ 194940 => '𦔣',
+ 194941 => '聠',
+ 194942 => '𦖨',
+ 194943 => '聰',
+ 194944 => '𣍟',
+ 194945 => '䏕',
+ 194946 => '育',
+ 194947 => '脃',
+ 194948 => '䐋',
+ 194949 => '脾',
+ 194950 => '媵',
+ 194951 => '𦞧',
+ 194952 => '𦞵',
+ 194953 => '𣎓',
+ 194954 => '𣎜',
+ 194955 => '舁',
+ 194956 => '舄',
+ 194957 => '辞',
+ 194958 => '䑫',
+ 194959 => '芑',
+ 194960 => '芋',
+ 194961 => '芝',
+ 194962 => '劳',
+ 194963 => '花',
+ 194964 => '芳',
+ 194965 => '芽',
+ 194966 => '苦',
+ 194967 => '𦬼',
+ 194968 => '若',
+ 194969 => '茝',
+ 194970 => '荣',
+ 194971 => '莭',
+ 194972 => '茣',
+ 194973 => '莽',
+ 194974 => '菧',
+ 194975 => '著',
+ 194976 => '荓',
+ 194977 => '菊',
+ 194978 => '菌',
+ 194979 => '菜',
+ 194980 => '𦰶',
+ 194981 => '𦵫',
+ 194982 => '𦳕',
+ 194983 => '䔫',
+ 194984 => '蓱',
+ 194985 => '蓳',
+ 194986 => '蔖',
+ 194987 => '𧏊',
+ 194988 => '蕤',
+ 194989 => '𦼬',
+ 194990 => '䕝',
+ 194991 => '䕡',
+ 194992 => '𦾱',
+ 194993 => '𧃒',
+ 194994 => '䕫',
+ 194995 => '虐',
+ 194996 => '虜',
+ 194997 => '虧',
+ 194998 => '虩',
+ 194999 => '蚩',
+ 195000 => '蚈',
+ 195001 => '蜎',
+ 195002 => '蛢',
+ 195003 => '蝹',
+ 195004 => '蜨',
+ 195005 => '蝫',
+ 195006 => '螆',
+ 195008 => '蟡',
+ 195009 => '蠁',
+ 195010 => '䗹',
+ 195011 => '衠',
+ 195012 => '衣',
+ 195013 => '𧙧',
+ 195014 => '裗',
+ 195015 => '裞',
+ 195016 => '䘵',
+ 195017 => '裺',
+ 195018 => '㒻',
+ 195019 => '𧢮',
+ 195020 => '𧥦',
+ 195021 => '䚾',
+ 195022 => '䛇',
+ 195023 => '誠',
+ 195024 => '諭',
+ 195025 => '變',
+ 195026 => '豕',
+ 195027 => '𧲨',
+ 195028 => '貫',
+ 195029 => '賁',
+ 195030 => '贛',
+ 195031 => '起',
+ 195032 => '𧼯',
+ 195033 => '𠠄',
+ 195034 => '跋',
+ 195035 => '趼',
+ 195036 => '跰',
+ 195037 => '𠣞',
+ 195038 => '軔',
+ 195039 => '輸',
+ 195040 => '𨗒',
+ 195041 => '𨗭',
+ 195042 => '邔',
+ 195043 => '郱',
+ 195044 => '鄑',
+ 195045 => '𨜮',
+ 195046 => '鄛',
+ 195047 => '鈸',
+ 195048 => '鋗',
+ 195049 => '鋘',
+ 195050 => '鉼',
+ 195051 => '鏹',
+ 195052 => '鐕',
+ 195053 => '𨯺',
+ 195054 => '開',
+ 195055 => '䦕',
+ 195056 => '閷',
+ 195057 => '𨵷',
+ 195058 => '䧦',
+ 195059 => '雃',
+ 195060 => '嶲',
+ 195061 => '霣',
+ 195062 => '𩅅',
+ 195063 => '𩈚',
+ 195064 => '䩮',
+ 195065 => '䩶',
+ 195066 => '韠',
+ 195067 => '𩐊',
+ 195068 => '䪲',
+ 195069 => '𩒖',
+ 195070 => '頋',
+ 195071 => '頋',
+ 195072 => '頩',
+ 195073 => '𩖶',
+ 195074 => '飢',
+ 195075 => '䬳',
+ 195076 => '餩',
+ 195077 => '馧',
+ 195078 => '駂',
+ 195079 => '駾',
+ 195080 => '䯎',
+ 195081 => '𩬰',
+ 195082 => '鬒',
+ 195083 => '鱀',
+ 195084 => '鳽',
+ 195085 => '䳎',
+ 195086 => '䳭',
+ 195087 => '鵧',
+ 195088 => '𪃎',
+ 195089 => '䳸',
+ 195090 => '𪄅',
+ 195091 => '𪈎',
+ 195092 => '𪊑',
+ 195093 => '麻',
+ 195094 => '䵖',
+ 195095 => '黹',
+ 195096 => '黾',
+ 195097 => '鼅',
+ 195098 => '鼏',
+ 195099 => '鼖',
+ 195100 => '鼻',
+ 195101 => '𪘀',
+);
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/virama.php b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/virama.php
new file mode 100644
index 00000000..1958e37e
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/Resources/unidata/virama.php
@@ -0,0 +1,65 @@
+ 9,
+ 2509 => 9,
+ 2637 => 9,
+ 2765 => 9,
+ 2893 => 9,
+ 3021 => 9,
+ 3149 => 9,
+ 3277 => 9,
+ 3387 => 9,
+ 3388 => 9,
+ 3405 => 9,
+ 3530 => 9,
+ 3642 => 9,
+ 3770 => 9,
+ 3972 => 9,
+ 4153 => 9,
+ 4154 => 9,
+ 5908 => 9,
+ 5940 => 9,
+ 6098 => 9,
+ 6752 => 9,
+ 6980 => 9,
+ 7082 => 9,
+ 7083 => 9,
+ 7154 => 9,
+ 7155 => 9,
+ 11647 => 9,
+ 43014 => 9,
+ 43052 => 9,
+ 43204 => 9,
+ 43347 => 9,
+ 43456 => 9,
+ 43766 => 9,
+ 44013 => 9,
+ 68159 => 9,
+ 69702 => 9,
+ 69759 => 9,
+ 69817 => 9,
+ 69939 => 9,
+ 69940 => 9,
+ 70080 => 9,
+ 70197 => 9,
+ 70378 => 9,
+ 70477 => 9,
+ 70722 => 9,
+ 70850 => 9,
+ 71103 => 9,
+ 71231 => 9,
+ 71350 => 9,
+ 71467 => 9,
+ 71737 => 9,
+ 71997 => 9,
+ 71998 => 9,
+ 72160 => 9,
+ 72244 => 9,
+ 72263 => 9,
+ 72345 => 9,
+ 72767 => 9,
+ 73028 => 9,
+ 73029 => 9,
+ 73111 => 9,
+);
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/bootstrap.php b/plugins/vendor/symfony/polyfill-intl-idn/bootstrap.php
new file mode 100644
index 00000000..57c78356
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/bootstrap.php
@@ -0,0 +1,145 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Intl\Idn as p;
+
+if (extension_loaded('intl')) {
+ return;
+}
+
+if (\PHP_VERSION_ID >= 80000) {
+ return require __DIR__.'/bootstrap80.php';
+}
+
+if (!defined('U_IDNA_PROHIBITED_ERROR')) {
+ define('U_IDNA_PROHIBITED_ERROR', 66560);
+}
+if (!defined('U_IDNA_ERROR_START')) {
+ define('U_IDNA_ERROR_START', 66560);
+}
+if (!defined('U_IDNA_UNASSIGNED_ERROR')) {
+ define('U_IDNA_UNASSIGNED_ERROR', 66561);
+}
+if (!defined('U_IDNA_CHECK_BIDI_ERROR')) {
+ define('U_IDNA_CHECK_BIDI_ERROR', 66562);
+}
+if (!defined('U_IDNA_STD3_ASCII_RULES_ERROR')) {
+ define('U_IDNA_STD3_ASCII_RULES_ERROR', 66563);
+}
+if (!defined('U_IDNA_ACE_PREFIX_ERROR')) {
+ define('U_IDNA_ACE_PREFIX_ERROR', 66564);
+}
+if (!defined('U_IDNA_VERIFICATION_ERROR')) {
+ define('U_IDNA_VERIFICATION_ERROR', 66565);
+}
+if (!defined('U_IDNA_LABEL_TOO_LONG_ERROR')) {
+ define('U_IDNA_LABEL_TOO_LONG_ERROR', 66566);
+}
+if (!defined('U_IDNA_ZERO_LENGTH_LABEL_ERROR')) {
+ define('U_IDNA_ZERO_LENGTH_LABEL_ERROR', 66567);
+}
+if (!defined('U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR')) {
+ define('U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR', 66568);
+}
+if (!defined('U_IDNA_ERROR_LIMIT')) {
+ define('U_IDNA_ERROR_LIMIT', 66569);
+}
+if (!defined('U_STRINGPREP_PROHIBITED_ERROR')) {
+ define('U_STRINGPREP_PROHIBITED_ERROR', 66560);
+}
+if (!defined('U_STRINGPREP_UNASSIGNED_ERROR')) {
+ define('U_STRINGPREP_UNASSIGNED_ERROR', 66561);
+}
+if (!defined('U_STRINGPREP_CHECK_BIDI_ERROR')) {
+ define('U_STRINGPREP_CHECK_BIDI_ERROR', 66562);
+}
+if (!defined('IDNA_DEFAULT')) {
+ define('IDNA_DEFAULT', 0);
+}
+if (!defined('IDNA_ALLOW_UNASSIGNED')) {
+ define('IDNA_ALLOW_UNASSIGNED', 1);
+}
+if (!defined('IDNA_USE_STD3_RULES')) {
+ define('IDNA_USE_STD3_RULES', 2);
+}
+if (!defined('IDNA_CHECK_BIDI')) {
+ define('IDNA_CHECK_BIDI', 4);
+}
+if (!defined('IDNA_CHECK_CONTEXTJ')) {
+ define('IDNA_CHECK_CONTEXTJ', 8);
+}
+if (!defined('IDNA_NONTRANSITIONAL_TO_ASCII')) {
+ define('IDNA_NONTRANSITIONAL_TO_ASCII', 16);
+}
+if (!defined('IDNA_NONTRANSITIONAL_TO_UNICODE')) {
+ define('IDNA_NONTRANSITIONAL_TO_UNICODE', 32);
+}
+if (!defined('INTL_IDNA_VARIANT_2003')) {
+ define('INTL_IDNA_VARIANT_2003', 0);
+}
+if (!defined('INTL_IDNA_VARIANT_UTS46')) {
+ define('INTL_IDNA_VARIANT_UTS46', 1);
+}
+if (!defined('IDNA_ERROR_EMPTY_LABEL')) {
+ define('IDNA_ERROR_EMPTY_LABEL', 1);
+}
+if (!defined('IDNA_ERROR_LABEL_TOO_LONG')) {
+ define('IDNA_ERROR_LABEL_TOO_LONG', 2);
+}
+if (!defined('IDNA_ERROR_DOMAIN_NAME_TOO_LONG')) {
+ define('IDNA_ERROR_DOMAIN_NAME_TOO_LONG', 4);
+}
+if (!defined('IDNA_ERROR_LEADING_HYPHEN')) {
+ define('IDNA_ERROR_LEADING_HYPHEN', 8);
+}
+if (!defined('IDNA_ERROR_TRAILING_HYPHEN')) {
+ define('IDNA_ERROR_TRAILING_HYPHEN', 16);
+}
+if (!defined('IDNA_ERROR_HYPHEN_3_4')) {
+ define('IDNA_ERROR_HYPHEN_3_4', 32);
+}
+if (!defined('IDNA_ERROR_LEADING_COMBINING_MARK')) {
+ define('IDNA_ERROR_LEADING_COMBINING_MARK', 64);
+}
+if (!defined('IDNA_ERROR_DISALLOWED')) {
+ define('IDNA_ERROR_DISALLOWED', 128);
+}
+if (!defined('IDNA_ERROR_PUNYCODE')) {
+ define('IDNA_ERROR_PUNYCODE', 256);
+}
+if (!defined('IDNA_ERROR_LABEL_HAS_DOT')) {
+ define('IDNA_ERROR_LABEL_HAS_DOT', 512);
+}
+if (!defined('IDNA_ERROR_INVALID_ACE_LABEL')) {
+ define('IDNA_ERROR_INVALID_ACE_LABEL', 1024);
+}
+if (!defined('IDNA_ERROR_BIDI')) {
+ define('IDNA_ERROR_BIDI', 2048);
+}
+if (!defined('IDNA_ERROR_CONTEXTJ')) {
+ define('IDNA_ERROR_CONTEXTJ', 4096);
+}
+
+if (\PHP_VERSION_ID < 70400) {
+ if (!function_exists('idn_to_ascii')) {
+ function idn_to_ascii($domain, $flags = 0, $variant = \INTL_IDNA_VARIANT_2003, &$idna_info = null) { return p\Idn::idn_to_ascii($domain, $flags, $variant, $idna_info); }
+ }
+ if (!function_exists('idn_to_utf8')) {
+ function idn_to_utf8($domain, $flags = 0, $variant = \INTL_IDNA_VARIANT_2003, &$idna_info = null) { return p\Idn::idn_to_utf8($domain, $flags, $variant, $idna_info); }
+ }
+} else {
+ if (!function_exists('idn_to_ascii')) {
+ function idn_to_ascii($domain, $flags = 0, $variant = \INTL_IDNA_VARIANT_UTS46, &$idna_info = null) { return p\Idn::idn_to_ascii($domain, $flags, $variant, $idna_info); }
+ }
+ if (!function_exists('idn_to_utf8')) {
+ function idn_to_utf8($domain, $flags = 0, $variant = \INTL_IDNA_VARIANT_UTS46, &$idna_info = null) { return p\Idn::idn_to_utf8($domain, $flags, $variant, $idna_info); }
+ }
+}
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/bootstrap80.php b/plugins/vendor/symfony/polyfill-intl-idn/bootstrap80.php
new file mode 100644
index 00000000..a62c2d69
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/bootstrap80.php
@@ -0,0 +1,125 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Intl\Idn as p;
+
+if (!defined('U_IDNA_PROHIBITED_ERROR')) {
+ define('U_IDNA_PROHIBITED_ERROR', 66560);
+}
+if (!defined('U_IDNA_ERROR_START')) {
+ define('U_IDNA_ERROR_START', 66560);
+}
+if (!defined('U_IDNA_UNASSIGNED_ERROR')) {
+ define('U_IDNA_UNASSIGNED_ERROR', 66561);
+}
+if (!defined('U_IDNA_CHECK_BIDI_ERROR')) {
+ define('U_IDNA_CHECK_BIDI_ERROR', 66562);
+}
+if (!defined('U_IDNA_STD3_ASCII_RULES_ERROR')) {
+ define('U_IDNA_STD3_ASCII_RULES_ERROR', 66563);
+}
+if (!defined('U_IDNA_ACE_PREFIX_ERROR')) {
+ define('U_IDNA_ACE_PREFIX_ERROR', 66564);
+}
+if (!defined('U_IDNA_VERIFICATION_ERROR')) {
+ define('U_IDNA_VERIFICATION_ERROR', 66565);
+}
+if (!defined('U_IDNA_LABEL_TOO_LONG_ERROR')) {
+ define('U_IDNA_LABEL_TOO_LONG_ERROR', 66566);
+}
+if (!defined('U_IDNA_ZERO_LENGTH_LABEL_ERROR')) {
+ define('U_IDNA_ZERO_LENGTH_LABEL_ERROR', 66567);
+}
+if (!defined('U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR')) {
+ define('U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR', 66568);
+}
+if (!defined('U_IDNA_ERROR_LIMIT')) {
+ define('U_IDNA_ERROR_LIMIT', 66569);
+}
+if (!defined('U_STRINGPREP_PROHIBITED_ERROR')) {
+ define('U_STRINGPREP_PROHIBITED_ERROR', 66560);
+}
+if (!defined('U_STRINGPREP_UNASSIGNED_ERROR')) {
+ define('U_STRINGPREP_UNASSIGNED_ERROR', 66561);
+}
+if (!defined('U_STRINGPREP_CHECK_BIDI_ERROR')) {
+ define('U_STRINGPREP_CHECK_BIDI_ERROR', 66562);
+}
+if (!defined('IDNA_DEFAULT')) {
+ define('IDNA_DEFAULT', 0);
+}
+if (!defined('IDNA_ALLOW_UNASSIGNED')) {
+ define('IDNA_ALLOW_UNASSIGNED', 1);
+}
+if (!defined('IDNA_USE_STD3_RULES')) {
+ define('IDNA_USE_STD3_RULES', 2);
+}
+if (!defined('IDNA_CHECK_BIDI')) {
+ define('IDNA_CHECK_BIDI', 4);
+}
+if (!defined('IDNA_CHECK_CONTEXTJ')) {
+ define('IDNA_CHECK_CONTEXTJ', 8);
+}
+if (!defined('IDNA_NONTRANSITIONAL_TO_ASCII')) {
+ define('IDNA_NONTRANSITIONAL_TO_ASCII', 16);
+}
+if (!defined('IDNA_NONTRANSITIONAL_TO_UNICODE')) {
+ define('IDNA_NONTRANSITIONAL_TO_UNICODE', 32);
+}
+if (!defined('INTL_IDNA_VARIANT_UTS46')) {
+ define('INTL_IDNA_VARIANT_UTS46', 1);
+}
+if (!defined('IDNA_ERROR_EMPTY_LABEL')) {
+ define('IDNA_ERROR_EMPTY_LABEL', 1);
+}
+if (!defined('IDNA_ERROR_LABEL_TOO_LONG')) {
+ define('IDNA_ERROR_LABEL_TOO_LONG', 2);
+}
+if (!defined('IDNA_ERROR_DOMAIN_NAME_TOO_LONG')) {
+ define('IDNA_ERROR_DOMAIN_NAME_TOO_LONG', 4);
+}
+if (!defined('IDNA_ERROR_LEADING_HYPHEN')) {
+ define('IDNA_ERROR_LEADING_HYPHEN', 8);
+}
+if (!defined('IDNA_ERROR_TRAILING_HYPHEN')) {
+ define('IDNA_ERROR_TRAILING_HYPHEN', 16);
+}
+if (!defined('IDNA_ERROR_HYPHEN_3_4')) {
+ define('IDNA_ERROR_HYPHEN_3_4', 32);
+}
+if (!defined('IDNA_ERROR_LEADING_COMBINING_MARK')) {
+ define('IDNA_ERROR_LEADING_COMBINING_MARK', 64);
+}
+if (!defined('IDNA_ERROR_DISALLOWED')) {
+ define('IDNA_ERROR_DISALLOWED', 128);
+}
+if (!defined('IDNA_ERROR_PUNYCODE')) {
+ define('IDNA_ERROR_PUNYCODE', 256);
+}
+if (!defined('IDNA_ERROR_LABEL_HAS_DOT')) {
+ define('IDNA_ERROR_LABEL_HAS_DOT', 512);
+}
+if (!defined('IDNA_ERROR_INVALID_ACE_LABEL')) {
+ define('IDNA_ERROR_INVALID_ACE_LABEL', 1024);
+}
+if (!defined('IDNA_ERROR_BIDI')) {
+ define('IDNA_ERROR_BIDI', 2048);
+}
+if (!defined('IDNA_ERROR_CONTEXTJ')) {
+ define('IDNA_ERROR_CONTEXTJ', 4096);
+}
+
+if (!function_exists('idn_to_ascii')) {
+ function idn_to_ascii(?string $domain, ?int $flags = IDNA_DEFAULT, ?int $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = null): string|false { return p\Idn::idn_to_ascii((string) $domain, (int) $flags, (int) $variant, $idna_info); }
+}
+if (!function_exists('idn_to_utf8')) {
+ function idn_to_utf8(?string $domain, ?int $flags = IDNA_DEFAULT, ?int $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = null): string|false { return p\Idn::idn_to_utf8((string) $domain, (int) $flags, (int) $variant, $idna_info); }
+}
diff --git a/plugins/vendor/symfony/polyfill-intl-idn/composer.json b/plugins/vendor/symfony/polyfill-intl-idn/composer.json
new file mode 100644
index 00000000..760debcd
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-idn/composer.json
@@ -0,0 +1,40 @@
+{
+ "name": "symfony/polyfill-intl-idn",
+ "type": "library",
+ "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+ "keywords": ["polyfill", "shim", "compatibility", "portable", "intl", "idn"],
+ "homepage": "https://symfony.com",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Laurent Bassin",
+ "email": "laurent@bassin.info"
+ },
+ {
+ "name": "Trevor Rowbotham",
+ "email": "trevor.rowbotham@pm.me"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "require": {
+ "php": ">=7.2",
+ "symfony/polyfill-intl-normalizer": "^1.10"
+ },
+ "autoload": {
+ "psr-4": { "Symfony\\Polyfill\\Intl\\Idn\\": "" },
+ "files": [ "bootstrap.php" ]
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "minimum-stability": "dev",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ }
+}
diff --git a/plugins/vendor/symfony/polyfill-intl-normalizer/LICENSE b/plugins/vendor/symfony/polyfill-intl-normalizer/LICENSE
new file mode 100644
index 00000000..6e3afce6
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-normalizer/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2015-present Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/plugins/vendor/symfony/polyfill-intl-normalizer/Normalizer.php b/plugins/vendor/symfony/polyfill-intl-normalizer/Normalizer.php
new file mode 100644
index 00000000..81704ab3
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-normalizer/Normalizer.php
@@ -0,0 +1,310 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Intl\Normalizer;
+
+/**
+ * Normalizer is a PHP fallback implementation of the Normalizer class provided by the intl extension.
+ *
+ * It has been validated with Unicode 6.3 Normalization Conformance Test.
+ * See http://www.unicode.org/reports/tr15/ for detailed info about Unicode normalizations.
+ *
+ * @author Nicolas Grekas
+ *
+ * @internal
+ */
+class Normalizer
+{
+ public const FORM_D = \Normalizer::FORM_D;
+ public const FORM_KD = \Normalizer::FORM_KD;
+ public const FORM_C = \Normalizer::FORM_C;
+ public const FORM_KC = \Normalizer::FORM_KC;
+ public const NFD = \Normalizer::NFD;
+ public const NFKD = \Normalizer::NFKD;
+ public const NFC = \Normalizer::NFC;
+ public const NFKC = \Normalizer::NFKC;
+
+ private static $C;
+ private static $D;
+ private static $KD;
+ private static $cC;
+ private static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4];
+ private static $ASCII = "\x20\x65\x69\x61\x73\x6E\x74\x72\x6F\x6C\x75\x64\x5D\x5B\x63\x6D\x70\x27\x0A\x67\x7C\x68\x76\x2E\x66\x62\x2C\x3A\x3D\x2D\x71\x31\x30\x43\x32\x2A\x79\x78\x29\x28\x4C\x39\x41\x53\x2F\x50\x22\x45\x6A\x4D\x49\x6B\x33\x3E\x35\x54\x3C\x44\x34\x7D\x42\x7B\x38\x46\x77\x52\x36\x37\x55\x47\x4E\x3B\x4A\x7A\x56\x23\x48\x4F\x57\x5F\x26\x21\x4B\x3F\x58\x51\x25\x59\x5C\x09\x5A\x2B\x7E\x5E\x24\x40\x60\x7F\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F";
+
+ public static function isNormalized(string $s, int $form = self::FORM_C)
+ {
+ if (!\in_array($form, [self::NFD, self::NFKD, self::NFC, self::NFKC])) {
+ return false;
+ }
+ if (!isset($s[strspn($s, self::$ASCII)])) {
+ return true;
+ }
+ if (self::NFC == $form && preg_match('//u', $s) && !preg_match('/[^\x00-\x{2FF}]/u', $s)) {
+ return true;
+ }
+
+ return self::normalize($s, $form) === $s;
+ }
+
+ public static function normalize(string $s, int $form = self::FORM_C)
+ {
+ if (!preg_match('//u', $s)) {
+ return false;
+ }
+
+ switch ($form) {
+ case self::NFC: $C = true; $K = false; break;
+ case self::NFD: $C = false; $K = false; break;
+ case self::NFKC: $C = true; $K = true; break;
+ case self::NFKD: $C = false; $K = true; break;
+ default:
+ if (\defined('Normalizer::NONE') && \Normalizer::NONE == $form) {
+ return $s;
+ }
+
+ if (80000 > \PHP_VERSION_ID) {
+ return false;
+ }
+
+ throw new \ValueError('normalizer_normalize(): Argument #2 ($form) must be a a valid normalization form');
+ }
+
+ if ('' === $s) {
+ return '';
+ }
+
+ if ($K && null === self::$KD) {
+ self::$KD = self::getData('compatibilityDecomposition');
+ }
+
+ if (null === self::$D) {
+ self::$D = self::getData('canonicalDecomposition');
+ self::$cC = self::getData('combiningClass');
+ }
+
+ if (null !== $mbEncoding = (2 /* MB_OVERLOAD_STRING */ & (int) \ini_get('mbstring.func_overload')) ? mb_internal_encoding() : null) {
+ mb_internal_encoding('8bit');
+ }
+
+ $r = self::decompose($s, $K);
+
+ if ($C) {
+ if (null === self::$C) {
+ self::$C = self::getData('canonicalComposition');
+ }
+
+ $r = self::recompose($r);
+ }
+ if (null !== $mbEncoding) {
+ mb_internal_encoding($mbEncoding);
+ }
+
+ return $r;
+ }
+
+ private static function recompose($s)
+ {
+ $ASCII = self::$ASCII;
+ $compMap = self::$C;
+ $combClass = self::$cC;
+ $ulenMask = self::$ulenMask;
+
+ $result = $tail = '';
+
+ $i = $s[0] < "\x80" ? 1 : $ulenMask[$s[0] & "\xF0"];
+ $len = \strlen($s);
+
+ $lastUchr = substr($s, 0, $i);
+ $lastUcls = isset($combClass[$lastUchr]) ? 256 : 0;
+
+ while ($i < $len) {
+ if ($s[$i] < "\x80") {
+ // ASCII chars
+
+ if ($tail) {
+ $lastUchr .= $tail;
+ $tail = '';
+ }
+
+ if ($j = strspn($s, $ASCII, $i + 1)) {
+ $lastUchr .= substr($s, $i, $j);
+ $i += $j;
+ }
+
+ $result .= $lastUchr;
+ $lastUchr = $s[$i];
+ $lastUcls = 0;
+ ++$i;
+ continue;
+ }
+
+ $ulen = $ulenMask[$s[$i] & "\xF0"];
+ $uchr = substr($s, $i, $ulen);
+
+ if ($lastUchr < "\xE1\x84\x80" || "\xE1\x84\x92" < $lastUchr
+ || $uchr < "\xE1\x85\xA1" || "\xE1\x85\xB5" < $uchr
+ || $lastUcls) {
+ // Table lookup and combining chars composition
+
+ $ucls = $combClass[$uchr] ?? 0;
+
+ if (isset($compMap[$lastUchr.$uchr]) && (!$lastUcls || $lastUcls < $ucls)) {
+ $lastUchr = $compMap[$lastUchr.$uchr];
+ } elseif ($lastUcls = $ucls) {
+ $tail .= $uchr;
+ } else {
+ if ($tail) {
+ $lastUchr .= $tail;
+ $tail = '';
+ }
+
+ $result .= $lastUchr;
+ $lastUchr = $uchr;
+ }
+ } else {
+ // Hangul chars
+
+ $L = \ord($lastUchr[2]) - 0x80;
+ $V = \ord($uchr[2]) - 0xA1;
+ $T = 0;
+
+ $uchr = substr($s, $i + $ulen, 3);
+
+ if ("\xE1\x86\xA7" <= $uchr && $uchr <= "\xE1\x87\x82") {
+ $T = \ord($uchr[2]) - 0xA7;
+ 0 > $T && $T += 0x40;
+ $ulen += 3;
+ }
+
+ $L = 0xAC00 + ($L * 21 + $V) * 28 + $T;
+ $lastUchr = \chr(0xE0 | $L >> 12).\chr(0x80 | $L >> 6 & 0x3F).\chr(0x80 | $L & 0x3F);
+ }
+
+ $i += $ulen;
+ }
+
+ return $result.$lastUchr.$tail;
+ }
+
+ private static function decompose($s, $c)
+ {
+ $result = '';
+
+ $ASCII = self::$ASCII;
+ $decompMap = self::$D;
+ $combClass = self::$cC;
+ $ulenMask = self::$ulenMask;
+ if ($c) {
+ $compatMap = self::$KD;
+ }
+
+ $c = [];
+ $i = 0;
+ $len = \strlen($s);
+
+ while ($i < $len) {
+ if ($s[$i] < "\x80") {
+ // ASCII chars
+
+ if ($c) {
+ ksort($c);
+ $result .= implode('', $c);
+ $c = [];
+ }
+
+ $j = 1 + strspn($s, $ASCII, $i + 1);
+ $result .= substr($s, $i, $j);
+ $i += $j;
+ continue;
+ }
+
+ $ulen = $ulenMask[$s[$i] & "\xF0"];
+ $uchr = substr($s, $i, $ulen);
+ $i += $ulen;
+
+ if ($uchr < "\xEA\xB0\x80" || "\xED\x9E\xA3" < $uchr) {
+ // Table lookup
+
+ if ($uchr !== $j = $compatMap[$uchr] ?? ($decompMap[$uchr] ?? $uchr)) {
+ $uchr = $j;
+
+ $j = \strlen($uchr);
+ $ulen = $uchr[0] < "\x80" ? 1 : $ulenMask[$uchr[0] & "\xF0"];
+
+ if ($ulen != $j) {
+ // Put trailing chars in $s
+
+ $j -= $ulen;
+ $i -= $j;
+
+ if (0 > $i) {
+ $s = str_repeat(' ', -$i).$s;
+ $len -= $i;
+ $i = 0;
+ }
+
+ while ($j--) {
+ $s[$i + $j] = $uchr[$ulen + $j];
+ }
+
+ $uchr = substr($uchr, 0, $ulen);
+ }
+ }
+ if (isset($combClass[$uchr])) {
+ // Combining chars, for sorting
+
+ if (!isset($c[$combClass[$uchr]])) {
+ $c[$combClass[$uchr]] = '';
+ }
+ $c[$combClass[$uchr]] .= $uchr;
+ continue;
+ }
+ } else {
+ // Hangul chars
+
+ $uchr = unpack('C*', $uchr);
+ $j = (($uchr[1] - 224) << 12) + (($uchr[2] - 128) << 6) + $uchr[3] - 0xAC80;
+
+ $uchr = "\xE1\x84".\chr(0x80 + (int) ($j / 588))
+ ."\xE1\x85".\chr(0xA1 + (int) (($j % 588) / 28));
+
+ if ($j %= 28) {
+ $uchr .= $j < 25
+ ? ("\xE1\x86".\chr(0xA7 + $j))
+ : ("\xE1\x87".\chr(0x67 + $j));
+ }
+ }
+ if ($c) {
+ ksort($c);
+ $result .= implode('', $c);
+ $c = [];
+ }
+
+ $result .= $uchr;
+ }
+
+ if ($c) {
+ ksort($c);
+ $result .= implode('', $c);
+ }
+
+ return $result;
+ }
+
+ private static function getData($file)
+ {
+ if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) {
+ return require $file;
+ }
+
+ return false;
+ }
+}
diff --git a/plugins/vendor/symfony/polyfill-intl-normalizer/README.md b/plugins/vendor/symfony/polyfill-intl-normalizer/README.md
new file mode 100644
index 00000000..b9b762e8
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-normalizer/README.md
@@ -0,0 +1,14 @@
+Symfony Polyfill / Intl: Normalizer
+===================================
+
+This component provides a fallback implementation for the
+[`Normalizer`](https://php.net/Normalizer) class provided
+by the [Intl](https://php.net/intl) extension.
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
diff --git a/plugins/vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php b/plugins/vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php
new file mode 100644
index 00000000..0fdfc890
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php
@@ -0,0 +1,17 @@
+ 'À',
+ 'Á' => 'Á',
+ 'Â' => 'Â',
+ 'Ã' => 'Ã',
+ 'Ä' => 'Ä',
+ 'Å' => 'Å',
+ 'Ç' => 'Ç',
+ 'È' => 'È',
+ 'É' => 'É',
+ 'Ê' => 'Ê',
+ 'Ë' => 'Ë',
+ 'Ì' => 'Ì',
+ 'Í' => 'Í',
+ 'Î' => 'Î',
+ 'Ï' => 'Ï',
+ 'Ñ' => 'Ñ',
+ 'Ò' => 'Ò',
+ 'Ó' => 'Ó',
+ 'Ô' => 'Ô',
+ 'Õ' => 'Õ',
+ 'Ö' => 'Ö',
+ 'Ù' => 'Ù',
+ 'Ú' => 'Ú',
+ 'Û' => 'Û',
+ 'Ü' => 'Ü',
+ 'Ý' => 'Ý',
+ 'à' => 'à',
+ 'á' => 'á',
+ 'â' => 'â',
+ 'ã' => 'ã',
+ 'ä' => 'ä',
+ 'å' => 'å',
+ 'ç' => 'ç',
+ 'è' => 'è',
+ 'é' => 'é',
+ 'ê' => 'ê',
+ 'ë' => 'ë',
+ 'ì' => 'ì',
+ 'í' => 'í',
+ 'î' => 'î',
+ 'ï' => 'ï',
+ 'ñ' => 'ñ',
+ 'ò' => 'ò',
+ 'ó' => 'ó',
+ 'ô' => 'ô',
+ 'õ' => 'õ',
+ 'ö' => 'ö',
+ 'ù' => 'ù',
+ 'ú' => 'ú',
+ 'û' => 'û',
+ 'ü' => 'ü',
+ 'ý' => 'ý',
+ 'ÿ' => 'ÿ',
+ 'Ā' => 'Ā',
+ 'ā' => 'ā',
+ 'Ă' => 'Ă',
+ 'ă' => 'ă',
+ 'Ą' => 'Ą',
+ 'ą' => 'ą',
+ 'Ć' => 'Ć',
+ 'ć' => 'ć',
+ 'Ĉ' => 'Ĉ',
+ 'ĉ' => 'ĉ',
+ 'Ċ' => 'Ċ',
+ 'ċ' => 'ċ',
+ 'Č' => 'Č',
+ 'č' => 'č',
+ 'Ď' => 'Ď',
+ 'ď' => 'ď',
+ 'Ē' => 'Ē',
+ 'ē' => 'ē',
+ 'Ĕ' => 'Ĕ',
+ 'ĕ' => 'ĕ',
+ 'Ė' => 'Ė',
+ 'ė' => 'ė',
+ 'Ę' => 'Ę',
+ 'ę' => 'ę',
+ 'Ě' => 'Ě',
+ 'ě' => 'ě',
+ 'Ĝ' => 'Ĝ',
+ 'ĝ' => 'ĝ',
+ 'Ğ' => 'Ğ',
+ 'ğ' => 'ğ',
+ 'Ġ' => 'Ġ',
+ 'ġ' => 'ġ',
+ 'Ģ' => 'Ģ',
+ 'ģ' => 'ģ',
+ 'Ĥ' => 'Ĥ',
+ 'ĥ' => 'ĥ',
+ 'Ĩ' => 'Ĩ',
+ 'ĩ' => 'ĩ',
+ 'Ī' => 'Ī',
+ 'ī' => 'ī',
+ 'Ĭ' => 'Ĭ',
+ 'ĭ' => 'ĭ',
+ 'Į' => 'Į',
+ 'į' => 'į',
+ 'İ' => 'İ',
+ 'Ĵ' => 'Ĵ',
+ 'ĵ' => 'ĵ',
+ 'Ķ' => 'Ķ',
+ 'ķ' => 'ķ',
+ 'Ĺ' => 'Ĺ',
+ 'ĺ' => 'ĺ',
+ 'Ļ' => 'Ļ',
+ 'ļ' => 'ļ',
+ 'Ľ' => 'Ľ',
+ 'ľ' => 'ľ',
+ 'Ń' => 'Ń',
+ 'ń' => 'ń',
+ 'Ņ' => 'Ņ',
+ 'ņ' => 'ņ',
+ 'Ň' => 'Ň',
+ 'ň' => 'ň',
+ 'Ō' => 'Ō',
+ 'ō' => 'ō',
+ 'Ŏ' => 'Ŏ',
+ 'ŏ' => 'ŏ',
+ 'Ő' => 'Ő',
+ 'ő' => 'ő',
+ 'Ŕ' => 'Ŕ',
+ 'ŕ' => 'ŕ',
+ 'Ŗ' => 'Ŗ',
+ 'ŗ' => 'ŗ',
+ 'Ř' => 'Ř',
+ 'ř' => 'ř',
+ 'Ś' => 'Ś',
+ 'ś' => 'ś',
+ 'Ŝ' => 'Ŝ',
+ 'ŝ' => 'ŝ',
+ 'Ş' => 'Ş',
+ 'ş' => 'ş',
+ 'Š' => 'Š',
+ 'š' => 'š',
+ 'Ţ' => 'Ţ',
+ 'ţ' => 'ţ',
+ 'Ť' => 'Ť',
+ 'ť' => 'ť',
+ 'Ũ' => 'Ũ',
+ 'ũ' => 'ũ',
+ 'Ū' => 'Ū',
+ 'ū' => 'ū',
+ 'Ŭ' => 'Ŭ',
+ 'ŭ' => 'ŭ',
+ 'Ů' => 'Ů',
+ 'ů' => 'ů',
+ 'Ű' => 'Ű',
+ 'ű' => 'ű',
+ 'Ų' => 'Ų',
+ 'ų' => 'ų',
+ 'Ŵ' => 'Ŵ',
+ 'ŵ' => 'ŵ',
+ 'Ŷ' => 'Ŷ',
+ 'ŷ' => 'ŷ',
+ 'Ÿ' => 'Ÿ',
+ 'Ź' => 'Ź',
+ 'ź' => 'ź',
+ 'Ż' => 'Ż',
+ 'ż' => 'ż',
+ 'Ž' => 'Ž',
+ 'ž' => 'ž',
+ 'Ơ' => 'Ơ',
+ 'ơ' => 'ơ',
+ 'Ư' => 'Ư',
+ 'ư' => 'ư',
+ 'Ǎ' => 'Ǎ',
+ 'ǎ' => 'ǎ',
+ 'Ǐ' => 'Ǐ',
+ 'ǐ' => 'ǐ',
+ 'Ǒ' => 'Ǒ',
+ 'ǒ' => 'ǒ',
+ 'Ǔ' => 'Ǔ',
+ 'ǔ' => 'ǔ',
+ 'Ǖ' => 'Ǖ',
+ 'ǖ' => 'ǖ',
+ 'Ǘ' => 'Ǘ',
+ 'ǘ' => 'ǘ',
+ 'Ǚ' => 'Ǚ',
+ 'ǚ' => 'ǚ',
+ 'Ǜ' => 'Ǜ',
+ 'ǜ' => 'ǜ',
+ 'Ǟ' => 'Ǟ',
+ 'ǟ' => 'ǟ',
+ 'Ǡ' => 'Ǡ',
+ 'ǡ' => 'ǡ',
+ 'Ǣ' => 'Ǣ',
+ 'ǣ' => 'ǣ',
+ 'Ǧ' => 'Ǧ',
+ 'ǧ' => 'ǧ',
+ 'Ǩ' => 'Ǩ',
+ 'ǩ' => 'ǩ',
+ 'Ǫ' => 'Ǫ',
+ 'ǫ' => 'ǫ',
+ 'Ǭ' => 'Ǭ',
+ 'ǭ' => 'ǭ',
+ 'Ǯ' => 'Ǯ',
+ 'ǯ' => 'ǯ',
+ 'ǰ' => 'ǰ',
+ 'Ǵ' => 'Ǵ',
+ 'ǵ' => 'ǵ',
+ 'Ǹ' => 'Ǹ',
+ 'ǹ' => 'ǹ',
+ 'Ǻ' => 'Ǻ',
+ 'ǻ' => 'ǻ',
+ 'Ǽ' => 'Ǽ',
+ 'ǽ' => 'ǽ',
+ 'Ǿ' => 'Ǿ',
+ 'ǿ' => 'ǿ',
+ 'Ȁ' => 'Ȁ',
+ 'ȁ' => 'ȁ',
+ 'Ȃ' => 'Ȃ',
+ 'ȃ' => 'ȃ',
+ 'Ȅ' => 'Ȅ',
+ 'ȅ' => 'ȅ',
+ 'Ȇ' => 'Ȇ',
+ 'ȇ' => 'ȇ',
+ 'Ȉ' => 'Ȉ',
+ 'ȉ' => 'ȉ',
+ 'Ȋ' => 'Ȋ',
+ 'ȋ' => 'ȋ',
+ 'Ȍ' => 'Ȍ',
+ 'ȍ' => 'ȍ',
+ 'Ȏ' => 'Ȏ',
+ 'ȏ' => 'ȏ',
+ 'Ȑ' => 'Ȑ',
+ 'ȑ' => 'ȑ',
+ 'Ȓ' => 'Ȓ',
+ 'ȓ' => 'ȓ',
+ 'Ȕ' => 'Ȕ',
+ 'ȕ' => 'ȕ',
+ 'Ȗ' => 'Ȗ',
+ 'ȗ' => 'ȗ',
+ 'Ș' => 'Ș',
+ 'ș' => 'ș',
+ 'Ț' => 'Ț',
+ 'ț' => 'ț',
+ 'Ȟ' => 'Ȟ',
+ 'ȟ' => 'ȟ',
+ 'Ȧ' => 'Ȧ',
+ 'ȧ' => 'ȧ',
+ 'Ȩ' => 'Ȩ',
+ 'ȩ' => 'ȩ',
+ 'Ȫ' => 'Ȫ',
+ 'ȫ' => 'ȫ',
+ 'Ȭ' => 'Ȭ',
+ 'ȭ' => 'ȭ',
+ 'Ȯ' => 'Ȯ',
+ 'ȯ' => 'ȯ',
+ 'Ȱ' => 'Ȱ',
+ 'ȱ' => 'ȱ',
+ 'Ȳ' => 'Ȳ',
+ 'ȳ' => 'ȳ',
+ '΅' => '΅',
+ 'Ά' => 'Ά',
+ 'Έ' => 'Έ',
+ 'Ή' => 'Ή',
+ 'Ί' => 'Ί',
+ 'Ό' => 'Ό',
+ 'Ύ' => 'Ύ',
+ 'Ώ' => 'Ώ',
+ 'ΐ' => 'ΐ',
+ 'Ϊ' => 'Ϊ',
+ 'Ϋ' => 'Ϋ',
+ 'ά' => 'ά',
+ 'έ' => 'έ',
+ 'ή' => 'ή',
+ 'ί' => 'ί',
+ 'ΰ' => 'ΰ',
+ 'ϊ' => 'ϊ',
+ 'ϋ' => 'ϋ',
+ 'ό' => 'ό',
+ 'ύ' => 'ύ',
+ 'ώ' => 'ώ',
+ 'ϓ' => 'ϓ',
+ 'ϔ' => 'ϔ',
+ 'Ѐ' => 'Ѐ',
+ 'Ё' => 'Ё',
+ 'Ѓ' => 'Ѓ',
+ 'Ї' => 'Ї',
+ 'Ќ' => 'Ќ',
+ 'Ѝ' => 'Ѝ',
+ 'Ў' => 'Ў',
+ 'Й' => 'Й',
+ 'й' => 'й',
+ 'ѐ' => 'ѐ',
+ 'ё' => 'ё',
+ 'ѓ' => 'ѓ',
+ 'ї' => 'ї',
+ 'ќ' => 'ќ',
+ 'ѝ' => 'ѝ',
+ 'ў' => 'ў',
+ 'Ѷ' => 'Ѷ',
+ 'ѷ' => 'ѷ',
+ 'Ӂ' => 'Ӂ',
+ 'ӂ' => 'ӂ',
+ 'Ӑ' => 'Ӑ',
+ 'ӑ' => 'ӑ',
+ 'Ӓ' => 'Ӓ',
+ 'ӓ' => 'ӓ',
+ 'Ӗ' => 'Ӗ',
+ 'ӗ' => 'ӗ',
+ 'Ӛ' => 'Ӛ',
+ 'ӛ' => 'ӛ',
+ 'Ӝ' => 'Ӝ',
+ 'ӝ' => 'ӝ',
+ 'Ӟ' => 'Ӟ',
+ 'ӟ' => 'ӟ',
+ 'Ӣ' => 'Ӣ',
+ 'ӣ' => 'ӣ',
+ 'Ӥ' => 'Ӥ',
+ 'ӥ' => 'ӥ',
+ 'Ӧ' => 'Ӧ',
+ 'ӧ' => 'ӧ',
+ 'Ӫ' => 'Ӫ',
+ 'ӫ' => 'ӫ',
+ 'Ӭ' => 'Ӭ',
+ 'ӭ' => 'ӭ',
+ 'Ӯ' => 'Ӯ',
+ 'ӯ' => 'ӯ',
+ 'Ӱ' => 'Ӱ',
+ 'ӱ' => 'ӱ',
+ 'Ӳ' => 'Ӳ',
+ 'ӳ' => 'ӳ',
+ 'Ӵ' => 'Ӵ',
+ 'ӵ' => 'ӵ',
+ 'Ӹ' => 'Ӹ',
+ 'ӹ' => 'ӹ',
+ 'آ' => 'آ',
+ 'أ' => 'أ',
+ 'ؤ' => 'ؤ',
+ 'إ' => 'إ',
+ 'ئ' => 'ئ',
+ 'ۀ' => 'ۀ',
+ 'ۂ' => 'ۂ',
+ 'ۓ' => 'ۓ',
+ 'ऩ' => 'ऩ',
+ 'ऱ' => 'ऱ',
+ 'ऴ' => 'ऴ',
+ 'ো' => 'ো',
+ 'ৌ' => 'ৌ',
+ 'ୈ' => 'ୈ',
+ 'ୋ' => 'ୋ',
+ 'ୌ' => 'ୌ',
+ 'ஔ' => 'ஔ',
+ 'ொ' => 'ொ',
+ 'ோ' => 'ோ',
+ 'ௌ' => 'ௌ',
+ 'ై' => 'ై',
+ 'ೀ' => 'ೀ',
+ 'ೇ' => 'ೇ',
+ 'ೈ' => 'ೈ',
+ 'ೊ' => 'ೊ',
+ 'ೋ' => 'ೋ',
+ 'ൊ' => 'ൊ',
+ 'ോ' => 'ോ',
+ 'ൌ' => 'ൌ',
+ 'ේ' => 'ේ',
+ 'ො' => 'ො',
+ 'ෝ' => 'ෝ',
+ 'ෞ' => 'ෞ',
+ 'ဦ' => 'ဦ',
+ 'ᬆ' => 'ᬆ',
+ 'ᬈ' => 'ᬈ',
+ 'ᬊ' => 'ᬊ',
+ 'ᬌ' => 'ᬌ',
+ 'ᬎ' => 'ᬎ',
+ 'ᬒ' => 'ᬒ',
+ 'ᬻ' => 'ᬻ',
+ 'ᬽ' => 'ᬽ',
+ 'ᭀ' => 'ᭀ',
+ 'ᭁ' => 'ᭁ',
+ 'ᭃ' => 'ᭃ',
+ 'Ḁ' => 'Ḁ',
+ 'ḁ' => 'ḁ',
+ 'Ḃ' => 'Ḃ',
+ 'ḃ' => 'ḃ',
+ 'Ḅ' => 'Ḅ',
+ 'ḅ' => 'ḅ',
+ 'Ḇ' => 'Ḇ',
+ 'ḇ' => 'ḇ',
+ 'Ḉ' => 'Ḉ',
+ 'ḉ' => 'ḉ',
+ 'Ḋ' => 'Ḋ',
+ 'ḋ' => 'ḋ',
+ 'Ḍ' => 'Ḍ',
+ 'ḍ' => 'ḍ',
+ 'Ḏ' => 'Ḏ',
+ 'ḏ' => 'ḏ',
+ 'Ḑ' => 'Ḑ',
+ 'ḑ' => 'ḑ',
+ 'Ḓ' => 'Ḓ',
+ 'ḓ' => 'ḓ',
+ 'Ḕ' => 'Ḕ',
+ 'ḕ' => 'ḕ',
+ 'Ḗ' => 'Ḗ',
+ 'ḗ' => 'ḗ',
+ 'Ḙ' => 'Ḙ',
+ 'ḙ' => 'ḙ',
+ 'Ḛ' => 'Ḛ',
+ 'ḛ' => 'ḛ',
+ 'Ḝ' => 'Ḝ',
+ 'ḝ' => 'ḝ',
+ 'Ḟ' => 'Ḟ',
+ 'ḟ' => 'ḟ',
+ 'Ḡ' => 'Ḡ',
+ 'ḡ' => 'ḡ',
+ 'Ḣ' => 'Ḣ',
+ 'ḣ' => 'ḣ',
+ 'Ḥ' => 'Ḥ',
+ 'ḥ' => 'ḥ',
+ 'Ḧ' => 'Ḧ',
+ 'ḧ' => 'ḧ',
+ 'Ḩ' => 'Ḩ',
+ 'ḩ' => 'ḩ',
+ 'Ḫ' => 'Ḫ',
+ 'ḫ' => 'ḫ',
+ 'Ḭ' => 'Ḭ',
+ 'ḭ' => 'ḭ',
+ 'Ḯ' => 'Ḯ',
+ 'ḯ' => 'ḯ',
+ 'Ḱ' => 'Ḱ',
+ 'ḱ' => 'ḱ',
+ 'Ḳ' => 'Ḳ',
+ 'ḳ' => 'ḳ',
+ 'Ḵ' => 'Ḵ',
+ 'ḵ' => 'ḵ',
+ 'Ḷ' => 'Ḷ',
+ 'ḷ' => 'ḷ',
+ 'Ḹ' => 'Ḹ',
+ 'ḹ' => 'ḹ',
+ 'Ḻ' => 'Ḻ',
+ 'ḻ' => 'ḻ',
+ 'Ḽ' => 'Ḽ',
+ 'ḽ' => 'ḽ',
+ 'Ḿ' => 'Ḿ',
+ 'ḿ' => 'ḿ',
+ 'Ṁ' => 'Ṁ',
+ 'ṁ' => 'ṁ',
+ 'Ṃ' => 'Ṃ',
+ 'ṃ' => 'ṃ',
+ 'Ṅ' => 'Ṅ',
+ 'ṅ' => 'ṅ',
+ 'Ṇ' => 'Ṇ',
+ 'ṇ' => 'ṇ',
+ 'Ṉ' => 'Ṉ',
+ 'ṉ' => 'ṉ',
+ 'Ṋ' => 'Ṋ',
+ 'ṋ' => 'ṋ',
+ 'Ṍ' => 'Ṍ',
+ 'ṍ' => 'ṍ',
+ 'Ṏ' => 'Ṏ',
+ 'ṏ' => 'ṏ',
+ 'Ṑ' => 'Ṑ',
+ 'ṑ' => 'ṑ',
+ 'Ṓ' => 'Ṓ',
+ 'ṓ' => 'ṓ',
+ 'Ṕ' => 'Ṕ',
+ 'ṕ' => 'ṕ',
+ 'Ṗ' => 'Ṗ',
+ 'ṗ' => 'ṗ',
+ 'Ṙ' => 'Ṙ',
+ 'ṙ' => 'ṙ',
+ 'Ṛ' => 'Ṛ',
+ 'ṛ' => 'ṛ',
+ 'Ṝ' => 'Ṝ',
+ 'ṝ' => 'ṝ',
+ 'Ṟ' => 'Ṟ',
+ 'ṟ' => 'ṟ',
+ 'Ṡ' => 'Ṡ',
+ 'ṡ' => 'ṡ',
+ 'Ṣ' => 'Ṣ',
+ 'ṣ' => 'ṣ',
+ 'Ṥ' => 'Ṥ',
+ 'ṥ' => 'ṥ',
+ 'Ṧ' => 'Ṧ',
+ 'ṧ' => 'ṧ',
+ 'Ṩ' => 'Ṩ',
+ 'ṩ' => 'ṩ',
+ 'Ṫ' => 'Ṫ',
+ 'ṫ' => 'ṫ',
+ 'Ṭ' => 'Ṭ',
+ 'ṭ' => 'ṭ',
+ 'Ṯ' => 'Ṯ',
+ 'ṯ' => 'ṯ',
+ 'Ṱ' => 'Ṱ',
+ 'ṱ' => 'ṱ',
+ 'Ṳ' => 'Ṳ',
+ 'ṳ' => 'ṳ',
+ 'Ṵ' => 'Ṵ',
+ 'ṵ' => 'ṵ',
+ 'Ṷ' => 'Ṷ',
+ 'ṷ' => 'ṷ',
+ 'Ṹ' => 'Ṹ',
+ 'ṹ' => 'ṹ',
+ 'Ṻ' => 'Ṻ',
+ 'ṻ' => 'ṻ',
+ 'Ṽ' => 'Ṽ',
+ 'ṽ' => 'ṽ',
+ 'Ṿ' => 'Ṿ',
+ 'ṿ' => 'ṿ',
+ 'Ẁ' => 'Ẁ',
+ 'ẁ' => 'ẁ',
+ 'Ẃ' => 'Ẃ',
+ 'ẃ' => 'ẃ',
+ 'Ẅ' => 'Ẅ',
+ 'ẅ' => 'ẅ',
+ 'Ẇ' => 'Ẇ',
+ 'ẇ' => 'ẇ',
+ 'Ẉ' => 'Ẉ',
+ 'ẉ' => 'ẉ',
+ 'Ẋ' => 'Ẋ',
+ 'ẋ' => 'ẋ',
+ 'Ẍ' => 'Ẍ',
+ 'ẍ' => 'ẍ',
+ 'Ẏ' => 'Ẏ',
+ 'ẏ' => 'ẏ',
+ 'Ẑ' => 'Ẑ',
+ 'ẑ' => 'ẑ',
+ 'Ẓ' => 'Ẓ',
+ 'ẓ' => 'ẓ',
+ 'Ẕ' => 'Ẕ',
+ 'ẕ' => 'ẕ',
+ 'ẖ' => 'ẖ',
+ 'ẗ' => 'ẗ',
+ 'ẘ' => 'ẘ',
+ 'ẙ' => 'ẙ',
+ 'ẛ' => 'ẛ',
+ 'Ạ' => 'Ạ',
+ 'ạ' => 'ạ',
+ 'Ả' => 'Ả',
+ 'ả' => 'ả',
+ 'Ấ' => 'Ấ',
+ 'ấ' => 'ấ',
+ 'Ầ' => 'Ầ',
+ 'ầ' => 'ầ',
+ 'Ẩ' => 'Ẩ',
+ 'ẩ' => 'ẩ',
+ 'Ẫ' => 'Ẫ',
+ 'ẫ' => 'ẫ',
+ 'Ậ' => 'Ậ',
+ 'ậ' => 'ậ',
+ 'Ắ' => 'Ắ',
+ 'ắ' => 'ắ',
+ 'Ằ' => 'Ằ',
+ 'ằ' => 'ằ',
+ 'Ẳ' => 'Ẳ',
+ 'ẳ' => 'ẳ',
+ 'Ẵ' => 'Ẵ',
+ 'ẵ' => 'ẵ',
+ 'Ặ' => 'Ặ',
+ 'ặ' => 'ặ',
+ 'Ẹ' => 'Ẹ',
+ 'ẹ' => 'ẹ',
+ 'Ẻ' => 'Ẻ',
+ 'ẻ' => 'ẻ',
+ 'Ẽ' => 'Ẽ',
+ 'ẽ' => 'ẽ',
+ 'Ế' => 'Ế',
+ 'ế' => 'ế',
+ 'Ề' => 'Ề',
+ 'ề' => 'ề',
+ 'Ể' => 'Ể',
+ 'ể' => 'ể',
+ 'Ễ' => 'Ễ',
+ 'ễ' => 'ễ',
+ 'Ệ' => 'Ệ',
+ 'ệ' => 'ệ',
+ 'Ỉ' => 'Ỉ',
+ 'ỉ' => 'ỉ',
+ 'Ị' => 'Ị',
+ 'ị' => 'ị',
+ 'Ọ' => 'Ọ',
+ 'ọ' => 'ọ',
+ 'Ỏ' => 'Ỏ',
+ 'ỏ' => 'ỏ',
+ 'Ố' => 'Ố',
+ 'ố' => 'ố',
+ 'Ồ' => 'Ồ',
+ 'ồ' => 'ồ',
+ 'Ổ' => 'Ổ',
+ 'ổ' => 'ổ',
+ 'Ỗ' => 'Ỗ',
+ 'ỗ' => 'ỗ',
+ 'Ộ' => 'Ộ',
+ 'ộ' => 'ộ',
+ 'Ớ' => 'Ớ',
+ 'ớ' => 'ớ',
+ 'Ờ' => 'Ờ',
+ 'ờ' => 'ờ',
+ 'Ở' => 'Ở',
+ 'ở' => 'ở',
+ 'Ỡ' => 'Ỡ',
+ 'ỡ' => 'ỡ',
+ 'Ợ' => 'Ợ',
+ 'ợ' => 'ợ',
+ 'Ụ' => 'Ụ',
+ 'ụ' => 'ụ',
+ 'Ủ' => 'Ủ',
+ 'ủ' => 'ủ',
+ 'Ứ' => 'Ứ',
+ 'ứ' => 'ứ',
+ 'Ừ' => 'Ừ',
+ 'ừ' => 'ừ',
+ 'Ử' => 'Ử',
+ 'ử' => 'ử',
+ 'Ữ' => 'Ữ',
+ 'ữ' => 'ữ',
+ 'Ự' => 'Ự',
+ 'ự' => 'ự',
+ 'Ỳ' => 'Ỳ',
+ 'ỳ' => 'ỳ',
+ 'Ỵ' => 'Ỵ',
+ 'ỵ' => 'ỵ',
+ 'Ỷ' => 'Ỷ',
+ 'ỷ' => 'ỷ',
+ 'Ỹ' => 'Ỹ',
+ 'ỹ' => 'ỹ',
+ 'ἀ' => 'ἀ',
+ 'ἁ' => 'ἁ',
+ 'ἂ' => 'ἂ',
+ 'ἃ' => 'ἃ',
+ 'ἄ' => 'ἄ',
+ 'ἅ' => 'ἅ',
+ 'ἆ' => 'ἆ',
+ 'ἇ' => 'ἇ',
+ 'Ἀ' => 'Ἀ',
+ 'Ἁ' => 'Ἁ',
+ 'Ἂ' => 'Ἂ',
+ 'Ἃ' => 'Ἃ',
+ 'Ἄ' => 'Ἄ',
+ 'Ἅ' => 'Ἅ',
+ 'Ἆ' => 'Ἆ',
+ 'Ἇ' => 'Ἇ',
+ 'ἐ' => 'ἐ',
+ 'ἑ' => 'ἑ',
+ 'ἒ' => 'ἒ',
+ 'ἓ' => 'ἓ',
+ 'ἔ' => 'ἔ',
+ 'ἕ' => 'ἕ',
+ 'Ἐ' => 'Ἐ',
+ 'Ἑ' => 'Ἑ',
+ 'Ἒ' => 'Ἒ',
+ 'Ἓ' => 'Ἓ',
+ 'Ἔ' => 'Ἔ',
+ 'Ἕ' => 'Ἕ',
+ 'ἠ' => 'ἠ',
+ 'ἡ' => 'ἡ',
+ 'ἢ' => 'ἢ',
+ 'ἣ' => 'ἣ',
+ 'ἤ' => 'ἤ',
+ 'ἥ' => 'ἥ',
+ 'ἦ' => 'ἦ',
+ 'ἧ' => 'ἧ',
+ 'Ἠ' => 'Ἠ',
+ 'Ἡ' => 'Ἡ',
+ 'Ἢ' => 'Ἢ',
+ 'Ἣ' => 'Ἣ',
+ 'Ἤ' => 'Ἤ',
+ 'Ἥ' => 'Ἥ',
+ 'Ἦ' => 'Ἦ',
+ 'Ἧ' => 'Ἧ',
+ 'ἰ' => 'ἰ',
+ 'ἱ' => 'ἱ',
+ 'ἲ' => 'ἲ',
+ 'ἳ' => 'ἳ',
+ 'ἴ' => 'ἴ',
+ 'ἵ' => 'ἵ',
+ 'ἶ' => 'ἶ',
+ 'ἷ' => 'ἷ',
+ 'Ἰ' => 'Ἰ',
+ 'Ἱ' => 'Ἱ',
+ 'Ἲ' => 'Ἲ',
+ 'Ἳ' => 'Ἳ',
+ 'Ἴ' => 'Ἴ',
+ 'Ἵ' => 'Ἵ',
+ 'Ἶ' => 'Ἶ',
+ 'Ἷ' => 'Ἷ',
+ 'ὀ' => 'ὀ',
+ 'ὁ' => 'ὁ',
+ 'ὂ' => 'ὂ',
+ 'ὃ' => 'ὃ',
+ 'ὄ' => 'ὄ',
+ 'ὅ' => 'ὅ',
+ 'Ὀ' => 'Ὀ',
+ 'Ὁ' => 'Ὁ',
+ 'Ὂ' => 'Ὂ',
+ 'Ὃ' => 'Ὃ',
+ 'Ὄ' => 'Ὄ',
+ 'Ὅ' => 'Ὅ',
+ 'ὐ' => 'ὐ',
+ 'ὑ' => 'ὑ',
+ 'ὒ' => 'ὒ',
+ 'ὓ' => 'ὓ',
+ 'ὔ' => 'ὔ',
+ 'ὕ' => 'ὕ',
+ 'ὖ' => 'ὖ',
+ 'ὗ' => 'ὗ',
+ 'Ὑ' => 'Ὑ',
+ 'Ὓ' => 'Ὓ',
+ 'Ὕ' => 'Ὕ',
+ 'Ὗ' => 'Ὗ',
+ 'ὠ' => 'ὠ',
+ 'ὡ' => 'ὡ',
+ 'ὢ' => 'ὢ',
+ 'ὣ' => 'ὣ',
+ 'ὤ' => 'ὤ',
+ 'ὥ' => 'ὥ',
+ 'ὦ' => 'ὦ',
+ 'ὧ' => 'ὧ',
+ 'Ὠ' => 'Ὠ',
+ 'Ὡ' => 'Ὡ',
+ 'Ὢ' => 'Ὢ',
+ 'Ὣ' => 'Ὣ',
+ 'Ὤ' => 'Ὤ',
+ 'Ὥ' => 'Ὥ',
+ 'Ὦ' => 'Ὦ',
+ 'Ὧ' => 'Ὧ',
+ 'ὰ' => 'ὰ',
+ 'ὲ' => 'ὲ',
+ 'ὴ' => 'ὴ',
+ 'ὶ' => 'ὶ',
+ 'ὸ' => 'ὸ',
+ 'ὺ' => 'ὺ',
+ 'ὼ' => 'ὼ',
+ 'ᾀ' => 'ᾀ',
+ 'ᾁ' => 'ᾁ',
+ 'ᾂ' => 'ᾂ',
+ 'ᾃ' => 'ᾃ',
+ 'ᾄ' => 'ᾄ',
+ 'ᾅ' => 'ᾅ',
+ 'ᾆ' => 'ᾆ',
+ 'ᾇ' => 'ᾇ',
+ 'ᾈ' => 'ᾈ',
+ 'ᾉ' => 'ᾉ',
+ 'ᾊ' => 'ᾊ',
+ 'ᾋ' => 'ᾋ',
+ 'ᾌ' => 'ᾌ',
+ 'ᾍ' => 'ᾍ',
+ 'ᾎ' => 'ᾎ',
+ 'ᾏ' => 'ᾏ',
+ 'ᾐ' => 'ᾐ',
+ 'ᾑ' => 'ᾑ',
+ 'ᾒ' => 'ᾒ',
+ 'ᾓ' => 'ᾓ',
+ 'ᾔ' => 'ᾔ',
+ 'ᾕ' => 'ᾕ',
+ 'ᾖ' => 'ᾖ',
+ 'ᾗ' => 'ᾗ',
+ 'ᾘ' => 'ᾘ',
+ 'ᾙ' => 'ᾙ',
+ 'ᾚ' => 'ᾚ',
+ 'ᾛ' => 'ᾛ',
+ 'ᾜ' => 'ᾜ',
+ 'ᾝ' => 'ᾝ',
+ 'ᾞ' => 'ᾞ',
+ 'ᾟ' => 'ᾟ',
+ 'ᾠ' => 'ᾠ',
+ 'ᾡ' => 'ᾡ',
+ 'ᾢ' => 'ᾢ',
+ 'ᾣ' => 'ᾣ',
+ 'ᾤ' => 'ᾤ',
+ 'ᾥ' => 'ᾥ',
+ 'ᾦ' => 'ᾦ',
+ 'ᾧ' => 'ᾧ',
+ 'ᾨ' => 'ᾨ',
+ 'ᾩ' => 'ᾩ',
+ 'ᾪ' => 'ᾪ',
+ 'ᾫ' => 'ᾫ',
+ 'ᾬ' => 'ᾬ',
+ 'ᾭ' => 'ᾭ',
+ 'ᾮ' => 'ᾮ',
+ 'ᾯ' => 'ᾯ',
+ 'ᾰ' => 'ᾰ',
+ 'ᾱ' => 'ᾱ',
+ 'ᾲ' => 'ᾲ',
+ 'ᾳ' => 'ᾳ',
+ 'ᾴ' => 'ᾴ',
+ 'ᾶ' => 'ᾶ',
+ 'ᾷ' => 'ᾷ',
+ 'Ᾰ' => 'Ᾰ',
+ 'Ᾱ' => 'Ᾱ',
+ 'Ὰ' => 'Ὰ',
+ 'ᾼ' => 'ᾼ',
+ '῁' => '῁',
+ 'ῂ' => 'ῂ',
+ 'ῃ' => 'ῃ',
+ 'ῄ' => 'ῄ',
+ 'ῆ' => 'ῆ',
+ 'ῇ' => 'ῇ',
+ 'Ὲ' => 'Ὲ',
+ 'Ὴ' => 'Ὴ',
+ 'ῌ' => 'ῌ',
+ '῍' => '῍',
+ '῎' => '῎',
+ '῏' => '῏',
+ 'ῐ' => 'ῐ',
+ 'ῑ' => 'ῑ',
+ 'ῒ' => 'ῒ',
+ 'ῖ' => 'ῖ',
+ 'ῗ' => 'ῗ',
+ 'Ῐ' => 'Ῐ',
+ 'Ῑ' => 'Ῑ',
+ 'Ὶ' => 'Ὶ',
+ '῝' => '῝',
+ '῞' => '῞',
+ '῟' => '῟',
+ 'ῠ' => 'ῠ',
+ 'ῡ' => 'ῡ',
+ 'ῢ' => 'ῢ',
+ 'ῤ' => 'ῤ',
+ 'ῥ' => 'ῥ',
+ 'ῦ' => 'ῦ',
+ 'ῧ' => 'ῧ',
+ 'Ῠ' => 'Ῠ',
+ 'Ῡ' => 'Ῡ',
+ 'Ὺ' => 'Ὺ',
+ 'Ῥ' => 'Ῥ',
+ '῭' => '῭',
+ 'ῲ' => 'ῲ',
+ 'ῳ' => 'ῳ',
+ 'ῴ' => 'ῴ',
+ 'ῶ' => 'ῶ',
+ 'ῷ' => 'ῷ',
+ 'Ὸ' => 'Ὸ',
+ 'Ὼ' => 'Ὼ',
+ 'ῼ' => 'ῼ',
+ '↚' => '↚',
+ '↛' => '↛',
+ '↮' => '↮',
+ '⇍' => '⇍',
+ '⇎' => '⇎',
+ '⇏' => '⇏',
+ '∄' => '∄',
+ '∉' => '∉',
+ '∌' => '∌',
+ '∤' => '∤',
+ '∦' => '∦',
+ '≁' => '≁',
+ '≄' => '≄',
+ '≇' => '≇',
+ '≉' => '≉',
+ '≠' => '≠',
+ '≢' => '≢',
+ '≭' => '≭',
+ '≮' => '≮',
+ '≯' => '≯',
+ '≰' => '≰',
+ '≱' => '≱',
+ '≴' => '≴',
+ '≵' => '≵',
+ '≸' => '≸',
+ '≹' => '≹',
+ '⊀' => '⊀',
+ '⊁' => '⊁',
+ '⊄' => '⊄',
+ '⊅' => '⊅',
+ '⊈' => '⊈',
+ '⊉' => '⊉',
+ '⊬' => '⊬',
+ '⊭' => '⊭',
+ '⊮' => '⊮',
+ '⊯' => '⊯',
+ '⋠' => '⋠',
+ '⋡' => '⋡',
+ '⋢' => '⋢',
+ '⋣' => '⋣',
+ '⋪' => '⋪',
+ '⋫' => '⋫',
+ '⋬' => '⋬',
+ '⋭' => '⋭',
+ 'が' => 'が',
+ 'ぎ' => 'ぎ',
+ 'ぐ' => 'ぐ',
+ 'げ' => 'げ',
+ 'ご' => 'ご',
+ 'ざ' => 'ざ',
+ 'じ' => 'じ',
+ 'ず' => 'ず',
+ 'ぜ' => 'ぜ',
+ 'ぞ' => 'ぞ',
+ 'だ' => 'だ',
+ 'ぢ' => 'ぢ',
+ 'づ' => 'づ',
+ 'で' => 'で',
+ 'ど' => 'ど',
+ 'ば' => 'ば',
+ 'ぱ' => 'ぱ',
+ 'び' => 'び',
+ 'ぴ' => 'ぴ',
+ 'ぶ' => 'ぶ',
+ 'ぷ' => 'ぷ',
+ 'べ' => 'べ',
+ 'ぺ' => 'ぺ',
+ 'ぼ' => 'ぼ',
+ 'ぽ' => 'ぽ',
+ 'ゔ' => 'ゔ',
+ 'ゞ' => 'ゞ',
+ 'ガ' => 'ガ',
+ 'ギ' => 'ギ',
+ 'グ' => 'グ',
+ 'ゲ' => 'ゲ',
+ 'ゴ' => 'ゴ',
+ 'ザ' => 'ザ',
+ 'ジ' => 'ジ',
+ 'ズ' => 'ズ',
+ 'ゼ' => 'ゼ',
+ 'ゾ' => 'ゾ',
+ 'ダ' => 'ダ',
+ 'ヂ' => 'ヂ',
+ 'ヅ' => 'ヅ',
+ 'デ' => 'デ',
+ 'ド' => 'ド',
+ 'バ' => 'バ',
+ 'パ' => 'パ',
+ 'ビ' => 'ビ',
+ 'ピ' => 'ピ',
+ 'ブ' => 'ブ',
+ 'プ' => 'プ',
+ 'ベ' => 'ベ',
+ 'ペ' => 'ペ',
+ 'ボ' => 'ボ',
+ 'ポ' => 'ポ',
+ 'ヴ' => 'ヴ',
+ 'ヷ' => 'ヷ',
+ 'ヸ' => 'ヸ',
+ 'ヹ' => 'ヹ',
+ 'ヺ' => 'ヺ',
+ 'ヾ' => 'ヾ',
+ '𑂚' => '𑂚',
+ '𑂜' => '𑂜',
+ '𑂫' => '𑂫',
+ '𑄮' => '𑄮',
+ '𑄯' => '𑄯',
+ '𑍋' => '𑍋',
+ '𑍌' => '𑍌',
+ '𑒻' => '𑒻',
+ '𑒼' => '𑒼',
+ '𑒾' => '𑒾',
+ '𑖺' => '𑖺',
+ '𑖻' => '𑖻',
+ '𑤸' => '𑤸',
+);
diff --git a/plugins/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php b/plugins/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php
new file mode 100644
index 00000000..5a3e8e09
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php
@@ -0,0 +1,2065 @@
+ 'À',
+ 'Á' => 'Á',
+ 'Â' => 'Â',
+ 'Ã' => 'Ã',
+ 'Ä' => 'Ä',
+ 'Å' => 'Å',
+ 'Ç' => 'Ç',
+ 'È' => 'È',
+ 'É' => 'É',
+ 'Ê' => 'Ê',
+ 'Ë' => 'Ë',
+ 'Ì' => 'Ì',
+ 'Í' => 'Í',
+ 'Î' => 'Î',
+ 'Ï' => 'Ï',
+ 'Ñ' => 'Ñ',
+ 'Ò' => 'Ò',
+ 'Ó' => 'Ó',
+ 'Ô' => 'Ô',
+ 'Õ' => 'Õ',
+ 'Ö' => 'Ö',
+ 'Ù' => 'Ù',
+ 'Ú' => 'Ú',
+ 'Û' => 'Û',
+ 'Ü' => 'Ü',
+ 'Ý' => 'Ý',
+ 'à' => 'à',
+ 'á' => 'á',
+ 'â' => 'â',
+ 'ã' => 'ã',
+ 'ä' => 'ä',
+ 'å' => 'å',
+ 'ç' => 'ç',
+ 'è' => 'è',
+ 'é' => 'é',
+ 'ê' => 'ê',
+ 'ë' => 'ë',
+ 'ì' => 'ì',
+ 'í' => 'í',
+ 'î' => 'î',
+ 'ï' => 'ï',
+ 'ñ' => 'ñ',
+ 'ò' => 'ò',
+ 'ó' => 'ó',
+ 'ô' => 'ô',
+ 'õ' => 'õ',
+ 'ö' => 'ö',
+ 'ù' => 'ù',
+ 'ú' => 'ú',
+ 'û' => 'û',
+ 'ü' => 'ü',
+ 'ý' => 'ý',
+ 'ÿ' => 'ÿ',
+ 'Ā' => 'Ā',
+ 'ā' => 'ā',
+ 'Ă' => 'Ă',
+ 'ă' => 'ă',
+ 'Ą' => 'Ą',
+ 'ą' => 'ą',
+ 'Ć' => 'Ć',
+ 'ć' => 'ć',
+ 'Ĉ' => 'Ĉ',
+ 'ĉ' => 'ĉ',
+ 'Ċ' => 'Ċ',
+ 'ċ' => 'ċ',
+ 'Č' => 'Č',
+ 'č' => 'č',
+ 'Ď' => 'Ď',
+ 'ď' => 'ď',
+ 'Ē' => 'Ē',
+ 'ē' => 'ē',
+ 'Ĕ' => 'Ĕ',
+ 'ĕ' => 'ĕ',
+ 'Ė' => 'Ė',
+ 'ė' => 'ė',
+ 'Ę' => 'Ę',
+ 'ę' => 'ę',
+ 'Ě' => 'Ě',
+ 'ě' => 'ě',
+ 'Ĝ' => 'Ĝ',
+ 'ĝ' => 'ĝ',
+ 'Ğ' => 'Ğ',
+ 'ğ' => 'ğ',
+ 'Ġ' => 'Ġ',
+ 'ġ' => 'ġ',
+ 'Ģ' => 'Ģ',
+ 'ģ' => 'ģ',
+ 'Ĥ' => 'Ĥ',
+ 'ĥ' => 'ĥ',
+ 'Ĩ' => 'Ĩ',
+ 'ĩ' => 'ĩ',
+ 'Ī' => 'Ī',
+ 'ī' => 'ī',
+ 'Ĭ' => 'Ĭ',
+ 'ĭ' => 'ĭ',
+ 'Į' => 'Į',
+ 'į' => 'į',
+ 'İ' => 'İ',
+ 'Ĵ' => 'Ĵ',
+ 'ĵ' => 'ĵ',
+ 'Ķ' => 'Ķ',
+ 'ķ' => 'ķ',
+ 'Ĺ' => 'Ĺ',
+ 'ĺ' => 'ĺ',
+ 'Ļ' => 'Ļ',
+ 'ļ' => 'ļ',
+ 'Ľ' => 'Ľ',
+ 'ľ' => 'ľ',
+ 'Ń' => 'Ń',
+ 'ń' => 'ń',
+ 'Ņ' => 'Ņ',
+ 'ņ' => 'ņ',
+ 'Ň' => 'Ň',
+ 'ň' => 'ň',
+ 'Ō' => 'Ō',
+ 'ō' => 'ō',
+ 'Ŏ' => 'Ŏ',
+ 'ŏ' => 'ŏ',
+ 'Ő' => 'Ő',
+ 'ő' => 'ő',
+ 'Ŕ' => 'Ŕ',
+ 'ŕ' => 'ŕ',
+ 'Ŗ' => 'Ŗ',
+ 'ŗ' => 'ŗ',
+ 'Ř' => 'Ř',
+ 'ř' => 'ř',
+ 'Ś' => 'Ś',
+ 'ś' => 'ś',
+ 'Ŝ' => 'Ŝ',
+ 'ŝ' => 'ŝ',
+ 'Ş' => 'Ş',
+ 'ş' => 'ş',
+ 'Š' => 'Š',
+ 'š' => 'š',
+ 'Ţ' => 'Ţ',
+ 'ţ' => 'ţ',
+ 'Ť' => 'Ť',
+ 'ť' => 'ť',
+ 'Ũ' => 'Ũ',
+ 'ũ' => 'ũ',
+ 'Ū' => 'Ū',
+ 'ū' => 'ū',
+ 'Ŭ' => 'Ŭ',
+ 'ŭ' => 'ŭ',
+ 'Ů' => 'Ů',
+ 'ů' => 'ů',
+ 'Ű' => 'Ű',
+ 'ű' => 'ű',
+ 'Ų' => 'Ų',
+ 'ų' => 'ų',
+ 'Ŵ' => 'Ŵ',
+ 'ŵ' => 'ŵ',
+ 'Ŷ' => 'Ŷ',
+ 'ŷ' => 'ŷ',
+ 'Ÿ' => 'Ÿ',
+ 'Ź' => 'Ź',
+ 'ź' => 'ź',
+ 'Ż' => 'Ż',
+ 'ż' => 'ż',
+ 'Ž' => 'Ž',
+ 'ž' => 'ž',
+ 'Ơ' => 'Ơ',
+ 'ơ' => 'ơ',
+ 'Ư' => 'Ư',
+ 'ư' => 'ư',
+ 'Ǎ' => 'Ǎ',
+ 'ǎ' => 'ǎ',
+ 'Ǐ' => 'Ǐ',
+ 'ǐ' => 'ǐ',
+ 'Ǒ' => 'Ǒ',
+ 'ǒ' => 'ǒ',
+ 'Ǔ' => 'Ǔ',
+ 'ǔ' => 'ǔ',
+ 'Ǖ' => 'Ǖ',
+ 'ǖ' => 'ǖ',
+ 'Ǘ' => 'Ǘ',
+ 'ǘ' => 'ǘ',
+ 'Ǚ' => 'Ǚ',
+ 'ǚ' => 'ǚ',
+ 'Ǜ' => 'Ǜ',
+ 'ǜ' => 'ǜ',
+ 'Ǟ' => 'Ǟ',
+ 'ǟ' => 'ǟ',
+ 'Ǡ' => 'Ǡ',
+ 'ǡ' => 'ǡ',
+ 'Ǣ' => 'Ǣ',
+ 'ǣ' => 'ǣ',
+ 'Ǧ' => 'Ǧ',
+ 'ǧ' => 'ǧ',
+ 'Ǩ' => 'Ǩ',
+ 'ǩ' => 'ǩ',
+ 'Ǫ' => 'Ǫ',
+ 'ǫ' => 'ǫ',
+ 'Ǭ' => 'Ǭ',
+ 'ǭ' => 'ǭ',
+ 'Ǯ' => 'Ǯ',
+ 'ǯ' => 'ǯ',
+ 'ǰ' => 'ǰ',
+ 'Ǵ' => 'Ǵ',
+ 'ǵ' => 'ǵ',
+ 'Ǹ' => 'Ǹ',
+ 'ǹ' => 'ǹ',
+ 'Ǻ' => 'Ǻ',
+ 'ǻ' => 'ǻ',
+ 'Ǽ' => 'Ǽ',
+ 'ǽ' => 'ǽ',
+ 'Ǿ' => 'Ǿ',
+ 'ǿ' => 'ǿ',
+ 'Ȁ' => 'Ȁ',
+ 'ȁ' => 'ȁ',
+ 'Ȃ' => 'Ȃ',
+ 'ȃ' => 'ȃ',
+ 'Ȅ' => 'Ȅ',
+ 'ȅ' => 'ȅ',
+ 'Ȇ' => 'Ȇ',
+ 'ȇ' => 'ȇ',
+ 'Ȉ' => 'Ȉ',
+ 'ȉ' => 'ȉ',
+ 'Ȋ' => 'Ȋ',
+ 'ȋ' => 'ȋ',
+ 'Ȍ' => 'Ȍ',
+ 'ȍ' => 'ȍ',
+ 'Ȏ' => 'Ȏ',
+ 'ȏ' => 'ȏ',
+ 'Ȑ' => 'Ȑ',
+ 'ȑ' => 'ȑ',
+ 'Ȓ' => 'Ȓ',
+ 'ȓ' => 'ȓ',
+ 'Ȕ' => 'Ȕ',
+ 'ȕ' => 'ȕ',
+ 'Ȗ' => 'Ȗ',
+ 'ȗ' => 'ȗ',
+ 'Ș' => 'Ș',
+ 'ș' => 'ș',
+ 'Ț' => 'Ț',
+ 'ț' => 'ț',
+ 'Ȟ' => 'Ȟ',
+ 'ȟ' => 'ȟ',
+ 'Ȧ' => 'Ȧ',
+ 'ȧ' => 'ȧ',
+ 'Ȩ' => 'Ȩ',
+ 'ȩ' => 'ȩ',
+ 'Ȫ' => 'Ȫ',
+ 'ȫ' => 'ȫ',
+ 'Ȭ' => 'Ȭ',
+ 'ȭ' => 'ȭ',
+ 'Ȯ' => 'Ȯ',
+ 'ȯ' => 'ȯ',
+ 'Ȱ' => 'Ȱ',
+ 'ȱ' => 'ȱ',
+ 'Ȳ' => 'Ȳ',
+ 'ȳ' => 'ȳ',
+ '̀' => '̀',
+ '́' => '́',
+ '̓' => '̓',
+ '̈́' => '̈́',
+ 'ʹ' => 'ʹ',
+ ';' => ';',
+ '΅' => '΅',
+ 'Ά' => 'Ά',
+ '·' => '·',
+ 'Έ' => 'Έ',
+ 'Ή' => 'Ή',
+ 'Ί' => 'Ί',
+ 'Ό' => 'Ό',
+ 'Ύ' => 'Ύ',
+ 'Ώ' => 'Ώ',
+ 'ΐ' => 'ΐ',
+ 'Ϊ' => 'Ϊ',
+ 'Ϋ' => 'Ϋ',
+ 'ά' => 'ά',
+ 'έ' => 'έ',
+ 'ή' => 'ή',
+ 'ί' => 'ί',
+ 'ΰ' => 'ΰ',
+ 'ϊ' => 'ϊ',
+ 'ϋ' => 'ϋ',
+ 'ό' => 'ό',
+ 'ύ' => 'ύ',
+ 'ώ' => 'ώ',
+ 'ϓ' => 'ϓ',
+ 'ϔ' => 'ϔ',
+ 'Ѐ' => 'Ѐ',
+ 'Ё' => 'Ё',
+ 'Ѓ' => 'Ѓ',
+ 'Ї' => 'Ї',
+ 'Ќ' => 'Ќ',
+ 'Ѝ' => 'Ѝ',
+ 'Ў' => 'Ў',
+ 'Й' => 'Й',
+ 'й' => 'й',
+ 'ѐ' => 'ѐ',
+ 'ё' => 'ё',
+ 'ѓ' => 'ѓ',
+ 'ї' => 'ї',
+ 'ќ' => 'ќ',
+ 'ѝ' => 'ѝ',
+ 'ў' => 'ў',
+ 'Ѷ' => 'Ѷ',
+ 'ѷ' => 'ѷ',
+ 'Ӂ' => 'Ӂ',
+ 'ӂ' => 'ӂ',
+ 'Ӑ' => 'Ӑ',
+ 'ӑ' => 'ӑ',
+ 'Ӓ' => 'Ӓ',
+ 'ӓ' => 'ӓ',
+ 'Ӗ' => 'Ӗ',
+ 'ӗ' => 'ӗ',
+ 'Ӛ' => 'Ӛ',
+ 'ӛ' => 'ӛ',
+ 'Ӝ' => 'Ӝ',
+ 'ӝ' => 'ӝ',
+ 'Ӟ' => 'Ӟ',
+ 'ӟ' => 'ӟ',
+ 'Ӣ' => 'Ӣ',
+ 'ӣ' => 'ӣ',
+ 'Ӥ' => 'Ӥ',
+ 'ӥ' => 'ӥ',
+ 'Ӧ' => 'Ӧ',
+ 'ӧ' => 'ӧ',
+ 'Ӫ' => 'Ӫ',
+ 'ӫ' => 'ӫ',
+ 'Ӭ' => 'Ӭ',
+ 'ӭ' => 'ӭ',
+ 'Ӯ' => 'Ӯ',
+ 'ӯ' => 'ӯ',
+ 'Ӱ' => 'Ӱ',
+ 'ӱ' => 'ӱ',
+ 'Ӳ' => 'Ӳ',
+ 'ӳ' => 'ӳ',
+ 'Ӵ' => 'Ӵ',
+ 'ӵ' => 'ӵ',
+ 'Ӹ' => 'Ӹ',
+ 'ӹ' => 'ӹ',
+ 'آ' => 'آ',
+ 'أ' => 'أ',
+ 'ؤ' => 'ؤ',
+ 'إ' => 'إ',
+ 'ئ' => 'ئ',
+ 'ۀ' => 'ۀ',
+ 'ۂ' => 'ۂ',
+ 'ۓ' => 'ۓ',
+ 'ऩ' => 'ऩ',
+ 'ऱ' => 'ऱ',
+ 'ऴ' => 'ऴ',
+ 'क़' => 'क़',
+ 'ख़' => 'ख़',
+ 'ग़' => 'ग़',
+ 'ज़' => 'ज़',
+ 'ड़' => 'ड़',
+ 'ढ़' => 'ढ़',
+ 'फ़' => 'फ़',
+ 'य़' => 'य़',
+ 'ো' => 'ো',
+ 'ৌ' => 'ৌ',
+ 'ড়' => 'ড়',
+ 'ঢ়' => 'ঢ়',
+ 'য়' => 'য়',
+ 'ਲ਼' => 'ਲ਼',
+ 'ਸ਼' => 'ਸ਼',
+ 'ਖ਼' => 'ਖ਼',
+ 'ਗ਼' => 'ਗ਼',
+ 'ਜ਼' => 'ਜ਼',
+ 'ਫ਼' => 'ਫ਼',
+ 'ୈ' => 'ୈ',
+ 'ୋ' => 'ୋ',
+ 'ୌ' => 'ୌ',
+ 'ଡ଼' => 'ଡ଼',
+ 'ଢ଼' => 'ଢ଼',
+ 'ஔ' => 'ஔ',
+ 'ொ' => 'ொ',
+ 'ோ' => 'ோ',
+ 'ௌ' => 'ௌ',
+ 'ై' => 'ై',
+ 'ೀ' => 'ೀ',
+ 'ೇ' => 'ೇ',
+ 'ೈ' => 'ೈ',
+ 'ೊ' => 'ೊ',
+ 'ೋ' => 'ೋ',
+ 'ൊ' => 'ൊ',
+ 'ോ' => 'ോ',
+ 'ൌ' => 'ൌ',
+ 'ේ' => 'ේ',
+ 'ො' => 'ො',
+ 'ෝ' => 'ෝ',
+ 'ෞ' => 'ෞ',
+ 'གྷ' => 'གྷ',
+ 'ཌྷ' => 'ཌྷ',
+ 'དྷ' => 'དྷ',
+ 'བྷ' => 'བྷ',
+ 'ཛྷ' => 'ཛྷ',
+ 'ཀྵ' => 'ཀྵ',
+ 'ཱི' => 'ཱི',
+ 'ཱུ' => 'ཱུ',
+ 'ྲྀ' => 'ྲྀ',
+ 'ླྀ' => 'ླྀ',
+ 'ཱྀ' => 'ཱྀ',
+ 'ྒྷ' => 'ྒྷ',
+ 'ྜྷ' => 'ྜྷ',
+ 'ྡྷ' => 'ྡྷ',
+ 'ྦྷ' => 'ྦྷ',
+ 'ྫྷ' => 'ྫྷ',
+ 'ྐྵ' => 'ྐྵ',
+ 'ဦ' => 'ဦ',
+ 'ᬆ' => 'ᬆ',
+ 'ᬈ' => 'ᬈ',
+ 'ᬊ' => 'ᬊ',
+ 'ᬌ' => 'ᬌ',
+ 'ᬎ' => 'ᬎ',
+ 'ᬒ' => 'ᬒ',
+ 'ᬻ' => 'ᬻ',
+ 'ᬽ' => 'ᬽ',
+ 'ᭀ' => 'ᭀ',
+ 'ᭁ' => 'ᭁ',
+ 'ᭃ' => 'ᭃ',
+ 'Ḁ' => 'Ḁ',
+ 'ḁ' => 'ḁ',
+ 'Ḃ' => 'Ḃ',
+ 'ḃ' => 'ḃ',
+ 'Ḅ' => 'Ḅ',
+ 'ḅ' => 'ḅ',
+ 'Ḇ' => 'Ḇ',
+ 'ḇ' => 'ḇ',
+ 'Ḉ' => 'Ḉ',
+ 'ḉ' => 'ḉ',
+ 'Ḋ' => 'Ḋ',
+ 'ḋ' => 'ḋ',
+ 'Ḍ' => 'Ḍ',
+ 'ḍ' => 'ḍ',
+ 'Ḏ' => 'Ḏ',
+ 'ḏ' => 'ḏ',
+ 'Ḑ' => 'Ḑ',
+ 'ḑ' => 'ḑ',
+ 'Ḓ' => 'Ḓ',
+ 'ḓ' => 'ḓ',
+ 'Ḕ' => 'Ḕ',
+ 'ḕ' => 'ḕ',
+ 'Ḗ' => 'Ḗ',
+ 'ḗ' => 'ḗ',
+ 'Ḙ' => 'Ḙ',
+ 'ḙ' => 'ḙ',
+ 'Ḛ' => 'Ḛ',
+ 'ḛ' => 'ḛ',
+ 'Ḝ' => 'Ḝ',
+ 'ḝ' => 'ḝ',
+ 'Ḟ' => 'Ḟ',
+ 'ḟ' => 'ḟ',
+ 'Ḡ' => 'Ḡ',
+ 'ḡ' => 'ḡ',
+ 'Ḣ' => 'Ḣ',
+ 'ḣ' => 'ḣ',
+ 'Ḥ' => 'Ḥ',
+ 'ḥ' => 'ḥ',
+ 'Ḧ' => 'Ḧ',
+ 'ḧ' => 'ḧ',
+ 'Ḩ' => 'Ḩ',
+ 'ḩ' => 'ḩ',
+ 'Ḫ' => 'Ḫ',
+ 'ḫ' => 'ḫ',
+ 'Ḭ' => 'Ḭ',
+ 'ḭ' => 'ḭ',
+ 'Ḯ' => 'Ḯ',
+ 'ḯ' => 'ḯ',
+ 'Ḱ' => 'Ḱ',
+ 'ḱ' => 'ḱ',
+ 'Ḳ' => 'Ḳ',
+ 'ḳ' => 'ḳ',
+ 'Ḵ' => 'Ḵ',
+ 'ḵ' => 'ḵ',
+ 'Ḷ' => 'Ḷ',
+ 'ḷ' => 'ḷ',
+ 'Ḹ' => 'Ḹ',
+ 'ḹ' => 'ḹ',
+ 'Ḻ' => 'Ḻ',
+ 'ḻ' => 'ḻ',
+ 'Ḽ' => 'Ḽ',
+ 'ḽ' => 'ḽ',
+ 'Ḿ' => 'Ḿ',
+ 'ḿ' => 'ḿ',
+ 'Ṁ' => 'Ṁ',
+ 'ṁ' => 'ṁ',
+ 'Ṃ' => 'Ṃ',
+ 'ṃ' => 'ṃ',
+ 'Ṅ' => 'Ṅ',
+ 'ṅ' => 'ṅ',
+ 'Ṇ' => 'Ṇ',
+ 'ṇ' => 'ṇ',
+ 'Ṉ' => 'Ṉ',
+ 'ṉ' => 'ṉ',
+ 'Ṋ' => 'Ṋ',
+ 'ṋ' => 'ṋ',
+ 'Ṍ' => 'Ṍ',
+ 'ṍ' => 'ṍ',
+ 'Ṏ' => 'Ṏ',
+ 'ṏ' => 'ṏ',
+ 'Ṑ' => 'Ṑ',
+ 'ṑ' => 'ṑ',
+ 'Ṓ' => 'Ṓ',
+ 'ṓ' => 'ṓ',
+ 'Ṕ' => 'Ṕ',
+ 'ṕ' => 'ṕ',
+ 'Ṗ' => 'Ṗ',
+ 'ṗ' => 'ṗ',
+ 'Ṙ' => 'Ṙ',
+ 'ṙ' => 'ṙ',
+ 'Ṛ' => 'Ṛ',
+ 'ṛ' => 'ṛ',
+ 'Ṝ' => 'Ṝ',
+ 'ṝ' => 'ṝ',
+ 'Ṟ' => 'Ṟ',
+ 'ṟ' => 'ṟ',
+ 'Ṡ' => 'Ṡ',
+ 'ṡ' => 'ṡ',
+ 'Ṣ' => 'Ṣ',
+ 'ṣ' => 'ṣ',
+ 'Ṥ' => 'Ṥ',
+ 'ṥ' => 'ṥ',
+ 'Ṧ' => 'Ṧ',
+ 'ṧ' => 'ṧ',
+ 'Ṩ' => 'Ṩ',
+ 'ṩ' => 'ṩ',
+ 'Ṫ' => 'Ṫ',
+ 'ṫ' => 'ṫ',
+ 'Ṭ' => 'Ṭ',
+ 'ṭ' => 'ṭ',
+ 'Ṯ' => 'Ṯ',
+ 'ṯ' => 'ṯ',
+ 'Ṱ' => 'Ṱ',
+ 'ṱ' => 'ṱ',
+ 'Ṳ' => 'Ṳ',
+ 'ṳ' => 'ṳ',
+ 'Ṵ' => 'Ṵ',
+ 'ṵ' => 'ṵ',
+ 'Ṷ' => 'Ṷ',
+ 'ṷ' => 'ṷ',
+ 'Ṹ' => 'Ṹ',
+ 'ṹ' => 'ṹ',
+ 'Ṻ' => 'Ṻ',
+ 'ṻ' => 'ṻ',
+ 'Ṽ' => 'Ṽ',
+ 'ṽ' => 'ṽ',
+ 'Ṿ' => 'Ṿ',
+ 'ṿ' => 'ṿ',
+ 'Ẁ' => 'Ẁ',
+ 'ẁ' => 'ẁ',
+ 'Ẃ' => 'Ẃ',
+ 'ẃ' => 'ẃ',
+ 'Ẅ' => 'Ẅ',
+ 'ẅ' => 'ẅ',
+ 'Ẇ' => 'Ẇ',
+ 'ẇ' => 'ẇ',
+ 'Ẉ' => 'Ẉ',
+ 'ẉ' => 'ẉ',
+ 'Ẋ' => 'Ẋ',
+ 'ẋ' => 'ẋ',
+ 'Ẍ' => 'Ẍ',
+ 'ẍ' => 'ẍ',
+ 'Ẏ' => 'Ẏ',
+ 'ẏ' => 'ẏ',
+ 'Ẑ' => 'Ẑ',
+ 'ẑ' => 'ẑ',
+ 'Ẓ' => 'Ẓ',
+ 'ẓ' => 'ẓ',
+ 'Ẕ' => 'Ẕ',
+ 'ẕ' => 'ẕ',
+ 'ẖ' => 'ẖ',
+ 'ẗ' => 'ẗ',
+ 'ẘ' => 'ẘ',
+ 'ẙ' => 'ẙ',
+ 'ẛ' => 'ẛ',
+ 'Ạ' => 'Ạ',
+ 'ạ' => 'ạ',
+ 'Ả' => 'Ả',
+ 'ả' => 'ả',
+ 'Ấ' => 'Ấ',
+ 'ấ' => 'ấ',
+ 'Ầ' => 'Ầ',
+ 'ầ' => 'ầ',
+ 'Ẩ' => 'Ẩ',
+ 'ẩ' => 'ẩ',
+ 'Ẫ' => 'Ẫ',
+ 'ẫ' => 'ẫ',
+ 'Ậ' => 'Ậ',
+ 'ậ' => 'ậ',
+ 'Ắ' => 'Ắ',
+ 'ắ' => 'ắ',
+ 'Ằ' => 'Ằ',
+ 'ằ' => 'ằ',
+ 'Ẳ' => 'Ẳ',
+ 'ẳ' => 'ẳ',
+ 'Ẵ' => 'Ẵ',
+ 'ẵ' => 'ẵ',
+ 'Ặ' => 'Ặ',
+ 'ặ' => 'ặ',
+ 'Ẹ' => 'Ẹ',
+ 'ẹ' => 'ẹ',
+ 'Ẻ' => 'Ẻ',
+ 'ẻ' => 'ẻ',
+ 'Ẽ' => 'Ẽ',
+ 'ẽ' => 'ẽ',
+ 'Ế' => 'Ế',
+ 'ế' => 'ế',
+ 'Ề' => 'Ề',
+ 'ề' => 'ề',
+ 'Ể' => 'Ể',
+ 'ể' => 'ể',
+ 'Ễ' => 'Ễ',
+ 'ễ' => 'ễ',
+ 'Ệ' => 'Ệ',
+ 'ệ' => 'ệ',
+ 'Ỉ' => 'Ỉ',
+ 'ỉ' => 'ỉ',
+ 'Ị' => 'Ị',
+ 'ị' => 'ị',
+ 'Ọ' => 'Ọ',
+ 'ọ' => 'ọ',
+ 'Ỏ' => 'Ỏ',
+ 'ỏ' => 'ỏ',
+ 'Ố' => 'Ố',
+ 'ố' => 'ố',
+ 'Ồ' => 'Ồ',
+ 'ồ' => 'ồ',
+ 'Ổ' => 'Ổ',
+ 'ổ' => 'ổ',
+ 'Ỗ' => 'Ỗ',
+ 'ỗ' => 'ỗ',
+ 'Ộ' => 'Ộ',
+ 'ộ' => 'ộ',
+ 'Ớ' => 'Ớ',
+ 'ớ' => 'ớ',
+ 'Ờ' => 'Ờ',
+ 'ờ' => 'ờ',
+ 'Ở' => 'Ở',
+ 'ở' => 'ở',
+ 'Ỡ' => 'Ỡ',
+ 'ỡ' => 'ỡ',
+ 'Ợ' => 'Ợ',
+ 'ợ' => 'ợ',
+ 'Ụ' => 'Ụ',
+ 'ụ' => 'ụ',
+ 'Ủ' => 'Ủ',
+ 'ủ' => 'ủ',
+ 'Ứ' => 'Ứ',
+ 'ứ' => 'ứ',
+ 'Ừ' => 'Ừ',
+ 'ừ' => 'ừ',
+ 'Ử' => 'Ử',
+ 'ử' => 'ử',
+ 'Ữ' => 'Ữ',
+ 'ữ' => 'ữ',
+ 'Ự' => 'Ự',
+ 'ự' => 'ự',
+ 'Ỳ' => 'Ỳ',
+ 'ỳ' => 'ỳ',
+ 'Ỵ' => 'Ỵ',
+ 'ỵ' => 'ỵ',
+ 'Ỷ' => 'Ỷ',
+ 'ỷ' => 'ỷ',
+ 'Ỹ' => 'Ỹ',
+ 'ỹ' => 'ỹ',
+ 'ἀ' => 'ἀ',
+ 'ἁ' => 'ἁ',
+ 'ἂ' => 'ἂ',
+ 'ἃ' => 'ἃ',
+ 'ἄ' => 'ἄ',
+ 'ἅ' => 'ἅ',
+ 'ἆ' => 'ἆ',
+ 'ἇ' => 'ἇ',
+ 'Ἀ' => 'Ἀ',
+ 'Ἁ' => 'Ἁ',
+ 'Ἂ' => 'Ἂ',
+ 'Ἃ' => 'Ἃ',
+ 'Ἄ' => 'Ἄ',
+ 'Ἅ' => 'Ἅ',
+ 'Ἆ' => 'Ἆ',
+ 'Ἇ' => 'Ἇ',
+ 'ἐ' => 'ἐ',
+ 'ἑ' => 'ἑ',
+ 'ἒ' => 'ἒ',
+ 'ἓ' => 'ἓ',
+ 'ἔ' => 'ἔ',
+ 'ἕ' => 'ἕ',
+ 'Ἐ' => 'Ἐ',
+ 'Ἑ' => 'Ἑ',
+ 'Ἒ' => 'Ἒ',
+ 'Ἓ' => 'Ἓ',
+ 'Ἔ' => 'Ἔ',
+ 'Ἕ' => 'Ἕ',
+ 'ἠ' => 'ἠ',
+ 'ἡ' => 'ἡ',
+ 'ἢ' => 'ἢ',
+ 'ἣ' => 'ἣ',
+ 'ἤ' => 'ἤ',
+ 'ἥ' => 'ἥ',
+ 'ἦ' => 'ἦ',
+ 'ἧ' => 'ἧ',
+ 'Ἠ' => 'Ἠ',
+ 'Ἡ' => 'Ἡ',
+ 'Ἢ' => 'Ἢ',
+ 'Ἣ' => 'Ἣ',
+ 'Ἤ' => 'Ἤ',
+ 'Ἥ' => 'Ἥ',
+ 'Ἦ' => 'Ἦ',
+ 'Ἧ' => 'Ἧ',
+ 'ἰ' => 'ἰ',
+ 'ἱ' => 'ἱ',
+ 'ἲ' => 'ἲ',
+ 'ἳ' => 'ἳ',
+ 'ἴ' => 'ἴ',
+ 'ἵ' => 'ἵ',
+ 'ἶ' => 'ἶ',
+ 'ἷ' => 'ἷ',
+ 'Ἰ' => 'Ἰ',
+ 'Ἱ' => 'Ἱ',
+ 'Ἲ' => 'Ἲ',
+ 'Ἳ' => 'Ἳ',
+ 'Ἴ' => 'Ἴ',
+ 'Ἵ' => 'Ἵ',
+ 'Ἶ' => 'Ἶ',
+ 'Ἷ' => 'Ἷ',
+ 'ὀ' => 'ὀ',
+ 'ὁ' => 'ὁ',
+ 'ὂ' => 'ὂ',
+ 'ὃ' => 'ὃ',
+ 'ὄ' => 'ὄ',
+ 'ὅ' => 'ὅ',
+ 'Ὀ' => 'Ὀ',
+ 'Ὁ' => 'Ὁ',
+ 'Ὂ' => 'Ὂ',
+ 'Ὃ' => 'Ὃ',
+ 'Ὄ' => 'Ὄ',
+ 'Ὅ' => 'Ὅ',
+ 'ὐ' => 'ὐ',
+ 'ὑ' => 'ὑ',
+ 'ὒ' => 'ὒ',
+ 'ὓ' => 'ὓ',
+ 'ὔ' => 'ὔ',
+ 'ὕ' => 'ὕ',
+ 'ὖ' => 'ὖ',
+ 'ὗ' => 'ὗ',
+ 'Ὑ' => 'Ὑ',
+ 'Ὓ' => 'Ὓ',
+ 'Ὕ' => 'Ὕ',
+ 'Ὗ' => 'Ὗ',
+ 'ὠ' => 'ὠ',
+ 'ὡ' => 'ὡ',
+ 'ὢ' => 'ὢ',
+ 'ὣ' => 'ὣ',
+ 'ὤ' => 'ὤ',
+ 'ὥ' => 'ὥ',
+ 'ὦ' => 'ὦ',
+ 'ὧ' => 'ὧ',
+ 'Ὠ' => 'Ὠ',
+ 'Ὡ' => 'Ὡ',
+ 'Ὢ' => 'Ὢ',
+ 'Ὣ' => 'Ὣ',
+ 'Ὤ' => 'Ὤ',
+ 'Ὥ' => 'Ὥ',
+ 'Ὦ' => 'Ὦ',
+ 'Ὧ' => 'Ὧ',
+ 'ὰ' => 'ὰ',
+ 'ά' => 'ά',
+ 'ὲ' => 'ὲ',
+ 'έ' => 'έ',
+ 'ὴ' => 'ὴ',
+ 'ή' => 'ή',
+ 'ὶ' => 'ὶ',
+ 'ί' => 'ί',
+ 'ὸ' => 'ὸ',
+ 'ό' => 'ό',
+ 'ὺ' => 'ὺ',
+ 'ύ' => 'ύ',
+ 'ὼ' => 'ὼ',
+ 'ώ' => 'ώ',
+ 'ᾀ' => 'ᾀ',
+ 'ᾁ' => 'ᾁ',
+ 'ᾂ' => 'ᾂ',
+ 'ᾃ' => 'ᾃ',
+ 'ᾄ' => 'ᾄ',
+ 'ᾅ' => 'ᾅ',
+ 'ᾆ' => 'ᾆ',
+ 'ᾇ' => 'ᾇ',
+ 'ᾈ' => 'ᾈ',
+ 'ᾉ' => 'ᾉ',
+ 'ᾊ' => 'ᾊ',
+ 'ᾋ' => 'ᾋ',
+ 'ᾌ' => 'ᾌ',
+ 'ᾍ' => 'ᾍ',
+ 'ᾎ' => 'ᾎ',
+ 'ᾏ' => 'ᾏ',
+ 'ᾐ' => 'ᾐ',
+ 'ᾑ' => 'ᾑ',
+ 'ᾒ' => 'ᾒ',
+ 'ᾓ' => 'ᾓ',
+ 'ᾔ' => 'ᾔ',
+ 'ᾕ' => 'ᾕ',
+ 'ᾖ' => 'ᾖ',
+ 'ᾗ' => 'ᾗ',
+ 'ᾘ' => 'ᾘ',
+ 'ᾙ' => 'ᾙ',
+ 'ᾚ' => 'ᾚ',
+ 'ᾛ' => 'ᾛ',
+ 'ᾜ' => 'ᾜ',
+ 'ᾝ' => 'ᾝ',
+ 'ᾞ' => 'ᾞ',
+ 'ᾟ' => 'ᾟ',
+ 'ᾠ' => 'ᾠ',
+ 'ᾡ' => 'ᾡ',
+ 'ᾢ' => 'ᾢ',
+ 'ᾣ' => 'ᾣ',
+ 'ᾤ' => 'ᾤ',
+ 'ᾥ' => 'ᾥ',
+ 'ᾦ' => 'ᾦ',
+ 'ᾧ' => 'ᾧ',
+ 'ᾨ' => 'ᾨ',
+ 'ᾩ' => 'ᾩ',
+ 'ᾪ' => 'ᾪ',
+ 'ᾫ' => 'ᾫ',
+ 'ᾬ' => 'ᾬ',
+ 'ᾭ' => 'ᾭ',
+ 'ᾮ' => 'ᾮ',
+ 'ᾯ' => 'ᾯ',
+ 'ᾰ' => 'ᾰ',
+ 'ᾱ' => 'ᾱ',
+ 'ᾲ' => 'ᾲ',
+ 'ᾳ' => 'ᾳ',
+ 'ᾴ' => 'ᾴ',
+ 'ᾶ' => 'ᾶ',
+ 'ᾷ' => 'ᾷ',
+ 'Ᾰ' => 'Ᾰ',
+ 'Ᾱ' => 'Ᾱ',
+ 'Ὰ' => 'Ὰ',
+ 'Ά' => 'Ά',
+ 'ᾼ' => 'ᾼ',
+ 'ι' => 'ι',
+ '῁' => '῁',
+ 'ῂ' => 'ῂ',
+ 'ῃ' => 'ῃ',
+ 'ῄ' => 'ῄ',
+ 'ῆ' => 'ῆ',
+ 'ῇ' => 'ῇ',
+ 'Ὲ' => 'Ὲ',
+ 'Έ' => 'Έ',
+ 'Ὴ' => 'Ὴ',
+ 'Ή' => 'Ή',
+ 'ῌ' => 'ῌ',
+ '῍' => '῍',
+ '῎' => '῎',
+ '῏' => '῏',
+ 'ῐ' => 'ῐ',
+ 'ῑ' => 'ῑ',
+ 'ῒ' => 'ῒ',
+ 'ΐ' => 'ΐ',
+ 'ῖ' => 'ῖ',
+ 'ῗ' => 'ῗ',
+ 'Ῐ' => 'Ῐ',
+ 'Ῑ' => 'Ῑ',
+ 'Ὶ' => 'Ὶ',
+ 'Ί' => 'Ί',
+ '῝' => '῝',
+ '῞' => '῞',
+ '῟' => '῟',
+ 'ῠ' => 'ῠ',
+ 'ῡ' => 'ῡ',
+ 'ῢ' => 'ῢ',
+ 'ΰ' => 'ΰ',
+ 'ῤ' => 'ῤ',
+ 'ῥ' => 'ῥ',
+ 'ῦ' => 'ῦ',
+ 'ῧ' => 'ῧ',
+ 'Ῠ' => 'Ῠ',
+ 'Ῡ' => 'Ῡ',
+ 'Ὺ' => 'Ὺ',
+ 'Ύ' => 'Ύ',
+ 'Ῥ' => 'Ῥ',
+ '῭' => '῭',
+ '΅' => '΅',
+ '`' => '`',
+ 'ῲ' => 'ῲ',
+ 'ῳ' => 'ῳ',
+ 'ῴ' => 'ῴ',
+ 'ῶ' => 'ῶ',
+ 'ῷ' => 'ῷ',
+ 'Ὸ' => 'Ὸ',
+ 'Ό' => 'Ό',
+ 'Ὼ' => 'Ὼ',
+ 'Ώ' => 'Ώ',
+ 'ῼ' => 'ῼ',
+ '´' => '´',
+ ' ' => ' ',
+ ' ' => ' ',
+ 'Ω' => 'Ω',
+ 'K' => 'K',
+ 'Å' => 'Å',
+ '↚' => '↚',
+ '↛' => '↛',
+ '↮' => '↮',
+ '⇍' => '⇍',
+ '⇎' => '⇎',
+ '⇏' => '⇏',
+ '∄' => '∄',
+ '∉' => '∉',
+ '∌' => '∌',
+ '∤' => '∤',
+ '∦' => '∦',
+ '≁' => '≁',
+ '≄' => '≄',
+ '≇' => '≇',
+ '≉' => '≉',
+ '≠' => '≠',
+ '≢' => '≢',
+ '≭' => '≭',
+ '≮' => '≮',
+ '≯' => '≯',
+ '≰' => '≰',
+ '≱' => '≱',
+ '≴' => '≴',
+ '≵' => '≵',
+ '≸' => '≸',
+ '≹' => '≹',
+ '⊀' => '⊀',
+ '⊁' => '⊁',
+ '⊄' => '⊄',
+ '⊅' => '⊅',
+ '⊈' => '⊈',
+ '⊉' => '⊉',
+ '⊬' => '⊬',
+ '⊭' => '⊭',
+ '⊮' => '⊮',
+ '⊯' => '⊯',
+ '⋠' => '⋠',
+ '⋡' => '⋡',
+ '⋢' => '⋢',
+ '⋣' => '⋣',
+ '⋪' => '⋪',
+ '⋫' => '⋫',
+ '⋬' => '⋬',
+ '⋭' => '⋭',
+ '〈' => '〈',
+ '〉' => '〉',
+ '⫝̸' => '⫝̸',
+ 'が' => 'が',
+ 'ぎ' => 'ぎ',
+ 'ぐ' => 'ぐ',
+ 'げ' => 'げ',
+ 'ご' => 'ご',
+ 'ざ' => 'ざ',
+ 'じ' => 'じ',
+ 'ず' => 'ず',
+ 'ぜ' => 'ぜ',
+ 'ぞ' => 'ぞ',
+ 'だ' => 'だ',
+ 'ぢ' => 'ぢ',
+ 'づ' => 'づ',
+ 'で' => 'で',
+ 'ど' => 'ど',
+ 'ば' => 'ば',
+ 'ぱ' => 'ぱ',
+ 'び' => 'び',
+ 'ぴ' => 'ぴ',
+ 'ぶ' => 'ぶ',
+ 'ぷ' => 'ぷ',
+ 'べ' => 'べ',
+ 'ぺ' => 'ぺ',
+ 'ぼ' => 'ぼ',
+ 'ぽ' => 'ぽ',
+ 'ゔ' => 'ゔ',
+ 'ゞ' => 'ゞ',
+ 'ガ' => 'ガ',
+ 'ギ' => 'ギ',
+ 'グ' => 'グ',
+ 'ゲ' => 'ゲ',
+ 'ゴ' => 'ゴ',
+ 'ザ' => 'ザ',
+ 'ジ' => 'ジ',
+ 'ズ' => 'ズ',
+ 'ゼ' => 'ゼ',
+ 'ゾ' => 'ゾ',
+ 'ダ' => 'ダ',
+ 'ヂ' => 'ヂ',
+ 'ヅ' => 'ヅ',
+ 'デ' => 'デ',
+ 'ド' => 'ド',
+ 'バ' => 'バ',
+ 'パ' => 'パ',
+ 'ビ' => 'ビ',
+ 'ピ' => 'ピ',
+ 'ブ' => 'ブ',
+ 'プ' => 'プ',
+ 'ベ' => 'ベ',
+ 'ペ' => 'ペ',
+ 'ボ' => 'ボ',
+ 'ポ' => 'ポ',
+ 'ヴ' => 'ヴ',
+ 'ヷ' => 'ヷ',
+ 'ヸ' => 'ヸ',
+ 'ヹ' => 'ヹ',
+ 'ヺ' => 'ヺ',
+ 'ヾ' => 'ヾ',
+ '豈' => '豈',
+ '更' => '更',
+ '車' => '車',
+ '賈' => '賈',
+ '滑' => '滑',
+ '串' => '串',
+ '句' => '句',
+ '龜' => '龜',
+ '龜' => '龜',
+ '契' => '契',
+ '金' => '金',
+ '喇' => '喇',
+ '奈' => '奈',
+ '懶' => '懶',
+ '癩' => '癩',
+ '羅' => '羅',
+ '蘿' => '蘿',
+ '螺' => '螺',
+ '裸' => '裸',
+ '邏' => '邏',
+ '樂' => '樂',
+ '洛' => '洛',
+ '烙' => '烙',
+ '珞' => '珞',
+ '落' => '落',
+ '酪' => '酪',
+ '駱' => '駱',
+ '亂' => '亂',
+ '卵' => '卵',
+ '欄' => '欄',
+ '爛' => '爛',
+ '蘭' => '蘭',
+ '鸞' => '鸞',
+ '嵐' => '嵐',
+ '濫' => '濫',
+ '藍' => '藍',
+ '襤' => '襤',
+ '拉' => '拉',
+ '臘' => '臘',
+ '蠟' => '蠟',
+ '廊' => '廊',
+ '朗' => '朗',
+ '浪' => '浪',
+ '狼' => '狼',
+ '郎' => '郎',
+ '來' => '來',
+ '冷' => '冷',
+ '勞' => '勞',
+ '擄' => '擄',
+ '櫓' => '櫓',
+ '爐' => '爐',
+ '盧' => '盧',
+ '老' => '老',
+ '蘆' => '蘆',
+ '虜' => '虜',
+ '路' => '路',
+ '露' => '露',
+ '魯' => '魯',
+ '鷺' => '鷺',
+ '碌' => '碌',
+ '祿' => '祿',
+ '綠' => '綠',
+ '菉' => '菉',
+ '錄' => '錄',
+ '鹿' => '鹿',
+ '論' => '論',
+ '壟' => '壟',
+ '弄' => '弄',
+ '籠' => '籠',
+ '聾' => '聾',
+ '牢' => '牢',
+ '磊' => '磊',
+ '賂' => '賂',
+ '雷' => '雷',
+ '壘' => '壘',
+ '屢' => '屢',
+ '樓' => '樓',
+ '淚' => '淚',
+ '漏' => '漏',
+ '累' => '累',
+ '縷' => '縷',
+ '陋' => '陋',
+ '勒' => '勒',
+ '肋' => '肋',
+ '凜' => '凜',
+ '凌' => '凌',
+ '稜' => '稜',
+ '綾' => '綾',
+ '菱' => '菱',
+ '陵' => '陵',
+ '讀' => '讀',
+ '拏' => '拏',
+ '樂' => '樂',
+ '諾' => '諾',
+ '丹' => '丹',
+ '寧' => '寧',
+ '怒' => '怒',
+ '率' => '率',
+ '異' => '異',
+ '北' => '北',
+ '磻' => '磻',
+ '便' => '便',
+ '復' => '復',
+ '不' => '不',
+ '泌' => '泌',
+ '數' => '數',
+ '索' => '索',
+ '參' => '參',
+ '塞' => '塞',
+ '省' => '省',
+ '葉' => '葉',
+ '說' => '說',
+ '殺' => '殺',
+ '辰' => '辰',
+ '沈' => '沈',
+ '拾' => '拾',
+ '若' => '若',
+ '掠' => '掠',
+ '略' => '略',
+ '亮' => '亮',
+ '兩' => '兩',
+ '凉' => '凉',
+ '梁' => '梁',
+ '糧' => '糧',
+ '良' => '良',
+ '諒' => '諒',
+ '量' => '量',
+ '勵' => '勵',
+ '呂' => '呂',
+ '女' => '女',
+ '廬' => '廬',
+ '旅' => '旅',
+ '濾' => '濾',
+ '礪' => '礪',
+ '閭' => '閭',
+ '驪' => '驪',
+ '麗' => '麗',
+ '黎' => '黎',
+ '力' => '力',
+ '曆' => '曆',
+ '歷' => '歷',
+ '轢' => '轢',
+ '年' => '年',
+ '憐' => '憐',
+ '戀' => '戀',
+ '撚' => '撚',
+ '漣' => '漣',
+ '煉' => '煉',
+ '璉' => '璉',
+ '秊' => '秊',
+ '練' => '練',
+ '聯' => '聯',
+ '輦' => '輦',
+ '蓮' => '蓮',
+ '連' => '連',
+ '鍊' => '鍊',
+ '列' => '列',
+ '劣' => '劣',
+ '咽' => '咽',
+ '烈' => '烈',
+ '裂' => '裂',
+ '說' => '說',
+ '廉' => '廉',
+ '念' => '念',
+ '捻' => '捻',
+ '殮' => '殮',
+ '簾' => '簾',
+ '獵' => '獵',
+ '令' => '令',
+ '囹' => '囹',
+ '寧' => '寧',
+ '嶺' => '嶺',
+ '怜' => '怜',
+ '玲' => '玲',
+ '瑩' => '瑩',
+ '羚' => '羚',
+ '聆' => '聆',
+ '鈴' => '鈴',
+ '零' => '零',
+ '靈' => '靈',
+ '領' => '領',
+ '例' => '例',
+ '禮' => '禮',
+ '醴' => '醴',
+ '隸' => '隸',
+ '惡' => '惡',
+ '了' => '了',
+ '僚' => '僚',
+ '寮' => '寮',
+ '尿' => '尿',
+ '料' => '料',
+ '樂' => '樂',
+ '燎' => '燎',
+ '療' => '療',
+ '蓼' => '蓼',
+ '遼' => '遼',
+ '龍' => '龍',
+ '暈' => '暈',
+ '阮' => '阮',
+ '劉' => '劉',
+ '杻' => '杻',
+ '柳' => '柳',
+ '流' => '流',
+ '溜' => '溜',
+ '琉' => '琉',
+ '留' => '留',
+ '硫' => '硫',
+ '紐' => '紐',
+ '類' => '類',
+ '六' => '六',
+ '戮' => '戮',
+ '陸' => '陸',
+ '倫' => '倫',
+ '崙' => '崙',
+ '淪' => '淪',
+ '輪' => '輪',
+ '律' => '律',
+ '慄' => '慄',
+ '栗' => '栗',
+ '率' => '率',
+ '隆' => '隆',
+ '利' => '利',
+ '吏' => '吏',
+ '履' => '履',
+ '易' => '易',
+ '李' => '李',
+ '梨' => '梨',
+ '泥' => '泥',
+ '理' => '理',
+ '痢' => '痢',
+ '罹' => '罹',
+ '裏' => '裏',
+ '裡' => '裡',
+ '里' => '里',
+ '離' => '離',
+ '匿' => '匿',
+ '溺' => '溺',
+ '吝' => '吝',
+ '燐' => '燐',
+ '璘' => '璘',
+ '藺' => '藺',
+ '隣' => '隣',
+ '鱗' => '鱗',
+ '麟' => '麟',
+ '林' => '林',
+ '淋' => '淋',
+ '臨' => '臨',
+ '立' => '立',
+ '笠' => '笠',
+ '粒' => '粒',
+ '狀' => '狀',
+ '炙' => '炙',
+ '識' => '識',
+ '什' => '什',
+ '茶' => '茶',
+ '刺' => '刺',
+ '切' => '切',
+ '度' => '度',
+ '拓' => '拓',
+ '糖' => '糖',
+ '宅' => '宅',
+ '洞' => '洞',
+ '暴' => '暴',
+ '輻' => '輻',
+ '行' => '行',
+ '降' => '降',
+ '見' => '見',
+ '廓' => '廓',
+ '兀' => '兀',
+ '嗀' => '嗀',
+ '塚' => '塚',
+ '晴' => '晴',
+ '凞' => '凞',
+ '猪' => '猪',
+ '益' => '益',
+ '礼' => '礼',
+ '神' => '神',
+ '祥' => '祥',
+ '福' => '福',
+ '靖' => '靖',
+ '精' => '精',
+ '羽' => '羽',
+ '蘒' => '蘒',
+ '諸' => '諸',
+ '逸' => '逸',
+ '都' => '都',
+ '飯' => '飯',
+ '飼' => '飼',
+ '館' => '館',
+ '鶴' => '鶴',
+ '郞' => '郞',
+ '隷' => '隷',
+ '侮' => '侮',
+ '僧' => '僧',
+ '免' => '免',
+ '勉' => '勉',
+ '勤' => '勤',
+ '卑' => '卑',
+ '喝' => '喝',
+ '嘆' => '嘆',
+ '器' => '器',
+ '塀' => '塀',
+ '墨' => '墨',
+ '層' => '層',
+ '屮' => '屮',
+ '悔' => '悔',
+ '慨' => '慨',
+ '憎' => '憎',
+ '懲' => '懲',
+ '敏' => '敏',
+ '既' => '既',
+ '暑' => '暑',
+ '梅' => '梅',
+ '海' => '海',
+ '渚' => '渚',
+ '漢' => '漢',
+ '煮' => '煮',
+ '爫' => '爫',
+ '琢' => '琢',
+ '碑' => '碑',
+ '社' => '社',
+ '祉' => '祉',
+ '祈' => '祈',
+ '祐' => '祐',
+ '祖' => '祖',
+ '祝' => '祝',
+ '禍' => '禍',
+ '禎' => '禎',
+ '穀' => '穀',
+ '突' => '突',
+ '節' => '節',
+ '練' => '練',
+ '縉' => '縉',
+ '繁' => '繁',
+ '署' => '署',
+ '者' => '者',
+ '臭' => '臭',
+ '艹' => '艹',
+ '艹' => '艹',
+ '著' => '著',
+ '褐' => '褐',
+ '視' => '視',
+ '謁' => '謁',
+ '謹' => '謹',
+ '賓' => '賓',
+ '贈' => '贈',
+ '辶' => '辶',
+ '逸' => '逸',
+ '難' => '難',
+ '響' => '響',
+ '頻' => '頻',
+ '恵' => '恵',
+ '𤋮' => '𤋮',
+ '舘' => '舘',
+ '並' => '並',
+ '况' => '况',
+ '全' => '全',
+ '侀' => '侀',
+ '充' => '充',
+ '冀' => '冀',
+ '勇' => '勇',
+ '勺' => '勺',
+ '喝' => '喝',
+ '啕' => '啕',
+ '喙' => '喙',
+ '嗢' => '嗢',
+ '塚' => '塚',
+ '墳' => '墳',
+ '奄' => '奄',
+ '奔' => '奔',
+ '婢' => '婢',
+ '嬨' => '嬨',
+ '廒' => '廒',
+ '廙' => '廙',
+ '彩' => '彩',
+ '徭' => '徭',
+ '惘' => '惘',
+ '慎' => '慎',
+ '愈' => '愈',
+ '憎' => '憎',
+ '慠' => '慠',
+ '懲' => '懲',
+ '戴' => '戴',
+ '揄' => '揄',
+ '搜' => '搜',
+ '摒' => '摒',
+ '敖' => '敖',
+ '晴' => '晴',
+ '朗' => '朗',
+ '望' => '望',
+ '杖' => '杖',
+ '歹' => '歹',
+ '殺' => '殺',
+ '流' => '流',
+ '滛' => '滛',
+ '滋' => '滋',
+ '漢' => '漢',
+ '瀞' => '瀞',
+ '煮' => '煮',
+ '瞧' => '瞧',
+ '爵' => '爵',
+ '犯' => '犯',
+ '猪' => '猪',
+ '瑱' => '瑱',
+ '甆' => '甆',
+ '画' => '画',
+ '瘝' => '瘝',
+ '瘟' => '瘟',
+ '益' => '益',
+ '盛' => '盛',
+ '直' => '直',
+ '睊' => '睊',
+ '着' => '着',
+ '磌' => '磌',
+ '窱' => '窱',
+ '節' => '節',
+ '类' => '类',
+ '絛' => '絛',
+ '練' => '練',
+ '缾' => '缾',
+ '者' => '者',
+ '荒' => '荒',
+ '華' => '華',
+ '蝹' => '蝹',
+ '襁' => '襁',
+ '覆' => '覆',
+ '視' => '視',
+ '調' => '調',
+ '諸' => '諸',
+ '請' => '請',
+ '謁' => '謁',
+ '諾' => '諾',
+ '諭' => '諭',
+ '謹' => '謹',
+ '變' => '變',
+ '贈' => '贈',
+ '輸' => '輸',
+ '遲' => '遲',
+ '醙' => '醙',
+ '鉶' => '鉶',
+ '陼' => '陼',
+ '難' => '難',
+ '靖' => '靖',
+ '韛' => '韛',
+ '響' => '響',
+ '頋' => '頋',
+ '頻' => '頻',
+ '鬒' => '鬒',
+ '龜' => '龜',
+ '𢡊' => '𢡊',
+ '𢡄' => '𢡄',
+ '𣏕' => '𣏕',
+ '㮝' => '㮝',
+ '䀘' => '䀘',
+ '䀹' => '䀹',
+ '𥉉' => '𥉉',
+ '𥳐' => '𥳐',
+ '𧻓' => '𧻓',
+ '齃' => '齃',
+ '龎' => '龎',
+ 'יִ' => 'יִ',
+ 'ײַ' => 'ײַ',
+ 'שׁ' => 'שׁ',
+ 'שׂ' => 'שׂ',
+ 'שּׁ' => 'שּׁ',
+ 'שּׂ' => 'שּׂ',
+ 'אַ' => 'אַ',
+ 'אָ' => 'אָ',
+ 'אּ' => 'אּ',
+ 'בּ' => 'בּ',
+ 'גּ' => 'גּ',
+ 'דּ' => 'דּ',
+ 'הּ' => 'הּ',
+ 'וּ' => 'וּ',
+ 'זּ' => 'זּ',
+ 'טּ' => 'טּ',
+ 'יּ' => 'יּ',
+ 'ךּ' => 'ךּ',
+ 'כּ' => 'כּ',
+ 'לּ' => 'לּ',
+ 'מּ' => 'מּ',
+ 'נּ' => 'נּ',
+ 'סּ' => 'סּ',
+ 'ףּ' => 'ףּ',
+ 'פּ' => 'פּ',
+ 'צּ' => 'צּ',
+ 'קּ' => 'קּ',
+ 'רּ' => 'רּ',
+ 'שּ' => 'שּ',
+ 'תּ' => 'תּ',
+ 'וֹ' => 'וֹ',
+ 'בֿ' => 'בֿ',
+ 'כֿ' => 'כֿ',
+ 'פֿ' => 'פֿ',
+ '𑂚' => '𑂚',
+ '𑂜' => '𑂜',
+ '𑂫' => '𑂫',
+ '𑄮' => '𑄮',
+ '𑄯' => '𑄯',
+ '𑍋' => '𑍋',
+ '𑍌' => '𑍌',
+ '𑒻' => '𑒻',
+ '𑒼' => '𑒼',
+ '𑒾' => '𑒾',
+ '𑖺' => '𑖺',
+ '𑖻' => '𑖻',
+ '𑤸' => '𑤸',
+ '𝅗𝅥' => '𝅗𝅥',
+ '𝅘𝅥' => '𝅘𝅥',
+ '𝅘𝅥𝅮' => '𝅘𝅥𝅮',
+ '𝅘𝅥𝅯' => '𝅘𝅥𝅯',
+ '𝅘𝅥𝅰' => '𝅘𝅥𝅰',
+ '𝅘𝅥𝅱' => '𝅘𝅥𝅱',
+ '𝅘𝅥𝅲' => '𝅘𝅥𝅲',
+ '𝆹𝅥' => '𝆹𝅥',
+ '𝆺𝅥' => '𝆺𝅥',
+ '𝆹𝅥𝅮' => '𝆹𝅥𝅮',
+ '𝆺𝅥𝅮' => '𝆺𝅥𝅮',
+ '𝆹𝅥𝅯' => '𝆹𝅥𝅯',
+ '𝆺𝅥𝅯' => '𝆺𝅥𝅯',
+ '丽' => '丽',
+ '丸' => '丸',
+ '乁' => '乁',
+ '𠄢' => '𠄢',
+ '你' => '你',
+ '侮' => '侮',
+ '侻' => '侻',
+ '倂' => '倂',
+ '偺' => '偺',
+ '備' => '備',
+ '僧' => '僧',
+ '像' => '像',
+ '㒞' => '㒞',
+ '𠘺' => '𠘺',
+ '免' => '免',
+ '兔' => '兔',
+ '兤' => '兤',
+ '具' => '具',
+ '𠔜' => '𠔜',
+ '㒹' => '㒹',
+ '內' => '內',
+ '再' => '再',
+ '𠕋' => '𠕋',
+ '冗' => '冗',
+ '冤' => '冤',
+ '仌' => '仌',
+ '冬' => '冬',
+ '况' => '况',
+ '𩇟' => '𩇟',
+ '凵' => '凵',
+ '刃' => '刃',
+ '㓟' => '㓟',
+ '刻' => '刻',
+ '剆' => '剆',
+ '割' => '割',
+ '剷' => '剷',
+ '㔕' => '㔕',
+ '勇' => '勇',
+ '勉' => '勉',
+ '勤' => '勤',
+ '勺' => '勺',
+ '包' => '包',
+ '匆' => '匆',
+ '北' => '北',
+ '卉' => '卉',
+ '卑' => '卑',
+ '博' => '博',
+ '即' => '即',
+ '卽' => '卽',
+ '卿' => '卿',
+ '卿' => '卿',
+ '卿' => '卿',
+ '𠨬' => '𠨬',
+ '灰' => '灰',
+ '及' => '及',
+ '叟' => '叟',
+ '𠭣' => '𠭣',
+ '叫' => '叫',
+ '叱' => '叱',
+ '吆' => '吆',
+ '咞' => '咞',
+ '吸' => '吸',
+ '呈' => '呈',
+ '周' => '周',
+ '咢' => '咢',
+ '哶' => '哶',
+ '唐' => '唐',
+ '啓' => '啓',
+ '啣' => '啣',
+ '善' => '善',
+ '善' => '善',
+ '喙' => '喙',
+ '喫' => '喫',
+ '喳' => '喳',
+ '嗂' => '嗂',
+ '圖' => '圖',
+ '嘆' => '嘆',
+ '圗' => '圗',
+ '噑' => '噑',
+ '噴' => '噴',
+ '切' => '切',
+ '壮' => '壮',
+ '城' => '城',
+ '埴' => '埴',
+ '堍' => '堍',
+ '型' => '型',
+ '堲' => '堲',
+ '報' => '報',
+ '墬' => '墬',
+ '𡓤' => '𡓤',
+ '売' => '売',
+ '壷' => '壷',
+ '夆' => '夆',
+ '多' => '多',
+ '夢' => '夢',
+ '奢' => '奢',
+ '𡚨' => '𡚨',
+ '𡛪' => '𡛪',
+ '姬' => '姬',
+ '娛' => '娛',
+ '娧' => '娧',
+ '姘' => '姘',
+ '婦' => '婦',
+ '㛮' => '㛮',
+ '㛼' => '㛼',
+ '嬈' => '嬈',
+ '嬾' => '嬾',
+ '嬾' => '嬾',
+ '𡧈' => '𡧈',
+ '寃' => '寃',
+ '寘' => '寘',
+ '寧' => '寧',
+ '寳' => '寳',
+ '𡬘' => '𡬘',
+ '寿' => '寿',
+ '将' => '将',
+ '当' => '当',
+ '尢' => '尢',
+ '㞁' => '㞁',
+ '屠' => '屠',
+ '屮' => '屮',
+ '峀' => '峀',
+ '岍' => '岍',
+ '𡷤' => '𡷤',
+ '嵃' => '嵃',
+ '𡷦' => '𡷦',
+ '嵮' => '嵮',
+ '嵫' => '嵫',
+ '嵼' => '嵼',
+ '巡' => '巡',
+ '巢' => '巢',
+ '㠯' => '㠯',
+ '巽' => '巽',
+ '帨' => '帨',
+ '帽' => '帽',
+ '幩' => '幩',
+ '㡢' => '㡢',
+ '𢆃' => '𢆃',
+ '㡼' => '㡼',
+ '庰' => '庰',
+ '庳' => '庳',
+ '庶' => '庶',
+ '廊' => '廊',
+ '𪎒' => '𪎒',
+ '廾' => '廾',
+ '𢌱' => '𢌱',
+ '𢌱' => '𢌱',
+ '舁' => '舁',
+ '弢' => '弢',
+ '弢' => '弢',
+ '㣇' => '㣇',
+ '𣊸' => '𣊸',
+ '𦇚' => '𦇚',
+ '形' => '形',
+ '彫' => '彫',
+ '㣣' => '㣣',
+ '徚' => '徚',
+ '忍' => '忍',
+ '志' => '志',
+ '忹' => '忹',
+ '悁' => '悁',
+ '㤺' => '㤺',
+ '㤜' => '㤜',
+ '悔' => '悔',
+ '𢛔' => '𢛔',
+ '惇' => '惇',
+ '慈' => '慈',
+ '慌' => '慌',
+ '慎' => '慎',
+ '慌' => '慌',
+ '慺' => '慺',
+ '憎' => '憎',
+ '憲' => '憲',
+ '憤' => '憤',
+ '憯' => '憯',
+ '懞' => '懞',
+ '懲' => '懲',
+ '懶' => '懶',
+ '成' => '成',
+ '戛' => '戛',
+ '扝' => '扝',
+ '抱' => '抱',
+ '拔' => '拔',
+ '捐' => '捐',
+ '𢬌' => '𢬌',
+ '挽' => '挽',
+ '拼' => '拼',
+ '捨' => '捨',
+ '掃' => '掃',
+ '揤' => '揤',
+ '𢯱' => '𢯱',
+ '搢' => '搢',
+ '揅' => '揅',
+ '掩' => '掩',
+ '㨮' => '㨮',
+ '摩' => '摩',
+ '摾' => '摾',
+ '撝' => '撝',
+ '摷' => '摷',
+ '㩬' => '㩬',
+ '敏' => '敏',
+ '敬' => '敬',
+ '𣀊' => '𣀊',
+ '旣' => '旣',
+ '書' => '書',
+ '晉' => '晉',
+ '㬙' => '㬙',
+ '暑' => '暑',
+ '㬈' => '㬈',
+ '㫤' => '㫤',
+ '冒' => '冒',
+ '冕' => '冕',
+ '最' => '最',
+ '暜' => '暜',
+ '肭' => '肭',
+ '䏙' => '䏙',
+ '朗' => '朗',
+ '望' => '望',
+ '朡' => '朡',
+ '杞' => '杞',
+ '杓' => '杓',
+ '𣏃' => '𣏃',
+ '㭉' => '㭉',
+ '柺' => '柺',
+ '枅' => '枅',
+ '桒' => '桒',
+ '梅' => '梅',
+ '𣑭' => '𣑭',
+ '梎' => '梎',
+ '栟' => '栟',
+ '椔' => '椔',
+ '㮝' => '㮝',
+ '楂' => '楂',
+ '榣' => '榣',
+ '槪' => '槪',
+ '檨' => '檨',
+ '𣚣' => '𣚣',
+ '櫛' => '櫛',
+ '㰘' => '㰘',
+ '次' => '次',
+ '𣢧' => '𣢧',
+ '歔' => '歔',
+ '㱎' => '㱎',
+ '歲' => '歲',
+ '殟' => '殟',
+ '殺' => '殺',
+ '殻' => '殻',
+ '𣪍' => '𣪍',
+ '𡴋' => '𡴋',
+ '𣫺' => '𣫺',
+ '汎' => '汎',
+ '𣲼' => '𣲼',
+ '沿' => '沿',
+ '泍' => '泍',
+ '汧' => '汧',
+ '洖' => '洖',
+ '派' => '派',
+ '海' => '海',
+ '流' => '流',
+ '浩' => '浩',
+ '浸' => '浸',
+ '涅' => '涅',
+ '𣴞' => '𣴞',
+ '洴' => '洴',
+ '港' => '港',
+ '湮' => '湮',
+ '㴳' => '㴳',
+ '滋' => '滋',
+ '滇' => '滇',
+ '𣻑' => '𣻑',
+ '淹' => '淹',
+ '潮' => '潮',
+ '𣽞' => '𣽞',
+ '𣾎' => '𣾎',
+ '濆' => '濆',
+ '瀹' => '瀹',
+ '瀞' => '瀞',
+ '瀛' => '瀛',
+ '㶖' => '㶖',
+ '灊' => '灊',
+ '災' => '災',
+ '灷' => '灷',
+ '炭' => '炭',
+ '𠔥' => '𠔥',
+ '煅' => '煅',
+ '𤉣' => '𤉣',
+ '熜' => '熜',
+ '𤎫' => '𤎫',
+ '爨' => '爨',
+ '爵' => '爵',
+ '牐' => '牐',
+ '𤘈' => '𤘈',
+ '犀' => '犀',
+ '犕' => '犕',
+ '𤜵' => '𤜵',
+ '𤠔' => '𤠔',
+ '獺' => '獺',
+ '王' => '王',
+ '㺬' => '㺬',
+ '玥' => '玥',
+ '㺸' => '㺸',
+ '㺸' => '㺸',
+ '瑇' => '瑇',
+ '瑜' => '瑜',
+ '瑱' => '瑱',
+ '璅' => '璅',
+ '瓊' => '瓊',
+ '㼛' => '㼛',
+ '甤' => '甤',
+ '𤰶' => '𤰶',
+ '甾' => '甾',
+ '𤲒' => '𤲒',
+ '異' => '異',
+ '𢆟' => '𢆟',
+ '瘐' => '瘐',
+ '𤾡' => '𤾡',
+ '𤾸' => '𤾸',
+ '𥁄' => '𥁄',
+ '㿼' => '㿼',
+ '䀈' => '䀈',
+ '直' => '直',
+ '𥃳' => '𥃳',
+ '𥃲' => '𥃲',
+ '𥄙' => '𥄙',
+ '𥄳' => '𥄳',
+ '眞' => '眞',
+ '真' => '真',
+ '真' => '真',
+ '睊' => '睊',
+ '䀹' => '䀹',
+ '瞋' => '瞋',
+ '䁆' => '䁆',
+ '䂖' => '䂖',
+ '𥐝' => '𥐝',
+ '硎' => '硎',
+ '碌' => '碌',
+ '磌' => '磌',
+ '䃣' => '䃣',
+ '𥘦' => '𥘦',
+ '祖' => '祖',
+ '𥚚' => '𥚚',
+ '𥛅' => '𥛅',
+ '福' => '福',
+ '秫' => '秫',
+ '䄯' => '䄯',
+ '穀' => '穀',
+ '穊' => '穊',
+ '穏' => '穏',
+ '𥥼' => '𥥼',
+ '𥪧' => '𥪧',
+ '𥪧' => '𥪧',
+ '竮' => '竮',
+ '䈂' => '䈂',
+ '𥮫' => '𥮫',
+ '篆' => '篆',
+ '築' => '築',
+ '䈧' => '䈧',
+ '𥲀' => '𥲀',
+ '糒' => '糒',
+ '䊠' => '䊠',
+ '糨' => '糨',
+ '糣' => '糣',
+ '紀' => '紀',
+ '𥾆' => '𥾆',
+ '絣' => '絣',
+ '䌁' => '䌁',
+ '緇' => '緇',
+ '縂' => '縂',
+ '繅' => '繅',
+ '䌴' => '䌴',
+ '𦈨' => '𦈨',
+ '𦉇' => '𦉇',
+ '䍙' => '䍙',
+ '𦋙' => '𦋙',
+ '罺' => '罺',
+ '𦌾' => '𦌾',
+ '羕' => '羕',
+ '翺' => '翺',
+ '者' => '者',
+ '𦓚' => '𦓚',
+ '𦔣' => '𦔣',
+ '聠' => '聠',
+ '𦖨' => '𦖨',
+ '聰' => '聰',
+ '𣍟' => '𣍟',
+ '䏕' => '䏕',
+ '育' => '育',
+ '脃' => '脃',
+ '䐋' => '䐋',
+ '脾' => '脾',
+ '媵' => '媵',
+ '𦞧' => '𦞧',
+ '𦞵' => '𦞵',
+ '𣎓' => '𣎓',
+ '𣎜' => '𣎜',
+ '舁' => '舁',
+ '舄' => '舄',
+ '辞' => '辞',
+ '䑫' => '䑫',
+ '芑' => '芑',
+ '芋' => '芋',
+ '芝' => '芝',
+ '劳' => '劳',
+ '花' => '花',
+ '芳' => '芳',
+ '芽' => '芽',
+ '苦' => '苦',
+ '𦬼' => '𦬼',
+ '若' => '若',
+ '茝' => '茝',
+ '荣' => '荣',
+ '莭' => '莭',
+ '茣' => '茣',
+ '莽' => '莽',
+ '菧' => '菧',
+ '著' => '著',
+ '荓' => '荓',
+ '菊' => '菊',
+ '菌' => '菌',
+ '菜' => '菜',
+ '𦰶' => '𦰶',
+ '𦵫' => '𦵫',
+ '𦳕' => '𦳕',
+ '䔫' => '䔫',
+ '蓱' => '蓱',
+ '蓳' => '蓳',
+ '蔖' => '蔖',
+ '𧏊' => '𧏊',
+ '蕤' => '蕤',
+ '𦼬' => '𦼬',
+ '䕝' => '䕝',
+ '䕡' => '䕡',
+ '𦾱' => '𦾱',
+ '𧃒' => '𧃒',
+ '䕫' => '䕫',
+ '虐' => '虐',
+ '虜' => '虜',
+ '虧' => '虧',
+ '虩' => '虩',
+ '蚩' => '蚩',
+ '蚈' => '蚈',
+ '蜎' => '蜎',
+ '蛢' => '蛢',
+ '蝹' => '蝹',
+ '蜨' => '蜨',
+ '蝫' => '蝫',
+ '螆' => '螆',
+ '䗗' => '䗗',
+ '蟡' => '蟡',
+ '蠁' => '蠁',
+ '䗹' => '䗹',
+ '衠' => '衠',
+ '衣' => '衣',
+ '𧙧' => '𧙧',
+ '裗' => '裗',
+ '裞' => '裞',
+ '䘵' => '䘵',
+ '裺' => '裺',
+ '㒻' => '㒻',
+ '𧢮' => '𧢮',
+ '𧥦' => '𧥦',
+ '䚾' => '䚾',
+ '䛇' => '䛇',
+ '誠' => '誠',
+ '諭' => '諭',
+ '變' => '變',
+ '豕' => '豕',
+ '𧲨' => '𧲨',
+ '貫' => '貫',
+ '賁' => '賁',
+ '贛' => '贛',
+ '起' => '起',
+ '𧼯' => '𧼯',
+ '𠠄' => '𠠄',
+ '跋' => '跋',
+ '趼' => '趼',
+ '跰' => '跰',
+ '𠣞' => '𠣞',
+ '軔' => '軔',
+ '輸' => '輸',
+ '𨗒' => '𨗒',
+ '𨗭' => '𨗭',
+ '邔' => '邔',
+ '郱' => '郱',
+ '鄑' => '鄑',
+ '𨜮' => '𨜮',
+ '鄛' => '鄛',
+ '鈸' => '鈸',
+ '鋗' => '鋗',
+ '鋘' => '鋘',
+ '鉼' => '鉼',
+ '鏹' => '鏹',
+ '鐕' => '鐕',
+ '𨯺' => '𨯺',
+ '開' => '開',
+ '䦕' => '䦕',
+ '閷' => '閷',
+ '𨵷' => '𨵷',
+ '䧦' => '䧦',
+ '雃' => '雃',
+ '嶲' => '嶲',
+ '霣' => '霣',
+ '𩅅' => '𩅅',
+ '𩈚' => '𩈚',
+ '䩮' => '䩮',
+ '䩶' => '䩶',
+ '韠' => '韠',
+ '𩐊' => '𩐊',
+ '䪲' => '䪲',
+ '𩒖' => '𩒖',
+ '頋' => '頋',
+ '頋' => '頋',
+ '頩' => '頩',
+ '𩖶' => '𩖶',
+ '飢' => '飢',
+ '䬳' => '䬳',
+ '餩' => '餩',
+ '馧' => '馧',
+ '駂' => '駂',
+ '駾' => '駾',
+ '䯎' => '䯎',
+ '𩬰' => '𩬰',
+ '鬒' => '鬒',
+ '鱀' => '鱀',
+ '鳽' => '鳽',
+ '䳎' => '䳎',
+ '䳭' => '䳭',
+ '鵧' => '鵧',
+ '𪃎' => '𪃎',
+ '䳸' => '䳸',
+ '𪄅' => '𪄅',
+ '𪈎' => '𪈎',
+ '𪊑' => '𪊑',
+ '麻' => '麻',
+ '䵖' => '䵖',
+ '黹' => '黹',
+ '黾' => '黾',
+ '鼅' => '鼅',
+ '鼏' => '鼏',
+ '鼖' => '鼖',
+ '鼻' => '鼻',
+ '𪘀' => '𪘀',
+);
diff --git a/plugins/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php b/plugins/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php
new file mode 100644
index 00000000..ec90f36e
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php
@@ -0,0 +1,876 @@
+ 230,
+ '́' => 230,
+ '̂' => 230,
+ '̃' => 230,
+ '̄' => 230,
+ '̅' => 230,
+ '̆' => 230,
+ '̇' => 230,
+ '̈' => 230,
+ '̉' => 230,
+ '̊' => 230,
+ '̋' => 230,
+ '̌' => 230,
+ '̍' => 230,
+ '̎' => 230,
+ '̏' => 230,
+ '̐' => 230,
+ '̑' => 230,
+ '̒' => 230,
+ '̓' => 230,
+ '̔' => 230,
+ '̕' => 232,
+ '̖' => 220,
+ '̗' => 220,
+ '̘' => 220,
+ '̙' => 220,
+ '̚' => 232,
+ '̛' => 216,
+ '̜' => 220,
+ '̝' => 220,
+ '̞' => 220,
+ '̟' => 220,
+ '̠' => 220,
+ '̡' => 202,
+ '̢' => 202,
+ '̣' => 220,
+ '̤' => 220,
+ '̥' => 220,
+ '̦' => 220,
+ '̧' => 202,
+ '̨' => 202,
+ '̩' => 220,
+ '̪' => 220,
+ '̫' => 220,
+ '̬' => 220,
+ '̭' => 220,
+ '̮' => 220,
+ '̯' => 220,
+ '̰' => 220,
+ '̱' => 220,
+ '̲' => 220,
+ '̳' => 220,
+ '̴' => 1,
+ '̵' => 1,
+ '̶' => 1,
+ '̷' => 1,
+ '̸' => 1,
+ '̹' => 220,
+ '̺' => 220,
+ '̻' => 220,
+ '̼' => 220,
+ '̽' => 230,
+ '̾' => 230,
+ '̿' => 230,
+ '̀' => 230,
+ '́' => 230,
+ '͂' => 230,
+ '̓' => 230,
+ '̈́' => 230,
+ 'ͅ' => 240,
+ '͆' => 230,
+ '͇' => 220,
+ '͈' => 220,
+ '͉' => 220,
+ '͊' => 230,
+ '͋' => 230,
+ '͌' => 230,
+ '͍' => 220,
+ '͎' => 220,
+ '͐' => 230,
+ '͑' => 230,
+ '͒' => 230,
+ '͓' => 220,
+ '͔' => 220,
+ '͕' => 220,
+ '͖' => 220,
+ '͗' => 230,
+ '͘' => 232,
+ '͙' => 220,
+ '͚' => 220,
+ '͛' => 230,
+ '͜' => 233,
+ '͝' => 234,
+ '͞' => 234,
+ '͟' => 233,
+ '͠' => 234,
+ '͡' => 234,
+ '͢' => 233,
+ 'ͣ' => 230,
+ 'ͤ' => 230,
+ 'ͥ' => 230,
+ 'ͦ' => 230,
+ 'ͧ' => 230,
+ 'ͨ' => 230,
+ 'ͩ' => 230,
+ 'ͪ' => 230,
+ 'ͫ' => 230,
+ 'ͬ' => 230,
+ 'ͭ' => 230,
+ 'ͮ' => 230,
+ 'ͯ' => 230,
+ '҃' => 230,
+ '҄' => 230,
+ '҅' => 230,
+ '҆' => 230,
+ '҇' => 230,
+ '֑' => 220,
+ '֒' => 230,
+ '֓' => 230,
+ '֔' => 230,
+ '֕' => 230,
+ '֖' => 220,
+ '֗' => 230,
+ '֘' => 230,
+ '֙' => 230,
+ '֚' => 222,
+ '֛' => 220,
+ '֜' => 230,
+ '֝' => 230,
+ '֞' => 230,
+ '֟' => 230,
+ '֠' => 230,
+ '֡' => 230,
+ '֢' => 220,
+ '֣' => 220,
+ '֤' => 220,
+ '֥' => 220,
+ '֦' => 220,
+ '֧' => 220,
+ '֨' => 230,
+ '֩' => 230,
+ '֪' => 220,
+ '֫' => 230,
+ '֬' => 230,
+ '֭' => 222,
+ '֮' => 228,
+ '֯' => 230,
+ 'ְ' => 10,
+ 'ֱ' => 11,
+ 'ֲ' => 12,
+ 'ֳ' => 13,
+ 'ִ' => 14,
+ 'ֵ' => 15,
+ 'ֶ' => 16,
+ 'ַ' => 17,
+ 'ָ' => 18,
+ 'ֹ' => 19,
+ 'ֺ' => 19,
+ 'ֻ' => 20,
+ 'ּ' => 21,
+ 'ֽ' => 22,
+ 'ֿ' => 23,
+ 'ׁ' => 24,
+ 'ׂ' => 25,
+ 'ׄ' => 230,
+ 'ׅ' => 220,
+ 'ׇ' => 18,
+ 'ؐ' => 230,
+ 'ؑ' => 230,
+ 'ؒ' => 230,
+ 'ؓ' => 230,
+ 'ؔ' => 230,
+ 'ؕ' => 230,
+ 'ؖ' => 230,
+ 'ؗ' => 230,
+ 'ؘ' => 30,
+ 'ؙ' => 31,
+ 'ؚ' => 32,
+ 'ً' => 27,
+ 'ٌ' => 28,
+ 'ٍ' => 29,
+ 'َ' => 30,
+ 'ُ' => 31,
+ 'ِ' => 32,
+ 'ّ' => 33,
+ 'ْ' => 34,
+ 'ٓ' => 230,
+ 'ٔ' => 230,
+ 'ٕ' => 220,
+ 'ٖ' => 220,
+ 'ٗ' => 230,
+ '٘' => 230,
+ 'ٙ' => 230,
+ 'ٚ' => 230,
+ 'ٛ' => 230,
+ 'ٜ' => 220,
+ 'ٝ' => 230,
+ 'ٞ' => 230,
+ 'ٟ' => 220,
+ 'ٰ' => 35,
+ 'ۖ' => 230,
+ 'ۗ' => 230,
+ 'ۘ' => 230,
+ 'ۙ' => 230,
+ 'ۚ' => 230,
+ 'ۛ' => 230,
+ 'ۜ' => 230,
+ '۟' => 230,
+ '۠' => 230,
+ 'ۡ' => 230,
+ 'ۢ' => 230,
+ 'ۣ' => 220,
+ 'ۤ' => 230,
+ 'ۧ' => 230,
+ 'ۨ' => 230,
+ '۪' => 220,
+ '۫' => 230,
+ '۬' => 230,
+ 'ۭ' => 220,
+ 'ܑ' => 36,
+ 'ܰ' => 230,
+ 'ܱ' => 220,
+ 'ܲ' => 230,
+ 'ܳ' => 230,
+ 'ܴ' => 220,
+ 'ܵ' => 230,
+ 'ܶ' => 230,
+ 'ܷ' => 220,
+ 'ܸ' => 220,
+ 'ܹ' => 220,
+ 'ܺ' => 230,
+ 'ܻ' => 220,
+ 'ܼ' => 220,
+ 'ܽ' => 230,
+ 'ܾ' => 220,
+ 'ܿ' => 230,
+ '݀' => 230,
+ '݁' => 230,
+ '݂' => 220,
+ '݃' => 230,
+ '݄' => 220,
+ '݅' => 230,
+ '݆' => 220,
+ '݇' => 230,
+ '݈' => 220,
+ '݉' => 230,
+ '݊' => 230,
+ '߫' => 230,
+ '߬' => 230,
+ '߭' => 230,
+ '߮' => 230,
+ '߯' => 230,
+ '߰' => 230,
+ '߱' => 230,
+ '߲' => 220,
+ '߳' => 230,
+ '߽' => 220,
+ 'ࠖ' => 230,
+ 'ࠗ' => 230,
+ '࠘' => 230,
+ '࠙' => 230,
+ 'ࠛ' => 230,
+ 'ࠜ' => 230,
+ 'ࠝ' => 230,
+ 'ࠞ' => 230,
+ 'ࠟ' => 230,
+ 'ࠠ' => 230,
+ 'ࠡ' => 230,
+ 'ࠢ' => 230,
+ 'ࠣ' => 230,
+ 'ࠥ' => 230,
+ 'ࠦ' => 230,
+ 'ࠧ' => 230,
+ 'ࠩ' => 230,
+ 'ࠪ' => 230,
+ 'ࠫ' => 230,
+ 'ࠬ' => 230,
+ '࠭' => 230,
+ '࡙' => 220,
+ '࡚' => 220,
+ '࡛' => 220,
+ '࣓' => 220,
+ 'ࣔ' => 230,
+ 'ࣕ' => 230,
+ 'ࣖ' => 230,
+ 'ࣗ' => 230,
+ 'ࣘ' => 230,
+ 'ࣙ' => 230,
+ 'ࣚ' => 230,
+ 'ࣛ' => 230,
+ 'ࣜ' => 230,
+ 'ࣝ' => 230,
+ 'ࣞ' => 230,
+ 'ࣟ' => 230,
+ '࣠' => 230,
+ '࣡' => 230,
+ 'ࣣ' => 220,
+ 'ࣤ' => 230,
+ 'ࣥ' => 230,
+ 'ࣦ' => 220,
+ 'ࣧ' => 230,
+ 'ࣨ' => 230,
+ 'ࣩ' => 220,
+ '࣪' => 230,
+ '࣫' => 230,
+ '࣬' => 230,
+ '࣭' => 220,
+ '࣮' => 220,
+ '࣯' => 220,
+ 'ࣰ' => 27,
+ 'ࣱ' => 28,
+ 'ࣲ' => 29,
+ 'ࣳ' => 230,
+ 'ࣴ' => 230,
+ 'ࣵ' => 230,
+ 'ࣶ' => 220,
+ 'ࣷ' => 230,
+ 'ࣸ' => 230,
+ 'ࣹ' => 220,
+ 'ࣺ' => 220,
+ 'ࣻ' => 230,
+ 'ࣼ' => 230,
+ 'ࣽ' => 230,
+ 'ࣾ' => 230,
+ 'ࣿ' => 230,
+ '़' => 7,
+ '्' => 9,
+ '॑' => 230,
+ '॒' => 220,
+ '॓' => 230,
+ '॔' => 230,
+ '়' => 7,
+ '্' => 9,
+ '৾' => 230,
+ '਼' => 7,
+ '੍' => 9,
+ '઼' => 7,
+ '્' => 9,
+ '଼' => 7,
+ '୍' => 9,
+ '்' => 9,
+ '్' => 9,
+ 'ౕ' => 84,
+ 'ౖ' => 91,
+ '಼' => 7,
+ '್' => 9,
+ '഻' => 9,
+ '഼' => 9,
+ '്' => 9,
+ '්' => 9,
+ 'ุ' => 103,
+ 'ู' => 103,
+ 'ฺ' => 9,
+ '่' => 107,
+ '้' => 107,
+ '๊' => 107,
+ '๋' => 107,
+ 'ຸ' => 118,
+ 'ູ' => 118,
+ '຺' => 9,
+ '່' => 122,
+ '້' => 122,
+ '໊' => 122,
+ '໋' => 122,
+ '༘' => 220,
+ '༙' => 220,
+ '༵' => 220,
+ '༷' => 220,
+ '༹' => 216,
+ 'ཱ' => 129,
+ 'ི' => 130,
+ 'ུ' => 132,
+ 'ེ' => 130,
+ 'ཻ' => 130,
+ 'ོ' => 130,
+ 'ཽ' => 130,
+ 'ྀ' => 130,
+ 'ྂ' => 230,
+ 'ྃ' => 230,
+ '྄' => 9,
+ '྆' => 230,
+ '྇' => 230,
+ '࿆' => 220,
+ '့' => 7,
+ '္' => 9,
+ '်' => 9,
+ 'ႍ' => 220,
+ '፝' => 230,
+ '፞' => 230,
+ '፟' => 230,
+ '᜔' => 9,
+ '᜴' => 9,
+ '្' => 9,
+ '៝' => 230,
+ 'ᢩ' => 228,
+ '᤹' => 222,
+ '᤺' => 230,
+ '᤻' => 220,
+ 'ᨗ' => 230,
+ 'ᨘ' => 220,
+ '᩠' => 9,
+ '᩵' => 230,
+ '᩶' => 230,
+ '᩷' => 230,
+ '᩸' => 230,
+ '᩹' => 230,
+ '᩺' => 230,
+ '᩻' => 230,
+ '᩼' => 230,
+ '᩿' => 220,
+ '᪰' => 230,
+ '᪱' => 230,
+ '᪲' => 230,
+ '᪳' => 230,
+ '᪴' => 230,
+ '᪵' => 220,
+ '᪶' => 220,
+ '᪷' => 220,
+ '᪸' => 220,
+ '᪹' => 220,
+ '᪺' => 220,
+ '᪻' => 230,
+ '᪼' => 230,
+ '᪽' => 220,
+ 'ᪿ' => 220,
+ 'ᫀ' => 220,
+ '᬴' => 7,
+ '᭄' => 9,
+ '᭫' => 230,
+ '᭬' => 220,
+ '᭭' => 230,
+ '᭮' => 230,
+ '᭯' => 230,
+ '᭰' => 230,
+ '᭱' => 230,
+ '᭲' => 230,
+ '᭳' => 230,
+ '᮪' => 9,
+ '᮫' => 9,
+ '᯦' => 7,
+ '᯲' => 9,
+ '᯳' => 9,
+ '᰷' => 7,
+ '᳐' => 230,
+ '᳑' => 230,
+ '᳒' => 230,
+ '᳔' => 1,
+ '᳕' => 220,
+ '᳖' => 220,
+ '᳗' => 220,
+ '᳘' => 220,
+ '᳙' => 220,
+ '᳚' => 230,
+ '᳛' => 230,
+ '᳜' => 220,
+ '᳝' => 220,
+ '᳞' => 220,
+ '᳟' => 220,
+ '᳠' => 230,
+ '᳢' => 1,
+ '᳣' => 1,
+ '᳤' => 1,
+ '᳥' => 1,
+ '᳦' => 1,
+ '᳧' => 1,
+ '᳨' => 1,
+ '᳭' => 220,
+ '᳴' => 230,
+ '᳸' => 230,
+ '᳹' => 230,
+ '᷀' => 230,
+ '᷁' => 230,
+ '᷂' => 220,
+ '᷃' => 230,
+ '᷄' => 230,
+ '᷅' => 230,
+ '᷆' => 230,
+ '᷇' => 230,
+ '᷈' => 230,
+ '᷉' => 230,
+ '᷊' => 220,
+ '᷋' => 230,
+ '᷌' => 230,
+ '᷍' => 234,
+ '᷎' => 214,
+ '᷏' => 220,
+ '᷐' => 202,
+ '᷑' => 230,
+ '᷒' => 230,
+ 'ᷓ' => 230,
+ 'ᷔ' => 230,
+ 'ᷕ' => 230,
+ 'ᷖ' => 230,
+ 'ᷗ' => 230,
+ 'ᷘ' => 230,
+ 'ᷙ' => 230,
+ 'ᷚ' => 230,
+ 'ᷛ' => 230,
+ 'ᷜ' => 230,
+ 'ᷝ' => 230,
+ 'ᷞ' => 230,
+ 'ᷟ' => 230,
+ 'ᷠ' => 230,
+ 'ᷡ' => 230,
+ 'ᷢ' => 230,
+ 'ᷣ' => 230,
+ 'ᷤ' => 230,
+ 'ᷥ' => 230,
+ 'ᷦ' => 230,
+ 'ᷧ' => 230,
+ 'ᷨ' => 230,
+ 'ᷩ' => 230,
+ 'ᷪ' => 230,
+ 'ᷫ' => 230,
+ 'ᷬ' => 230,
+ 'ᷭ' => 230,
+ 'ᷮ' => 230,
+ 'ᷯ' => 230,
+ 'ᷰ' => 230,
+ 'ᷱ' => 230,
+ 'ᷲ' => 230,
+ 'ᷳ' => 230,
+ 'ᷴ' => 230,
+ '᷵' => 230,
+ '᷶' => 232,
+ '᷷' => 228,
+ '᷸' => 228,
+ '᷹' => 220,
+ '᷻' => 230,
+ '᷼' => 233,
+ '᷽' => 220,
+ '᷾' => 230,
+ '᷿' => 220,
+ '⃐' => 230,
+ '⃑' => 230,
+ '⃒' => 1,
+ '⃓' => 1,
+ '⃔' => 230,
+ '⃕' => 230,
+ '⃖' => 230,
+ '⃗' => 230,
+ '⃘' => 1,
+ '⃙' => 1,
+ '⃚' => 1,
+ '⃛' => 230,
+ '⃜' => 230,
+ '⃡' => 230,
+ '⃥' => 1,
+ '⃦' => 1,
+ '⃧' => 230,
+ '⃨' => 220,
+ '⃩' => 230,
+ '⃪' => 1,
+ '⃫' => 1,
+ '⃬' => 220,
+ '⃭' => 220,
+ '⃮' => 220,
+ '⃯' => 220,
+ '⃰' => 230,
+ '⳯' => 230,
+ '⳰' => 230,
+ '⳱' => 230,
+ '⵿' => 9,
+ 'ⷠ' => 230,
+ 'ⷡ' => 230,
+ 'ⷢ' => 230,
+ 'ⷣ' => 230,
+ 'ⷤ' => 230,
+ 'ⷥ' => 230,
+ 'ⷦ' => 230,
+ 'ⷧ' => 230,
+ 'ⷨ' => 230,
+ 'ⷩ' => 230,
+ 'ⷪ' => 230,
+ 'ⷫ' => 230,
+ 'ⷬ' => 230,
+ 'ⷭ' => 230,
+ 'ⷮ' => 230,
+ 'ⷯ' => 230,
+ 'ⷰ' => 230,
+ 'ⷱ' => 230,
+ 'ⷲ' => 230,
+ 'ⷳ' => 230,
+ 'ⷴ' => 230,
+ 'ⷵ' => 230,
+ 'ⷶ' => 230,
+ 'ⷷ' => 230,
+ 'ⷸ' => 230,
+ 'ⷹ' => 230,
+ 'ⷺ' => 230,
+ 'ⷻ' => 230,
+ 'ⷼ' => 230,
+ 'ⷽ' => 230,
+ 'ⷾ' => 230,
+ 'ⷿ' => 230,
+ '〪' => 218,
+ '〫' => 228,
+ '〬' => 232,
+ '〭' => 222,
+ '〮' => 224,
+ '〯' => 224,
+ '゙' => 8,
+ '゚' => 8,
+ '꙯' => 230,
+ 'ꙴ' => 230,
+ 'ꙵ' => 230,
+ 'ꙶ' => 230,
+ 'ꙷ' => 230,
+ 'ꙸ' => 230,
+ 'ꙹ' => 230,
+ 'ꙺ' => 230,
+ 'ꙻ' => 230,
+ '꙼' => 230,
+ '꙽' => 230,
+ 'ꚞ' => 230,
+ 'ꚟ' => 230,
+ '꛰' => 230,
+ '꛱' => 230,
+ '꠆' => 9,
+ '꠬' => 9,
+ '꣄' => 9,
+ '꣠' => 230,
+ '꣡' => 230,
+ '꣢' => 230,
+ '꣣' => 230,
+ '꣤' => 230,
+ '꣥' => 230,
+ '꣦' => 230,
+ '꣧' => 230,
+ '꣨' => 230,
+ '꣩' => 230,
+ '꣪' => 230,
+ '꣫' => 230,
+ '꣬' => 230,
+ '꣭' => 230,
+ '꣮' => 230,
+ '꣯' => 230,
+ '꣰' => 230,
+ '꣱' => 230,
+ '꤫' => 220,
+ '꤬' => 220,
+ '꤭' => 220,
+ '꥓' => 9,
+ '꦳' => 7,
+ '꧀' => 9,
+ 'ꪰ' => 230,
+ 'ꪲ' => 230,
+ 'ꪳ' => 230,
+ 'ꪴ' => 220,
+ 'ꪷ' => 230,
+ 'ꪸ' => 230,
+ 'ꪾ' => 230,
+ '꪿' => 230,
+ '꫁' => 230,
+ '꫶' => 9,
+ '꯭' => 9,
+ 'ﬞ' => 26,
+ '︠' => 230,
+ '︡' => 230,
+ '︢' => 230,
+ '︣' => 230,
+ '︤' => 230,
+ '︥' => 230,
+ '︦' => 230,
+ '︧' => 220,
+ '︨' => 220,
+ '︩' => 220,
+ '︪' => 220,
+ '︫' => 220,
+ '︬' => 220,
+ '︭' => 220,
+ '︮' => 230,
+ '︯' => 230,
+ '𐇽' => 220,
+ '𐋠' => 220,
+ '𐍶' => 230,
+ '𐍷' => 230,
+ '𐍸' => 230,
+ '𐍹' => 230,
+ '𐍺' => 230,
+ '𐨍' => 220,
+ '𐨏' => 230,
+ '𐨸' => 230,
+ '𐨹' => 1,
+ '𐨺' => 220,
+ '𐨿' => 9,
+ '𐫥' => 230,
+ '𐫦' => 220,
+ '𐴤' => 230,
+ '𐴥' => 230,
+ '𐴦' => 230,
+ '𐴧' => 230,
+ '𐺫' => 230,
+ '𐺬' => 230,
+ '𐽆' => 220,
+ '𐽇' => 220,
+ '𐽈' => 230,
+ '𐽉' => 230,
+ '𐽊' => 230,
+ '𐽋' => 220,
+ '𐽌' => 230,
+ '𐽍' => 220,
+ '𐽎' => 220,
+ '𐽏' => 220,
+ '𐽐' => 220,
+ '𑁆' => 9,
+ '𑁿' => 9,
+ '𑂹' => 9,
+ '𑂺' => 7,
+ '𑄀' => 230,
+ '𑄁' => 230,
+ '𑄂' => 230,
+ '𑄳' => 9,
+ '𑄴' => 9,
+ '𑅳' => 7,
+ '𑇀' => 9,
+ '𑇊' => 7,
+ '𑈵' => 9,
+ '𑈶' => 7,
+ '𑋩' => 7,
+ '𑋪' => 9,
+ '𑌻' => 7,
+ '𑌼' => 7,
+ '𑍍' => 9,
+ '𑍦' => 230,
+ '𑍧' => 230,
+ '𑍨' => 230,
+ '𑍩' => 230,
+ '𑍪' => 230,
+ '𑍫' => 230,
+ '𑍬' => 230,
+ '𑍰' => 230,
+ '𑍱' => 230,
+ '𑍲' => 230,
+ '𑍳' => 230,
+ '𑍴' => 230,
+ '𑑂' => 9,
+ '𑑆' => 7,
+ '𑑞' => 230,
+ '𑓂' => 9,
+ '𑓃' => 7,
+ '𑖿' => 9,
+ '𑗀' => 7,
+ '𑘿' => 9,
+ '𑚶' => 9,
+ '𑚷' => 7,
+ '𑜫' => 9,
+ '𑠹' => 9,
+ '𑠺' => 7,
+ '𑤽' => 9,
+ '𑤾' => 9,
+ '𑥃' => 7,
+ '𑧠' => 9,
+ '𑨴' => 9,
+ '𑩇' => 9,
+ '𑪙' => 9,
+ '𑰿' => 9,
+ '𑵂' => 7,
+ '𑵄' => 9,
+ '𑵅' => 9,
+ '𑶗' => 9,
+ '𖫰' => 1,
+ '𖫱' => 1,
+ '𖫲' => 1,
+ '𖫳' => 1,
+ '𖫴' => 1,
+ '𖬰' => 230,
+ '𖬱' => 230,
+ '𖬲' => 230,
+ '𖬳' => 230,
+ '𖬴' => 230,
+ '𖬵' => 230,
+ '𖬶' => 230,
+ '𖿰' => 6,
+ '𖿱' => 6,
+ '𛲞' => 1,
+ '𝅥' => 216,
+ '𝅦' => 216,
+ '𝅧' => 1,
+ '𝅨' => 1,
+ '𝅩' => 1,
+ '𝅭' => 226,
+ '𝅮' => 216,
+ '𝅯' => 216,
+ '𝅰' => 216,
+ '𝅱' => 216,
+ '𝅲' => 216,
+ '𝅻' => 220,
+ '𝅼' => 220,
+ '𝅽' => 220,
+ '𝅾' => 220,
+ '𝅿' => 220,
+ '𝆀' => 220,
+ '𝆁' => 220,
+ '𝆂' => 220,
+ '𝆅' => 230,
+ '𝆆' => 230,
+ '𝆇' => 230,
+ '𝆈' => 230,
+ '𝆉' => 230,
+ '𝆊' => 220,
+ '𝆋' => 220,
+ '𝆪' => 230,
+ '𝆫' => 230,
+ '𝆬' => 230,
+ '𝆭' => 230,
+ '𝉂' => 230,
+ '𝉃' => 230,
+ '𝉄' => 230,
+ '𞀀' => 230,
+ '𞀁' => 230,
+ '𞀂' => 230,
+ '𞀃' => 230,
+ '𞀄' => 230,
+ '𞀅' => 230,
+ '𞀆' => 230,
+ '𞀈' => 230,
+ '𞀉' => 230,
+ '𞀊' => 230,
+ '𞀋' => 230,
+ '𞀌' => 230,
+ '𞀍' => 230,
+ '𞀎' => 230,
+ '𞀏' => 230,
+ '𞀐' => 230,
+ '𞀑' => 230,
+ '𞀒' => 230,
+ '𞀓' => 230,
+ '𞀔' => 230,
+ '𞀕' => 230,
+ '𞀖' => 230,
+ '𞀗' => 230,
+ '𞀘' => 230,
+ '𞀛' => 230,
+ '𞀜' => 230,
+ '𞀝' => 230,
+ '𞀞' => 230,
+ '𞀟' => 230,
+ '𞀠' => 230,
+ '𞀡' => 230,
+ '𞀣' => 230,
+ '𞀤' => 230,
+ '𞀦' => 230,
+ '𞀧' => 230,
+ '𞀨' => 230,
+ '𞀩' => 230,
+ '𞀪' => 230,
+ '𞄰' => 230,
+ '𞄱' => 230,
+ '𞄲' => 230,
+ '𞄳' => 230,
+ '𞄴' => 230,
+ '𞄵' => 230,
+ '𞄶' => 230,
+ '𞋬' => 230,
+ '𞋭' => 230,
+ '𞋮' => 230,
+ '𞋯' => 230,
+ '𞣐' => 220,
+ '𞣑' => 220,
+ '𞣒' => 220,
+ '𞣓' => 220,
+ '𞣔' => 220,
+ '𞣕' => 220,
+ '𞣖' => 220,
+ '𞥄' => 230,
+ '𞥅' => 230,
+ '𞥆' => 230,
+ '𞥇' => 230,
+ '𞥈' => 230,
+ '𞥉' => 230,
+ '𞥊' => 7,
+);
diff --git a/plugins/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php b/plugins/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php
new file mode 100644
index 00000000..15749028
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php
@@ -0,0 +1,3695 @@
+ ' ',
+ '¨' => ' ̈',
+ 'ª' => 'a',
+ '¯' => ' ̄',
+ '²' => '2',
+ '³' => '3',
+ '´' => ' ́',
+ 'µ' => 'μ',
+ '¸' => ' ̧',
+ '¹' => '1',
+ 'º' => 'o',
+ '¼' => '1⁄4',
+ '½' => '1⁄2',
+ '¾' => '3⁄4',
+ 'IJ' => 'IJ',
+ 'ij' => 'ij',
+ 'Ŀ' => 'L·',
+ 'ŀ' => 'l·',
+ 'ʼn' => 'ʼn',
+ 'ſ' => 's',
+ 'DŽ' => 'DŽ',
+ 'Dž' => 'Dž',
+ 'dž' => 'dž',
+ 'LJ' => 'LJ',
+ 'Lj' => 'Lj',
+ 'lj' => 'lj',
+ 'NJ' => 'NJ',
+ 'Nj' => 'Nj',
+ 'nj' => 'nj',
+ 'DZ' => 'DZ',
+ 'Dz' => 'Dz',
+ 'dz' => 'dz',
+ 'ʰ' => 'h',
+ 'ʱ' => 'ɦ',
+ 'ʲ' => 'j',
+ 'ʳ' => 'r',
+ 'ʴ' => 'ɹ',
+ 'ʵ' => 'ɻ',
+ 'ʶ' => 'ʁ',
+ 'ʷ' => 'w',
+ 'ʸ' => 'y',
+ '˘' => ' ̆',
+ '˙' => ' ̇',
+ '˚' => ' ̊',
+ '˛' => ' ̨',
+ '˜' => ' ̃',
+ '˝' => ' ̋',
+ 'ˠ' => 'ɣ',
+ 'ˡ' => 'l',
+ 'ˢ' => 's',
+ 'ˣ' => 'x',
+ 'ˤ' => 'ʕ',
+ 'ͺ' => ' ͅ',
+ '΄' => ' ́',
+ '΅' => ' ̈́',
+ 'ϐ' => 'β',
+ 'ϑ' => 'θ',
+ 'ϒ' => 'Υ',
+ 'ϓ' => 'Ύ',
+ 'ϔ' => 'Ϋ',
+ 'ϕ' => 'φ',
+ 'ϖ' => 'π',
+ 'ϰ' => 'κ',
+ 'ϱ' => 'ρ',
+ 'ϲ' => 'ς',
+ 'ϴ' => 'Θ',
+ 'ϵ' => 'ε',
+ 'Ϲ' => 'Σ',
+ 'և' => 'եւ',
+ 'ٵ' => 'اٴ',
+ 'ٶ' => 'وٴ',
+ 'ٷ' => 'ۇٴ',
+ 'ٸ' => 'يٴ',
+ 'ำ' => 'ํา',
+ 'ຳ' => 'ໍາ',
+ 'ໜ' => 'ຫນ',
+ 'ໝ' => 'ຫມ',
+ '༌' => '་',
+ 'ཷ' => 'ྲཱྀ',
+ 'ཹ' => 'ླཱྀ',
+ 'ჼ' => 'ნ',
+ 'ᴬ' => 'A',
+ 'ᴭ' => 'Æ',
+ 'ᴮ' => 'B',
+ 'ᴰ' => 'D',
+ 'ᴱ' => 'E',
+ 'ᴲ' => 'Ǝ',
+ 'ᴳ' => 'G',
+ 'ᴴ' => 'H',
+ 'ᴵ' => 'I',
+ 'ᴶ' => 'J',
+ 'ᴷ' => 'K',
+ 'ᴸ' => 'L',
+ 'ᴹ' => 'M',
+ 'ᴺ' => 'N',
+ 'ᴼ' => 'O',
+ 'ᴽ' => 'Ȣ',
+ 'ᴾ' => 'P',
+ 'ᴿ' => 'R',
+ 'ᵀ' => 'T',
+ 'ᵁ' => 'U',
+ 'ᵂ' => 'W',
+ 'ᵃ' => 'a',
+ 'ᵄ' => 'ɐ',
+ 'ᵅ' => 'ɑ',
+ 'ᵆ' => 'ᴂ',
+ 'ᵇ' => 'b',
+ 'ᵈ' => 'd',
+ 'ᵉ' => 'e',
+ 'ᵊ' => 'ə',
+ 'ᵋ' => 'ɛ',
+ 'ᵌ' => 'ɜ',
+ 'ᵍ' => 'g',
+ 'ᵏ' => 'k',
+ 'ᵐ' => 'm',
+ 'ᵑ' => 'ŋ',
+ 'ᵒ' => 'o',
+ 'ᵓ' => 'ɔ',
+ 'ᵔ' => 'ᴖ',
+ 'ᵕ' => 'ᴗ',
+ 'ᵖ' => 'p',
+ 'ᵗ' => 't',
+ 'ᵘ' => 'u',
+ 'ᵙ' => 'ᴝ',
+ 'ᵚ' => 'ɯ',
+ 'ᵛ' => 'v',
+ 'ᵜ' => 'ᴥ',
+ 'ᵝ' => 'β',
+ 'ᵞ' => 'γ',
+ 'ᵟ' => 'δ',
+ 'ᵠ' => 'φ',
+ 'ᵡ' => 'χ',
+ 'ᵢ' => 'i',
+ 'ᵣ' => 'r',
+ 'ᵤ' => 'u',
+ 'ᵥ' => 'v',
+ 'ᵦ' => 'β',
+ 'ᵧ' => 'γ',
+ 'ᵨ' => 'ρ',
+ 'ᵩ' => 'φ',
+ 'ᵪ' => 'χ',
+ 'ᵸ' => 'н',
+ 'ᶛ' => 'ɒ',
+ 'ᶜ' => 'c',
+ 'ᶝ' => 'ɕ',
+ 'ᶞ' => 'ð',
+ 'ᶟ' => 'ɜ',
+ 'ᶠ' => 'f',
+ 'ᶡ' => 'ɟ',
+ 'ᶢ' => 'ɡ',
+ 'ᶣ' => 'ɥ',
+ 'ᶤ' => 'ɨ',
+ 'ᶥ' => 'ɩ',
+ 'ᶦ' => 'ɪ',
+ 'ᶧ' => 'ᵻ',
+ 'ᶨ' => 'ʝ',
+ 'ᶩ' => 'ɭ',
+ 'ᶪ' => 'ᶅ',
+ 'ᶫ' => 'ʟ',
+ 'ᶬ' => 'ɱ',
+ 'ᶭ' => 'ɰ',
+ 'ᶮ' => 'ɲ',
+ 'ᶯ' => 'ɳ',
+ 'ᶰ' => 'ɴ',
+ 'ᶱ' => 'ɵ',
+ 'ᶲ' => 'ɸ',
+ 'ᶳ' => 'ʂ',
+ 'ᶴ' => 'ʃ',
+ 'ᶵ' => 'ƫ',
+ 'ᶶ' => 'ʉ',
+ 'ᶷ' => 'ʊ',
+ 'ᶸ' => 'ᴜ',
+ 'ᶹ' => 'ʋ',
+ 'ᶺ' => 'ʌ',
+ 'ᶻ' => 'z',
+ 'ᶼ' => 'ʐ',
+ 'ᶽ' => 'ʑ',
+ 'ᶾ' => 'ʒ',
+ 'ᶿ' => 'θ',
+ 'ẚ' => 'aʾ',
+ 'ẛ' => 'ṡ',
+ '᾽' => ' ̓',
+ '᾿' => ' ̓',
+ '῀' => ' ͂',
+ '῁' => ' ̈͂',
+ '῍' => ' ̓̀',
+ '῎' => ' ̓́',
+ '῏' => ' ̓͂',
+ '῝' => ' ̔̀',
+ '῞' => ' ̔́',
+ '῟' => ' ̔͂',
+ '῭' => ' ̈̀',
+ '΅' => ' ̈́',
+ '´' => ' ́',
+ '῾' => ' ̔',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ ' ' => ' ',
+ '‑' => '‐',
+ '‗' => ' ̳',
+ '․' => '.',
+ '‥' => '..',
+ '…' => '...',
+ ' ' => ' ',
+ '″' => '′′',
+ '‴' => '′′′',
+ '‶' => '‵‵',
+ '‷' => '‵‵‵',
+ '‼' => '!!',
+ '‾' => ' ̅',
+ '⁇' => '??',
+ '⁈' => '?!',
+ '⁉' => '!?',
+ '⁗' => '′′′′',
+ ' ' => ' ',
+ '⁰' => '0',
+ 'ⁱ' => 'i',
+ '⁴' => '4',
+ '⁵' => '5',
+ '⁶' => '6',
+ '⁷' => '7',
+ '⁸' => '8',
+ '⁹' => '9',
+ '⁺' => '+',
+ '⁻' => '−',
+ '⁼' => '=',
+ '⁽' => '(',
+ '⁾' => ')',
+ 'ⁿ' => 'n',
+ '₀' => '0',
+ '₁' => '1',
+ '₂' => '2',
+ '₃' => '3',
+ '₄' => '4',
+ '₅' => '5',
+ '₆' => '6',
+ '₇' => '7',
+ '₈' => '8',
+ '₉' => '9',
+ '₊' => '+',
+ '₋' => '−',
+ '₌' => '=',
+ '₍' => '(',
+ '₎' => ')',
+ 'ₐ' => 'a',
+ 'ₑ' => 'e',
+ 'ₒ' => 'o',
+ 'ₓ' => 'x',
+ 'ₔ' => 'ə',
+ 'ₕ' => 'h',
+ 'ₖ' => 'k',
+ 'ₗ' => 'l',
+ 'ₘ' => 'm',
+ 'ₙ' => 'n',
+ 'ₚ' => 'p',
+ 'ₛ' => 's',
+ 'ₜ' => 't',
+ '₨' => 'Rs',
+ '℀' => 'a/c',
+ '℁' => 'a/s',
+ 'ℂ' => 'C',
+ '℃' => '°C',
+ '℅' => 'c/o',
+ '℆' => 'c/u',
+ 'ℇ' => 'Ɛ',
+ '℉' => '°F',
+ 'ℊ' => 'g',
+ 'ℋ' => 'H',
+ 'ℌ' => 'H',
+ 'ℍ' => 'H',
+ 'ℎ' => 'h',
+ 'ℏ' => 'ħ',
+ 'ℐ' => 'I',
+ 'ℑ' => 'I',
+ 'ℒ' => 'L',
+ 'ℓ' => 'l',
+ 'ℕ' => 'N',
+ '№' => 'No',
+ 'ℙ' => 'P',
+ 'ℚ' => 'Q',
+ 'ℛ' => 'R',
+ 'ℜ' => 'R',
+ 'ℝ' => 'R',
+ '℠' => 'SM',
+ '℡' => 'TEL',
+ '™' => 'TM',
+ 'ℤ' => 'Z',
+ 'ℨ' => 'Z',
+ 'ℬ' => 'B',
+ 'ℭ' => 'C',
+ 'ℯ' => 'e',
+ 'ℰ' => 'E',
+ 'ℱ' => 'F',
+ 'ℳ' => 'M',
+ 'ℴ' => 'o',
+ 'ℵ' => 'א',
+ 'ℶ' => 'ב',
+ 'ℷ' => 'ג',
+ 'ℸ' => 'ד',
+ 'ℹ' => 'i',
+ '℻' => 'FAX',
+ 'ℼ' => 'π',
+ 'ℽ' => 'γ',
+ 'ℾ' => 'Γ',
+ 'ℿ' => 'Π',
+ '⅀' => '∑',
+ 'ⅅ' => 'D',
+ 'ⅆ' => 'd',
+ 'ⅇ' => 'e',
+ 'ⅈ' => 'i',
+ 'ⅉ' => 'j',
+ '⅐' => '1⁄7',
+ '⅑' => '1⁄9',
+ '⅒' => '1⁄10',
+ '⅓' => '1⁄3',
+ '⅔' => '2⁄3',
+ '⅕' => '1⁄5',
+ '⅖' => '2⁄5',
+ '⅗' => '3⁄5',
+ '⅘' => '4⁄5',
+ '⅙' => '1⁄6',
+ '⅚' => '5⁄6',
+ '⅛' => '1⁄8',
+ '⅜' => '3⁄8',
+ '⅝' => '5⁄8',
+ '⅞' => '7⁄8',
+ '⅟' => '1⁄',
+ 'Ⅰ' => 'I',
+ 'Ⅱ' => 'II',
+ 'Ⅲ' => 'III',
+ 'Ⅳ' => 'IV',
+ 'Ⅴ' => 'V',
+ 'Ⅵ' => 'VI',
+ 'Ⅶ' => 'VII',
+ 'Ⅷ' => 'VIII',
+ 'Ⅸ' => 'IX',
+ 'Ⅹ' => 'X',
+ 'Ⅺ' => 'XI',
+ 'Ⅻ' => 'XII',
+ 'Ⅼ' => 'L',
+ 'Ⅽ' => 'C',
+ 'Ⅾ' => 'D',
+ 'Ⅿ' => 'M',
+ 'ⅰ' => 'i',
+ 'ⅱ' => 'ii',
+ 'ⅲ' => 'iii',
+ 'ⅳ' => 'iv',
+ 'ⅴ' => 'v',
+ 'ⅵ' => 'vi',
+ 'ⅶ' => 'vii',
+ 'ⅷ' => 'viii',
+ 'ⅸ' => 'ix',
+ 'ⅹ' => 'x',
+ 'ⅺ' => 'xi',
+ 'ⅻ' => 'xii',
+ 'ⅼ' => 'l',
+ 'ⅽ' => 'c',
+ 'ⅾ' => 'd',
+ 'ⅿ' => 'm',
+ '↉' => '0⁄3',
+ '∬' => '∫∫',
+ '∭' => '∫∫∫',
+ '∯' => '∮∮',
+ '∰' => '∮∮∮',
+ '①' => '1',
+ '②' => '2',
+ '③' => '3',
+ '④' => '4',
+ '⑤' => '5',
+ '⑥' => '6',
+ '⑦' => '7',
+ '⑧' => '8',
+ '⑨' => '9',
+ '⑩' => '10',
+ '⑪' => '11',
+ '⑫' => '12',
+ '⑬' => '13',
+ '⑭' => '14',
+ '⑮' => '15',
+ '⑯' => '16',
+ '⑰' => '17',
+ '⑱' => '18',
+ '⑲' => '19',
+ '⑳' => '20',
+ '⑴' => '(1)',
+ '⑵' => '(2)',
+ '⑶' => '(3)',
+ '⑷' => '(4)',
+ '⑸' => '(5)',
+ '⑹' => '(6)',
+ '⑺' => '(7)',
+ '⑻' => '(8)',
+ '⑼' => '(9)',
+ '⑽' => '(10)',
+ '⑾' => '(11)',
+ '⑿' => '(12)',
+ '⒀' => '(13)',
+ '⒁' => '(14)',
+ '⒂' => '(15)',
+ '⒃' => '(16)',
+ '⒄' => '(17)',
+ '⒅' => '(18)',
+ '⒆' => '(19)',
+ '⒇' => '(20)',
+ '⒈' => '1.',
+ '⒉' => '2.',
+ '⒊' => '3.',
+ '⒋' => '4.',
+ '⒌' => '5.',
+ '⒍' => '6.',
+ '⒎' => '7.',
+ '⒏' => '8.',
+ '⒐' => '9.',
+ '⒑' => '10.',
+ '⒒' => '11.',
+ '⒓' => '12.',
+ '⒔' => '13.',
+ '⒕' => '14.',
+ '⒖' => '15.',
+ '⒗' => '16.',
+ '⒘' => '17.',
+ '⒙' => '18.',
+ '⒚' => '19.',
+ '⒛' => '20.',
+ '⒜' => '(a)',
+ '⒝' => '(b)',
+ '⒞' => '(c)',
+ '⒟' => '(d)',
+ '⒠' => '(e)',
+ '⒡' => '(f)',
+ '⒢' => '(g)',
+ '⒣' => '(h)',
+ '⒤' => '(i)',
+ '⒥' => '(j)',
+ '⒦' => '(k)',
+ '⒧' => '(l)',
+ '⒨' => '(m)',
+ '⒩' => '(n)',
+ '⒪' => '(o)',
+ '⒫' => '(p)',
+ '⒬' => '(q)',
+ '⒭' => '(r)',
+ '⒮' => '(s)',
+ '⒯' => '(t)',
+ '⒰' => '(u)',
+ '⒱' => '(v)',
+ '⒲' => '(w)',
+ '⒳' => '(x)',
+ '⒴' => '(y)',
+ '⒵' => '(z)',
+ 'Ⓐ' => 'A',
+ 'Ⓑ' => 'B',
+ 'Ⓒ' => 'C',
+ 'Ⓓ' => 'D',
+ 'Ⓔ' => 'E',
+ 'Ⓕ' => 'F',
+ 'Ⓖ' => 'G',
+ 'Ⓗ' => 'H',
+ 'Ⓘ' => 'I',
+ 'Ⓙ' => 'J',
+ 'Ⓚ' => 'K',
+ 'Ⓛ' => 'L',
+ 'Ⓜ' => 'M',
+ 'Ⓝ' => 'N',
+ 'Ⓞ' => 'O',
+ 'Ⓟ' => 'P',
+ 'Ⓠ' => 'Q',
+ 'Ⓡ' => 'R',
+ 'Ⓢ' => 'S',
+ 'Ⓣ' => 'T',
+ 'Ⓤ' => 'U',
+ 'Ⓥ' => 'V',
+ 'Ⓦ' => 'W',
+ 'Ⓧ' => 'X',
+ 'Ⓨ' => 'Y',
+ 'Ⓩ' => 'Z',
+ 'ⓐ' => 'a',
+ 'ⓑ' => 'b',
+ 'ⓒ' => 'c',
+ 'ⓓ' => 'd',
+ 'ⓔ' => 'e',
+ 'ⓕ' => 'f',
+ 'ⓖ' => 'g',
+ 'ⓗ' => 'h',
+ 'ⓘ' => 'i',
+ 'ⓙ' => 'j',
+ 'ⓚ' => 'k',
+ 'ⓛ' => 'l',
+ 'ⓜ' => 'm',
+ 'ⓝ' => 'n',
+ 'ⓞ' => 'o',
+ 'ⓟ' => 'p',
+ 'ⓠ' => 'q',
+ 'ⓡ' => 'r',
+ 'ⓢ' => 's',
+ 'ⓣ' => 't',
+ 'ⓤ' => 'u',
+ 'ⓥ' => 'v',
+ 'ⓦ' => 'w',
+ 'ⓧ' => 'x',
+ 'ⓨ' => 'y',
+ 'ⓩ' => 'z',
+ '⓪' => '0',
+ '⨌' => '∫∫∫∫',
+ '⩴' => '::=',
+ '⩵' => '==',
+ '⩶' => '===',
+ 'ⱼ' => 'j',
+ 'ⱽ' => 'V',
+ 'ⵯ' => 'ⵡ',
+ '⺟' => '母',
+ '⻳' => '龟',
+ '⼀' => '一',
+ '⼁' => '丨',
+ '⼂' => '丶',
+ '⼃' => '丿',
+ '⼄' => '乙',
+ '⼅' => '亅',
+ '⼆' => '二',
+ '⼇' => '亠',
+ '⼈' => '人',
+ '⼉' => '儿',
+ '⼊' => '入',
+ '⼋' => '八',
+ '⼌' => '冂',
+ '⼍' => '冖',
+ '⼎' => '冫',
+ '⼏' => '几',
+ '⼐' => '凵',
+ '⼑' => '刀',
+ '⼒' => '力',
+ '⼓' => '勹',
+ '⼔' => '匕',
+ '⼕' => '匚',
+ '⼖' => '匸',
+ '⼗' => '十',
+ '⼘' => '卜',
+ '⼙' => '卩',
+ '⼚' => '厂',
+ '⼛' => '厶',
+ '⼜' => '又',
+ '⼝' => '口',
+ '⼞' => '囗',
+ '⼟' => '土',
+ '⼠' => '士',
+ '⼡' => '夂',
+ '⼢' => '夊',
+ '⼣' => '夕',
+ '⼤' => '大',
+ '⼥' => '女',
+ '⼦' => '子',
+ '⼧' => '宀',
+ '⼨' => '寸',
+ '⼩' => '小',
+ '⼪' => '尢',
+ '⼫' => '尸',
+ '⼬' => '屮',
+ '⼭' => '山',
+ '⼮' => '巛',
+ '⼯' => '工',
+ '⼰' => '己',
+ '⼱' => '巾',
+ '⼲' => '干',
+ '⼳' => '幺',
+ '⼴' => '广',
+ '⼵' => '廴',
+ '⼶' => '廾',
+ '⼷' => '弋',
+ '⼸' => '弓',
+ '⼹' => '彐',
+ '⼺' => '彡',
+ '⼻' => '彳',
+ '⼼' => '心',
+ '⼽' => '戈',
+ '⼾' => '戶',
+ '⼿' => '手',
+ '⽀' => '支',
+ '⽁' => '攴',
+ '⽂' => '文',
+ '⽃' => '斗',
+ '⽄' => '斤',
+ '⽅' => '方',
+ '⽆' => '无',
+ '⽇' => '日',
+ '⽈' => '曰',
+ '⽉' => '月',
+ '⽊' => '木',
+ '⽋' => '欠',
+ '⽌' => '止',
+ '⽍' => '歹',
+ '⽎' => '殳',
+ '⽏' => '毋',
+ '⽐' => '比',
+ '⽑' => '毛',
+ '⽒' => '氏',
+ '⽓' => '气',
+ '⽔' => '水',
+ '⽕' => '火',
+ '⽖' => '爪',
+ '⽗' => '父',
+ '⽘' => '爻',
+ '⽙' => '爿',
+ '⽚' => '片',
+ '⽛' => '牙',
+ '⽜' => '牛',
+ '⽝' => '犬',
+ '⽞' => '玄',
+ '⽟' => '玉',
+ '⽠' => '瓜',
+ '⽡' => '瓦',
+ '⽢' => '甘',
+ '⽣' => '生',
+ '⽤' => '用',
+ '⽥' => '田',
+ '⽦' => '疋',
+ '⽧' => '疒',
+ '⽨' => '癶',
+ '⽩' => '白',
+ '⽪' => '皮',
+ '⽫' => '皿',
+ '⽬' => '目',
+ '⽭' => '矛',
+ '⽮' => '矢',
+ '⽯' => '石',
+ '⽰' => '示',
+ '⽱' => '禸',
+ '⽲' => '禾',
+ '⽳' => '穴',
+ '⽴' => '立',
+ '⽵' => '竹',
+ '⽶' => '米',
+ '⽷' => '糸',
+ '⽸' => '缶',
+ '⽹' => '网',
+ '⽺' => '羊',
+ '⽻' => '羽',
+ '⽼' => '老',
+ '⽽' => '而',
+ '⽾' => '耒',
+ '⽿' => '耳',
+ '⾀' => '聿',
+ '⾁' => '肉',
+ '⾂' => '臣',
+ '⾃' => '自',
+ '⾄' => '至',
+ '⾅' => '臼',
+ '⾆' => '舌',
+ '⾇' => '舛',
+ '⾈' => '舟',
+ '⾉' => '艮',
+ '⾊' => '色',
+ '⾋' => '艸',
+ '⾌' => '虍',
+ '⾍' => '虫',
+ '⾎' => '血',
+ '⾏' => '行',
+ '⾐' => '衣',
+ '⾑' => '襾',
+ '⾒' => '見',
+ '⾓' => '角',
+ '⾔' => '言',
+ '⾕' => '谷',
+ '⾖' => '豆',
+ '⾗' => '豕',
+ '⾘' => '豸',
+ '⾙' => '貝',
+ '⾚' => '赤',
+ '⾛' => '走',
+ '⾜' => '足',
+ '⾝' => '身',
+ '⾞' => '車',
+ '⾟' => '辛',
+ '⾠' => '辰',
+ '⾡' => '辵',
+ '⾢' => '邑',
+ '⾣' => '酉',
+ '⾤' => '釆',
+ '⾥' => '里',
+ '⾦' => '金',
+ '⾧' => '長',
+ '⾨' => '門',
+ '⾩' => '阜',
+ '⾪' => '隶',
+ '⾫' => '隹',
+ '⾬' => '雨',
+ '⾭' => '靑',
+ '⾮' => '非',
+ '⾯' => '面',
+ '⾰' => '革',
+ '⾱' => '韋',
+ '⾲' => '韭',
+ '⾳' => '音',
+ '⾴' => '頁',
+ '⾵' => '風',
+ '⾶' => '飛',
+ '⾷' => '食',
+ '⾸' => '首',
+ '⾹' => '香',
+ '⾺' => '馬',
+ '⾻' => '骨',
+ '⾼' => '高',
+ '⾽' => '髟',
+ '⾾' => '鬥',
+ '⾿' => '鬯',
+ '⿀' => '鬲',
+ '⿁' => '鬼',
+ '⿂' => '魚',
+ '⿃' => '鳥',
+ '⿄' => '鹵',
+ '⿅' => '鹿',
+ '⿆' => '麥',
+ '⿇' => '麻',
+ '⿈' => '黃',
+ '⿉' => '黍',
+ '⿊' => '黑',
+ '⿋' => '黹',
+ '⿌' => '黽',
+ '⿍' => '鼎',
+ '⿎' => '鼓',
+ '⿏' => '鼠',
+ '⿐' => '鼻',
+ '⿑' => '齊',
+ '⿒' => '齒',
+ '⿓' => '龍',
+ '⿔' => '龜',
+ '⿕' => '龠',
+ ' ' => ' ',
+ '〶' => '〒',
+ '〸' => '十',
+ '〹' => '卄',
+ '〺' => '卅',
+ '゛' => ' ゙',
+ '゜' => ' ゚',
+ 'ゟ' => 'より',
+ 'ヿ' => 'コト',
+ 'ㄱ' => 'ᄀ',
+ 'ㄲ' => 'ᄁ',
+ 'ㄳ' => 'ᆪ',
+ 'ㄴ' => 'ᄂ',
+ 'ㄵ' => 'ᆬ',
+ 'ㄶ' => 'ᆭ',
+ 'ㄷ' => 'ᄃ',
+ 'ㄸ' => 'ᄄ',
+ 'ㄹ' => 'ᄅ',
+ 'ㄺ' => 'ᆰ',
+ 'ㄻ' => 'ᆱ',
+ 'ㄼ' => 'ᆲ',
+ 'ㄽ' => 'ᆳ',
+ 'ㄾ' => 'ᆴ',
+ 'ㄿ' => 'ᆵ',
+ 'ㅀ' => 'ᄚ',
+ 'ㅁ' => 'ᄆ',
+ 'ㅂ' => 'ᄇ',
+ 'ㅃ' => 'ᄈ',
+ 'ㅄ' => 'ᄡ',
+ 'ㅅ' => 'ᄉ',
+ 'ㅆ' => 'ᄊ',
+ 'ㅇ' => 'ᄋ',
+ 'ㅈ' => 'ᄌ',
+ 'ㅉ' => 'ᄍ',
+ 'ㅊ' => 'ᄎ',
+ 'ㅋ' => 'ᄏ',
+ 'ㅌ' => 'ᄐ',
+ 'ㅍ' => 'ᄑ',
+ 'ㅎ' => 'ᄒ',
+ 'ㅏ' => 'ᅡ',
+ 'ㅐ' => 'ᅢ',
+ 'ㅑ' => 'ᅣ',
+ 'ㅒ' => 'ᅤ',
+ 'ㅓ' => 'ᅥ',
+ 'ㅔ' => 'ᅦ',
+ 'ㅕ' => 'ᅧ',
+ 'ㅖ' => 'ᅨ',
+ 'ㅗ' => 'ᅩ',
+ 'ㅘ' => 'ᅪ',
+ 'ㅙ' => 'ᅫ',
+ 'ㅚ' => 'ᅬ',
+ 'ㅛ' => 'ᅭ',
+ 'ㅜ' => 'ᅮ',
+ 'ㅝ' => 'ᅯ',
+ 'ㅞ' => 'ᅰ',
+ 'ㅟ' => 'ᅱ',
+ 'ㅠ' => 'ᅲ',
+ 'ㅡ' => 'ᅳ',
+ 'ㅢ' => 'ᅴ',
+ 'ㅣ' => 'ᅵ',
+ 'ㅤ' => 'ᅠ',
+ 'ㅥ' => 'ᄔ',
+ 'ㅦ' => 'ᄕ',
+ 'ㅧ' => 'ᇇ',
+ 'ㅨ' => 'ᇈ',
+ 'ㅩ' => 'ᇌ',
+ 'ㅪ' => 'ᇎ',
+ 'ㅫ' => 'ᇓ',
+ 'ㅬ' => 'ᇗ',
+ 'ㅭ' => 'ᇙ',
+ 'ㅮ' => 'ᄜ',
+ 'ㅯ' => 'ᇝ',
+ 'ㅰ' => 'ᇟ',
+ 'ㅱ' => 'ᄝ',
+ 'ㅲ' => 'ᄞ',
+ 'ㅳ' => 'ᄠ',
+ 'ㅴ' => 'ᄢ',
+ 'ㅵ' => 'ᄣ',
+ 'ㅶ' => 'ᄧ',
+ 'ㅷ' => 'ᄩ',
+ 'ㅸ' => 'ᄫ',
+ 'ㅹ' => 'ᄬ',
+ 'ㅺ' => 'ᄭ',
+ 'ㅻ' => 'ᄮ',
+ 'ㅼ' => 'ᄯ',
+ 'ㅽ' => 'ᄲ',
+ 'ㅾ' => 'ᄶ',
+ 'ㅿ' => 'ᅀ',
+ 'ㆀ' => 'ᅇ',
+ 'ㆁ' => 'ᅌ',
+ 'ㆂ' => 'ᇱ',
+ 'ㆃ' => 'ᇲ',
+ 'ㆄ' => 'ᅗ',
+ 'ㆅ' => 'ᅘ',
+ 'ㆆ' => 'ᅙ',
+ 'ㆇ' => 'ᆄ',
+ 'ㆈ' => 'ᆅ',
+ 'ㆉ' => 'ᆈ',
+ 'ㆊ' => 'ᆑ',
+ 'ㆋ' => 'ᆒ',
+ 'ㆌ' => 'ᆔ',
+ 'ㆍ' => 'ᆞ',
+ 'ㆎ' => 'ᆡ',
+ '㆒' => '一',
+ '㆓' => '二',
+ '㆔' => '三',
+ '㆕' => '四',
+ '㆖' => '上',
+ '㆗' => '中',
+ '㆘' => '下',
+ '㆙' => '甲',
+ '㆚' => '乙',
+ '㆛' => '丙',
+ '㆜' => '丁',
+ '㆝' => '天',
+ '㆞' => '地',
+ '㆟' => '人',
+ '㈀' => '(ᄀ)',
+ '㈁' => '(ᄂ)',
+ '㈂' => '(ᄃ)',
+ '㈃' => '(ᄅ)',
+ '㈄' => '(ᄆ)',
+ '㈅' => '(ᄇ)',
+ '㈆' => '(ᄉ)',
+ '㈇' => '(ᄋ)',
+ '㈈' => '(ᄌ)',
+ '㈉' => '(ᄎ)',
+ '㈊' => '(ᄏ)',
+ '㈋' => '(ᄐ)',
+ '㈌' => '(ᄑ)',
+ '㈍' => '(ᄒ)',
+ '㈎' => '(가)',
+ '㈏' => '(나)',
+ '㈐' => '(다)',
+ '㈑' => '(라)',
+ '㈒' => '(마)',
+ '㈓' => '(바)',
+ '㈔' => '(사)',
+ '㈕' => '(아)',
+ '㈖' => '(자)',
+ '㈗' => '(차)',
+ '㈘' => '(카)',
+ '㈙' => '(타)',
+ '㈚' => '(파)',
+ '㈛' => '(하)',
+ '㈜' => '(주)',
+ '㈝' => '(오전)',
+ '㈞' => '(오후)',
+ '㈠' => '(一)',
+ '㈡' => '(二)',
+ '㈢' => '(三)',
+ '㈣' => '(四)',
+ '㈤' => '(五)',
+ '㈥' => '(六)',
+ '㈦' => '(七)',
+ '㈧' => '(八)',
+ '㈨' => '(九)',
+ '㈩' => '(十)',
+ '㈪' => '(月)',
+ '㈫' => '(火)',
+ '㈬' => '(水)',
+ '㈭' => '(木)',
+ '㈮' => '(金)',
+ '㈯' => '(土)',
+ '㈰' => '(日)',
+ '㈱' => '(株)',
+ '㈲' => '(有)',
+ '㈳' => '(社)',
+ '㈴' => '(名)',
+ '㈵' => '(特)',
+ '㈶' => '(財)',
+ '㈷' => '(祝)',
+ '㈸' => '(労)',
+ '㈹' => '(代)',
+ '㈺' => '(呼)',
+ '㈻' => '(学)',
+ '㈼' => '(監)',
+ '㈽' => '(企)',
+ '㈾' => '(資)',
+ '㈿' => '(協)',
+ '㉀' => '(祭)',
+ '㉁' => '(休)',
+ '㉂' => '(自)',
+ '㉃' => '(至)',
+ '㉄' => '問',
+ '㉅' => '幼',
+ '㉆' => '文',
+ '㉇' => '箏',
+ '㉐' => 'PTE',
+ '㉑' => '21',
+ '㉒' => '22',
+ '㉓' => '23',
+ '㉔' => '24',
+ '㉕' => '25',
+ '㉖' => '26',
+ '㉗' => '27',
+ '㉘' => '28',
+ '㉙' => '29',
+ '㉚' => '30',
+ '㉛' => '31',
+ '㉜' => '32',
+ '㉝' => '33',
+ '㉞' => '34',
+ '㉟' => '35',
+ '㉠' => 'ᄀ',
+ '㉡' => 'ᄂ',
+ '㉢' => 'ᄃ',
+ '㉣' => 'ᄅ',
+ '㉤' => 'ᄆ',
+ '㉥' => 'ᄇ',
+ '㉦' => 'ᄉ',
+ '㉧' => 'ᄋ',
+ '㉨' => 'ᄌ',
+ '㉩' => 'ᄎ',
+ '㉪' => 'ᄏ',
+ '㉫' => 'ᄐ',
+ '㉬' => 'ᄑ',
+ '㉭' => 'ᄒ',
+ '㉮' => '가',
+ '㉯' => '나',
+ '㉰' => '다',
+ '㉱' => '라',
+ '㉲' => '마',
+ '㉳' => '바',
+ '㉴' => '사',
+ '㉵' => '아',
+ '㉶' => '자',
+ '㉷' => '차',
+ '㉸' => '카',
+ '㉹' => '타',
+ '㉺' => '파',
+ '㉻' => '하',
+ '㉼' => '참고',
+ '㉽' => '주의',
+ '㉾' => '우',
+ '㊀' => '一',
+ '㊁' => '二',
+ '㊂' => '三',
+ '㊃' => '四',
+ '㊄' => '五',
+ '㊅' => '六',
+ '㊆' => '七',
+ '㊇' => '八',
+ '㊈' => '九',
+ '㊉' => '十',
+ '㊊' => '月',
+ '㊋' => '火',
+ '㊌' => '水',
+ '㊍' => '木',
+ '㊎' => '金',
+ '㊏' => '土',
+ '㊐' => '日',
+ '㊑' => '株',
+ '㊒' => '有',
+ '㊓' => '社',
+ '㊔' => '名',
+ '㊕' => '特',
+ '㊖' => '財',
+ '㊗' => '祝',
+ '㊘' => '労',
+ '㊙' => '秘',
+ '㊚' => '男',
+ '㊛' => '女',
+ '㊜' => '適',
+ '㊝' => '優',
+ '㊞' => '印',
+ '㊟' => '注',
+ '㊠' => '項',
+ '㊡' => '休',
+ '㊢' => '写',
+ '㊣' => '正',
+ '㊤' => '上',
+ '㊥' => '中',
+ '㊦' => '下',
+ '㊧' => '左',
+ '㊨' => '右',
+ '㊩' => '医',
+ '㊪' => '宗',
+ '㊫' => '学',
+ '㊬' => '監',
+ '㊭' => '企',
+ '㊮' => '資',
+ '㊯' => '協',
+ '㊰' => '夜',
+ '㊱' => '36',
+ '㊲' => '37',
+ '㊳' => '38',
+ '㊴' => '39',
+ '㊵' => '40',
+ '㊶' => '41',
+ '㊷' => '42',
+ '㊸' => '43',
+ '㊹' => '44',
+ '㊺' => '45',
+ '㊻' => '46',
+ '㊼' => '47',
+ '㊽' => '48',
+ '㊾' => '49',
+ '㊿' => '50',
+ '㋀' => '1月',
+ '㋁' => '2月',
+ '㋂' => '3月',
+ '㋃' => '4月',
+ '㋄' => '5月',
+ '㋅' => '6月',
+ '㋆' => '7月',
+ '㋇' => '8月',
+ '㋈' => '9月',
+ '㋉' => '10月',
+ '㋊' => '11月',
+ '㋋' => '12月',
+ '㋌' => 'Hg',
+ '㋍' => 'erg',
+ '㋎' => 'eV',
+ '㋏' => 'LTD',
+ '㋐' => 'ア',
+ '㋑' => 'イ',
+ '㋒' => 'ウ',
+ '㋓' => 'エ',
+ '㋔' => 'オ',
+ '㋕' => 'カ',
+ '㋖' => 'キ',
+ '㋗' => 'ク',
+ '㋘' => 'ケ',
+ '㋙' => 'コ',
+ '㋚' => 'サ',
+ '㋛' => 'シ',
+ '㋜' => 'ス',
+ '㋝' => 'セ',
+ '㋞' => 'ソ',
+ '㋟' => 'タ',
+ '㋠' => 'チ',
+ '㋡' => 'ツ',
+ '㋢' => 'テ',
+ '㋣' => 'ト',
+ '㋤' => 'ナ',
+ '㋥' => 'ニ',
+ '㋦' => 'ヌ',
+ '㋧' => 'ネ',
+ '㋨' => 'ノ',
+ '㋩' => 'ハ',
+ '㋪' => 'ヒ',
+ '㋫' => 'フ',
+ '㋬' => 'ヘ',
+ '㋭' => 'ホ',
+ '㋮' => 'マ',
+ '㋯' => 'ミ',
+ '㋰' => 'ム',
+ '㋱' => 'メ',
+ '㋲' => 'モ',
+ '㋳' => 'ヤ',
+ '㋴' => 'ユ',
+ '㋵' => 'ヨ',
+ '㋶' => 'ラ',
+ '㋷' => 'リ',
+ '㋸' => 'ル',
+ '㋹' => 'レ',
+ '㋺' => 'ロ',
+ '㋻' => 'ワ',
+ '㋼' => 'ヰ',
+ '㋽' => 'ヱ',
+ '㋾' => 'ヲ',
+ '㋿' => '令和',
+ '㌀' => 'アパート',
+ '㌁' => 'アルファ',
+ '㌂' => 'アンペア',
+ '㌃' => 'アール',
+ '㌄' => 'イニング',
+ '㌅' => 'インチ',
+ '㌆' => 'ウォン',
+ '㌇' => 'エスクード',
+ '㌈' => 'エーカー',
+ '㌉' => 'オンス',
+ '㌊' => 'オーム',
+ '㌋' => 'カイリ',
+ '㌌' => 'カラット',
+ '㌍' => 'カロリー',
+ '㌎' => 'ガロン',
+ '㌏' => 'ガンマ',
+ '㌐' => 'ギガ',
+ '㌑' => 'ギニー',
+ '㌒' => 'キュリー',
+ '㌓' => 'ギルダー',
+ '㌔' => 'キロ',
+ '㌕' => 'キログラム',
+ '㌖' => 'キロメートル',
+ '㌗' => 'キロワット',
+ '㌘' => 'グラム',
+ '㌙' => 'グラムトン',
+ '㌚' => 'クルゼイロ',
+ '㌛' => 'クローネ',
+ '㌜' => 'ケース',
+ '㌝' => 'コルナ',
+ '㌞' => 'コーポ',
+ '㌟' => 'サイクル',
+ '㌠' => 'サンチーム',
+ '㌡' => 'シリング',
+ '㌢' => 'センチ',
+ '㌣' => 'セント',
+ '㌤' => 'ダース',
+ '㌥' => 'デシ',
+ '㌦' => 'ドル',
+ '㌧' => 'トン',
+ '㌨' => 'ナノ',
+ '㌩' => 'ノット',
+ '㌪' => 'ハイツ',
+ '㌫' => 'パーセント',
+ '㌬' => 'パーツ',
+ '㌭' => 'バーレル',
+ '㌮' => 'ピアストル',
+ '㌯' => 'ピクル',
+ '㌰' => 'ピコ',
+ '㌱' => 'ビル',
+ '㌲' => 'ファラッド',
+ '㌳' => 'フィート',
+ '㌴' => 'ブッシェル',
+ '㌵' => 'フラン',
+ '㌶' => 'ヘクタール',
+ '㌷' => 'ペソ',
+ '㌸' => 'ペニヒ',
+ '㌹' => 'ヘルツ',
+ '㌺' => 'ペンス',
+ '㌻' => 'ページ',
+ '㌼' => 'ベータ',
+ '㌽' => 'ポイント',
+ '㌾' => 'ボルト',
+ '㌿' => 'ホン',
+ '㍀' => 'ポンド',
+ '㍁' => 'ホール',
+ '㍂' => 'ホーン',
+ '㍃' => 'マイクロ',
+ '㍄' => 'マイル',
+ '㍅' => 'マッハ',
+ '㍆' => 'マルク',
+ '㍇' => 'マンション',
+ '㍈' => 'ミクロン',
+ '㍉' => 'ミリ',
+ '㍊' => 'ミリバール',
+ '㍋' => 'メガ',
+ '㍌' => 'メガトン',
+ '㍍' => 'メートル',
+ '㍎' => 'ヤード',
+ '㍏' => 'ヤール',
+ '㍐' => 'ユアン',
+ '㍑' => 'リットル',
+ '㍒' => 'リラ',
+ '㍓' => 'ルピー',
+ '㍔' => 'ルーブル',
+ '㍕' => 'レム',
+ '㍖' => 'レントゲン',
+ '㍗' => 'ワット',
+ '㍘' => '0点',
+ '㍙' => '1点',
+ '㍚' => '2点',
+ '㍛' => '3点',
+ '㍜' => '4点',
+ '㍝' => '5点',
+ '㍞' => '6点',
+ '㍟' => '7点',
+ '㍠' => '8点',
+ '㍡' => '9点',
+ '㍢' => '10点',
+ '㍣' => '11点',
+ '㍤' => '12点',
+ '㍥' => '13点',
+ '㍦' => '14点',
+ '㍧' => '15点',
+ '㍨' => '16点',
+ '㍩' => '17点',
+ '㍪' => '18点',
+ '㍫' => '19点',
+ '㍬' => '20点',
+ '㍭' => '21点',
+ '㍮' => '22点',
+ '㍯' => '23点',
+ '㍰' => '24点',
+ '㍱' => 'hPa',
+ '㍲' => 'da',
+ '㍳' => 'AU',
+ '㍴' => 'bar',
+ '㍵' => 'oV',
+ '㍶' => 'pc',
+ '㍷' => 'dm',
+ '㍸' => 'dm2',
+ '㍹' => 'dm3',
+ '㍺' => 'IU',
+ '㍻' => '平成',
+ '㍼' => '昭和',
+ '㍽' => '大正',
+ '㍾' => '明治',
+ '㍿' => '株式会社',
+ '㎀' => 'pA',
+ '㎁' => 'nA',
+ '㎂' => 'μA',
+ '㎃' => 'mA',
+ '㎄' => 'kA',
+ '㎅' => 'KB',
+ '㎆' => 'MB',
+ '㎇' => 'GB',
+ '㎈' => 'cal',
+ '㎉' => 'kcal',
+ '㎊' => 'pF',
+ '㎋' => 'nF',
+ '㎌' => 'μF',
+ '㎍' => 'μg',
+ '㎎' => 'mg',
+ '㎏' => 'kg',
+ '㎐' => 'Hz',
+ '㎑' => 'kHz',
+ '㎒' => 'MHz',
+ '㎓' => 'GHz',
+ '㎔' => 'THz',
+ '㎕' => 'μl',
+ '㎖' => 'ml',
+ '㎗' => 'dl',
+ '㎘' => 'kl',
+ '㎙' => 'fm',
+ '㎚' => 'nm',
+ '㎛' => 'μm',
+ '㎜' => 'mm',
+ '㎝' => 'cm',
+ '㎞' => 'km',
+ '㎟' => 'mm2',
+ '㎠' => 'cm2',
+ '㎡' => 'm2',
+ '㎢' => 'km2',
+ '㎣' => 'mm3',
+ '㎤' => 'cm3',
+ '㎥' => 'm3',
+ '㎦' => 'km3',
+ '㎧' => 'm∕s',
+ '㎨' => 'm∕s2',
+ '㎩' => 'Pa',
+ '㎪' => 'kPa',
+ '㎫' => 'MPa',
+ '㎬' => 'GPa',
+ '㎭' => 'rad',
+ '㎮' => 'rad∕s',
+ '㎯' => 'rad∕s2',
+ '㎰' => 'ps',
+ '㎱' => 'ns',
+ '㎲' => 'μs',
+ '㎳' => 'ms',
+ '㎴' => 'pV',
+ '㎵' => 'nV',
+ '㎶' => 'μV',
+ '㎷' => 'mV',
+ '㎸' => 'kV',
+ '㎹' => 'MV',
+ '㎺' => 'pW',
+ '㎻' => 'nW',
+ '㎼' => 'μW',
+ '㎽' => 'mW',
+ '㎾' => 'kW',
+ '㎿' => 'MW',
+ '㏀' => 'kΩ',
+ '㏁' => 'MΩ',
+ '㏂' => 'a.m.',
+ '㏃' => 'Bq',
+ '㏄' => 'cc',
+ '㏅' => 'cd',
+ '㏆' => 'C∕kg',
+ '㏇' => 'Co.',
+ '㏈' => 'dB',
+ '㏉' => 'Gy',
+ '㏊' => 'ha',
+ '㏋' => 'HP',
+ '㏌' => 'in',
+ '㏍' => 'KK',
+ '㏎' => 'KM',
+ '㏏' => 'kt',
+ '㏐' => 'lm',
+ '㏑' => 'ln',
+ '㏒' => 'log',
+ '㏓' => 'lx',
+ '㏔' => 'mb',
+ '㏕' => 'mil',
+ '㏖' => 'mol',
+ '㏗' => 'PH',
+ '㏘' => 'p.m.',
+ '㏙' => 'PPM',
+ '㏚' => 'PR',
+ '㏛' => 'sr',
+ '㏜' => 'Sv',
+ '㏝' => 'Wb',
+ '㏞' => 'V∕m',
+ '㏟' => 'A∕m',
+ '㏠' => '1日',
+ '㏡' => '2日',
+ '㏢' => '3日',
+ '㏣' => '4日',
+ '㏤' => '5日',
+ '㏥' => '6日',
+ '㏦' => '7日',
+ '㏧' => '8日',
+ '㏨' => '9日',
+ '㏩' => '10日',
+ '㏪' => '11日',
+ '㏫' => '12日',
+ '㏬' => '13日',
+ '㏭' => '14日',
+ '㏮' => '15日',
+ '㏯' => '16日',
+ '㏰' => '17日',
+ '㏱' => '18日',
+ '㏲' => '19日',
+ '㏳' => '20日',
+ '㏴' => '21日',
+ '㏵' => '22日',
+ '㏶' => '23日',
+ '㏷' => '24日',
+ '㏸' => '25日',
+ '㏹' => '26日',
+ '㏺' => '27日',
+ '㏻' => '28日',
+ '㏼' => '29日',
+ '㏽' => '30日',
+ '㏾' => '31日',
+ '㏿' => 'gal',
+ 'ꚜ' => 'ъ',
+ 'ꚝ' => 'ь',
+ 'ꝰ' => 'ꝯ',
+ 'ꟸ' => 'Ħ',
+ 'ꟹ' => 'œ',
+ 'ꭜ' => 'ꜧ',
+ 'ꭝ' => 'ꬷ',
+ 'ꭞ' => 'ɫ',
+ 'ꭟ' => 'ꭒ',
+ 'ꭩ' => 'ʍ',
+ 'ff' => 'ff',
+ 'fi' => 'fi',
+ 'fl' => 'fl',
+ 'ffi' => 'ffi',
+ 'ffl' => 'ffl',
+ 'ſt' => 'st',
+ 'st' => 'st',
+ 'ﬓ' => 'մն',
+ 'ﬔ' => 'մե',
+ 'ﬕ' => 'մի',
+ 'ﬖ' => 'վն',
+ 'ﬗ' => 'մխ',
+ 'ﬠ' => 'ע',
+ 'ﬡ' => 'א',
+ 'ﬢ' => 'ד',
+ 'ﬣ' => 'ה',
+ 'ﬤ' => 'כ',
+ 'ﬥ' => 'ל',
+ 'ﬦ' => 'ם',
+ 'ﬧ' => 'ר',
+ 'ﬨ' => 'ת',
+ '﬩' => '+',
+ 'ﭏ' => 'אל',
+ 'ﭐ' => 'ٱ',
+ 'ﭑ' => 'ٱ',
+ 'ﭒ' => 'ٻ',
+ 'ﭓ' => 'ٻ',
+ 'ﭔ' => 'ٻ',
+ 'ﭕ' => 'ٻ',
+ 'ﭖ' => 'پ',
+ 'ﭗ' => 'پ',
+ 'ﭘ' => 'پ',
+ 'ﭙ' => 'پ',
+ 'ﭚ' => 'ڀ',
+ 'ﭛ' => 'ڀ',
+ 'ﭜ' => 'ڀ',
+ 'ﭝ' => 'ڀ',
+ 'ﭞ' => 'ٺ',
+ 'ﭟ' => 'ٺ',
+ 'ﭠ' => 'ٺ',
+ 'ﭡ' => 'ٺ',
+ 'ﭢ' => 'ٿ',
+ 'ﭣ' => 'ٿ',
+ 'ﭤ' => 'ٿ',
+ 'ﭥ' => 'ٿ',
+ 'ﭦ' => 'ٹ',
+ 'ﭧ' => 'ٹ',
+ 'ﭨ' => 'ٹ',
+ 'ﭩ' => 'ٹ',
+ 'ﭪ' => 'ڤ',
+ 'ﭫ' => 'ڤ',
+ 'ﭬ' => 'ڤ',
+ 'ﭭ' => 'ڤ',
+ 'ﭮ' => 'ڦ',
+ 'ﭯ' => 'ڦ',
+ 'ﭰ' => 'ڦ',
+ 'ﭱ' => 'ڦ',
+ 'ﭲ' => 'ڄ',
+ 'ﭳ' => 'ڄ',
+ 'ﭴ' => 'ڄ',
+ 'ﭵ' => 'ڄ',
+ 'ﭶ' => 'ڃ',
+ 'ﭷ' => 'ڃ',
+ 'ﭸ' => 'ڃ',
+ 'ﭹ' => 'ڃ',
+ 'ﭺ' => 'چ',
+ 'ﭻ' => 'چ',
+ 'ﭼ' => 'چ',
+ 'ﭽ' => 'چ',
+ 'ﭾ' => 'ڇ',
+ 'ﭿ' => 'ڇ',
+ 'ﮀ' => 'ڇ',
+ 'ﮁ' => 'ڇ',
+ 'ﮂ' => 'ڍ',
+ 'ﮃ' => 'ڍ',
+ 'ﮄ' => 'ڌ',
+ 'ﮅ' => 'ڌ',
+ 'ﮆ' => 'ڎ',
+ 'ﮇ' => 'ڎ',
+ 'ﮈ' => 'ڈ',
+ 'ﮉ' => 'ڈ',
+ 'ﮊ' => 'ژ',
+ 'ﮋ' => 'ژ',
+ 'ﮌ' => 'ڑ',
+ 'ﮍ' => 'ڑ',
+ 'ﮎ' => 'ک',
+ 'ﮏ' => 'ک',
+ 'ﮐ' => 'ک',
+ 'ﮑ' => 'ک',
+ 'ﮒ' => 'گ',
+ 'ﮓ' => 'گ',
+ 'ﮔ' => 'گ',
+ 'ﮕ' => 'گ',
+ 'ﮖ' => 'ڳ',
+ 'ﮗ' => 'ڳ',
+ 'ﮘ' => 'ڳ',
+ 'ﮙ' => 'ڳ',
+ 'ﮚ' => 'ڱ',
+ 'ﮛ' => 'ڱ',
+ 'ﮜ' => 'ڱ',
+ 'ﮝ' => 'ڱ',
+ 'ﮞ' => 'ں',
+ 'ﮟ' => 'ں',
+ 'ﮠ' => 'ڻ',
+ 'ﮡ' => 'ڻ',
+ 'ﮢ' => 'ڻ',
+ 'ﮣ' => 'ڻ',
+ 'ﮤ' => 'ۀ',
+ 'ﮥ' => 'ۀ',
+ 'ﮦ' => 'ہ',
+ 'ﮧ' => 'ہ',
+ 'ﮨ' => 'ہ',
+ 'ﮩ' => 'ہ',
+ 'ﮪ' => 'ھ',
+ 'ﮫ' => 'ھ',
+ 'ﮬ' => 'ھ',
+ 'ﮭ' => 'ھ',
+ 'ﮮ' => 'ے',
+ 'ﮯ' => 'ے',
+ 'ﮰ' => 'ۓ',
+ 'ﮱ' => 'ۓ',
+ 'ﯓ' => 'ڭ',
+ 'ﯔ' => 'ڭ',
+ 'ﯕ' => 'ڭ',
+ 'ﯖ' => 'ڭ',
+ 'ﯗ' => 'ۇ',
+ 'ﯘ' => 'ۇ',
+ 'ﯙ' => 'ۆ',
+ 'ﯚ' => 'ۆ',
+ 'ﯛ' => 'ۈ',
+ 'ﯜ' => 'ۈ',
+ 'ﯝ' => 'ۇٴ',
+ 'ﯞ' => 'ۋ',
+ 'ﯟ' => 'ۋ',
+ 'ﯠ' => 'ۅ',
+ 'ﯡ' => 'ۅ',
+ 'ﯢ' => 'ۉ',
+ 'ﯣ' => 'ۉ',
+ 'ﯤ' => 'ې',
+ 'ﯥ' => 'ې',
+ 'ﯦ' => 'ې',
+ 'ﯧ' => 'ې',
+ 'ﯨ' => 'ى',
+ 'ﯩ' => 'ى',
+ 'ﯪ' => 'ئا',
+ 'ﯫ' => 'ئا',
+ 'ﯬ' => 'ئە',
+ 'ﯭ' => 'ئە',
+ 'ﯮ' => 'ئو',
+ 'ﯯ' => 'ئو',
+ 'ﯰ' => 'ئۇ',
+ 'ﯱ' => 'ئۇ',
+ 'ﯲ' => 'ئۆ',
+ 'ﯳ' => 'ئۆ',
+ 'ﯴ' => 'ئۈ',
+ 'ﯵ' => 'ئۈ',
+ 'ﯶ' => 'ئې',
+ 'ﯷ' => 'ئې',
+ 'ﯸ' => 'ئې',
+ 'ﯹ' => 'ئى',
+ 'ﯺ' => 'ئى',
+ 'ﯻ' => 'ئى',
+ 'ﯼ' => 'ی',
+ 'ﯽ' => 'ی',
+ 'ﯾ' => 'ی',
+ 'ﯿ' => 'ی',
+ 'ﰀ' => 'ئج',
+ 'ﰁ' => 'ئح',
+ 'ﰂ' => 'ئم',
+ 'ﰃ' => 'ئى',
+ 'ﰄ' => 'ئي',
+ 'ﰅ' => 'بج',
+ 'ﰆ' => 'بح',
+ 'ﰇ' => 'بخ',
+ 'ﰈ' => 'بم',
+ 'ﰉ' => 'بى',
+ 'ﰊ' => 'بي',
+ 'ﰋ' => 'تج',
+ 'ﰌ' => 'تح',
+ 'ﰍ' => 'تخ',
+ 'ﰎ' => 'تم',
+ 'ﰏ' => 'تى',
+ 'ﰐ' => 'تي',
+ 'ﰑ' => 'ثج',
+ 'ﰒ' => 'ثم',
+ 'ﰓ' => 'ثى',
+ 'ﰔ' => 'ثي',
+ 'ﰕ' => 'جح',
+ 'ﰖ' => 'جم',
+ 'ﰗ' => 'حج',
+ 'ﰘ' => 'حم',
+ 'ﰙ' => 'خج',
+ 'ﰚ' => 'خح',
+ 'ﰛ' => 'خم',
+ 'ﰜ' => 'سج',
+ 'ﰝ' => 'سح',
+ 'ﰞ' => 'سخ',
+ 'ﰟ' => 'سم',
+ 'ﰠ' => 'صح',
+ 'ﰡ' => 'صم',
+ 'ﰢ' => 'ضج',
+ 'ﰣ' => 'ضح',
+ 'ﰤ' => 'ضخ',
+ 'ﰥ' => 'ضم',
+ 'ﰦ' => 'طح',
+ 'ﰧ' => 'طم',
+ 'ﰨ' => 'ظم',
+ 'ﰩ' => 'عج',
+ 'ﰪ' => 'عم',
+ 'ﰫ' => 'غج',
+ 'ﰬ' => 'غم',
+ 'ﰭ' => 'فج',
+ 'ﰮ' => 'فح',
+ 'ﰯ' => 'فخ',
+ 'ﰰ' => 'فم',
+ 'ﰱ' => 'فى',
+ 'ﰲ' => 'في',
+ 'ﰳ' => 'قح',
+ 'ﰴ' => 'قم',
+ 'ﰵ' => 'قى',
+ 'ﰶ' => 'قي',
+ 'ﰷ' => 'كا',
+ 'ﰸ' => 'كج',
+ 'ﰹ' => 'كح',
+ 'ﰺ' => 'كخ',
+ 'ﰻ' => 'كل',
+ 'ﰼ' => 'كم',
+ 'ﰽ' => 'كى',
+ 'ﰾ' => 'كي',
+ 'ﰿ' => 'لج',
+ 'ﱀ' => 'لح',
+ 'ﱁ' => 'لخ',
+ 'ﱂ' => 'لم',
+ 'ﱃ' => 'لى',
+ 'ﱄ' => 'لي',
+ 'ﱅ' => 'مج',
+ 'ﱆ' => 'مح',
+ 'ﱇ' => 'مخ',
+ 'ﱈ' => 'مم',
+ 'ﱉ' => 'مى',
+ 'ﱊ' => 'مي',
+ 'ﱋ' => 'نج',
+ 'ﱌ' => 'نح',
+ 'ﱍ' => 'نخ',
+ 'ﱎ' => 'نم',
+ 'ﱏ' => 'نى',
+ 'ﱐ' => 'ني',
+ 'ﱑ' => 'هج',
+ 'ﱒ' => 'هم',
+ 'ﱓ' => 'هى',
+ 'ﱔ' => 'هي',
+ 'ﱕ' => 'يج',
+ 'ﱖ' => 'يح',
+ 'ﱗ' => 'يخ',
+ 'ﱘ' => 'يم',
+ 'ﱙ' => 'يى',
+ 'ﱚ' => 'يي',
+ 'ﱛ' => 'ذٰ',
+ 'ﱜ' => 'رٰ',
+ 'ﱝ' => 'ىٰ',
+ 'ﱞ' => ' ٌّ',
+ 'ﱟ' => ' ٍّ',
+ 'ﱠ' => ' َّ',
+ 'ﱡ' => ' ُّ',
+ 'ﱢ' => ' ِّ',
+ 'ﱣ' => ' ّٰ',
+ 'ﱤ' => 'ئر',
+ 'ﱥ' => 'ئز',
+ 'ﱦ' => 'ئم',
+ 'ﱧ' => 'ئن',
+ 'ﱨ' => 'ئى',
+ 'ﱩ' => 'ئي',
+ 'ﱪ' => 'بر',
+ 'ﱫ' => 'بز',
+ 'ﱬ' => 'بم',
+ 'ﱭ' => 'بن',
+ 'ﱮ' => 'بى',
+ 'ﱯ' => 'بي',
+ 'ﱰ' => 'تر',
+ 'ﱱ' => 'تز',
+ 'ﱲ' => 'تم',
+ 'ﱳ' => 'تن',
+ 'ﱴ' => 'تى',
+ 'ﱵ' => 'تي',
+ 'ﱶ' => 'ثر',
+ 'ﱷ' => 'ثز',
+ 'ﱸ' => 'ثم',
+ 'ﱹ' => 'ثن',
+ 'ﱺ' => 'ثى',
+ 'ﱻ' => 'ثي',
+ 'ﱼ' => 'فى',
+ 'ﱽ' => 'في',
+ 'ﱾ' => 'قى',
+ 'ﱿ' => 'قي',
+ 'ﲀ' => 'كا',
+ 'ﲁ' => 'كل',
+ 'ﲂ' => 'كم',
+ 'ﲃ' => 'كى',
+ 'ﲄ' => 'كي',
+ 'ﲅ' => 'لم',
+ 'ﲆ' => 'لى',
+ 'ﲇ' => 'لي',
+ 'ﲈ' => 'ما',
+ 'ﲉ' => 'مم',
+ 'ﲊ' => 'نر',
+ 'ﲋ' => 'نز',
+ 'ﲌ' => 'نم',
+ 'ﲍ' => 'نن',
+ 'ﲎ' => 'نى',
+ 'ﲏ' => 'ني',
+ 'ﲐ' => 'ىٰ',
+ 'ﲑ' => 'ير',
+ 'ﲒ' => 'يز',
+ 'ﲓ' => 'يم',
+ 'ﲔ' => 'ين',
+ 'ﲕ' => 'يى',
+ 'ﲖ' => 'يي',
+ 'ﲗ' => 'ئج',
+ 'ﲘ' => 'ئح',
+ 'ﲙ' => 'ئخ',
+ 'ﲚ' => 'ئم',
+ 'ﲛ' => 'ئه',
+ 'ﲜ' => 'بج',
+ 'ﲝ' => 'بح',
+ 'ﲞ' => 'بخ',
+ 'ﲟ' => 'بم',
+ 'ﲠ' => 'به',
+ 'ﲡ' => 'تج',
+ 'ﲢ' => 'تح',
+ 'ﲣ' => 'تخ',
+ 'ﲤ' => 'تم',
+ 'ﲥ' => 'ته',
+ 'ﲦ' => 'ثم',
+ 'ﲧ' => 'جح',
+ 'ﲨ' => 'جم',
+ 'ﲩ' => 'حج',
+ 'ﲪ' => 'حم',
+ 'ﲫ' => 'خج',
+ 'ﲬ' => 'خم',
+ 'ﲭ' => 'سج',
+ 'ﲮ' => 'سح',
+ 'ﲯ' => 'سخ',
+ 'ﲰ' => 'سم',
+ 'ﲱ' => 'صح',
+ 'ﲲ' => 'صخ',
+ 'ﲳ' => 'صم',
+ 'ﲴ' => 'ضج',
+ 'ﲵ' => 'ضح',
+ 'ﲶ' => 'ضخ',
+ 'ﲷ' => 'ضم',
+ 'ﲸ' => 'طح',
+ 'ﲹ' => 'ظم',
+ 'ﲺ' => 'عج',
+ 'ﲻ' => 'عم',
+ 'ﲼ' => 'غج',
+ 'ﲽ' => 'غم',
+ 'ﲾ' => 'فج',
+ 'ﲿ' => 'فح',
+ 'ﳀ' => 'فخ',
+ 'ﳁ' => 'فم',
+ 'ﳂ' => 'قح',
+ 'ﳃ' => 'قم',
+ 'ﳄ' => 'كج',
+ 'ﳅ' => 'كح',
+ 'ﳆ' => 'كخ',
+ 'ﳇ' => 'كل',
+ 'ﳈ' => 'كم',
+ 'ﳉ' => 'لج',
+ 'ﳊ' => 'لح',
+ 'ﳋ' => 'لخ',
+ 'ﳌ' => 'لم',
+ 'ﳍ' => 'له',
+ 'ﳎ' => 'مج',
+ 'ﳏ' => 'مح',
+ 'ﳐ' => 'مخ',
+ 'ﳑ' => 'مم',
+ 'ﳒ' => 'نج',
+ 'ﳓ' => 'نح',
+ 'ﳔ' => 'نخ',
+ 'ﳕ' => 'نم',
+ 'ﳖ' => 'نه',
+ 'ﳗ' => 'هج',
+ 'ﳘ' => 'هم',
+ 'ﳙ' => 'هٰ',
+ 'ﳚ' => 'يج',
+ 'ﳛ' => 'يح',
+ 'ﳜ' => 'يخ',
+ 'ﳝ' => 'يم',
+ 'ﳞ' => 'يه',
+ 'ﳟ' => 'ئم',
+ 'ﳠ' => 'ئه',
+ 'ﳡ' => 'بم',
+ 'ﳢ' => 'به',
+ 'ﳣ' => 'تم',
+ 'ﳤ' => 'ته',
+ 'ﳥ' => 'ثم',
+ 'ﳦ' => 'ثه',
+ 'ﳧ' => 'سم',
+ 'ﳨ' => 'سه',
+ 'ﳩ' => 'شم',
+ 'ﳪ' => 'شه',
+ 'ﳫ' => 'كل',
+ 'ﳬ' => 'كم',
+ 'ﳭ' => 'لم',
+ 'ﳮ' => 'نم',
+ 'ﳯ' => 'نه',
+ 'ﳰ' => 'يم',
+ 'ﳱ' => 'يه',
+ 'ﳲ' => 'ـَّ',
+ 'ﳳ' => 'ـُّ',
+ 'ﳴ' => 'ـِّ',
+ 'ﳵ' => 'طى',
+ 'ﳶ' => 'طي',
+ 'ﳷ' => 'عى',
+ 'ﳸ' => 'عي',
+ 'ﳹ' => 'غى',
+ 'ﳺ' => 'غي',
+ 'ﳻ' => 'سى',
+ 'ﳼ' => 'سي',
+ 'ﳽ' => 'شى',
+ 'ﳾ' => 'شي',
+ 'ﳿ' => 'حى',
+ 'ﴀ' => 'حي',
+ 'ﴁ' => 'جى',
+ 'ﴂ' => 'جي',
+ 'ﴃ' => 'خى',
+ 'ﴄ' => 'خي',
+ 'ﴅ' => 'صى',
+ 'ﴆ' => 'صي',
+ 'ﴇ' => 'ضى',
+ 'ﴈ' => 'ضي',
+ 'ﴉ' => 'شج',
+ 'ﴊ' => 'شح',
+ 'ﴋ' => 'شخ',
+ 'ﴌ' => 'شم',
+ 'ﴍ' => 'شر',
+ 'ﴎ' => 'سر',
+ 'ﴏ' => 'صر',
+ 'ﴐ' => 'ضر',
+ 'ﴑ' => 'طى',
+ 'ﴒ' => 'طي',
+ 'ﴓ' => 'عى',
+ 'ﴔ' => 'عي',
+ 'ﴕ' => 'غى',
+ 'ﴖ' => 'غي',
+ 'ﴗ' => 'سى',
+ 'ﴘ' => 'سي',
+ 'ﴙ' => 'شى',
+ 'ﴚ' => 'شي',
+ 'ﴛ' => 'حى',
+ 'ﴜ' => 'حي',
+ 'ﴝ' => 'جى',
+ 'ﴞ' => 'جي',
+ 'ﴟ' => 'خى',
+ 'ﴠ' => 'خي',
+ 'ﴡ' => 'صى',
+ 'ﴢ' => 'صي',
+ 'ﴣ' => 'ضى',
+ 'ﴤ' => 'ضي',
+ 'ﴥ' => 'شج',
+ 'ﴦ' => 'شح',
+ 'ﴧ' => 'شخ',
+ 'ﴨ' => 'شم',
+ 'ﴩ' => 'شر',
+ 'ﴪ' => 'سر',
+ 'ﴫ' => 'صر',
+ 'ﴬ' => 'ضر',
+ 'ﴭ' => 'شج',
+ 'ﴮ' => 'شح',
+ 'ﴯ' => 'شخ',
+ 'ﴰ' => 'شم',
+ 'ﴱ' => 'سه',
+ 'ﴲ' => 'شه',
+ 'ﴳ' => 'طم',
+ 'ﴴ' => 'سج',
+ 'ﴵ' => 'سح',
+ 'ﴶ' => 'سخ',
+ 'ﴷ' => 'شج',
+ 'ﴸ' => 'شح',
+ 'ﴹ' => 'شخ',
+ 'ﴺ' => 'طم',
+ 'ﴻ' => 'ظم',
+ 'ﴼ' => 'اً',
+ 'ﴽ' => 'اً',
+ 'ﵐ' => 'تجم',
+ 'ﵑ' => 'تحج',
+ 'ﵒ' => 'تحج',
+ 'ﵓ' => 'تحم',
+ 'ﵔ' => 'تخم',
+ 'ﵕ' => 'تمج',
+ 'ﵖ' => 'تمح',
+ 'ﵗ' => 'تمخ',
+ 'ﵘ' => 'جمح',
+ 'ﵙ' => 'جمح',
+ 'ﵚ' => 'حمي',
+ 'ﵛ' => 'حمى',
+ 'ﵜ' => 'سحج',
+ 'ﵝ' => 'سجح',
+ 'ﵞ' => 'سجى',
+ 'ﵟ' => 'سمح',
+ 'ﵠ' => 'سمح',
+ 'ﵡ' => 'سمج',
+ 'ﵢ' => 'سمم',
+ 'ﵣ' => 'سمم',
+ 'ﵤ' => 'صحح',
+ 'ﵥ' => 'صحح',
+ 'ﵦ' => 'صمم',
+ 'ﵧ' => 'شحم',
+ 'ﵨ' => 'شحم',
+ 'ﵩ' => 'شجي',
+ 'ﵪ' => 'شمخ',
+ 'ﵫ' => 'شمخ',
+ 'ﵬ' => 'شمم',
+ 'ﵭ' => 'شمم',
+ 'ﵮ' => 'ضحى',
+ 'ﵯ' => 'ضخم',
+ 'ﵰ' => 'ضخم',
+ 'ﵱ' => 'طمح',
+ 'ﵲ' => 'طمح',
+ 'ﵳ' => 'طمم',
+ 'ﵴ' => 'طمي',
+ 'ﵵ' => 'عجم',
+ 'ﵶ' => 'عمم',
+ 'ﵷ' => 'عمم',
+ 'ﵸ' => 'عمى',
+ 'ﵹ' => 'غمم',
+ 'ﵺ' => 'غمي',
+ 'ﵻ' => 'غمى',
+ 'ﵼ' => 'فخم',
+ 'ﵽ' => 'فخم',
+ 'ﵾ' => 'قمح',
+ 'ﵿ' => 'قمم',
+ 'ﶀ' => 'لحم',
+ 'ﶁ' => 'لحي',
+ 'ﶂ' => 'لحى',
+ 'ﶃ' => 'لجج',
+ 'ﶄ' => 'لجج',
+ 'ﶅ' => 'لخم',
+ 'ﶆ' => 'لخم',
+ 'ﶇ' => 'لمح',
+ 'ﶈ' => 'لمح',
+ 'ﶉ' => 'محج',
+ 'ﶊ' => 'محم',
+ 'ﶋ' => 'محي',
+ 'ﶌ' => 'مجح',
+ 'ﶍ' => 'مجم',
+ 'ﶎ' => 'مخج',
+ 'ﶏ' => 'مخم',
+ 'ﶒ' => 'مجخ',
+ 'ﶓ' => 'همج',
+ 'ﶔ' => 'همم',
+ 'ﶕ' => 'نحم',
+ 'ﶖ' => 'نحى',
+ 'ﶗ' => 'نجم',
+ 'ﶘ' => 'نجم',
+ 'ﶙ' => 'نجى',
+ 'ﶚ' => 'نمي',
+ 'ﶛ' => 'نمى',
+ 'ﶜ' => 'يمم',
+ 'ﶝ' => 'يمم',
+ 'ﶞ' => 'بخي',
+ 'ﶟ' => 'تجي',
+ 'ﶠ' => 'تجى',
+ 'ﶡ' => 'تخي',
+ 'ﶢ' => 'تخى',
+ 'ﶣ' => 'تمي',
+ 'ﶤ' => 'تمى',
+ 'ﶥ' => 'جمي',
+ 'ﶦ' => 'جحى',
+ 'ﶧ' => 'جمى',
+ 'ﶨ' => 'سخى',
+ 'ﶩ' => 'صحي',
+ 'ﶪ' => 'شحي',
+ 'ﶫ' => 'ضحي',
+ 'ﶬ' => 'لجي',
+ 'ﶭ' => 'لمي',
+ 'ﶮ' => 'يحي',
+ 'ﶯ' => 'يجي',
+ 'ﶰ' => 'يمي',
+ 'ﶱ' => 'ممي',
+ 'ﶲ' => 'قمي',
+ 'ﶳ' => 'نحي',
+ 'ﶴ' => 'قمح',
+ 'ﶵ' => 'لحم',
+ 'ﶶ' => 'عمي',
+ 'ﶷ' => 'كمي',
+ 'ﶸ' => 'نجح',
+ 'ﶹ' => 'مخي',
+ 'ﶺ' => 'لجم',
+ 'ﶻ' => 'كمم',
+ 'ﶼ' => 'لجم',
+ 'ﶽ' => 'نجح',
+ 'ﶾ' => 'جحي',
+ 'ﶿ' => 'حجي',
+ 'ﷀ' => 'مجي',
+ 'ﷁ' => 'فمي',
+ 'ﷂ' => 'بحي',
+ 'ﷃ' => 'كمم',
+ 'ﷄ' => 'عجم',
+ 'ﷅ' => 'صمم',
+ 'ﷆ' => 'سخي',
+ 'ﷇ' => 'نجي',
+ 'ﷰ' => 'صلے',
+ 'ﷱ' => 'قلے',
+ 'ﷲ' => 'الله',
+ 'ﷳ' => 'اكبر',
+ 'ﷴ' => 'محمد',
+ 'ﷵ' => 'صلعم',
+ 'ﷶ' => 'رسول',
+ 'ﷷ' => 'عليه',
+ 'ﷸ' => 'وسلم',
+ 'ﷹ' => 'صلى',
+ 'ﷺ' => 'صلى الله عليه وسلم',
+ 'ﷻ' => 'جل جلاله',
+ '﷼' => 'ریال',
+ '︐' => ',',
+ '︑' => '、',
+ '︒' => '。',
+ '︓' => ':',
+ '︔' => ';',
+ '︕' => '!',
+ '︖' => '?',
+ '︗' => '〖',
+ '︘' => '〗',
+ '︙' => '...',
+ '︰' => '..',
+ '︱' => '—',
+ '︲' => '–',
+ '︳' => '_',
+ '︴' => '_',
+ '︵' => '(',
+ '︶' => ')',
+ '︷' => '{',
+ '︸' => '}',
+ '︹' => '〔',
+ '︺' => '〕',
+ '︻' => '【',
+ '︼' => '】',
+ '︽' => '《',
+ '︾' => '》',
+ '︿' => '〈',
+ '﹀' => '〉',
+ '﹁' => '「',
+ '﹂' => '」',
+ '﹃' => '『',
+ '﹄' => '』',
+ '﹇' => '[',
+ '﹈' => ']',
+ '﹉' => ' ̅',
+ '﹊' => ' ̅',
+ '﹋' => ' ̅',
+ '﹌' => ' ̅',
+ '﹍' => '_',
+ '﹎' => '_',
+ '﹏' => '_',
+ '﹐' => ',',
+ '﹑' => '、',
+ '﹒' => '.',
+ '﹔' => ';',
+ '﹕' => ':',
+ '﹖' => '?',
+ '﹗' => '!',
+ '﹘' => '—',
+ '﹙' => '(',
+ '﹚' => ')',
+ '﹛' => '{',
+ '﹜' => '}',
+ '﹝' => '〔',
+ '﹞' => '〕',
+ '﹟' => '#',
+ '﹠' => '&',
+ '﹡' => '*',
+ '﹢' => '+',
+ '﹣' => '-',
+ '﹤' => '<',
+ '﹥' => '>',
+ '﹦' => '=',
+ '﹨' => '\\',
+ '﹩' => '$',
+ '﹪' => '%',
+ '﹫' => '@',
+ 'ﹰ' => ' ً',
+ 'ﹱ' => 'ـً',
+ 'ﹲ' => ' ٌ',
+ 'ﹴ' => ' ٍ',
+ 'ﹶ' => ' َ',
+ 'ﹷ' => 'ـَ',
+ 'ﹸ' => ' ُ',
+ 'ﹹ' => 'ـُ',
+ 'ﹺ' => ' ِ',
+ 'ﹻ' => 'ـِ',
+ 'ﹼ' => ' ّ',
+ 'ﹽ' => 'ـّ',
+ 'ﹾ' => ' ْ',
+ 'ﹿ' => 'ـْ',
+ 'ﺀ' => 'ء',
+ 'ﺁ' => 'آ',
+ 'ﺂ' => 'آ',
+ 'ﺃ' => 'أ',
+ 'ﺄ' => 'أ',
+ 'ﺅ' => 'ؤ',
+ 'ﺆ' => 'ؤ',
+ 'ﺇ' => 'إ',
+ 'ﺈ' => 'إ',
+ 'ﺉ' => 'ئ',
+ 'ﺊ' => 'ئ',
+ 'ﺋ' => 'ئ',
+ 'ﺌ' => 'ئ',
+ 'ﺍ' => 'ا',
+ 'ﺎ' => 'ا',
+ 'ﺏ' => 'ب',
+ 'ﺐ' => 'ب',
+ 'ﺑ' => 'ب',
+ 'ﺒ' => 'ب',
+ 'ﺓ' => 'ة',
+ 'ﺔ' => 'ة',
+ 'ﺕ' => 'ت',
+ 'ﺖ' => 'ت',
+ 'ﺗ' => 'ت',
+ 'ﺘ' => 'ت',
+ 'ﺙ' => 'ث',
+ 'ﺚ' => 'ث',
+ 'ﺛ' => 'ث',
+ 'ﺜ' => 'ث',
+ 'ﺝ' => 'ج',
+ 'ﺞ' => 'ج',
+ 'ﺟ' => 'ج',
+ 'ﺠ' => 'ج',
+ 'ﺡ' => 'ح',
+ 'ﺢ' => 'ح',
+ 'ﺣ' => 'ح',
+ 'ﺤ' => 'ح',
+ 'ﺥ' => 'خ',
+ 'ﺦ' => 'خ',
+ 'ﺧ' => 'خ',
+ 'ﺨ' => 'خ',
+ 'ﺩ' => 'د',
+ 'ﺪ' => 'د',
+ 'ﺫ' => 'ذ',
+ 'ﺬ' => 'ذ',
+ 'ﺭ' => 'ر',
+ 'ﺮ' => 'ر',
+ 'ﺯ' => 'ز',
+ 'ﺰ' => 'ز',
+ 'ﺱ' => 'س',
+ 'ﺲ' => 'س',
+ 'ﺳ' => 'س',
+ 'ﺴ' => 'س',
+ 'ﺵ' => 'ش',
+ 'ﺶ' => 'ش',
+ 'ﺷ' => 'ش',
+ 'ﺸ' => 'ش',
+ 'ﺹ' => 'ص',
+ 'ﺺ' => 'ص',
+ 'ﺻ' => 'ص',
+ 'ﺼ' => 'ص',
+ 'ﺽ' => 'ض',
+ 'ﺾ' => 'ض',
+ 'ﺿ' => 'ض',
+ 'ﻀ' => 'ض',
+ 'ﻁ' => 'ط',
+ 'ﻂ' => 'ط',
+ 'ﻃ' => 'ط',
+ 'ﻄ' => 'ط',
+ 'ﻅ' => 'ظ',
+ 'ﻆ' => 'ظ',
+ 'ﻇ' => 'ظ',
+ 'ﻈ' => 'ظ',
+ 'ﻉ' => 'ع',
+ 'ﻊ' => 'ع',
+ 'ﻋ' => 'ع',
+ 'ﻌ' => 'ع',
+ 'ﻍ' => 'غ',
+ 'ﻎ' => 'غ',
+ 'ﻏ' => 'غ',
+ 'ﻐ' => 'غ',
+ 'ﻑ' => 'ف',
+ 'ﻒ' => 'ف',
+ 'ﻓ' => 'ف',
+ 'ﻔ' => 'ف',
+ 'ﻕ' => 'ق',
+ 'ﻖ' => 'ق',
+ 'ﻗ' => 'ق',
+ 'ﻘ' => 'ق',
+ 'ﻙ' => 'ك',
+ 'ﻚ' => 'ك',
+ 'ﻛ' => 'ك',
+ 'ﻜ' => 'ك',
+ 'ﻝ' => 'ل',
+ 'ﻞ' => 'ل',
+ 'ﻟ' => 'ل',
+ 'ﻠ' => 'ل',
+ 'ﻡ' => 'م',
+ 'ﻢ' => 'م',
+ 'ﻣ' => 'م',
+ 'ﻤ' => 'م',
+ 'ﻥ' => 'ن',
+ 'ﻦ' => 'ن',
+ 'ﻧ' => 'ن',
+ 'ﻨ' => 'ن',
+ 'ﻩ' => 'ه',
+ 'ﻪ' => 'ه',
+ 'ﻫ' => 'ه',
+ 'ﻬ' => 'ه',
+ 'ﻭ' => 'و',
+ 'ﻮ' => 'و',
+ 'ﻯ' => 'ى',
+ 'ﻰ' => 'ى',
+ 'ﻱ' => 'ي',
+ 'ﻲ' => 'ي',
+ 'ﻳ' => 'ي',
+ 'ﻴ' => 'ي',
+ 'ﻵ' => 'لآ',
+ 'ﻶ' => 'لآ',
+ 'ﻷ' => 'لأ',
+ 'ﻸ' => 'لأ',
+ 'ﻹ' => 'لإ',
+ 'ﻺ' => 'لإ',
+ 'ﻻ' => 'لا',
+ 'ﻼ' => 'لا',
+ '!' => '!',
+ '"' => '"',
+ '#' => '#',
+ '$' => '$',
+ '%' => '%',
+ '&' => '&',
+ ''' => '\'',
+ '(' => '(',
+ ')' => ')',
+ '*' => '*',
+ '+' => '+',
+ ',' => ',',
+ '-' => '-',
+ '.' => '.',
+ '/' => '/',
+ '0' => '0',
+ '1' => '1',
+ '2' => '2',
+ '3' => '3',
+ '4' => '4',
+ '5' => '5',
+ '6' => '6',
+ '7' => '7',
+ '8' => '8',
+ '9' => '9',
+ ':' => ':',
+ ';' => ';',
+ '<' => '<',
+ '=' => '=',
+ '>' => '>',
+ '?' => '?',
+ '@' => '@',
+ 'A' => 'A',
+ 'B' => 'B',
+ 'C' => 'C',
+ 'D' => 'D',
+ 'E' => 'E',
+ 'F' => 'F',
+ 'G' => 'G',
+ 'H' => 'H',
+ 'I' => 'I',
+ 'J' => 'J',
+ 'K' => 'K',
+ 'L' => 'L',
+ 'M' => 'M',
+ 'N' => 'N',
+ 'O' => 'O',
+ 'P' => 'P',
+ 'Q' => 'Q',
+ 'R' => 'R',
+ 'S' => 'S',
+ 'T' => 'T',
+ 'U' => 'U',
+ 'V' => 'V',
+ 'W' => 'W',
+ 'X' => 'X',
+ 'Y' => 'Y',
+ 'Z' => 'Z',
+ '[' => '[',
+ '\' => '\\',
+ ']' => ']',
+ '^' => '^',
+ '_' => '_',
+ '`' => '`',
+ 'a' => 'a',
+ 'b' => 'b',
+ 'c' => 'c',
+ 'd' => 'd',
+ 'e' => 'e',
+ 'f' => 'f',
+ 'g' => 'g',
+ 'h' => 'h',
+ 'i' => 'i',
+ 'j' => 'j',
+ 'k' => 'k',
+ 'l' => 'l',
+ 'm' => 'm',
+ 'n' => 'n',
+ 'o' => 'o',
+ 'p' => 'p',
+ 'q' => 'q',
+ 'r' => 'r',
+ 's' => 's',
+ 't' => 't',
+ 'u' => 'u',
+ 'v' => 'v',
+ 'w' => 'w',
+ 'x' => 'x',
+ 'y' => 'y',
+ 'z' => 'z',
+ '{' => '{',
+ '|' => '|',
+ '}' => '}',
+ '~' => '~',
+ '⦅' => '⦅',
+ '⦆' => '⦆',
+ '。' => '。',
+ '「' => '「',
+ '」' => '」',
+ '、' => '、',
+ '・' => '・',
+ 'ヲ' => 'ヲ',
+ 'ァ' => 'ァ',
+ 'ィ' => 'ィ',
+ 'ゥ' => 'ゥ',
+ 'ェ' => 'ェ',
+ 'ォ' => 'ォ',
+ 'ャ' => 'ャ',
+ 'ュ' => 'ュ',
+ 'ョ' => 'ョ',
+ 'ッ' => 'ッ',
+ 'ー' => 'ー',
+ 'ア' => 'ア',
+ 'イ' => 'イ',
+ 'ウ' => 'ウ',
+ 'エ' => 'エ',
+ 'オ' => 'オ',
+ 'カ' => 'カ',
+ 'キ' => 'キ',
+ 'ク' => 'ク',
+ 'ケ' => 'ケ',
+ 'コ' => 'コ',
+ 'サ' => 'サ',
+ 'シ' => 'シ',
+ 'ス' => 'ス',
+ 'セ' => 'セ',
+ 'ソ' => 'ソ',
+ 'タ' => 'タ',
+ 'チ' => 'チ',
+ 'ツ' => 'ツ',
+ 'テ' => 'テ',
+ 'ト' => 'ト',
+ 'ナ' => 'ナ',
+ 'ニ' => 'ニ',
+ 'ヌ' => 'ヌ',
+ 'ネ' => 'ネ',
+ 'ノ' => 'ノ',
+ 'ハ' => 'ハ',
+ 'ヒ' => 'ヒ',
+ 'フ' => 'フ',
+ 'ヘ' => 'ヘ',
+ 'ホ' => 'ホ',
+ 'マ' => 'マ',
+ 'ミ' => 'ミ',
+ 'ム' => 'ム',
+ 'メ' => 'メ',
+ 'モ' => 'モ',
+ 'ヤ' => 'ヤ',
+ 'ユ' => 'ユ',
+ 'ヨ' => 'ヨ',
+ 'ラ' => 'ラ',
+ 'リ' => 'リ',
+ 'ル' => 'ル',
+ 'レ' => 'レ',
+ 'ロ' => 'ロ',
+ 'ワ' => 'ワ',
+ 'ン' => 'ン',
+ '゙' => '゙',
+ '゚' => '゚',
+ 'ᅠ' => 'ᅠ',
+ 'ᄀ' => 'ᄀ',
+ 'ᄁ' => 'ᄁ',
+ 'ᆪ' => 'ᆪ',
+ 'ᄂ' => 'ᄂ',
+ 'ᆬ' => 'ᆬ',
+ 'ᆭ' => 'ᆭ',
+ 'ᄃ' => 'ᄃ',
+ 'ᄄ' => 'ᄄ',
+ 'ᄅ' => 'ᄅ',
+ 'ᆰ' => 'ᆰ',
+ 'ᆱ' => 'ᆱ',
+ 'ᆲ' => 'ᆲ',
+ 'ᆳ' => 'ᆳ',
+ 'ᆴ' => 'ᆴ',
+ 'ᆵ' => 'ᆵ',
+ 'ᄚ' => 'ᄚ',
+ 'ᄆ' => 'ᄆ',
+ 'ᄇ' => 'ᄇ',
+ 'ᄈ' => 'ᄈ',
+ 'ᄡ' => 'ᄡ',
+ 'ᄉ' => 'ᄉ',
+ 'ᄊ' => 'ᄊ',
+ 'ᄋ' => 'ᄋ',
+ 'ᄌ' => 'ᄌ',
+ 'ᄍ' => 'ᄍ',
+ 'ᄎ' => 'ᄎ',
+ 'ᄏ' => 'ᄏ',
+ 'ᄐ' => 'ᄐ',
+ 'ᄑ' => 'ᄑ',
+ 'ᄒ' => 'ᄒ',
+ 'ᅡ' => 'ᅡ',
+ 'ᅢ' => 'ᅢ',
+ 'ᅣ' => 'ᅣ',
+ 'ᅤ' => 'ᅤ',
+ 'ᅥ' => 'ᅥ',
+ 'ᅦ' => 'ᅦ',
+ 'ᅧ' => 'ᅧ',
+ 'ᅨ' => 'ᅨ',
+ 'ᅩ' => 'ᅩ',
+ 'ᅪ' => 'ᅪ',
+ 'ᅫ' => 'ᅫ',
+ 'ᅬ' => 'ᅬ',
+ 'ᅭ' => 'ᅭ',
+ 'ᅮ' => 'ᅮ',
+ 'ᅯ' => 'ᅯ',
+ 'ᅰ' => 'ᅰ',
+ 'ᅱ' => 'ᅱ',
+ 'ᅲ' => 'ᅲ',
+ 'ᅳ' => 'ᅳ',
+ 'ᅴ' => 'ᅴ',
+ 'ᅵ' => 'ᅵ',
+ '¢' => '¢',
+ '£' => '£',
+ '¬' => '¬',
+ ' ̄' => ' ̄',
+ '¦' => '¦',
+ '¥' => '¥',
+ '₩' => '₩',
+ '│' => '│',
+ '←' => '←',
+ '↑' => '↑',
+ '→' => '→',
+ '↓' => '↓',
+ '■' => '■',
+ '○' => '○',
+ '𝐀' => 'A',
+ '𝐁' => 'B',
+ '𝐂' => 'C',
+ '𝐃' => 'D',
+ '𝐄' => 'E',
+ '𝐅' => 'F',
+ '𝐆' => 'G',
+ '𝐇' => 'H',
+ '𝐈' => 'I',
+ '𝐉' => 'J',
+ '𝐊' => 'K',
+ '𝐋' => 'L',
+ '𝐌' => 'M',
+ '𝐍' => 'N',
+ '𝐎' => 'O',
+ '𝐏' => 'P',
+ '𝐐' => 'Q',
+ '𝐑' => 'R',
+ '𝐒' => 'S',
+ '𝐓' => 'T',
+ '𝐔' => 'U',
+ '𝐕' => 'V',
+ '𝐖' => 'W',
+ '𝐗' => 'X',
+ '𝐘' => 'Y',
+ '𝐙' => 'Z',
+ '𝐚' => 'a',
+ '𝐛' => 'b',
+ '𝐜' => 'c',
+ '𝐝' => 'd',
+ '𝐞' => 'e',
+ '𝐟' => 'f',
+ '𝐠' => 'g',
+ '𝐡' => 'h',
+ '𝐢' => 'i',
+ '𝐣' => 'j',
+ '𝐤' => 'k',
+ '𝐥' => 'l',
+ '𝐦' => 'm',
+ '𝐧' => 'n',
+ '𝐨' => 'o',
+ '𝐩' => 'p',
+ '𝐪' => 'q',
+ '𝐫' => 'r',
+ '𝐬' => 's',
+ '𝐭' => 't',
+ '𝐮' => 'u',
+ '𝐯' => 'v',
+ '𝐰' => 'w',
+ '𝐱' => 'x',
+ '𝐲' => 'y',
+ '𝐳' => 'z',
+ '𝐴' => 'A',
+ '𝐵' => 'B',
+ '𝐶' => 'C',
+ '𝐷' => 'D',
+ '𝐸' => 'E',
+ '𝐹' => 'F',
+ '𝐺' => 'G',
+ '𝐻' => 'H',
+ '𝐼' => 'I',
+ '𝐽' => 'J',
+ '𝐾' => 'K',
+ '𝐿' => 'L',
+ '𝑀' => 'M',
+ '𝑁' => 'N',
+ '𝑂' => 'O',
+ '𝑃' => 'P',
+ '𝑄' => 'Q',
+ '𝑅' => 'R',
+ '𝑆' => 'S',
+ '𝑇' => 'T',
+ '𝑈' => 'U',
+ '𝑉' => 'V',
+ '𝑊' => 'W',
+ '𝑋' => 'X',
+ '𝑌' => 'Y',
+ '𝑍' => 'Z',
+ '𝑎' => 'a',
+ '𝑏' => 'b',
+ '𝑐' => 'c',
+ '𝑑' => 'd',
+ '𝑒' => 'e',
+ '𝑓' => 'f',
+ '𝑔' => 'g',
+ '𝑖' => 'i',
+ '𝑗' => 'j',
+ '𝑘' => 'k',
+ '𝑙' => 'l',
+ '𝑚' => 'm',
+ '𝑛' => 'n',
+ '𝑜' => 'o',
+ '𝑝' => 'p',
+ '𝑞' => 'q',
+ '𝑟' => 'r',
+ '𝑠' => 's',
+ '𝑡' => 't',
+ '𝑢' => 'u',
+ '𝑣' => 'v',
+ '𝑤' => 'w',
+ '𝑥' => 'x',
+ '𝑦' => 'y',
+ '𝑧' => 'z',
+ '𝑨' => 'A',
+ '𝑩' => 'B',
+ '𝑪' => 'C',
+ '𝑫' => 'D',
+ '𝑬' => 'E',
+ '𝑭' => 'F',
+ '𝑮' => 'G',
+ '𝑯' => 'H',
+ '𝑰' => 'I',
+ '𝑱' => 'J',
+ '𝑲' => 'K',
+ '𝑳' => 'L',
+ '𝑴' => 'M',
+ '𝑵' => 'N',
+ '𝑶' => 'O',
+ '𝑷' => 'P',
+ '𝑸' => 'Q',
+ '𝑹' => 'R',
+ '𝑺' => 'S',
+ '𝑻' => 'T',
+ '𝑼' => 'U',
+ '𝑽' => 'V',
+ '𝑾' => 'W',
+ '𝑿' => 'X',
+ '𝒀' => 'Y',
+ '𝒁' => 'Z',
+ '𝒂' => 'a',
+ '𝒃' => 'b',
+ '𝒄' => 'c',
+ '𝒅' => 'd',
+ '𝒆' => 'e',
+ '𝒇' => 'f',
+ '𝒈' => 'g',
+ '𝒉' => 'h',
+ '𝒊' => 'i',
+ '𝒋' => 'j',
+ '𝒌' => 'k',
+ '𝒍' => 'l',
+ '𝒎' => 'm',
+ '𝒏' => 'n',
+ '𝒐' => 'o',
+ '𝒑' => 'p',
+ '𝒒' => 'q',
+ '𝒓' => 'r',
+ '𝒔' => 's',
+ '𝒕' => 't',
+ '𝒖' => 'u',
+ '𝒗' => 'v',
+ '𝒘' => 'w',
+ '𝒙' => 'x',
+ '𝒚' => 'y',
+ '𝒛' => 'z',
+ '𝒜' => 'A',
+ '𝒞' => 'C',
+ '𝒟' => 'D',
+ '𝒢' => 'G',
+ '𝒥' => 'J',
+ '𝒦' => 'K',
+ '𝒩' => 'N',
+ '𝒪' => 'O',
+ '𝒫' => 'P',
+ '𝒬' => 'Q',
+ '𝒮' => 'S',
+ '𝒯' => 'T',
+ '𝒰' => 'U',
+ '𝒱' => 'V',
+ '𝒲' => 'W',
+ '𝒳' => 'X',
+ '𝒴' => 'Y',
+ '𝒵' => 'Z',
+ '𝒶' => 'a',
+ '𝒷' => 'b',
+ '𝒸' => 'c',
+ '𝒹' => 'd',
+ '𝒻' => 'f',
+ '𝒽' => 'h',
+ '𝒾' => 'i',
+ '𝒿' => 'j',
+ '𝓀' => 'k',
+ '𝓁' => 'l',
+ '𝓂' => 'm',
+ '𝓃' => 'n',
+ '𝓅' => 'p',
+ '𝓆' => 'q',
+ '𝓇' => 'r',
+ '𝓈' => 's',
+ '𝓉' => 't',
+ '𝓊' => 'u',
+ '𝓋' => 'v',
+ '𝓌' => 'w',
+ '𝓍' => 'x',
+ '𝓎' => 'y',
+ '𝓏' => 'z',
+ '𝓐' => 'A',
+ '𝓑' => 'B',
+ '𝓒' => 'C',
+ '𝓓' => 'D',
+ '𝓔' => 'E',
+ '𝓕' => 'F',
+ '𝓖' => 'G',
+ '𝓗' => 'H',
+ '𝓘' => 'I',
+ '𝓙' => 'J',
+ '𝓚' => 'K',
+ '𝓛' => 'L',
+ '𝓜' => 'M',
+ '𝓝' => 'N',
+ '𝓞' => 'O',
+ '𝓟' => 'P',
+ '𝓠' => 'Q',
+ '𝓡' => 'R',
+ '𝓢' => 'S',
+ '𝓣' => 'T',
+ '𝓤' => 'U',
+ '𝓥' => 'V',
+ '𝓦' => 'W',
+ '𝓧' => 'X',
+ '𝓨' => 'Y',
+ '𝓩' => 'Z',
+ '𝓪' => 'a',
+ '𝓫' => 'b',
+ '𝓬' => 'c',
+ '𝓭' => 'd',
+ '𝓮' => 'e',
+ '𝓯' => 'f',
+ '𝓰' => 'g',
+ '𝓱' => 'h',
+ '𝓲' => 'i',
+ '𝓳' => 'j',
+ '𝓴' => 'k',
+ '𝓵' => 'l',
+ '𝓶' => 'm',
+ '𝓷' => 'n',
+ '𝓸' => 'o',
+ '𝓹' => 'p',
+ '𝓺' => 'q',
+ '𝓻' => 'r',
+ '𝓼' => 's',
+ '𝓽' => 't',
+ '𝓾' => 'u',
+ '𝓿' => 'v',
+ '𝔀' => 'w',
+ '𝔁' => 'x',
+ '𝔂' => 'y',
+ '𝔃' => 'z',
+ '𝔄' => 'A',
+ '𝔅' => 'B',
+ '𝔇' => 'D',
+ '𝔈' => 'E',
+ '𝔉' => 'F',
+ '𝔊' => 'G',
+ '𝔍' => 'J',
+ '𝔎' => 'K',
+ '𝔏' => 'L',
+ '𝔐' => 'M',
+ '𝔑' => 'N',
+ '𝔒' => 'O',
+ '𝔓' => 'P',
+ '𝔔' => 'Q',
+ '𝔖' => 'S',
+ '𝔗' => 'T',
+ '𝔘' => 'U',
+ '𝔙' => 'V',
+ '𝔚' => 'W',
+ '𝔛' => 'X',
+ '𝔜' => 'Y',
+ '𝔞' => 'a',
+ '𝔟' => 'b',
+ '𝔠' => 'c',
+ '𝔡' => 'd',
+ '𝔢' => 'e',
+ '𝔣' => 'f',
+ '𝔤' => 'g',
+ '𝔥' => 'h',
+ '𝔦' => 'i',
+ '𝔧' => 'j',
+ '𝔨' => 'k',
+ '𝔩' => 'l',
+ '𝔪' => 'm',
+ '𝔫' => 'n',
+ '𝔬' => 'o',
+ '𝔭' => 'p',
+ '𝔮' => 'q',
+ '𝔯' => 'r',
+ '𝔰' => 's',
+ '𝔱' => 't',
+ '𝔲' => 'u',
+ '𝔳' => 'v',
+ '𝔴' => 'w',
+ '𝔵' => 'x',
+ '𝔶' => 'y',
+ '𝔷' => 'z',
+ '𝔸' => 'A',
+ '𝔹' => 'B',
+ '𝔻' => 'D',
+ '𝔼' => 'E',
+ '𝔽' => 'F',
+ '𝔾' => 'G',
+ '𝕀' => 'I',
+ '𝕁' => 'J',
+ '𝕂' => 'K',
+ '𝕃' => 'L',
+ '𝕄' => 'M',
+ '𝕆' => 'O',
+ '𝕊' => 'S',
+ '𝕋' => 'T',
+ '𝕌' => 'U',
+ '𝕍' => 'V',
+ '𝕎' => 'W',
+ '𝕏' => 'X',
+ '𝕐' => 'Y',
+ '𝕒' => 'a',
+ '𝕓' => 'b',
+ '𝕔' => 'c',
+ '𝕕' => 'd',
+ '𝕖' => 'e',
+ '𝕗' => 'f',
+ '𝕘' => 'g',
+ '𝕙' => 'h',
+ '𝕚' => 'i',
+ '𝕛' => 'j',
+ '𝕜' => 'k',
+ '𝕝' => 'l',
+ '𝕞' => 'm',
+ '𝕟' => 'n',
+ '𝕠' => 'o',
+ '𝕡' => 'p',
+ '𝕢' => 'q',
+ '𝕣' => 'r',
+ '𝕤' => 's',
+ '𝕥' => 't',
+ '𝕦' => 'u',
+ '𝕧' => 'v',
+ '𝕨' => 'w',
+ '𝕩' => 'x',
+ '𝕪' => 'y',
+ '𝕫' => 'z',
+ '𝕬' => 'A',
+ '𝕭' => 'B',
+ '𝕮' => 'C',
+ '𝕯' => 'D',
+ '𝕰' => 'E',
+ '𝕱' => 'F',
+ '𝕲' => 'G',
+ '𝕳' => 'H',
+ '𝕴' => 'I',
+ '𝕵' => 'J',
+ '𝕶' => 'K',
+ '𝕷' => 'L',
+ '𝕸' => 'M',
+ '𝕹' => 'N',
+ '𝕺' => 'O',
+ '𝕻' => 'P',
+ '𝕼' => 'Q',
+ '𝕽' => 'R',
+ '𝕾' => 'S',
+ '𝕿' => 'T',
+ '𝖀' => 'U',
+ '𝖁' => 'V',
+ '𝖂' => 'W',
+ '𝖃' => 'X',
+ '𝖄' => 'Y',
+ '𝖅' => 'Z',
+ '𝖆' => 'a',
+ '𝖇' => 'b',
+ '𝖈' => 'c',
+ '𝖉' => 'd',
+ '𝖊' => 'e',
+ '𝖋' => 'f',
+ '𝖌' => 'g',
+ '𝖍' => 'h',
+ '𝖎' => 'i',
+ '𝖏' => 'j',
+ '𝖐' => 'k',
+ '𝖑' => 'l',
+ '𝖒' => 'm',
+ '𝖓' => 'n',
+ '𝖔' => 'o',
+ '𝖕' => 'p',
+ '𝖖' => 'q',
+ '𝖗' => 'r',
+ '𝖘' => 's',
+ '𝖙' => 't',
+ '𝖚' => 'u',
+ '𝖛' => 'v',
+ '𝖜' => 'w',
+ '𝖝' => 'x',
+ '𝖞' => 'y',
+ '𝖟' => 'z',
+ '𝖠' => 'A',
+ '𝖡' => 'B',
+ '𝖢' => 'C',
+ '𝖣' => 'D',
+ '𝖤' => 'E',
+ '𝖥' => 'F',
+ '𝖦' => 'G',
+ '𝖧' => 'H',
+ '𝖨' => 'I',
+ '𝖩' => 'J',
+ '𝖪' => 'K',
+ '𝖫' => 'L',
+ '𝖬' => 'M',
+ '𝖭' => 'N',
+ '𝖮' => 'O',
+ '𝖯' => 'P',
+ '𝖰' => 'Q',
+ '𝖱' => 'R',
+ '𝖲' => 'S',
+ '𝖳' => 'T',
+ '𝖴' => 'U',
+ '𝖵' => 'V',
+ '𝖶' => 'W',
+ '𝖷' => 'X',
+ '𝖸' => 'Y',
+ '𝖹' => 'Z',
+ '𝖺' => 'a',
+ '𝖻' => 'b',
+ '𝖼' => 'c',
+ '𝖽' => 'd',
+ '𝖾' => 'e',
+ '𝖿' => 'f',
+ '𝗀' => 'g',
+ '𝗁' => 'h',
+ '𝗂' => 'i',
+ '𝗃' => 'j',
+ '𝗄' => 'k',
+ '𝗅' => 'l',
+ '𝗆' => 'm',
+ '𝗇' => 'n',
+ '𝗈' => 'o',
+ '𝗉' => 'p',
+ '𝗊' => 'q',
+ '𝗋' => 'r',
+ '𝗌' => 's',
+ '𝗍' => 't',
+ '𝗎' => 'u',
+ '𝗏' => 'v',
+ '𝗐' => 'w',
+ '𝗑' => 'x',
+ '𝗒' => 'y',
+ '𝗓' => 'z',
+ '𝗔' => 'A',
+ '𝗕' => 'B',
+ '𝗖' => 'C',
+ '𝗗' => 'D',
+ '𝗘' => 'E',
+ '𝗙' => 'F',
+ '𝗚' => 'G',
+ '𝗛' => 'H',
+ '𝗜' => 'I',
+ '𝗝' => 'J',
+ '𝗞' => 'K',
+ '𝗟' => 'L',
+ '𝗠' => 'M',
+ '𝗡' => 'N',
+ '𝗢' => 'O',
+ '𝗣' => 'P',
+ '𝗤' => 'Q',
+ '𝗥' => 'R',
+ '𝗦' => 'S',
+ '𝗧' => 'T',
+ '𝗨' => 'U',
+ '𝗩' => 'V',
+ '𝗪' => 'W',
+ '𝗫' => 'X',
+ '𝗬' => 'Y',
+ '𝗭' => 'Z',
+ '𝗮' => 'a',
+ '𝗯' => 'b',
+ '𝗰' => 'c',
+ '𝗱' => 'd',
+ '𝗲' => 'e',
+ '𝗳' => 'f',
+ '𝗴' => 'g',
+ '𝗵' => 'h',
+ '𝗶' => 'i',
+ '𝗷' => 'j',
+ '𝗸' => 'k',
+ '𝗹' => 'l',
+ '𝗺' => 'm',
+ '𝗻' => 'n',
+ '𝗼' => 'o',
+ '𝗽' => 'p',
+ '𝗾' => 'q',
+ '𝗿' => 'r',
+ '𝘀' => 's',
+ '𝘁' => 't',
+ '𝘂' => 'u',
+ '𝘃' => 'v',
+ '𝘄' => 'w',
+ '𝘅' => 'x',
+ '𝘆' => 'y',
+ '𝘇' => 'z',
+ '𝘈' => 'A',
+ '𝘉' => 'B',
+ '𝘊' => 'C',
+ '𝘋' => 'D',
+ '𝘌' => 'E',
+ '𝘍' => 'F',
+ '𝘎' => 'G',
+ '𝘏' => 'H',
+ '𝘐' => 'I',
+ '𝘑' => 'J',
+ '𝘒' => 'K',
+ '𝘓' => 'L',
+ '𝘔' => 'M',
+ '𝘕' => 'N',
+ '𝘖' => 'O',
+ '𝘗' => 'P',
+ '𝘘' => 'Q',
+ '𝘙' => 'R',
+ '𝘚' => 'S',
+ '𝘛' => 'T',
+ '𝘜' => 'U',
+ '𝘝' => 'V',
+ '𝘞' => 'W',
+ '𝘟' => 'X',
+ '𝘠' => 'Y',
+ '𝘡' => 'Z',
+ '𝘢' => 'a',
+ '𝘣' => 'b',
+ '𝘤' => 'c',
+ '𝘥' => 'd',
+ '𝘦' => 'e',
+ '𝘧' => 'f',
+ '𝘨' => 'g',
+ '𝘩' => 'h',
+ '𝘪' => 'i',
+ '𝘫' => 'j',
+ '𝘬' => 'k',
+ '𝘭' => 'l',
+ '𝘮' => 'm',
+ '𝘯' => 'n',
+ '𝘰' => 'o',
+ '𝘱' => 'p',
+ '𝘲' => 'q',
+ '𝘳' => 'r',
+ '𝘴' => 's',
+ '𝘵' => 't',
+ '𝘶' => 'u',
+ '𝘷' => 'v',
+ '𝘸' => 'w',
+ '𝘹' => 'x',
+ '𝘺' => 'y',
+ '𝘻' => 'z',
+ '𝘼' => 'A',
+ '𝘽' => 'B',
+ '𝘾' => 'C',
+ '𝘿' => 'D',
+ '𝙀' => 'E',
+ '𝙁' => 'F',
+ '𝙂' => 'G',
+ '𝙃' => 'H',
+ '𝙄' => 'I',
+ '𝙅' => 'J',
+ '𝙆' => 'K',
+ '𝙇' => 'L',
+ '𝙈' => 'M',
+ '𝙉' => 'N',
+ '𝙊' => 'O',
+ '𝙋' => 'P',
+ '𝙌' => 'Q',
+ '𝙍' => 'R',
+ '𝙎' => 'S',
+ '𝙏' => 'T',
+ '𝙐' => 'U',
+ '𝙑' => 'V',
+ '𝙒' => 'W',
+ '𝙓' => 'X',
+ '𝙔' => 'Y',
+ '𝙕' => 'Z',
+ '𝙖' => 'a',
+ '𝙗' => 'b',
+ '𝙘' => 'c',
+ '𝙙' => 'd',
+ '𝙚' => 'e',
+ '𝙛' => 'f',
+ '𝙜' => 'g',
+ '𝙝' => 'h',
+ '𝙞' => 'i',
+ '𝙟' => 'j',
+ '𝙠' => 'k',
+ '𝙡' => 'l',
+ '𝙢' => 'm',
+ '𝙣' => 'n',
+ '𝙤' => 'o',
+ '𝙥' => 'p',
+ '𝙦' => 'q',
+ '𝙧' => 'r',
+ '𝙨' => 's',
+ '𝙩' => 't',
+ '𝙪' => 'u',
+ '𝙫' => 'v',
+ '𝙬' => 'w',
+ '𝙭' => 'x',
+ '𝙮' => 'y',
+ '𝙯' => 'z',
+ '𝙰' => 'A',
+ '𝙱' => 'B',
+ '𝙲' => 'C',
+ '𝙳' => 'D',
+ '𝙴' => 'E',
+ '𝙵' => 'F',
+ '𝙶' => 'G',
+ '𝙷' => 'H',
+ '𝙸' => 'I',
+ '𝙹' => 'J',
+ '𝙺' => 'K',
+ '𝙻' => 'L',
+ '𝙼' => 'M',
+ '𝙽' => 'N',
+ '𝙾' => 'O',
+ '𝙿' => 'P',
+ '𝚀' => 'Q',
+ '𝚁' => 'R',
+ '𝚂' => 'S',
+ '𝚃' => 'T',
+ '𝚄' => 'U',
+ '𝚅' => 'V',
+ '𝚆' => 'W',
+ '𝚇' => 'X',
+ '𝚈' => 'Y',
+ '𝚉' => 'Z',
+ '𝚊' => 'a',
+ '𝚋' => 'b',
+ '𝚌' => 'c',
+ '𝚍' => 'd',
+ '𝚎' => 'e',
+ '𝚏' => 'f',
+ '𝚐' => 'g',
+ '𝚑' => 'h',
+ '𝚒' => 'i',
+ '𝚓' => 'j',
+ '𝚔' => 'k',
+ '𝚕' => 'l',
+ '𝚖' => 'm',
+ '𝚗' => 'n',
+ '𝚘' => 'o',
+ '𝚙' => 'p',
+ '𝚚' => 'q',
+ '𝚛' => 'r',
+ '𝚜' => 's',
+ '𝚝' => 't',
+ '𝚞' => 'u',
+ '𝚟' => 'v',
+ '𝚠' => 'w',
+ '𝚡' => 'x',
+ '𝚢' => 'y',
+ '𝚣' => 'z',
+ '𝚤' => 'ı',
+ '𝚥' => 'ȷ',
+ '𝚨' => 'Α',
+ '𝚩' => 'Β',
+ '𝚪' => 'Γ',
+ '𝚫' => 'Δ',
+ '𝚬' => 'Ε',
+ '𝚭' => 'Ζ',
+ '𝚮' => 'Η',
+ '𝚯' => 'Θ',
+ '𝚰' => 'Ι',
+ '𝚱' => 'Κ',
+ '𝚲' => 'Λ',
+ '𝚳' => 'Μ',
+ '𝚴' => 'Ν',
+ '𝚵' => 'Ξ',
+ '𝚶' => 'Ο',
+ '𝚷' => 'Π',
+ '𝚸' => 'Ρ',
+ '𝚹' => 'Θ',
+ '𝚺' => 'Σ',
+ '𝚻' => 'Τ',
+ '𝚼' => 'Υ',
+ '𝚽' => 'Φ',
+ '𝚾' => 'Χ',
+ '𝚿' => 'Ψ',
+ '𝛀' => 'Ω',
+ '𝛁' => '∇',
+ '𝛂' => 'α',
+ '𝛃' => 'β',
+ '𝛄' => 'γ',
+ '𝛅' => 'δ',
+ '𝛆' => 'ε',
+ '𝛇' => 'ζ',
+ '𝛈' => 'η',
+ '𝛉' => 'θ',
+ '𝛊' => 'ι',
+ '𝛋' => 'κ',
+ '𝛌' => 'λ',
+ '𝛍' => 'μ',
+ '𝛎' => 'ν',
+ '𝛏' => 'ξ',
+ '𝛐' => 'ο',
+ '𝛑' => 'π',
+ '𝛒' => 'ρ',
+ '𝛓' => 'ς',
+ '𝛔' => 'σ',
+ '𝛕' => 'τ',
+ '𝛖' => 'υ',
+ '𝛗' => 'φ',
+ '𝛘' => 'χ',
+ '𝛙' => 'ψ',
+ '𝛚' => 'ω',
+ '𝛛' => '∂',
+ '𝛜' => 'ε',
+ '𝛝' => 'θ',
+ '𝛞' => 'κ',
+ '𝛟' => 'φ',
+ '𝛠' => 'ρ',
+ '𝛡' => 'π',
+ '𝛢' => 'Α',
+ '𝛣' => 'Β',
+ '𝛤' => 'Γ',
+ '𝛥' => 'Δ',
+ '𝛦' => 'Ε',
+ '𝛧' => 'Ζ',
+ '𝛨' => 'Η',
+ '𝛩' => 'Θ',
+ '𝛪' => 'Ι',
+ '𝛫' => 'Κ',
+ '𝛬' => 'Λ',
+ '𝛭' => 'Μ',
+ '𝛮' => 'Ν',
+ '𝛯' => 'Ξ',
+ '𝛰' => 'Ο',
+ '𝛱' => 'Π',
+ '𝛲' => 'Ρ',
+ '𝛳' => 'Θ',
+ '𝛴' => 'Σ',
+ '𝛵' => 'Τ',
+ '𝛶' => 'Υ',
+ '𝛷' => 'Φ',
+ '𝛸' => 'Χ',
+ '𝛹' => 'Ψ',
+ '𝛺' => 'Ω',
+ '𝛻' => '∇',
+ '𝛼' => 'α',
+ '𝛽' => 'β',
+ '𝛾' => 'γ',
+ '𝛿' => 'δ',
+ '𝜀' => 'ε',
+ '𝜁' => 'ζ',
+ '𝜂' => 'η',
+ '𝜃' => 'θ',
+ '𝜄' => 'ι',
+ '𝜅' => 'κ',
+ '𝜆' => 'λ',
+ '𝜇' => 'μ',
+ '𝜈' => 'ν',
+ '𝜉' => 'ξ',
+ '𝜊' => 'ο',
+ '𝜋' => 'π',
+ '𝜌' => 'ρ',
+ '𝜍' => 'ς',
+ '𝜎' => 'σ',
+ '𝜏' => 'τ',
+ '𝜐' => 'υ',
+ '𝜑' => 'φ',
+ '𝜒' => 'χ',
+ '𝜓' => 'ψ',
+ '𝜔' => 'ω',
+ '𝜕' => '∂',
+ '𝜖' => 'ε',
+ '𝜗' => 'θ',
+ '𝜘' => 'κ',
+ '𝜙' => 'φ',
+ '𝜚' => 'ρ',
+ '𝜛' => 'π',
+ '𝜜' => 'Α',
+ '𝜝' => 'Β',
+ '𝜞' => 'Γ',
+ '𝜟' => 'Δ',
+ '𝜠' => 'Ε',
+ '𝜡' => 'Ζ',
+ '𝜢' => 'Η',
+ '𝜣' => 'Θ',
+ '𝜤' => 'Ι',
+ '𝜥' => 'Κ',
+ '𝜦' => 'Λ',
+ '𝜧' => 'Μ',
+ '𝜨' => 'Ν',
+ '𝜩' => 'Ξ',
+ '𝜪' => 'Ο',
+ '𝜫' => 'Π',
+ '𝜬' => 'Ρ',
+ '𝜭' => 'Θ',
+ '𝜮' => 'Σ',
+ '𝜯' => 'Τ',
+ '𝜰' => 'Υ',
+ '𝜱' => 'Φ',
+ '𝜲' => 'Χ',
+ '𝜳' => 'Ψ',
+ '𝜴' => 'Ω',
+ '𝜵' => '∇',
+ '𝜶' => 'α',
+ '𝜷' => 'β',
+ '𝜸' => 'γ',
+ '𝜹' => 'δ',
+ '𝜺' => 'ε',
+ '𝜻' => 'ζ',
+ '𝜼' => 'η',
+ '𝜽' => 'θ',
+ '𝜾' => 'ι',
+ '𝜿' => 'κ',
+ '𝝀' => 'λ',
+ '𝝁' => 'μ',
+ '𝝂' => 'ν',
+ '𝝃' => 'ξ',
+ '𝝄' => 'ο',
+ '𝝅' => 'π',
+ '𝝆' => 'ρ',
+ '𝝇' => 'ς',
+ '𝝈' => 'σ',
+ '𝝉' => 'τ',
+ '𝝊' => 'υ',
+ '𝝋' => 'φ',
+ '𝝌' => 'χ',
+ '𝝍' => 'ψ',
+ '𝝎' => 'ω',
+ '𝝏' => '∂',
+ '𝝐' => 'ε',
+ '𝝑' => 'θ',
+ '𝝒' => 'κ',
+ '𝝓' => 'φ',
+ '𝝔' => 'ρ',
+ '𝝕' => 'π',
+ '𝝖' => 'Α',
+ '𝝗' => 'Β',
+ '𝝘' => 'Γ',
+ '𝝙' => 'Δ',
+ '𝝚' => 'Ε',
+ '𝝛' => 'Ζ',
+ '𝝜' => 'Η',
+ '𝝝' => 'Θ',
+ '𝝞' => 'Ι',
+ '𝝟' => 'Κ',
+ '𝝠' => 'Λ',
+ '𝝡' => 'Μ',
+ '𝝢' => 'Ν',
+ '𝝣' => 'Ξ',
+ '𝝤' => 'Ο',
+ '𝝥' => 'Π',
+ '𝝦' => 'Ρ',
+ '𝝧' => 'Θ',
+ '𝝨' => 'Σ',
+ '𝝩' => 'Τ',
+ '𝝪' => 'Υ',
+ '𝝫' => 'Φ',
+ '𝝬' => 'Χ',
+ '𝝭' => 'Ψ',
+ '𝝮' => 'Ω',
+ '𝝯' => '∇',
+ '𝝰' => 'α',
+ '𝝱' => 'β',
+ '𝝲' => 'γ',
+ '𝝳' => 'δ',
+ '𝝴' => 'ε',
+ '𝝵' => 'ζ',
+ '𝝶' => 'η',
+ '𝝷' => 'θ',
+ '𝝸' => 'ι',
+ '𝝹' => 'κ',
+ '𝝺' => 'λ',
+ '𝝻' => 'μ',
+ '𝝼' => 'ν',
+ '𝝽' => 'ξ',
+ '𝝾' => 'ο',
+ '𝝿' => 'π',
+ '𝞀' => 'ρ',
+ '𝞁' => 'ς',
+ '𝞂' => 'σ',
+ '𝞃' => 'τ',
+ '𝞄' => 'υ',
+ '𝞅' => 'φ',
+ '𝞆' => 'χ',
+ '𝞇' => 'ψ',
+ '𝞈' => 'ω',
+ '𝞉' => '∂',
+ '𝞊' => 'ε',
+ '𝞋' => 'θ',
+ '𝞌' => 'κ',
+ '𝞍' => 'φ',
+ '𝞎' => 'ρ',
+ '𝞏' => 'π',
+ '𝞐' => 'Α',
+ '𝞑' => 'Β',
+ '𝞒' => 'Γ',
+ '𝞓' => 'Δ',
+ '𝞔' => 'Ε',
+ '𝞕' => 'Ζ',
+ '𝞖' => 'Η',
+ '𝞗' => 'Θ',
+ '𝞘' => 'Ι',
+ '𝞙' => 'Κ',
+ '𝞚' => 'Λ',
+ '𝞛' => 'Μ',
+ '𝞜' => 'Ν',
+ '𝞝' => 'Ξ',
+ '𝞞' => 'Ο',
+ '𝞟' => 'Π',
+ '𝞠' => 'Ρ',
+ '𝞡' => 'Θ',
+ '𝞢' => 'Σ',
+ '𝞣' => 'Τ',
+ '𝞤' => 'Υ',
+ '𝞥' => 'Φ',
+ '𝞦' => 'Χ',
+ '𝞧' => 'Ψ',
+ '𝞨' => 'Ω',
+ '𝞩' => '∇',
+ '𝞪' => 'α',
+ '𝞫' => 'β',
+ '𝞬' => 'γ',
+ '𝞭' => 'δ',
+ '𝞮' => 'ε',
+ '𝞯' => 'ζ',
+ '𝞰' => 'η',
+ '𝞱' => 'θ',
+ '𝞲' => 'ι',
+ '𝞳' => 'κ',
+ '𝞴' => 'λ',
+ '𝞵' => 'μ',
+ '𝞶' => 'ν',
+ '𝞷' => 'ξ',
+ '𝞸' => 'ο',
+ '𝞹' => 'π',
+ '𝞺' => 'ρ',
+ '𝞻' => 'ς',
+ '𝞼' => 'σ',
+ '𝞽' => 'τ',
+ '𝞾' => 'υ',
+ '𝞿' => 'φ',
+ '𝟀' => 'χ',
+ '𝟁' => 'ψ',
+ '𝟂' => 'ω',
+ '𝟃' => '∂',
+ '𝟄' => 'ε',
+ '𝟅' => 'θ',
+ '𝟆' => 'κ',
+ '𝟇' => 'φ',
+ '𝟈' => 'ρ',
+ '𝟉' => 'π',
+ '𝟊' => 'Ϝ',
+ '𝟋' => 'ϝ',
+ '𝟎' => '0',
+ '𝟏' => '1',
+ '𝟐' => '2',
+ '𝟑' => '3',
+ '𝟒' => '4',
+ '𝟓' => '5',
+ '𝟔' => '6',
+ '𝟕' => '7',
+ '𝟖' => '8',
+ '𝟗' => '9',
+ '𝟘' => '0',
+ '𝟙' => '1',
+ '𝟚' => '2',
+ '𝟛' => '3',
+ '𝟜' => '4',
+ '𝟝' => '5',
+ '𝟞' => '6',
+ '𝟟' => '7',
+ '𝟠' => '8',
+ '𝟡' => '9',
+ '𝟢' => '0',
+ '𝟣' => '1',
+ '𝟤' => '2',
+ '𝟥' => '3',
+ '𝟦' => '4',
+ '𝟧' => '5',
+ '𝟨' => '6',
+ '𝟩' => '7',
+ '𝟪' => '8',
+ '𝟫' => '9',
+ '𝟬' => '0',
+ '𝟭' => '1',
+ '𝟮' => '2',
+ '𝟯' => '3',
+ '𝟰' => '4',
+ '𝟱' => '5',
+ '𝟲' => '6',
+ '𝟳' => '7',
+ '𝟴' => '8',
+ '𝟵' => '9',
+ '𝟶' => '0',
+ '𝟷' => '1',
+ '𝟸' => '2',
+ '𝟹' => '3',
+ '𝟺' => '4',
+ '𝟻' => '5',
+ '𝟼' => '6',
+ '𝟽' => '7',
+ '𝟾' => '8',
+ '𝟿' => '9',
+ '𞸀' => 'ا',
+ '𞸁' => 'ب',
+ '𞸂' => 'ج',
+ '𞸃' => 'د',
+ '𞸅' => 'و',
+ '𞸆' => 'ز',
+ '𞸇' => 'ح',
+ '𞸈' => 'ط',
+ '𞸉' => 'ي',
+ '𞸊' => 'ك',
+ '𞸋' => 'ل',
+ '𞸌' => 'م',
+ '𞸍' => 'ن',
+ '𞸎' => 'س',
+ '𞸏' => 'ع',
+ '𞸐' => 'ف',
+ '𞸑' => 'ص',
+ '𞸒' => 'ق',
+ '𞸓' => 'ر',
+ '𞸔' => 'ش',
+ '𞸕' => 'ت',
+ '𞸖' => 'ث',
+ '𞸗' => 'خ',
+ '𞸘' => 'ذ',
+ '𞸙' => 'ض',
+ '𞸚' => 'ظ',
+ '𞸛' => 'غ',
+ '𞸜' => 'ٮ',
+ '𞸝' => 'ں',
+ '𞸞' => 'ڡ',
+ '𞸟' => 'ٯ',
+ '𞸡' => 'ب',
+ '𞸢' => 'ج',
+ '𞸤' => 'ه',
+ '𞸧' => 'ح',
+ '𞸩' => 'ي',
+ '𞸪' => 'ك',
+ '𞸫' => 'ل',
+ '𞸬' => 'م',
+ '𞸭' => 'ن',
+ '𞸮' => 'س',
+ '𞸯' => 'ع',
+ '𞸰' => 'ف',
+ '𞸱' => 'ص',
+ '𞸲' => 'ق',
+ '𞸴' => 'ش',
+ '𞸵' => 'ت',
+ '𞸶' => 'ث',
+ '𞸷' => 'خ',
+ '𞸹' => 'ض',
+ '𞸻' => 'غ',
+ '𞹂' => 'ج',
+ '𞹇' => 'ح',
+ '𞹉' => 'ي',
+ '𞹋' => 'ل',
+ '𞹍' => 'ن',
+ '𞹎' => 'س',
+ '𞹏' => 'ع',
+ '𞹑' => 'ص',
+ '𞹒' => 'ق',
+ '𞹔' => 'ش',
+ '𞹗' => 'خ',
+ '𞹙' => 'ض',
+ '𞹛' => 'غ',
+ '𞹝' => 'ں',
+ '𞹟' => 'ٯ',
+ '𞹡' => 'ب',
+ '𞹢' => 'ج',
+ '𞹤' => 'ه',
+ '𞹧' => 'ح',
+ '𞹨' => 'ط',
+ '𞹩' => 'ي',
+ '𞹪' => 'ك',
+ '𞹬' => 'م',
+ '𞹭' => 'ن',
+ '𞹮' => 'س',
+ '𞹯' => 'ع',
+ '𞹰' => 'ف',
+ '𞹱' => 'ص',
+ '𞹲' => 'ق',
+ '𞹴' => 'ش',
+ '𞹵' => 'ت',
+ '𞹶' => 'ث',
+ '𞹷' => 'خ',
+ '𞹹' => 'ض',
+ '𞹺' => 'ظ',
+ '𞹻' => 'غ',
+ '𞹼' => 'ٮ',
+ '𞹾' => 'ڡ',
+ '𞺀' => 'ا',
+ '𞺁' => 'ب',
+ '𞺂' => 'ج',
+ '𞺃' => 'د',
+ '𞺄' => 'ه',
+ '𞺅' => 'و',
+ '𞺆' => 'ز',
+ '𞺇' => 'ح',
+ '𞺈' => 'ط',
+ '𞺉' => 'ي',
+ '𞺋' => 'ل',
+ '𞺌' => 'م',
+ '𞺍' => 'ن',
+ '𞺎' => 'س',
+ '𞺏' => 'ع',
+ '𞺐' => 'ف',
+ '𞺑' => 'ص',
+ '𞺒' => 'ق',
+ '𞺓' => 'ر',
+ '𞺔' => 'ش',
+ '𞺕' => 'ت',
+ '𞺖' => 'ث',
+ '𞺗' => 'خ',
+ '𞺘' => 'ذ',
+ '𞺙' => 'ض',
+ '𞺚' => 'ظ',
+ '𞺛' => 'غ',
+ '𞺡' => 'ب',
+ '𞺢' => 'ج',
+ '𞺣' => 'د',
+ '𞺥' => 'و',
+ '𞺦' => 'ز',
+ '𞺧' => 'ح',
+ '𞺨' => 'ط',
+ '𞺩' => 'ي',
+ '𞺫' => 'ل',
+ '𞺬' => 'م',
+ '𞺭' => 'ن',
+ '𞺮' => 'س',
+ '𞺯' => 'ع',
+ '𞺰' => 'ف',
+ '𞺱' => 'ص',
+ '𞺲' => 'ق',
+ '𞺳' => 'ر',
+ '𞺴' => 'ش',
+ '𞺵' => 'ت',
+ '𞺶' => 'ث',
+ '𞺷' => 'خ',
+ '𞺸' => 'ذ',
+ '𞺹' => 'ض',
+ '𞺺' => 'ظ',
+ '𞺻' => 'غ',
+ '🄀' => '0.',
+ '🄁' => '0,',
+ '🄂' => '1,',
+ '🄃' => '2,',
+ '🄄' => '3,',
+ '🄅' => '4,',
+ '🄆' => '5,',
+ '🄇' => '6,',
+ '🄈' => '7,',
+ '🄉' => '8,',
+ '🄊' => '9,',
+ '🄐' => '(A)',
+ '🄑' => '(B)',
+ '🄒' => '(C)',
+ '🄓' => '(D)',
+ '🄔' => '(E)',
+ '🄕' => '(F)',
+ '🄖' => '(G)',
+ '🄗' => '(H)',
+ '🄘' => '(I)',
+ '🄙' => '(J)',
+ '🄚' => '(K)',
+ '🄛' => '(L)',
+ '🄜' => '(M)',
+ '🄝' => '(N)',
+ '🄞' => '(O)',
+ '🄟' => '(P)',
+ '🄠' => '(Q)',
+ '🄡' => '(R)',
+ '🄢' => '(S)',
+ '🄣' => '(T)',
+ '🄤' => '(U)',
+ '🄥' => '(V)',
+ '🄦' => '(W)',
+ '🄧' => '(X)',
+ '🄨' => '(Y)',
+ '🄩' => '(Z)',
+ '🄪' => '〔S〕',
+ '🄫' => 'C',
+ '🄬' => 'R',
+ '🄭' => 'CD',
+ '🄮' => 'WZ',
+ '🄰' => 'A',
+ '🄱' => 'B',
+ '🄲' => 'C',
+ '🄳' => 'D',
+ '🄴' => 'E',
+ '🄵' => 'F',
+ '🄶' => 'G',
+ '🄷' => 'H',
+ '🄸' => 'I',
+ '🄹' => 'J',
+ '🄺' => 'K',
+ '🄻' => 'L',
+ '🄼' => 'M',
+ '🄽' => 'N',
+ '🄾' => 'O',
+ '🄿' => 'P',
+ '🅀' => 'Q',
+ '🅁' => 'R',
+ '🅂' => 'S',
+ '🅃' => 'T',
+ '🅄' => 'U',
+ '🅅' => 'V',
+ '🅆' => 'W',
+ '🅇' => 'X',
+ '🅈' => 'Y',
+ '🅉' => 'Z',
+ '🅊' => 'HV',
+ '🅋' => 'MV',
+ '🅌' => 'SD',
+ '🅍' => 'SS',
+ '🅎' => 'PPV',
+ '🅏' => 'WC',
+ '🅪' => 'MC',
+ '🅫' => 'MD',
+ '🅬' => 'MR',
+ '🆐' => 'DJ',
+ '🈀' => 'ほか',
+ '🈁' => 'ココ',
+ '🈂' => 'サ',
+ '🈐' => '手',
+ '🈑' => '字',
+ '🈒' => '双',
+ '🈓' => 'デ',
+ '🈔' => '二',
+ '🈕' => '多',
+ '🈖' => '解',
+ '🈗' => '天',
+ '🈘' => '交',
+ '🈙' => '映',
+ '🈚' => '無',
+ '🈛' => '料',
+ '🈜' => '前',
+ '🈝' => '後',
+ '🈞' => '再',
+ '🈟' => '新',
+ '🈠' => '初',
+ '🈡' => '終',
+ '🈢' => '生',
+ '🈣' => '販',
+ '🈤' => '声',
+ '🈥' => '吹',
+ '🈦' => '演',
+ '🈧' => '投',
+ '🈨' => '捕',
+ '🈩' => '一',
+ '🈪' => '三',
+ '🈫' => '遊',
+ '🈬' => '左',
+ '🈭' => '中',
+ '🈮' => '右',
+ '🈯' => '指',
+ '🈰' => '走',
+ '🈱' => '打',
+ '🈲' => '禁',
+ '🈳' => '空',
+ '🈴' => '合',
+ '🈵' => '満',
+ '🈶' => '有',
+ '🈷' => '月',
+ '🈸' => '申',
+ '🈹' => '割',
+ '🈺' => '営',
+ '🈻' => '配',
+ '🉀' => '〔本〕',
+ '🉁' => '〔三〕',
+ '🉂' => '〔二〕',
+ '🉃' => '〔安〕',
+ '🉄' => '〔点〕',
+ '🉅' => '〔打〕',
+ '🉆' => '〔盗〕',
+ '🉇' => '〔勝〕',
+ '🉈' => '〔敗〕',
+ '🉐' => '得',
+ '🉑' => '可',
+ '🯰' => '0',
+ '🯱' => '1',
+ '🯲' => '2',
+ '🯳' => '3',
+ '🯴' => '4',
+ '🯵' => '5',
+ '🯶' => '6',
+ '🯷' => '7',
+ '🯸' => '8',
+ '🯹' => '9',
+);
diff --git a/plugins/vendor/symfony/polyfill-intl-normalizer/bootstrap.php b/plugins/vendor/symfony/polyfill-intl-normalizer/bootstrap.php
new file mode 100644
index 00000000..3608e5c0
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-normalizer/bootstrap.php
@@ -0,0 +1,23 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Intl\Normalizer as p;
+
+if (\PHP_VERSION_ID >= 80000) {
+ return require __DIR__.'/bootstrap80.php';
+}
+
+if (!function_exists('normalizer_is_normalized')) {
+ function normalizer_is_normalized($string, $form = p\Normalizer::FORM_C) { return p\Normalizer::isNormalized($string, $form); }
+}
+if (!function_exists('normalizer_normalize')) {
+ function normalizer_normalize($string, $form = p\Normalizer::FORM_C) { return p\Normalizer::normalize($string, $form); }
+}
diff --git a/plugins/vendor/symfony/polyfill-intl-normalizer/bootstrap80.php b/plugins/vendor/symfony/polyfill-intl-normalizer/bootstrap80.php
new file mode 100644
index 00000000..e36d1a94
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-normalizer/bootstrap80.php
@@ -0,0 +1,19 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Intl\Normalizer as p;
+
+if (!function_exists('normalizer_is_normalized')) {
+ function normalizer_is_normalized(?string $string, ?int $form = p\Normalizer::FORM_C): bool { return p\Normalizer::isNormalized((string) $string, (int) $form); }
+}
+if (!function_exists('normalizer_normalize')) {
+ function normalizer_normalize(?string $string, ?int $form = p\Normalizer::FORM_C): string|false { return p\Normalizer::normalize((string) $string, (int) $form); }
+}
diff --git a/plugins/vendor/symfony/polyfill-intl-normalizer/composer.json b/plugins/vendor/symfony/polyfill-intl-normalizer/composer.json
new file mode 100644
index 00000000..9bd04e88
--- /dev/null
+++ b/plugins/vendor/symfony/polyfill-intl-normalizer/composer.json
@@ -0,0 +1,36 @@
+{
+ "name": "symfony/polyfill-intl-normalizer",
+ "type": "library",
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "keywords": ["polyfill", "shim", "compatibility", "portable", "intl", "normalizer"],
+ "homepage": "https://symfony.com",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "require": {
+ "php": ">=7.2"
+ },
+ "autoload": {
+ "psr-4": { "Symfony\\Polyfill\\Intl\\Normalizer\\": "" },
+ "files": [ "bootstrap.php" ],
+ "classmap": [ "Resources/stubs" ]
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "minimum-stability": "dev",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/.github/FUNDING.yml b/plugins/vendor/zbateson/mail-mime-parser/.github/FUNDING.yml
new file mode 100644
index 00000000..f137cf66
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/.github/FUNDING.yml
@@ -0,0 +1,3 @@
+# These are supported funding model platforms
+
+github: zbateson
diff --git a/plugins/vendor/zbateson/mail-mime-parser/.github/workflows/tests.yml b/plugins/vendor/zbateson/mail-mime-parser/.github/workflows/tests.yml
new file mode 100644
index 00000000..12fadbf6
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/.github/workflows/tests.yml
@@ -0,0 +1,36 @@
+name: Tests
+
+on: [push, pull_request]
+
+jobs:
+ test:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ubuntu-latest, windows-latest]
+ php: [8.5, 8.4, 8.3, 8.2, 8.1, 8.0]
+ stability: [prefer-stable]
+
+ name: P${{ matrix.php }} - ${{ matrix.stability }} - ${{ matrix.os }}
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php }}
+ extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick, fileinfo
+ coverage: none
+
+ - name: Setup problem matchers
+ run: |
+ echo "::add-matcher::${{ runner.tool_cache }}/php.json"
+ echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
+ - name: Install dependencies
+ run: composer update --${{ matrix.stability }} --prefer-dist --no-interaction
+
+ - name: Execute tests
+ run: ./vendor/bin/phpunit -c tests/phpunit.xml
diff --git a/plugins/vendor/zbateson/mail-mime-parser/.php-cs-fixer.dist.php b/plugins/vendor/zbateson/mail-mime-parser/.php-cs-fixer.dist.php
new file mode 100644
index 00000000..2626f872
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/.php-cs-fixer.dist.php
@@ -0,0 +1,15 @@
+setFinder(PhpCsFixer\Finder::create()
+ ->exclude('vendor')
+ ->in(__DIR__.'/src')
+ ->in(__DIR__.'/tests')
+ );
diff --git a/plugins/vendor/zbateson/mail-mime-parser/LICENSE b/plugins/vendor/zbateson/mail-mime-parser/LICENSE
new file mode 100644
index 00000000..1fbaa2fd
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2014-2015, Zaahid Bateson
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/plugins/vendor/zbateson/mail-mime-parser/PHPStanConstants.php b/plugins/vendor/zbateson/mail-mime-parser/PHPStanConstants.php
new file mode 100644
index 00000000..24142642
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/PHPStanConstants.php
@@ -0,0 +1,4 @@
+parse($handle, false); // returns `IMessage`
+
+// OR: use this procedurally (Message::from also accepts a string,
+// resource or Psr7 StreamInterface
+// true or false as second parameter doesn't matter if passing a string.
+$string = "Content-Type: text/plain\r\nSubject: Test\r\n\r\nMessage";
+$message = Message::from($string, false);
+
+echo $message->getHeaderValue(HeaderConsts::FROM); // user@example.com
+echo $message
+ ->getHeader(HeaderConsts::FROM) // AddressHeader
+ ->getPersonName(); // Person Name
+echo $message->getSubject(); // The email's subject
+echo $message
+ ->getHeader(HeaderConsts::TO) // also AddressHeader
+ ->getAddresses()[0] // AddressPart
+ ->getPersonName(); // Person Name
+echo $message
+ ->getHeader(HeaderConsts::CC) // also AddressHeader
+ ->getAddresses()[0] // AddressPart
+ ->getEmail(); // user@example.com
+
+echo $message->getTextContent(); // or getHtmlContent()
+
+echo $message->getHeader('X-Foo'); // for custom or undocumented headers
+
+$att = $message->getAttachmentPart(0); // first attachment
+echo $att->getHeaderValue(HeaderConsts::CONTENT_TYPE); // e.g. "text/plain"
+echo $att->getHeaderParameter( // value of "charset" part
+ HeaderConsts::CONTENT_TYPE,
+ 'charset'
+);
+echo $att->getContent(); // get the attached file's contents
+$stream = $att->getContentStream(); // the file is decoded automatically
+$dest = \GuzzleHttp\Psr7\stream_for(
+ fopen('my-file.ext')
+);
+\GuzzleHttp\Psr7\copy_to_stream(
+ $stream, $dest
+);
+// OR: more simply if saving or copying to another stream
+$att->saveContent('my-file.ext'); // writes to my-file.ext
+$att->saveContent($stream); // copies to the stream
+
+// close only when $message is no longer being used.
+fclose($handle);
+
+```
+
+## Documentation
+
+* [Usage Guide](https://mail-mime-parser.org/)
+* [API Reference](https://mail-mime-parser.org/api/3.0)
+
+## Upgrade guides
+
+* [1.x Upgrade Guide](https://mail-mime-parser.org/upgrade-1.0)
+* [2.x Upgrade Guide](https://mail-mime-parser.org/upgrade-2.0)
+* [3.x Upgrade Guide](https://mail-mime-parser.org/upgrade-3.0)
+
+## License
+
+BSD licensed - please see [license agreement](https://github.com/zbateson/mail-mime-parser/blob/master/LICENSE).
diff --git a/plugins/vendor/zbateson/mail-mime-parser/composer.json b/plugins/vendor/zbateson/mail-mime-parser/composer.json
new file mode 100644
index 00000000..f6ffe335
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/composer.json
@@ -0,0 +1,45 @@
+{
+ "name": "zbateson/mail-mime-parser",
+ "description": "MIME email message parser",
+ "keywords": ["mail", "mime", "parser", "email", "php-imap", "mailparse", "mimeparse", "MimeMailParser"],
+ "homepage": "https://mail-mime-parser.org",
+ "license": "BSD-2-Clause",
+ "authors": [
+ {
+ "name": "Zaahid Bateson"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/zbateson/mail-mime-parser/graphs/contributors"
+ }
+ ],
+ "support": {
+ "issues": "https://github.com/zbateson/mail-mime-parser/issues",
+ "source": "https://github.com/zbateson/mail-mime-parser",
+ "docs": "https://mail-mime-parser.org/#usage-guide"
+ },
+ "require": {
+ "php": ">=8.0",
+ "guzzlehttp/psr7": "^2.5",
+ "zbateson/mb-wrapper": "^2.0",
+ "zbateson/stream-decorators": "^2.1",
+ "php-di/php-di": "^6.0|^7.0",
+ "psr/log": "^1|^2|^3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.6",
+ "friendsofphp/php-cs-fixer": "*",
+ "phpstan/phpstan": "*",
+ "monolog/monolog": "^2|^3"
+ },
+ "suggest": {
+ "ext-mbstring": "For best support/performance",
+ "ext-iconv": "For best support/performance"
+ },
+ "autoload": {
+ "psr-4": {"ZBateson\\MailMimeParser\\": "src/"}
+ },
+ "autoload-dev": {
+ "psr-4": {"ZBateson\\MailMimeParser\\": "tests/MailMimeParser"}
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/phpstan.neon b/plugins/vendor/zbateson/mail-mime-parser/phpstan.neon
new file mode 100644
index 00000000..fed9c84c
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/phpstan.neon
@@ -0,0 +1,13 @@
+parameters:
+ level: 6
+ errorFormat: raw
+ editorUrl: '%%file%% %%line%% %%column%%: %%error%%'
+ paths:
+ - src
+ bootstrapFiles:
+ - PHPStanConstants.php
+ ignoreErrors:
+ -
+ message: '#Call to an undefined method ZBateson\\MailMimeParser#'
+ paths:
+ - src/*
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Error.php b/plugins/vendor/zbateson/mail-mime-parser/src/Error.php
new file mode 100644
index 00000000..544cda20
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Error.php
@@ -0,0 +1,123 @@
+
+ */
+ private array $levelMap = [
+ LogLevel::EMERGENCY => 0,
+ LogLevel::ALERT => 1,
+ LogLevel::CRITICAL => 2,
+ LogLevel::ERROR => 3,
+ LogLevel::WARNING => 4,
+ LogLevel::NOTICE => 5,
+ LogLevel::INFO => 6,
+ LogLevel::DEBUG => 7,
+ ];
+
+ /**
+ *
+ * @throws InvalidArgumentException if the passed $psrLogLevelAsErrorLevel
+ * is not a known PSR log level (see \Psr\Log\LogLevel)
+ */
+ public function __construct(string $message, string $psrLogLevelAsErrorLevel, ErrorBag $object, ?Throwable $exception = null)
+ {
+ if (!isset($this->levelMap[$psrLogLevelAsErrorLevel])) {
+ throw new InvalidArgumentException($psrLogLevelAsErrorLevel . ' is not a known PSR Log Level');
+ }
+ $this->message = $message;
+ $this->psrLevel = $psrLogLevelAsErrorLevel;
+ $this->object = $object;
+ $this->exception = $exception;
+ }
+
+ /**
+ * Returns the error message.
+ */
+ public function getMessage() : string
+ {
+ return $this->message;
+ }
+
+ /**
+ * Returns the PSR string log level for this error message.
+ */
+ public function getPsrLevel() : string
+ {
+ return $this->psrLevel;
+ }
+
+ /**
+ * Returns the class type the error occurred on.
+ */
+ public function getClass() : string
+ {
+ return \get_class($this->object);
+ }
+
+ /**
+ * Returns the object the error occurred on.
+ */
+ public function getObject() : ErrorBag
+ {
+ return $this->object;
+ }
+
+ /**
+ * Returns the exception that occurred, if any, or null.
+ */
+ public function getException() : ?Throwable
+ {
+ return $this->exception;
+ }
+
+ /**
+ * Returns true if the PSR log level for this error is equal to or greater
+ * than the one passed, e.g. passing LogLevel::ERROR would return true for
+ * LogLevel::ERROR and LogLevel::CRITICAL, ALERT and EMERGENCY.
+ */
+ public function isPsrLevelGreaterOrEqualTo(string $minLevel) : bool
+ {
+ $minIntLevel = $this->levelMap[$minLevel] ?? 1000;
+ $thisLevel = $this->levelMap[$this->psrLevel];
+ return ($minIntLevel >= $thisLevel);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/ErrorBag.php b/plugins/vendor/zbateson/mail-mime-parser/src/ErrorBag.php
new file mode 100644
index 00000000..dc338f61
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/ErrorBag.php
@@ -0,0 +1,124 @@
+logger = $logger;
+ }
+
+ /**
+ * Returns the class name. Override to identify objects in logs.
+ *
+ */
+ public function getErrorLoggingContextName() : string
+ {
+ return static::class;
+ }
+
+ /**
+ * Return any children ErrorBag objects.
+ *
+ * @return IErrorBag[]
+ */
+ abstract protected function getErrorBagChildren() : array;
+
+ /**
+ * Perform any extra validation and call 'addError'.
+ *
+ * getErrors and getAllErrors call validate() if their $validate parameter
+ * is true. validate() is only called once on an object with getErrors
+ * getAllErrors.
+ */
+ protected function validate() : void
+ {
+ // do nothing
+ }
+
+ public function addError(string $message, string $psrLogLevel, ?Throwable $exception = null) : static
+ {
+ $error = new Error($message, $psrLogLevel, $this, $exception);
+ $this->errors[] = $error;
+ $this->logger->log(
+ $psrLogLevel,
+ '{contextName} {message} {exception}',
+ [
+ 'contextName' => $this->getErrorLoggingContextName(),
+ 'message' => $message,
+ 'exception' => $exception ?? ''
+ ]
+ );
+ return $this;
+ }
+
+ public function getErrors(bool $validate = false, string $minPsrLevel = LogLevel::ERROR) : array
+ {
+ if ($validate && !$this->validated) {
+ $this->validated = true;
+ $this->validate();
+ }
+ return \array_values(\array_filter(
+ $this->errors,
+ function($e) use ($minPsrLevel) {
+ return $e->isPsrLevelGreaterOrEqualTo($minPsrLevel);
+ }
+ ));
+ }
+
+ public function hasErrors(bool $validate = false, string $minPsrLevel = LogLevel::ERROR) : bool
+ {
+ return (\count($this->getErrors($validate, $minPsrLevel)) > 0);
+ }
+
+ public function getAllErrors(bool $validate = false, string $minPsrLevel = LogLevel::ERROR) : array
+ {
+ $arr = \array_values(\array_map(
+ function($e) use ($validate, $minPsrLevel) {
+ return $e->getAllErrors($validate, $minPsrLevel);
+ },
+ $this->getErrorBagChildren()
+ ));
+ return \array_merge($this->getErrors($validate, $minPsrLevel), ...$arr);
+ }
+
+ public function hasAnyErrors(bool $validate = false, string $minPsrLevel = LogLevel::ERROR) : bool
+ {
+ if ($this->hasErrors($validate, $minPsrLevel)) {
+ return true;
+ }
+ foreach ($this->getErrorBagChildren() as $ch) {
+ if ($ch->hasAnyErrors($validate, $minPsrLevel)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/AbstractHeader.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/AbstractHeader.php
new file mode 100644
index 00000000..7ee333bf
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/AbstractHeader.php
@@ -0,0 +1,226 @@
+name = $name;
+ $this->rawValue = $value;
+ $this->parseHeaderValue($consumerService, $value);
+ }
+
+ /**
+ * Filters $this->allParts into the parts required by $this->parts
+ * and assigns it.
+ *
+ * The AbstractHeader::filterAndAssignToParts method filters out CommentParts.
+ */
+ protected function filterAndAssignToParts() : void
+ {
+ $this->parts = \array_values(\array_filter($this->allParts, function($p) {
+ return !($p instanceof CommentPart);
+ }));
+ }
+
+ /**
+ * Calls the consumer and assigns the parsed parts to member variables.
+ *
+ * The default implementation assigns the returned value to $this->allParts
+ * and filters out comments from it, assigning the filtered array to
+ * $this->parts by calling filterAndAssignToParts.
+ */
+ protected function parseHeaderValue(IConsumerService $consumer, string $value) : void
+ {
+ $this->allParts = $consumer($value);
+ $this->filterAndAssignToParts();
+ }
+
+ /**
+ * @return IHeaderPart[]
+ */
+ public function getParts() : array
+ {
+ return $this->parts;
+ }
+
+ /**
+ * @return IHeaderPart[]
+ */
+ public function getAllParts() : array
+ {
+ return $this->allParts;
+ }
+
+ /**
+ * @return string[]
+ */
+ public function getComments() : array
+ {
+ if ($this->comments === null) {
+ $this->comments = \array_map(fn (IHeaderPart $c) => $c->getComment(), \array_merge(...\array_map(
+ fn ($p) => ($p instanceof CommentPart) ? [$p] : $p->getComments(),
+ $this->allParts
+ )));
+ }
+ return $this->comments;
+ }
+
+ public function getValue() : ?string
+ {
+ if (!empty($this->parts)) {
+ return $this->parts[0]->getValue();
+ }
+ return null;
+ }
+
+ public function getRawValue() : string
+ {
+ return $this->rawValue;
+ }
+
+ public function getName() : string
+ {
+ return $this->name;
+ }
+
+ public function __toString() : string
+ {
+ return "{$this->name}: {$this->rawValue}";
+ }
+
+ public function getErrorLoggingContextName() : string
+ {
+ return 'Header::' . $this->getName();
+ }
+
+ protected function getErrorBagChildren() : array
+ {
+ return $this->getAllParts();
+ }
+
+ protected function validate() : void
+ {
+ if (\strlen(\trim($this->name)) === 0) {
+ $this->addError('Header doesn\'t have a name', LogLevel::ERROR);
+ }
+ if (\strlen(\trim($this->rawValue)) === 0) {
+ $this->addError('Header doesn\'t have a value', LogLevel::NOTICE);
+ }
+ }
+
+ /**
+ * Checks if the passed $value parameter is null, and if so tries to parse
+ * a header line from $nameOrLine splitting on first occurrence of a ':'
+ * character.
+ *
+ * The returned array always contains two elements. The first being the
+ * name (or blank if a ':' char wasn't found and $value is null), and the
+ * second being the value.
+ *
+ * @return string[]
+ */
+ protected static function getHeaderPartsFrom(string $nameOrLine, ?string $value = null) : array
+ {
+ $namePart = $nameOrLine;
+ $valuePart = $value;
+ if ($value === null) {
+ // full header line
+ $parts = \explode(':', $nameOrLine, 2);
+ $namePart = (\count($parts) > 1) ? $parts[0] : '';
+ $valuePart = \trim((\count($parts) > 1) ? $parts[1] : $parts[0]);
+ }
+ return [$namePart, $valuePart];
+ }
+
+ /**
+ * Parses the passed parameters into an IHeader object.
+ *
+ * The type of returned IHeader is determined by the name of the header.
+ * See {@see HeaderFactory::newInstance} for more details.
+ *
+ * The required $nameOrLine parameter may contain either the name of a
+ * header to parse, or a full header line, e.g. From: email@example.com. If
+ * passing a full header line, the $value parameter must be set to null (the
+ * default).
+ *
+ * Note that more specific types can be called on directly. For instance an
+ * AddressHeader may be created by calling AddressHeader::from() which will
+ * ignore the name of the header, and always return an AddressHeader, or by
+ * calling `new AddressHeader('name', 'value')` directly.
+ *
+ * @param string $nameOrLine The header's name or full header line.
+ * @param string|null $value The header's value, or null if passing a full
+ * header line to parse.
+ */
+ public static function from(string $nameOrLine, ?string $value = null) : IHeader
+ {
+ $parts = static::getHeaderPartsFrom($nameOrLine, $value);
+ $container = MailMimeParser::getGlobalContainer();
+ $hf = $container->get(HeaderFactory::class);
+ if (self::class !== static::class) {
+ return $hf->newInstanceOf($parts[0], $parts[1], static::class);
+ }
+ return $hf->newInstance($parts[0], $parts[1]);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/AddressHeader.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/AddressHeader.php
new file mode 100644
index 00000000..a6c08115
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/AddressHeader.php
@@ -0,0 +1,138 @@
+get(LoggerInterface::class),
+ $consumerService ?? $di->get(AddressBaseConsumerService::class),
+ $name,
+ $value
+ );
+ }
+
+ /**
+ * Filters $this->allParts into the parts required by $this->parts
+ * and assignes it.
+ *
+ * The AbstractHeader::filterAndAssignToParts method filters out CommentParts.
+ */
+ protected function filterAndAssignToParts() : void
+ {
+ parent::filterAndAssignToParts();
+ foreach ($this->parts as $part) {
+ if ($part instanceof AddressPart) {
+ $this->addresses[] = $part;
+ } elseif ($part instanceof AddressGroupPart) {
+ $this->addresses = \array_merge($this->addresses, $part->getAddresses());
+ $this->groups[] = $part;
+ }
+ }
+ }
+
+ /**
+ * Returns all address parts in the header including any addresses that are
+ * in groups (lists).
+ *
+ * @return AddressPart[] The addresses.
+ */
+ public function getAddresses() : array
+ {
+ return $this->addresses;
+ }
+
+ /**
+ * Returns all group parts (lists) in the header.
+ *
+ * @return AddressGroupPart[]
+ */
+ public function getGroups() : array
+ {
+ return $this->groups;
+ }
+
+ /**
+ * Returns true if an address exists with the passed email address.
+ *
+ * Comparison is done case insensitively.
+ *
+ */
+ public function hasAddress(string $email) : bool
+ {
+ foreach ($this->addresses as $addr) {
+ if (\strcasecmp($addr->getEmail(), $email) === 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns the first email address in the header.
+ *
+ * @return ?string The email address
+ */
+ public function getEmail() : ?string
+ {
+ if (!empty($this->addresses)) {
+ return $this->addresses[0]->getEmail();
+ }
+ return null;
+ }
+
+ /**
+ * Returns the name associated with the first email address to complement
+ * getEmail() if one is set, or null if not.
+ *
+ * @return string|null The person name.
+ */
+ public function getPersonName() : ?string
+ {
+ if (!empty($this->addresses)) {
+ return $this->addresses[0]->getName();
+ }
+ return null;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AbstractConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AbstractConsumerService.php
new file mode 100644
index 00000000..f324555b
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AbstractConsumerService.php
@@ -0,0 +1,338 @@
+logger = $logger;
+ $this->partFactory = $partFactory;
+ $this->subConsumers = $subConsumers;
+ }
+
+ public function __invoke(string $value) : array
+ {
+ $this->logger->debug('Starting {class} for "{value}"', ['class' => static::class, 'value' => $value]);
+ if ($value !== '') {
+ $parts = $this->parseRawValue($value);
+ $this->logger->debug(
+ 'Ending {class} for "{value}": parsed into {cnt} header part objects',
+ ['class' => static::class, 'value' => $value, 'cnt' => \count($parts)]
+ );
+ return $parts;
+ }
+ return [];
+ }
+
+ /**
+ * Returns this consumer and all unique sub consumers.
+ *
+ * Loops into the sub-consumers (and their sub-consumers, etc...) finding
+ * all unique consumers, and returns them in an array.
+ *
+ * @return AbstractConsumerService[] Array of unique consumers.
+ */
+ protected function getAllConsumers() : array
+ {
+ $found = [$this];
+ do {
+ $current = \current($found);
+ $subConsumers = $current->subConsumers;
+ foreach ($subConsumers as $consumer) {
+ if (!\in_array($consumer, $found)) {
+ $found[] = $consumer;
+ }
+ }
+ } while (\next($found) !== false);
+ return $found;
+ }
+
+ /**
+ * Parses the raw header value into header parts.
+ *
+ * Calls splitTokens to split the value into token part strings, then calls
+ * parseParts to parse the returned array.
+ *
+ * @return \ZBateson\MailMimeParser\Header\IHeaderPart[] the array of parsed
+ * parts
+ */
+ private function parseRawValue(string $value) : array
+ {
+ $tokens = $this->splitRawValue($value);
+ return $this->parseTokensIntoParts(new NoRewindIterator(new ArrayIterator($tokens)));
+ }
+
+ /**
+ * Returns an array of regular expression separators specific to this
+ * consumer.
+ *
+ * The returned patterns are used to split the header value into tokens for
+ * the consumer to parse into parts.
+ *
+ * Each array element makes part of a generated regular expression that is
+ * used in a call to preg_split(). RegEx patterns can be used, and care
+ * should be taken to escape special characters.
+ *
+ * @return string[] Array of regex patterns.
+ */
+ abstract protected function getTokenSeparators() : array;
+
+ /**
+ * Returns a list of regular expression markers for this consumer and all
+ * sub-consumers by calling getTokenSeparators().
+ *
+ * @return string[] Array of regular expression markers.
+ */
+ protected function getAllTokenSeparators() : array
+ {
+ $markers = $this->getTokenSeparators();
+ $subConsumers = $this->getAllConsumers();
+ foreach ($subConsumers as $consumer) {
+ $markers = \array_merge($consumer->getTokenSeparators(), $markers);
+ }
+ return \array_unique($markers);
+ }
+
+ /**
+ * Returns a regex pattern used to split the input header string.
+ *
+ * The default implementation calls
+ * {@see AbstractConsumerService::getAllTokenSeparators()} and implodes the
+ * returned array with the regex OR '|' character as its glue.
+ *
+ * @return string the regex pattern
+ */
+ protected function getTokenSplitPattern() : string
+ {
+ $sChars = \implode('|', $this->getAllTokenSeparators());
+ $mimePartPattern = MimeToken::MIME_PART_PATTERN;
+ return '~(' . $mimePartPattern . '|\\\\\r\n|\\\\.|' . $sChars . ')~ms';
+ }
+
+ /**
+ * Returns an array of split tokens from the input string.
+ *
+ * The method calls preg_split using
+ * {@see AbstractConsumerService::getTokenSplitPattern()}. The split array
+ * will not contain any empty parts and will contain the markers.
+ *
+ * @param string $rawValue the raw string
+ * @return string[] the array of tokens
+ */
+ protected function splitRawValue($rawValue) : array
+ {
+ if ($this->tokenSplitPattern === null) {
+ $this->tokenSplitPattern = $this->getTokenSplitPattern();
+ $this->logger->debug(
+ 'Configuring {class} with token split pattern: {pattern}',
+ ['class' => static::class, 'pattern' => $this->tokenSplitPattern]
+ );
+ }
+ return \preg_split(
+ $this->tokenSplitPattern,
+ $rawValue,
+ -1,
+ PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY
+ );
+ }
+
+ /**
+ * Returns true if the passed string token marks the beginning marker for
+ * the current consumer.
+ *
+ * @param string $token The current token
+ */
+ abstract protected function isStartToken(string $token) : bool;
+
+ /**
+ * Returns true if the passed string token marks the end marker for the
+ * current consumer.
+ *
+ * @param string $token The current token
+ */
+ abstract protected function isEndToken(string $token) : bool;
+
+ /**
+ * Constructs and returns an IHeaderPart for the passed string token.
+ *
+ * If the token should be ignored, the function must return null.
+ *
+ * The default created part uses the instance's partFactory->newInstance
+ * method.
+ *
+ * @param string $token the token
+ * @param bool $isLiteral set to true if the token represents a literal -
+ * e.g. an escaped token
+ * @return ?IHeaderPart The constructed header part or null if the token
+ * should be ignored.
+ */
+ protected function getPartForToken(string $token, bool $isLiteral) : ?IHeaderPart
+ {
+ if ($isLiteral) {
+ return $this->partFactory->newToken($token, true);
+ }
+ // can be overridden with custom PartFactory
+ return $this->partFactory->newInstance($token);
+ }
+
+ /**
+ * Iterates through this consumer's sub-consumers checking if the current
+ * token triggers a sub-consumer's start token and passes control onto that
+ * sub-consumer's parseTokenIntoParts().
+ *
+ * If no sub-consumer is responsible for the current token, calls
+ * {@see AbstractConsumerService::getPartForToken()} and returns it in an
+ * array.
+ *
+ * @param Iterator $tokens
+ * @return IHeaderPart[]
+ */
+ protected function getConsumerTokenParts(Iterator $tokens) : array
+ {
+ $token = $tokens->current();
+ $subConsumers = $this->subConsumers;
+ foreach ($subConsumers as $consumer) {
+ if ($consumer->isStartToken($token)) {
+ $this->logger->debug(
+ 'Token: "{value}" in {class} starting sub-consumer {consumer}',
+ ['value' => $token, 'class' => static::class, 'consumer' => \get_class($consumer)]
+ );
+ $this->advanceToNextToken($tokens, true);
+ return $consumer->parseTokensIntoParts($tokens);
+ }
+ }
+ $part = $this->getPartForToken($token, false);
+ return ($part !== null) ? [$part] : [];
+ }
+
+ /**
+ * Returns an array of IHeaderPart for the current token on the iterator.
+ *
+ * If the current token is a start token from a sub-consumer, the sub-
+ * consumer's {@see AbstractConsumerService::parseTokensIntoParts()} method
+ * is called.
+ *
+ * @param Iterator $tokens The token iterator.
+ * @return IHeaderPart[]
+ */
+ protected function getTokenParts(Iterator $tokens) : array
+ {
+ $token = $tokens->current();
+ if ($token === "\\\r\n" || (\strlen($token) === 2 && $token[0] === '\\')) {
+ $part = $this->getPartForToken(\substr($token, 1), true);
+ return ($part !== null) ? [$part] : [];
+ }
+ return $this->getConsumerTokenParts($tokens);
+ }
+
+ /**
+ * Determines if the iterator should be advanced to the next token after
+ * reading tokens or finding a start token.
+ *
+ * The default implementation will advance for a start token, but not
+ * advance on the end token of the current consumer, allowing the end token
+ * to be passed up to a higher-level consumer.
+ *
+ * @param Iterator $tokens The token iterator.
+ * @param bool $isStartToken true for the start token.
+ */
+ protected function advanceToNextToken(Iterator $tokens, bool $isStartToken) : static
+ {
+ $checkEndToken = (!$isStartToken && $tokens->valid());
+ $isEndToken = ($checkEndToken && $this->isEndToken($tokens->current()));
+ if (($isStartToken) || ($checkEndToken && !$isEndToken)) {
+ $tokens->next();
+ }
+ return $this;
+ }
+
+ /**
+ * Iterates over the passed token Iterator and returns an array of parsed
+ * IHeaderPart objects.
+ *
+ * The method checks each token to see if the token matches a sub-consumer's
+ * start token, or if it matches the current consumer's end token to stop
+ * processing.
+ *
+ * If a sub-consumer's start token is matched, the sub-consumer is invoked
+ * and its returned parts are merged to the current consumer's header parts.
+ *
+ * After all tokens are read and an array of Header\Parts are constructed,
+ * the array is passed to {@see AbstractConsumerService::processParts} for
+ * any final processing if there are any parts.
+ *
+ * @param Iterator $tokens An iterator over a string of tokens
+ * @return IHeaderPart[] An array of parsed parts
+ */
+ protected function parseTokensIntoParts(Iterator $tokens) : array
+ {
+ $parts = [];
+ while ($tokens->valid() && !$this->isEndToken($tokens->current())) {
+ $this->logger->debug('Parsing token: {token} in class: {consumer}', ['token' => $tokens->current(), 'consumer' => static::class]);
+ $parts = \array_merge($parts, $this->getTokenParts($tokens));
+ $this->advanceToNextToken($tokens, false);
+ }
+ return (empty($parts)) ? [] : $this->processParts($parts);
+ }
+
+ /**
+ * Performs any final processing on the array of parsed parts before
+ * returning it to the consumer client. The passed $parts array is
+ * guaranteed to not be empty.
+ *
+ * The default implementation simply returns the passed array after
+ * filtering out null/empty parts.
+ *
+ * @param IHeaderPart[] $parts The parsed parts.
+ * @return IHeaderPart[] Array of resulting final parts.
+ */
+ protected function processParts(array $parts) : array
+ {
+ $this->logger->debug('Processing parts array {parts} in {consumer}', ['parts' => $parts, 'consumer' => static::class]);
+ return $parts;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AbstractGenericConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AbstractGenericConsumerService.php
new file mode 100644
index 00000000..39298a3c
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AbstractGenericConsumerService.php
@@ -0,0 +1,69 @@
+partFactory->newContainerPart($parts)];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AddressBaseConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AddressBaseConsumerService.php
new file mode 100644
index 00000000..8a312c3d
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AddressBaseConsumerService.php
@@ -0,0 +1,104 @@
+getConsumerTokenParts($tokens);
+ }
+
+ /**
+ * Never reached by AddressBaseConsumerService. Overridden to satisfy
+ * AbstractConsumerService.
+ *
+ * @codeCoverageIgnore
+ */
+ protected function getPartForToken(string $token, bool $isLiteral) : ?IHeaderPart
+ {
+ return null;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AddressConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AddressConsumerService.php
new file mode 100644
index 00000000..356b2ac9
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AddressConsumerService.php
@@ -0,0 +1,139 @@
+
+ *
+ * Groups must be named, for example:
+ * - To: Winterfell: jonsnow@winterfell.com, Arya Stark ;
+ *
+ * Addresses may contain quoted parts and comments, and names may be mime-header
+ * encoded.
+ *
+ * @author Zaahid Bateson
+ */
+class AddressConsumerService extends AbstractConsumerService
+{
+ public function __construct(
+ LoggerInterface $logger,
+ MimeTokenPartFactory $partFactory,
+ AddressGroupConsumerService $addressGroupConsumerService,
+ AddressEmailConsumerService $addressEmailConsumerService,
+ CommentConsumerService $commentConsumerService,
+ QuotedStringConsumerService $quotedStringConsumerService
+ ) {
+ $addressGroupConsumerService->setAddressConsumerService($this);
+ parent::__construct(
+ $logger,
+ $partFactory,
+ [
+ $addressGroupConsumerService,
+ $addressEmailConsumerService,
+ $commentConsumerService,
+ $quotedStringConsumerService
+ ]
+ );
+ }
+
+ /**
+ * Overridden to return patterns matching end tokens ("," and ";"), and
+ * whitespace.
+ *
+ * @return string[] the patterns
+ */
+ public function getTokenSeparators() : array
+ {
+ return [',', ';', '\s+'];
+ }
+
+ /**
+ * Returns true for commas and semi-colons.
+ *
+ * Although the semi-colon is not strictly the end token of an
+ * AddressConsumerService, it could end a parent
+ * {@see AddressGroupConsumerService}.
+ */
+ protected function isEndToken(string $token) : bool
+ {
+ return ($token === ',' || $token === ';');
+ }
+
+ /**
+ * AddressConsumer is "greedy", so this always returns true.
+ */
+ protected function isStartToken(string $token) : bool
+ {
+ return true;
+ }
+
+ /**
+ * Performs final processing on parsed parts.
+ *
+ * AddressConsumerService's implementation looks for tokens representing the
+ * beginning of an address part, to create a {@see AddressPart} out of a
+ * name/address pair, or assign the name part to a parsed
+ * {@see AddressGroupPart} returned from its AddressGroupConsumerService
+ * sub-consumer.
+ *
+ * The returned array consists of a single element - either an
+ * {@see AddressPart} or an {@see AddressGroupPart}.
+ *
+ * @param \ZBateson\MailMimeParser\Header\IHeaderPart[] $parts
+ * @return \ZBateson\MailMimeParser\Header\IHeaderPart[]|array
+ */
+ protected function processParts(array $parts) : array
+ {
+ $found = null;
+ $revved = \array_reverse($parts, true);
+ foreach ($revved as $key => $part) {
+ if ($part instanceof AddressGroupPart || $part instanceof AddressPart) {
+ $found = $part;
+ // purposefully ignoring anything after
+ \array_splice($parts, $key);
+ break;
+ }
+ }
+
+ if ($found !== null) {
+ if ($found instanceof AddressGroupPart) {
+ return [$this->partFactory->newAddressGroupPart(
+ $parts,
+ [$found]
+ )];
+ }
+ return [$this->partFactory->newAddress(
+ $parts,
+ [$found]
+ )];
+ }
+
+ return [
+ $this->partFactory->newAddress(
+ [],
+ \array_map(fn ($p) => ($p instanceof MimeToken) ? $this->partFactory->newToken($p->getRawValue()) : $p, $parts)
+ )
+ ];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AddressEmailConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AddressEmailConsumerService.php
new file mode 100644
index 00000000..a119d53b
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AddressEmailConsumerService.php
@@ -0,0 +1,78 @@
+.
+ *
+ * The address portion found within the '<' and '>' chars may contain comments
+ * and quoted portions.
+ *
+ * @author Zaahid Bateson
+ */
+class AddressEmailConsumerService extends AbstractConsumerService
+{
+ public function __construct(
+ LoggerInterface $logger,
+ HeaderPartFactory $partFactory,
+ CommentConsumerService $commentConsumerService,
+ QuotedStringConsumerService $quotedStringConsumerService
+ ) {
+ parent::__construct(
+ $logger,
+ $partFactory,
+ [$commentConsumerService, $quotedStringConsumerService]
+ );
+ }
+
+ /**
+ * Overridden to return patterns matching the beginning/end part of an
+ * address in a name/address part ("<" and ">" chars).
+ *
+ * @return string[] the patterns
+ */
+ public function getTokenSeparators() : array
+ {
+ return ['<', '>'];
+ }
+
+ /**
+ * Returns true for the '>' char.
+ */
+ protected function isEndToken(string $token) : bool
+ {
+ return ($token === '>');
+ }
+
+ /**
+ * Returns true for the '<' char.
+ */
+ protected function isStartToken(string $token) : bool
+ {
+ return ($token === '<');
+ }
+
+ /**
+ * Returns a single {@see ZBateson\MailMimeParser\Header\Part\AddressPart}
+ * with its 'email' portion set, so an {@see AddressConsumerService} can
+ * identify it and create an
+ * {@see ZBateson\MailMimeParser\Header\Part\AddressPart} Address with
+ * both a name and email set.
+ *
+ * @param \ZBateson\MailMimeParser\Header\IHeaderPart[] $parts
+ * @return \ZBateson\MailMimeParser\Header\IHeaderPart[]|array
+ */
+ protected function processParts(array $parts) : array
+ {
+ return [$this->partFactory->newAddress([], $parts)];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AddressGroupConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AddressGroupConsumerService.php
new file mode 100644
index 00000000..e613ff42
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/AddressGroupConsumerService.php
@@ -0,0 +1,106 @@
+subConsumers = [$subConsumer];
+ }
+
+ /**
+ * Overridden to return patterns matching the beginning and end markers of a
+ * group address: colon and semi-colon (":" and ";") characters.
+ *
+ * @return string[] the patterns
+ */
+ public function getTokenSeparators() : array
+ {
+ return [':', ';'];
+ }
+
+ /**
+ * Returns true if the passed token is a semi-colon.
+ */
+ protected function isEndToken(string $token) : bool
+ {
+ return ($token === ';');
+ }
+
+ /**
+ * Returns true if the passed token is a colon.
+ */
+ protected function isStartToken(string $token) : bool
+ {
+ return ($token === ':');
+ }
+
+ /**
+ * Overridden to always call processParts even for an empty set of
+ * addresses, since a group could be empty.
+ *
+ * @param Iterator $tokens
+ * @return IHeaderPart[]
+ */
+ protected function parseTokensIntoParts(Iterator $tokens) : array
+ {
+ $ret = parent::parseTokensIntoParts($tokens);
+ if ($ret === []) {
+ return $this->processParts([]);
+ }
+ return $ret;
+ }
+
+ /**
+ * Performs post-processing on parsed parts.
+ *
+ * Returns an array with a single
+ * {@see AddressGroupPart} element with all email addresses from this and
+ * any sub-groups.
+ *
+ * @param \ZBateson\MailMimeParser\Header\IHeaderPart[] $parts
+ * @return AddressGroupPart[]|array
+ */
+ protected function processParts(array $parts) : array
+ {
+ return [$this->partFactory->newAddressGroupPart([], $parts)];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/CommentConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/CommentConsumerService.php
new file mode 100644
index 00000000..764dba7b
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/CommentConsumerService.php
@@ -0,0 +1,113 @@
+partFactory->newInstance($token);
+ }
+
+ /**
+ * Calls $tokens->next() and returns.
+ *
+ * The default implementation checks if the current token is an end token,
+ * and will not advance past it. Because a comment part of a header can be
+ * nested, its implementation must advance past its own 'end' token.
+ */
+ protected function advanceToNextToken(Iterator $tokens, bool $isStartToken) : static
+ {
+ $tokens->next();
+ return $this;
+ }
+
+ /**
+ * Post processing involves creating a single Part\CommentPart out of
+ * generated parts from tokens. The Part\CommentPart is returned in an
+ * array.
+ *
+ * @param IHeaderPart[] $parts
+ * @return IHeaderPart[]
+ */
+ protected function processParts(array $parts) : array
+ {
+ return [$this->partFactory->newCommentPart($parts)];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/DateConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/DateConsumerService.php
new file mode 100644
index 00000000..78580f99
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/DateConsumerService.php
@@ -0,0 +1,45 @@
+partFactory->newToken($token, false);
+ }
+
+ /**
+ * Constructs a single Part\DatePart of any parsed parts returning it in an
+ * array with a single element.
+ *
+ * @param \ZBateson\MailMimeParser\Header\IHeaderPart[] $parts The parsed
+ * parts.
+ * @return \ZBateson\MailMimeParser\Header\IHeaderPart[] Array of resulting
+ * final parts.
+ */
+ protected function processParts(array $parts) : array
+ {
+ return [$this->partFactory->newDatePart($parts)];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/GenericConsumerMimeLiteralPartService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/GenericConsumerMimeLiteralPartService.php
new file mode 100644
index 00000000..46bfac9b
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/GenericConsumerMimeLiteralPartService.php
@@ -0,0 +1,34 @@
+'
+ * characters. Processing for validly-formatted IDs are passed on to its
+ * sub-consumer, IdConsumer.
+ *
+ * @author Zaahid Bateson
+ */
+class IdBaseConsumerService extends AbstractConsumerService
+{
+ public function __construct(
+ LoggerInterface $logger,
+ HeaderPartFactory $partFactory,
+ CommentConsumerService $commentConsumerService,
+ QuotedStringConsumerService $quotedStringConsumerService,
+ IdConsumerService $idConsumerService
+ ) {
+ parent::__construct(
+ $logger,
+ $partFactory,
+ [
+ $commentConsumerService,
+ $quotedStringConsumerService,
+ $idConsumerService
+ ]
+ );
+ }
+
+ /**
+ * Returns '\s+' as a whitespace separator.
+ *
+ * @return string[] an array of regex pattern matchers.
+ */
+ protected function getTokenSeparators() : array
+ {
+ return ['\s+'];
+ }
+
+ /**
+ * IdBaseConsumerService doesn't have start/end tokens, and so always
+ * returns false.
+ */
+ protected function isEndToken(string $token) : bool
+ {
+ return false;
+ }
+
+ /**
+ * IdBaseConsumerService doesn't have start/end tokens, and so always
+ * returns false.
+ *
+ * @codeCoverageIgnore
+ */
+ protected function isStartToken(string $token) : bool
+ {
+ return false;
+ }
+
+ /**
+ * Returns null for whitespace, and
+ * {@see ZBateson\MailMimeParser\Header\Part\Token} for anything else.
+ *
+ * @param string $token the token
+ * @param bool $isLiteral set to true if the token represents a literal -
+ * e.g. an escaped token
+ * @return ?IHeaderPart The constructed header part or null if the token
+ * should be ignored
+ */
+ protected function getPartForToken(string $token, bool $isLiteral) : ?IHeaderPart
+ {
+ if (\preg_match('/^\s+$/', $token)) {
+ return null;
+ }
+ return $this->partFactory->newToken($token, true);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/IdConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/IdConsumerService.php
new file mode 100644
index 00000000..365d6c88
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/IdConsumerService.php
@@ -0,0 +1,57 @@
+' char.
+ *
+ * @author Zaahid Bateson
+ */
+class IdConsumerService extends GenericConsumerService
+{
+ /**
+ * Overridden to return patterns matching the beginning part of an ID ('<'
+ * and '>' chars).
+ *
+ * @return string[] the patterns
+ */
+ public function getTokenSeparators() : array
+ {
+ return \array_merge(parent::getTokenSeparators(), ['<', '>']);
+ }
+
+ /**
+ * Returns true for '>'.
+ */
+ protected function isEndToken(string $token) : bool
+ {
+ return ($token === '>');
+ }
+
+ /**
+ * Returns true for '<'.
+ */
+ protected function isStartToken(string $token) : bool
+ {
+ return ($token === '<');
+ }
+
+ /**
+ * Returns null for whitespace, and Token for anything else.
+ */
+ protected function getPartForToken(string $token, bool $isLiteral) : ?IHeaderPart
+ {
+ if (\preg_match('/^\s+$/', $token)) {
+ return null;
+ }
+ return $this->partFactory->newToken($token, true);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/ParameterConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/ParameterConsumerService.php
new file mode 100644
index 00000000..cc0735a6
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/ParameterConsumerService.php
@@ -0,0 +1,96 @@
+partFactory;
+ return \array_values(\array_map(
+ function($partsArray) use ($factory) {
+ if (\count($partsArray) > 1) {
+ return $factory->newSplitParameterPart($partsArray);
+ }
+ return $partsArray[0];
+ },
+ \array_merge_recursive(...\array_map(
+ function($p) {
+ // if $p->getIndex is non-null, it's a split-parameter part
+ // and an array of one element consisting of name => ParameterPart
+ // is returned, which is then merged into name => array-of-parameter-parts
+ // or ';' object_id . ';' for non-split parts with a value of a single
+ // element array of [ParameterPart]
+ if ($p instanceof ParameterPart && $p->getIndex() !== null) {
+ return [\strtolower($p->getName()) => [$p]];
+ }
+ return [';' . \spl_object_id($p) . ';' => [$p]];
+ },
+ $parts
+ ))
+ ));
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/ParameterNameValueConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/ParameterNameValueConsumerService.php
new file mode 100644
index 00000000..b288b9d0
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/ParameterNameValueConsumerService.php
@@ -0,0 +1,97 @@
+partFactory->newContainerPart($parts)];
+ }
+ return [$this->partFactory->newParameterPart(
+ $nameOnly,
+ $valuePart
+ )];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/ParameterValueConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/ParameterValueConsumerService.php
new file mode 100644
index 00000000..9f3c4360
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/ParameterValueConsumerService.php
@@ -0,0 +1,64 @@
+partFactory->newToken($token, $isLiteral, true);
+ }
+
+ /**
+ * Overridden to combine all part values into a single string and return it
+ * as an array with a single element.
+ *
+ * The returned IHeaderParts is an array containing a single
+ * QuotedLiteralPart.
+ *
+ * @param IHeaderPart[] $parts
+ * @return IHeaderPart[]
+ */
+ protected function processParts(array $parts) : array
+ {
+ return [$this->partFactory->newQuotedLiteralPart($parts)];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/QuotedStringMimeLiteralPartConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/QuotedStringMimeLiteralPartConsumerService.php
new file mode 100644
index 00000000..da36f196
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/QuotedStringMimeLiteralPartConsumerService.php
@@ -0,0 +1,33 @@
+partFactory->newMimeToken($token);
+ }
+ return $this->partFactory->newToken($token, $isLiteral);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/QuotedStringMimeLiteralPartTokenSplitPatternTrait.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/QuotedStringMimeLiteralPartTokenSplitPatternTrait.php
new file mode 100644
index 00000000..6f01d659
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/QuotedStringMimeLiteralPartTokenSplitPatternTrait.php
@@ -0,0 +1,37 @@
+getAllTokenSeparators());
+ $mimePartPattern = MimeToken::MIME_PART_PATTERN_NO_QUOTES;
+ return '~(' . $mimePartPattern . '|\\\\\r\n|\\\\.|' . $sChars . ')~ms';
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/Received/DomainConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/Received/DomainConsumerService.php
new file mode 100644
index 00000000..ad97ccce
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/Received/DomainConsumerService.php
@@ -0,0 +1,68 @@
+partFactory->newReceivedDomainPart($this->partName, $parts)];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/Received/GenericReceivedConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/Received/GenericReceivedConsumerService.php
new file mode 100644
index 00000000..4e623677
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/Received/GenericReceivedConsumerService.php
@@ -0,0 +1,113 @@
+partName = $partName;
+ }
+
+ /**
+ * Returns true if the passed token matches (case-insensitively)
+ * $this->getPartName() with optional whitespace surrounding it.
+ */
+ protected function isStartToken(string $token) : bool
+ {
+ $pattern = '/^' . \preg_quote($this->partName, '/') . '$/i';
+ return (\preg_match($pattern, $token) === 1);
+ }
+
+ /**
+ * Returns true if the token matches (case-insensitively) any of the
+ * following, with optional surrounding whitespace:
+ *
+ * o by
+ * o via
+ * o with
+ * o id
+ * o for
+ * o ;
+ */
+ protected function isEndToken(string $token) : bool
+ {
+ return (\preg_match('/^(by|via|with|id|for|;)$/i', $token) === 1);
+ }
+
+ /**
+ * Returns a whitespace separator (for filtering ignorable whitespace
+ * between parts), and a separator matching the current part name as
+ * set on $this->partName.
+ *
+ * @return string[] an array of regex pattern matchers
+ */
+ protected function getTokenSeparators() : array
+ {
+ return [
+ '\s+',
+ '(\A\s*|\s+)(?i)' . \preg_quote($this->partName, '/') . '(?-i)(?=\s+)'
+ ];
+ }
+
+ /**
+ * @param \ZBateson\MailMimeParser\Header\IHeaderPart[] $parts
+ * @return \ZBateson\MailMimeParser\Header\IHeaderPart[]
+ */
+ protected function processParts(array $parts) : array
+ {
+ return [$this->partFactory->newReceivedPart($this->partName, $parts)];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/Received/ReceivedDateConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/Received/ReceivedDateConsumerService.php
new file mode 100644
index 00000000..ac8166f5
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/Received/ReceivedDateConsumerService.php
@@ -0,0 +1,40 @@
+getAllTokenSeparators());
+ return '~(' . $sChars . ')~';
+ }
+
+ /**
+ * Overridden to /not/ advance when the end token matches a start token for
+ * a sub-consumer.
+ */
+ protected function advanceToNextToken(Iterator $tokens, bool $isStartToken) : static
+ {
+ if ($isStartToken) {
+ $tokens->next();
+ } elseif ($tokens->valid() && !$this->isEndToken($tokens->current())) {
+ foreach ($this->subConsumers as $consumer) {
+ if ($consumer->isStartToken($tokens->current())) {
+ return $this;
+ }
+ }
+ $tokens->next();
+ }
+ return $this;
+ }
+
+ /**
+ * @param \ZBateson\MailMimeParser\Header\IHeaderPart[] $parts
+ * @return \ZBateson\MailMimeParser\Header\IHeaderPart[]
+ */
+ protected function processParts(array $parts) : array
+ {
+ // filtering out tokens (filters out the names, e.g. 'by' or 'with')
+ return \array_values(\array_filter($parts, fn ($p) => !$p instanceof Token));
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/SubjectConsumerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/SubjectConsumerService.php
new file mode 100644
index 00000000..dd6a459e
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Consumer/SubjectConsumerService.php
@@ -0,0 +1,62 @@
+partFactory->newMimeToken($token);
+ }
+ return $this->partFactory->newSubjectToken($token);
+ }
+
+ /**
+ * Returns an array of \ZBateson\MailMimeParser\Header\Part\HeaderPart for
+ * the current token on the iterator.
+ *
+ * Overridden from AbstractConsumerService to remove special filtering for
+ * backslash escaping, which also seems to not apply to Subject headers at
+ * least in ThunderBird's implementation.
+ *
+ * @return IHeaderPart[]
+ */
+ protected function getTokenParts(Iterator $tokens) : array
+ {
+ return $this->getConsumerTokenParts($tokens);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/DateHeader.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/DateHeader.php
new file mode 100644
index 00000000..6b6a9c85
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/DateHeader.php
@@ -0,0 +1,67 @@
+get(LoggerInterface::class),
+ $consumerService ?? $di->get(DateConsumerService::class),
+ $name,
+ $value
+ );
+ }
+
+ /**
+ * Convenience method returning the part's DateTime object, or null if the
+ * date could not be parsed.
+ *
+ * @return ?DateTime The parsed DateTime object.
+ */
+ public function getDateTime() : ?DateTime
+ {
+ if (!empty($this->parts) && $this->parts[0] instanceof DatePart) {
+ return $this->parts[0]->getDateTime();
+ }
+ return null;
+ }
+
+ /**
+ * Returns a DateTimeImmutable for the part's DateTime object, or null if
+ * the date could not be parsed.
+ *
+ * @return ?DateTimeImmutable The parsed DateTimeImmutable object.
+ */
+ public function getDateTimeImmutable() : ?DateTimeImmutable
+ {
+ $dateTime = $this->getDateTime();
+ if ($dateTime !== null) {
+ return DateTimeImmutable::createFromMutable($dateTime);
+ }
+ return null;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/GenericHeader.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/GenericHeader.php
new file mode 100644
index 00000000..ac0d3007
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/GenericHeader.php
@@ -0,0 +1,47 @@
+get(LoggerInterface::class),
+ $consumerService ?? $di->get(DateConsumerService::class),
+ $name,
+ $value
+ );
+ parent::__construct($logger, $consumerService, $name, $value);
+ }
+
+ public function getValue() : ?string
+ {
+ if (!empty($this->parts)) {
+ return \implode('', \array_map(function($p) { return $p->getValue(); }, $this->parts));
+ }
+ return null;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/HeaderConsts.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/HeaderConsts.php
new file mode 100644
index 00000000..289fc4c9
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/HeaderConsts.php
@@ -0,0 +1,95 @@
+ [
+ 'from',
+ 'to',
+ 'cc',
+ 'bcc',
+ 'sender',
+ 'replyto',
+ 'resentfrom',
+ 'resentto',
+ 'resentcc',
+ 'resentbcc',
+ 'resentreplyto',
+ 'returnpath',
+ 'deliveredto',
+ ],
+ DateHeader::class => [
+ 'date',
+ 'resentdate',
+ 'deliverydate',
+ 'expires',
+ 'expirydate',
+ 'replyby',
+ ],
+ ParameterHeader::class => [
+ 'contenttype',
+ 'contentdisposition',
+ 'receivedspf',
+ 'authenticationresults',
+ 'dkimsignature',
+ 'autocrypt',
+ ],
+ SubjectHeader::class => [
+ 'subject',
+ ],
+ IdHeader::class => [
+ 'messageid',
+ 'contentid',
+ 'inreplyto',
+ 'references'
+ ],
+ ReceivedHeader::class => [
+ 'received'
+ ]
+ ];
+
+ /**
+ * @var string Defines the generic IHeader type to use for headers that
+ * aren't mapped in $types
+ */
+ protected $genericType = GenericHeader::class;
+
+ public function __construct(
+ LoggerInterface $logger,
+ MimeTokenPartFactory $mimeTokenPartFactory,
+ AddressBaseConsumerService $addressBaseConsumerService,
+ DateConsumerService $dateConsumerService,
+ GenericConsumerMimeLiteralPartService $genericConsumerMimeLiteralPartService,
+ IdBaseConsumerService $idBaseConsumerService,
+ ParameterConsumerService $parameterConsumerService,
+ ReceivedConsumerService $receivedConsumerService,
+ SubjectConsumerService $subjectConsumerService
+ ) {
+ $this->logger = $logger;
+ $this->mimeTokenPartFactory = $mimeTokenPartFactory;
+ $this->consumerServices = [
+ AddressBaseConsumerService::class => $addressBaseConsumerService,
+ DateConsumerService::class => $dateConsumerService,
+ GenericConsumerMimeLiteralPartService::class => $genericConsumerMimeLiteralPartService,
+ IdBaseConsumerService::class => $idBaseConsumerService,
+ ParameterConsumerService::class => $parameterConsumerService,
+ ReceivedConsumerService::class => $receivedConsumerService,
+ SubjectConsumerService::class => $subjectConsumerService
+ ];
+ }
+
+ /**
+ * Returns the string in lower-case, and with non-alphanumeric characters
+ * stripped out.
+ *
+ * @param string $header The header name
+ * @return string The normalized header name
+ */
+ public function getNormalizedHeaderName(string $header) : string
+ {
+ return \preg_replace('/[^a-z0-9]/', '', \strtolower($header));
+ }
+
+ /**
+ * Returns the name of an IHeader class for the passed header name.
+ *
+ * @param string $name The header name.
+ * @return string The Fully Qualified class name.
+ */
+ private function getClassFor(string $name) : string
+ {
+ $test = $this->getNormalizedHeaderName($name);
+ foreach ($this->types as $class => $matchers) {
+ foreach ($matchers as $matcher) {
+ if ($test === $matcher) {
+ return $class;
+ }
+ }
+ }
+ return $this->genericType;
+ }
+
+ /**
+ * Creates an IHeader instance for the passed header name and value, and
+ * returns it.
+ *
+ * @param string $name The header name.
+ * @param string $value The header value.
+ * @return IHeader The created header object.
+ */
+ public function newInstance(string $name, string $value) : IHeader
+ {
+ $class = $this->getClassFor($name);
+ $this->logger->debug(
+ 'Creating {class} for header with name "{name}" and value "{value}"',
+ ['class' => $class, 'name' => $name, 'value' => $value]
+ );
+ return $this->newInstanceOf($name, $value, $class);
+ }
+
+ /**
+ * Creates an IHeader instance for the passed header name and value using
+ * the passed IHeader class, and returns it.
+ *
+ * @param string $name The header name.
+ * @param string $value The header value.
+ * @param string $iHeaderClass The class to use for header creation
+ * @return IHeader The created header object.
+ */
+ public function newInstanceOf(string $name, string $value, string $iHeaderClass) : IHeader
+ {
+ $ref = new ReflectionClass($iHeaderClass);
+ $params = $ref->getConstructor()->getParameters();
+ if ($ref->isSubclassOf(MimeEncodedHeader::class)) {
+ return new $iHeaderClass(
+ $name,
+ $value,
+ $this->logger,
+ $this->mimeTokenPartFactory,
+ $this->consumerServices[$params[4]->getType()->getName()]
+ );
+ }
+ return new $iHeaderClass(
+ $name,
+ $value,
+ $this->logger,
+ $this->consumerServices[$params[3]->getType()->getName()]
+ );
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/IHeader.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/IHeader.php
new file mode 100644
index 00000000..97c48e5c
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/IHeader.php
@@ -0,0 +1,84 @@
+: '
+ *
+ * @return string The string representation.
+ */
+ public function __toString() : string;
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/IHeaderPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/IHeaderPart.php
new file mode 100644
index 00000000..e439e2e8
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/IHeaderPart.php
@@ -0,0 +1,36 @@
+get(LoggerInterface::class),
+ $mimeTokenPartFactory ?? $di->get(MimeTokenPartFactory::class),
+ $consumerService ?? $di->get(IdBaseConsumerService::class),
+ $name,
+ $value
+ );
+ }
+
+ /**
+ * Returns the ID. Synonymous to calling getValue().
+ *
+ * @return string|null The ID
+ */
+ public function getId() : ?string
+ {
+ return $this->getValue();
+ }
+
+ /**
+ * Returns all IDs parsed for a multi-id header like References or
+ * In-Reply-To.
+ *
+ * @return string[] An array of IDs
+ */
+ public function getIds() : array
+ {
+ return \array_values(\array_map(
+ function($p) {
+ return $p->getValue();
+ },
+ \array_filter($this->parts, function($p) {
+ return !($p instanceof CommentPart);
+ })
+ ));
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/MimeEncodedHeader.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/MimeEncodedHeader.php
new file mode 100644
index 00000000..176a158a
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/MimeEncodedHeader.php
@@ -0,0 +1,66 @@
+mimeTokenPartFactory = $mimeTokenPartFactory;
+ parent::__construct($logger, $consumerService, $name, $value);
+ }
+
+ /**
+ * Mime-decodes any mime-encoded parts prior to invoking
+ * parent::parseHeaderValue.
+ */
+ protected function parseHeaderValue(IConsumerService $consumer, string $value) : void
+ {
+ // handled differently from MimeLiteralPart's decoding which ignores
+ // whitespace between parts, etc...
+ $matchp = '~(' . MimeToken::MIME_PART_PATTERN . ')~';
+ $aMimeParts = \preg_split($matchp, $value, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+ $this->mimeEncodedParsedParts = \array_map([$this->mimeTokenPartFactory, 'newInstance'], $aMimeParts);
+ parent::parseHeaderValue(
+ $consumer,
+ \implode('', \array_map(fn ($part) => $part->getValue(), $this->mimeEncodedParsedParts))
+ );
+ }
+
+ protected function getErrorBagChildren() : array
+ {
+ return \array_values(\array_filter(\array_merge($this->getAllParts(), $this->mimeEncodedParsedParts)));
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/ParameterHeader.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/ParameterHeader.php
new file mode 100644
index 00000000..5a88f6b1
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/ParameterHeader.php
@@ -0,0 +1,99 @@
+getValue() ``` would return
+ * 'zb@example.com', as would calling ```php $header->getValueFor('addr'); ```.
+ *
+ * @author Zaahid Bateson
+ */
+class ParameterHeader extends AbstractHeader
+{
+ /**
+ * @var ParameterPart[] key map of lower-case parameter names and associated
+ * ParameterParts.
+ */
+ protected array $parameters = [];
+
+ public function __construct(
+ string $name,
+ string $value,
+ ?LoggerInterface $logger = null,
+ ?ParameterConsumerService $consumerService = null
+ ) {
+ $di = MailMimeParser::getGlobalContainer();
+ parent::__construct(
+ $logger ?? $di->get(LoggerInterface::class),
+ $consumerService ?? $di->get(ParameterConsumerService::class),
+ $name,
+ $value
+ );
+ }
+
+ /**
+ * Overridden to assign ParameterParts to a map of lower-case parameter
+ * names to ParameterParts.
+ */
+ protected function parseHeaderValue(IConsumerService $consumer, string $value) : void
+ {
+ parent::parseHeaderValue($consumer, $value);
+ foreach ($this->parts as $part) {
+ if ($part instanceof NameValuePart) {
+ $this->parameters[\strtolower($part->getName())] = $part;
+ }
+ }
+ }
+
+ /**
+ * Returns true if a parameter exists with the passed name.
+ *
+ * @param string $name The parameter to look up.
+ */
+ public function hasParameter(string $name) : bool
+ {
+ return isset($this->parameters[\strtolower($name)]);
+ }
+
+ /**
+ * Returns the value of the parameter with the given name, or $defaultValue
+ * if not set.
+ *
+ * @param string $name The parameter to retrieve.
+ * @param string $defaultValue Optional default value (defaulting to null if
+ * not provided).
+ * @return string|null The parameter's value.
+ */
+ public function getValueFor(string $name, ?string $defaultValue = null) : ?string
+ {
+ if (!$this->hasParameter($name)) {
+ return $defaultValue;
+ }
+ return $this->parameters[\strtolower($name)]->getValue();
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/AddressGroupPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/AddressGroupPart.php
new file mode 100644
index 00000000..02aabe5d
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/AddressGroupPart.php
@@ -0,0 +1,86 @@
+addresses = \array_merge(...\array_map(
+ fn ($p) => ($p instanceof AddressGroupPart) ? $p->getAddresses() : [$p],
+ $addressesAndGroupParts
+ ));
+ // for backwards compatibility
+ $this->value = $this->name;
+ }
+
+ /**
+ * Return the AddressGroupPart's array of addresses.
+ *
+ * @return AddressPart[] An array of address parts.
+ */
+ public function getAddresses() : array
+ {
+ return $this->addresses;
+ }
+
+ /**
+ * Returns the AddressPart at the passed index or null.
+ *
+ * @param int $index The 0-based index.
+ * @return ?AddressPart The address.
+ */
+ public function getAddress(int $index) : ?AddressPart
+ {
+ if (!isset($this->addresses[$index])) {
+ return null;
+ }
+ return $this->addresses[$index];
+ }
+
+ protected function validate() : void
+ {
+ if ($this->name === null || \mb_strlen($this->name) === 0) {
+ $this->addError('Address group doesn\'t have a name', LogLevel::ERROR);
+ }
+ if (empty($this->addresses)) {
+ $this->addError('Address group doesn\'t have any email addresses defined in it', LogLevel::NOTICE);
+ }
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/AddressPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/AddressPart.php
new file mode 100644
index 00000000..8b83fb8e
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/AddressPart.php
@@ -0,0 +1,57 @@
+getValue();
+ } elseif ($p instanceof QuotedLiteralPart && $p->getValue() !== '') {
+ return '"' . \preg_replace('/(["\\\])/', '\\\$1', $p->getValue()) . '"';
+ }
+ return \preg_replace('/\s+/', '', $p->getValue());
+ },
+ $parts
+ ));
+ }
+
+ /**
+ * Returns the email address.
+ *
+ * @return string The email address.
+ */
+ public function getEmail() : string
+ {
+ return $this->value;
+ }
+
+ protected function validate() : void
+ {
+ if (empty($this->value)) {
+ $this->addError('Address doesn\'t contain an email address', LogLevel::ERROR);
+ }
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/CommentPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/CommentPart.php
new file mode 100644
index 00000000..92b1f4f8
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/CommentPart.php
@@ -0,0 +1,77 @@
+partFactory = $partFactory;
+ parent::__construct($logger, $charsetConverter, $children);
+ $this->comment = $this->value;
+ $this->value = '';
+ $this->isSpace = true;
+ $this->canIgnoreSpacesBefore = true;
+ $this->canIgnoreSpacesAfter = true;
+ }
+
+ protected function getValueFromParts(array $parts) : string
+ {
+ $partFactory = $this->partFactory;
+ return parent::getValueFromParts(\array_map(
+ function($p) use ($partFactory) {
+ if ($p instanceof CommentPart) {
+ return $partFactory->newQuotedLiteralPart([$partFactory->newToken('(' . $p->getComment() . ')')]);
+ } elseif ($p instanceof QuotedLiteralPart) {
+ return $partFactory->newQuotedLiteralPart([$partFactory->newToken('"' . \str_replace('(["\\])', '\$1', $p->getValue()) . '"')]);
+ }
+ return $p;
+ },
+ $parts
+ ));
+ }
+
+ /**
+ * Returns the comment's text.
+ */
+ public function getComment() : string
+ {
+ return $this->comment;
+ }
+
+ /**
+ * Returns an empty string.
+ */
+ public function getValue() : string
+ {
+ return '';
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/ContainerPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/ContainerPart.php
new file mode 100644
index 00000000..b0189080
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/ContainerPart.php
@@ -0,0 +1,128 @@
+charsetConverter = $charsetConverter;
+ $this->children = $children;
+ $str = (!empty($children)) ? $this->getValueFromParts($children) : '';
+ parent::__construct(
+ $logger,
+ $this->charsetConverter,
+ $str
+ );
+ }
+
+ /**
+ * Filters out ignorable space tokens.
+ *
+ * Spaces are removed if parts on either side of it have their
+ * canIgnoreSpaceAfter/canIgnoreSpaceBefore properties set to true.
+ *
+ * @param HeaderPart[] $parts
+ * @return HeaderPart[]
+ */
+ protected function filterIgnoredSpaces(array $parts) : array
+ {
+ $ends = (object) ['isSpace' => true, 'canIgnoreSpacesAfter' => true, 'canIgnoreSpacesBefore' => true, 'value' => ''];
+
+ $spaced = \array_merge($parts, [$ends]);
+ $filtered = \array_slice(\array_reduce(
+ \array_slice(\array_keys($spaced), 0, -1),
+ function($carry, $key) use ($spaced, $ends) {
+ $p = $spaced[$key];
+ $l = \end($carry);
+ $a = $spaced[$key + 1];
+ if ($p->isSpace && $a === $ends) {
+ // trim
+ if ($l->isSpace) {
+ \array_pop($carry);
+ }
+ return $carry;
+ } elseif ($p->isSpace && ($l->isSpace || ($l->canIgnoreSpacesAfter && $a->canIgnoreSpacesBefore))) {
+ return $carry;
+ }
+ return \array_merge($carry, [$p]);
+ },
+ [$ends]
+ ), 1);
+ return $filtered;
+ }
+
+ /**
+ * Creates the string value representation of this part constructed from the
+ * child parts passed to it.
+ *
+ * The default implementation filters out ignorable whitespace between
+ * parts, and concatenates parts calling 'getValue'.
+ *
+ * @param HeaderParts[] $parts
+ */
+ protected function getValueFromParts(array $parts) : string
+ {
+ return \array_reduce($this->filterIgnoredSpaces($parts), fn ($c, $p) => $c . $p->getValue(), '');
+ }
+
+ /**
+ * Returns the child parts this container part consists of.
+ *
+ * @return IHeaderPart[]
+ */
+ public function getChildParts() : array
+ {
+ return $this->children;
+ }
+
+ public function getComments() : array
+ {
+ return \array_merge(...\array_filter(\array_map(
+ fn ($p) => ($p instanceof CommentPart) ? [$p] : $p->getComments(),
+ $this->children
+ )));
+ }
+
+ /**
+ * Returns this part's children, same as getChildParts().
+ *
+ * @return ErrorBag
+ */
+ protected function getErrorBagChildren() : array
+ {
+ return $this->children;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/DatePart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/DatePart.php
new file mode 100644
index 00000000..09f72ae5
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/DatePart.php
@@ -0,0 +1,72 @@
+value = $dateToken = \trim($this->value);
+
+ // Missing "+" in timezone definition. eg: Thu, 13 Mar 2014 15:02:47 0000 (not RFC compliant)
+ // Won't result in an Exception, but in a valid DateTime in year `0000` - therefore we need to check this first:
+ if (\preg_match('# [0-9]{4}$#', $dateToken)) {
+ $dateToken = \preg_replace('# ([0-9]{4})$#', ' +$1', $dateToken);
+ // @see https://bugs.php.net/bug.php?id=42486
+ } elseif (\preg_match('#UT$#', $dateToken)) {
+ $dateToken = $dateToken . 'C';
+ }
+
+ try {
+ $this->date = new DateTime($dateToken);
+ } catch (Exception $e) {
+ $this->addError(
+ "Unable to parse date from header: \"{$dateToken}\"",
+ LogLevel::ERROR,
+ $e
+ );
+ }
+ }
+
+ /**
+ * Returns a DateTime object or null if it can't be parsed.
+ */
+ public function getDateTime() : ?DateTime
+ {
+ return $this->date;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/HeaderPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/HeaderPart.php
new file mode 100644
index 00000000..8455b38a
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/HeaderPart.php
@@ -0,0 +1,116 @@
+charsetConverter = $charsetConverter;
+ $this->value = $value;
+ }
+
+ /**
+ * Returns the part's representative value after any necessary processing
+ * has been performed. For the raw value, call getRawValue().
+ */
+ public function getValue() : string
+ {
+ return $this->value;
+ }
+
+ /**
+ * Returns the value of the part (which is a string).
+ *
+ * @return string the value
+ */
+ public function __toString() : string
+ {
+ return $this->value;
+ }
+
+ /**
+ * Ensures the encoding of the passed string is set to UTF-8.
+ *
+ * The method does nothing if the passed $from charset is UTF-8 already, or
+ * if $force is set to false and mb_check_encoding for $str returns true
+ * for 'UTF-8'.
+ *
+ * @return string utf-8 string
+ */
+ protected function convertEncoding(string $str, string $from = 'ISO-8859-1', bool $force = false) : string
+ {
+ if ($from !== 'UTF-8') {
+ // mime header part decoding will force it. This is necessary for
+ // UTF-7 because mb_check_encoding will return true
+ if ($force || !($this->charsetConverter->checkEncoding($str, 'UTF-8'))) {
+ try {
+ return $this->charsetConverter->convert($str, $from, 'UTF-8');
+ } catch (UnsupportedCharsetException $ce) {
+ $this->addError('Unable to convert charset', LogLevel::ERROR, $ce);
+ return $this->charsetConverter->convert($str, 'ISO-8859-1', 'UTF-8');
+ }
+ }
+ }
+ return $str;
+ }
+
+ public function getComments() : array
+ {
+ return [];
+ }
+
+ /**
+ * Default implementation returns an empty array.
+ */
+ protected function getErrorBagChildren() : array
+ {
+ return [];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/HeaderPartFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/HeaderPartFactory.php
new file mode 100644
index 00000000..864cad01
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/HeaderPartFactory.php
@@ -0,0 +1,176 @@
+logger = $logger;
+ $this->charsetConverter = $charsetConverter;
+ }
+
+ /**
+ * Creates and returns a default IHeaderPart for this factory, allowing
+ * subclass factories for specialized IHeaderParts.
+ *
+ * The default implementation returns a new Token
+ */
+ public function newInstance(string $value) : IHeaderPart
+ {
+ return $this->newToken($value);
+ }
+
+ /**
+ * Initializes and returns a new Token.
+ */
+ public function newToken(string $value, bool $isLiteral = false, bool $preserveSpaces = false) : Token
+ {
+ return new Token($this->logger, $this->charsetConverter, $value, $isLiteral, $preserveSpaces);
+ }
+
+ /**
+ * Initializes and returns a new SubjectToken.
+ */
+ public function newSubjectToken(string $value) : SubjectToken
+ {
+ return new SubjectToken($this->logger, $this->charsetConverter, $value);
+ }
+
+ /**
+ * Initializes and returns a new MimeToken.
+ */
+ public function newMimeToken(string $value) : MimeToken
+ {
+ return new MimeToken($this->logger, $this->charsetConverter, $value);
+ }
+
+ /**
+ * Initializes and returns a new ContainerPart.
+ *
+ * @param HeaderPart[] $children
+ */
+ public function newContainerPart(array $children) : ContainerPart
+ {
+ return new ContainerPart($this->logger, $this->charsetConverter, $children);
+ }
+
+ /**
+ * Instantiates and returns a SplitParameterPart.
+ *
+ * @param ParameterPart[] $children
+ */
+ public function newSplitParameterPart(array $children) : SplitParameterPart
+ {
+ return new SplitParameterPart($this->logger, $this->charsetConverter, $this, $children);
+ }
+
+ /**
+ * Initializes and returns a new QuotedLiteralPart.
+ *
+ * @param HeaderPart[] $parts
+ */
+ public function newQuotedLiteralPart(array $parts) : QuotedLiteralPart
+ {
+ return new QuotedLiteralPart($this->logger, $this->charsetConverter, $parts);
+ }
+
+ /**
+ * Initializes and returns a new CommentPart.
+ *
+ * @param HeaderPart[] $children
+ */
+ public function newCommentPart(array $children) : CommentPart
+ {
+ return new CommentPart($this->logger, $this->charsetConverter, $this, $children);
+ }
+
+ /**
+ * Initializes and returns a new AddressPart.
+ *
+ * @param HeaderPart[] $nameParts
+ * @param HeaderPart[] $emailParts
+ */
+ public function newAddress(array $nameParts, array $emailParts) : AddressPart
+ {
+ return new AddressPart($this->logger, $this->charsetConverter, $nameParts, $emailParts);
+ }
+
+ /**
+ * Initializes and returns a new AddressGroupPart
+ *
+ * @param HeaderPart[] $nameParts
+ * @param AddressPart[]|AddressGroupPart[] $addressesAndGroups
+ */
+ public function newAddressGroupPart(array $nameParts, array $addressesAndGroups) : AddressGroupPart
+ {
+ return new AddressGroupPart($this->logger, $this->charsetConverter, $nameParts, $addressesAndGroups);
+ }
+
+ /**
+ * Initializes and returns a new DatePart
+ *
+ * @param HeaderPart[] $children
+ */
+ public function newDatePart(array $children) : DatePart
+ {
+ return new DatePart($this->logger, $this->charsetConverter, $children);
+ }
+
+ /**
+ * Initializes and returns a new ParameterPart.
+ *
+ * @param HeaderPart[] $nameParts
+ */
+ public function newParameterPart(array $nameParts, ContainerPart $valuePart) : ParameterPart
+ {
+ return new ParameterPart($this->logger, $this->charsetConverter, $nameParts, $valuePart);
+ }
+
+ /**
+ * Initializes and returns a new ReceivedPart.
+ *
+ * @param HeaderPart[] $children
+ */
+ public function newReceivedPart(string $name, array $children) : ReceivedPart
+ {
+ return new ReceivedPart($this->logger, $this->charsetConverter, $name, $children);
+ }
+
+ /**
+ * Initializes and returns a new ReceivedDomainPart.
+ *
+ * @param HeaderPart[] $children
+ */
+ public function newReceivedDomainPart(string $name, array $children) : ReceivedDomainPart
+ {
+ return new ReceivedDomainPart(
+ $this->logger,
+ $this->charsetConverter,
+ $name,
+ $children
+ );
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/MimeToken.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/MimeToken.php
new file mode 100644
index 00000000..1d4a8ae3
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/MimeToken.php
@@ -0,0 +1,109 @@
+value = $this->decodeMime(\preg_replace('/\r|\n/', '', $this->value));
+ $pattern = self::MIME_PART_PATTERN;
+ $this->canIgnoreSpacesBefore = (bool) \preg_match("/^\s*{$pattern}|\s+/", $this->rawValue);
+ $this->canIgnoreSpacesAfter = (bool) \preg_match("/{$pattern}\s*|\s+\$/", $this->rawValue);
+ }
+
+ /**
+ * Finds and replaces mime parts with their values.
+ *
+ * The method splits the token value into an array on mime-part-patterns,
+ * either replacing a mime part with its value by calling iconv_mime_decode
+ * or converts the encoding on the text part by calling convertEncoding.
+ */
+ protected function decodeMime(string $value) : string
+ {
+ if (\preg_match('/^=\?([A-Za-z\-_0-9]+)\*?([A-Za-z\-_0-9]+)?\?([QBqb])\?([^\?]*)\?=$/', $value, $matches)) {
+ return $this->decodeMatchedEntity($matches);
+ }
+ return $this->convertEncoding($value);
+ }
+
+ /**
+ * Decodes a matched mime entity part into a string and returns it, after
+ * adding the string into the languages array.
+ *
+ * @param string[] $matches
+ */
+ private function decodeMatchedEntity(array $matches) : string
+ {
+ $body = $matches[4];
+ if (\strtoupper($matches[3]) === 'Q') {
+ $body = \quoted_printable_decode(\str_replace('_', '=20', $body));
+ } else {
+ $body = \base64_decode($body);
+ }
+ $this->charset = $matches[1];
+ $this->language = (!empty($matches[2])) ? $matches[2] : null;
+ if ($this->charset !== null) {
+ return $this->convertEncoding($body, $this->charset, true);
+ }
+ return $this->convertEncoding($body, 'ISO-8859-1', true);
+ }
+
+ /**
+ * Returns the language code for the mime part.
+ */
+ public function getLanguage() : ?string
+ {
+ return $this->language;
+ }
+
+ /**
+ * Returns the charset for the encoded part.
+ */
+ public function getCharset() : ?string
+ {
+ return $this->charset;
+ }
+
+ public function getRawValue() : string
+ {
+ return $this->rawValue;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/MimeTokenPartFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/MimeTokenPartFactory.php
new file mode 100644
index 00000000..eb20ef38
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/MimeTokenPartFactory.php
@@ -0,0 +1,27 @@
+newMimeToken($value);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/NameValuePart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/NameValuePart.php
new file mode 100644
index 00000000..618d1e67
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/NameValuePart.php
@@ -0,0 +1,65 @@
+charsetConverter = $charsetConverter;
+ $this->name = (!empty($nameParts)) ? $this->getNameFromParts($nameParts) : '';
+ parent::__construct($logger, $charsetConverter, $valueParts);
+ \array_unshift($this->children, ...$nameParts);
+ }
+
+ /**
+ * Creates the string 'name' representation of this part constructed from
+ * the child name parts passed to it.
+ *
+ * @param HeaderParts[] $parts
+ */
+ protected function getNameFromParts(array $parts) : string
+ {
+ return \array_reduce($this->filterIgnoredSpaces($parts), fn ($c, $p) => $c . $p->getValue(), '');
+ }
+
+ /**
+ * Returns the name of the name/value part.
+ */
+ public function getName() : string
+ {
+ return $this->name;
+ }
+
+ protected function validate() : void
+ {
+ if ($this->value === '') {
+ $this->addError('NameValuePart value is empty', LogLevel::NOTICE);
+ }
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/ParameterPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/ParameterPart.php
new file mode 100644
index 00000000..96e61892
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/ParameterPart.php
@@ -0,0 +1,119 @@
+children);
+ }
+
+ protected function getNameFromParts(array $parts) : string
+ {
+ $name = parent::getNameFromParts($parts);
+ if (\preg_match('~^\s*([^\*]+)\*(\d*)(\*)?$~', $name, $matches)) {
+ $name = $matches[1];
+ $this->index = ($matches[2] !== '') ? (int) ($matches[2]) : null;
+ $this->encoded = (($matches[2] === '') || !empty($matches[3]));
+ }
+ return $name;
+ }
+
+ protected function decodePartValue(string $value, ?string $charset = null) : string
+ {
+ if ($charset !== null) {
+ return $this->convertEncoding(\rawurldecode($value), $charset, true);
+ }
+ return $this->convertEncoding(\rawurldecode($value));
+ }
+
+ protected function getValueFromParts(array $parts) : string
+ {
+ $value = parent::getValueFromParts($parts);
+ if ($this->encoded && \preg_match('~^([^\']*)\'?([^\']*)\'?(.*)$~', $value, $matches)) {
+ $this->charset = (!empty($matches[1]) && !empty($matches[3])) ? $matches[1] : $this->charset;
+ $this->language = (!empty($matches[2])) ? $matches[2] : $this->language;
+ $ev = (empty($matches[3])) ? $matches[1] : $matches[3];
+ // only if it's not part of a SplitParameterPart
+ if ($this->index === null) {
+ // subsequent parts are decoded as a SplitParameterPart since only
+ // the first part are supposed to have charset/language fields
+ return $this->decodePartValue($ev, $this->charset);
+ }
+ return $ev;
+ }
+ return $value;
+ }
+
+ /**
+ * Returns the charset if the part is an RFC-2231 part with a charset set.
+ */
+ public function getCharset() : ?string
+ {
+ return $this->charset;
+ }
+
+ /**
+ * Returns the RFC-1766 (or subset) language tag, if the parameter is an
+ * RFC-2231 part with a language tag set.
+ *
+ * @return ?string the language if set, or null if not
+ */
+ public function getLanguage() : ?string
+ {
+ return $this->language;
+ }
+
+ public function isUrlEncoded() : bool
+ {
+ return $this->encoded;
+ }
+
+ public function getIndex() : ?int
+ {
+ return $this->index;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/QuotedLiteralPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/QuotedLiteralPart.php
new file mode 100644
index 00000000..ad3a5de7
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/QuotedLiteralPart.php
@@ -0,0 +1,46 @@
+ $key + 1) ? $parts[$key + 1] : null;
+ if ($last !== null && $next !== null && $cur->isSpace && (
+ $last->canIgnoreSpacesAfter
+ && $next->canIgnoreSpacesBefore
+ && $last instanceof MimeToken
+ && $next instanceof MimeToken
+ )) {
+ return $carry;
+ }
+ return \array_merge($carry ?? [], [$cur]);
+ }
+ );
+ return $filtered;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/ReceivedDomainPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/ReceivedDomainPart.php
new file mode 100644
index 00000000..c514141d
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/ReceivedDomainPart.php
@@ -0,0 +1,103 @@
+ehloName = ($this->value !== '') ? $this->value : null;
+ $cps = $this->getComments();
+ $commentPart = (!empty($cps)) ? $cps[0] : null;
+
+ $pattern = '~^(\[(IPv[64])?(?P[a-f\d\.\:]+)\])?\s*(helo=)?(?P[a-z0-9\-]+[a-z0-9\-\.]+)?\s*(\[(IPv[64])?(?P[a-f\d\.\:]+)\])?$~i';
+ if ($commentPart !== null && \preg_match($pattern, $commentPart->getComment(), $matches)) {
+ $this->value .= ' (' . $commentPart->getComment() . ')';
+ $this->hostname = (!empty($matches['name'])) ? $matches['name'] : null;
+ $this->address = (!empty($matches['addr1'])) ? $matches['addr1'] : ((!empty($matches['addr2'])) ? $matches['addr2'] : null);
+ }
+ }
+
+ /**
+ * Returns the name used to identify the server in the first part of the
+ * extended-domain line.
+ *
+ * Note that this is not necessarily the name used in the EHLO line to an
+ * SMTP server, since implementations differ so much, not much can be
+ * guaranteed except the position it was parsed in.
+ */
+ public function getEhloName() : ?string
+ {
+ return $this->ehloName;
+ }
+
+ /**
+ * Returns the hostname of the server, or whatever string in the hostname
+ * position when parsing (but never an address).
+ */
+ public function getHostname() : ?string
+ {
+ return $this->hostname;
+ }
+
+ /**
+ * Returns the address of the server, or whatever string that looks like an
+ * address in the address position when parsing (but never a hostname).
+ */
+ public function getAddress() : ?string
+ {
+ return $this->address;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/ReceivedPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/ReceivedPart.php
new file mode 100644
index 00000000..e960f96f
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/ReceivedPart.php
@@ -0,0 +1,37 @@
+name = $name;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/SplitParameterPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/SplitParameterPart.php
new file mode 100644
index 00000000..6c3ff178
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/SplitParameterPart.php
@@ -0,0 +1,102 @@
+partFactory = $headerPartFactory;
+ NameValuePart::__construct($logger, $charsetConverter, [$children[0]], $children);
+ $this->children = $children;
+ }
+
+ protected function getNameFromParts(array $parts) : string
+ {
+ return $parts[0]->getName();
+ }
+
+ private function getMimeTokens(string $value) : array
+ {
+ $pattern = MimeToken::MIME_PART_PATTERN;
+ // remove whitespace between two adjacent mime encoded parts
+ $normed = \preg_replace("/($pattern)\\s+(?=$pattern)/", '$1', $value);
+ // with PREG_SPLIT_DELIM_CAPTURE, matched and unmatched parts are returned
+ $aMimeParts = \preg_split("/($pattern)/", $normed, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+ return \array_map(
+ fn ($p) => (\preg_match("/$pattern/", $p)) ? $this->partFactory->newMimeToken($p) : $this->partFactory->newToken($p, true, true),
+ $aMimeParts
+ );
+ }
+
+ private function combineAdjacentUnencodedParts(array $parts) : array
+ {
+ $runningValue = '';
+ $returnedParts = [];
+ foreach ($parts as $part) {
+ if (!$part->encoded) {
+ $runningValue .= $part->value;
+ continue;
+ }
+ if (!empty($runningValue)) {
+ $returnedParts = \array_merge($returnedParts, $this->getMimeTokens($runningValue));
+ $runningValue = '';
+ }
+ $returnedParts[] = $part;
+ }
+ if (!empty($runningValue)) {
+ $returnedParts = \array_merge($returnedParts, $this->getMimeTokens($runningValue));
+ }
+ return $returnedParts;
+ }
+
+ protected function getValueFromParts(array $parts) : string
+ {
+ $sorted = $parts;
+ \usort($sorted, fn ($a, $b) => $a->index <=> $b->index);
+
+ $first = $sorted[0];
+ $this->language = $first->language;
+ $charset = $this->charset = $first->charset;
+
+ $combined = $this->combineAdjacentUnencodedParts($sorted);
+
+ return \implode('', \array_map(
+ fn ($p) => ($p instanceof ParameterPart && $p->encoded)
+ ? $this->decodePartValue($p->getValue(), ($p->charset === null) ? $charset : $p->charset)
+ : $p->getValue(),
+ $combined
+ ));
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/SubjectToken.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/SubjectToken.php
new file mode 100644
index 00000000..bd82f35d
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/SubjectToken.php
@@ -0,0 +1,40 @@
+value = \preg_replace(['/(\r|\n)+(\s)\s*/', '/(\r|\n)+/'], ['$2', ' '], $value);
+ $this->isSpace = (\preg_match('/^\s*$/m', $this->value) === 1);
+ $this->canIgnoreSpacesBefore = $this->canIgnoreSpacesAfter = $this->isSpace;
+ }
+
+ public function getValue() : string
+ {
+ return $this->convertEncoding($this->value);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/Token.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/Token.php
new file mode 100644
index 00000000..38663a99
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/Part/Token.php
@@ -0,0 +1,66 @@
+rawValue = $value;
+ if (!$isLiteral) {
+ $this->value = \preg_replace(['/(\r|\n)+(\s)/', '/(\r|\n)+/'], ['$2', ' '], $value);
+ if (!$preserveSpaces) {
+ $this->value = \preg_replace('/^\s+$/m', ' ', $this->value);
+ }
+ }
+ $this->isSpace = ($this->value === '' || (!$isLiteral && \preg_match('/^\s*$/m', $this->value) === 1));
+ $this->canIgnoreSpacesBefore = $this->canIgnoreSpacesAfter = $this->isSpace;
+ }
+
+ /**
+ * Returns the part's representative value after any necessary processing
+ * has been performed. For the raw value, call getRawValue().
+ */
+ public function getValue() : string
+ {
+ return $this->convertEncoding($this->value);
+ }
+
+ /**
+ * Returns the part's raw value.
+ */
+ public function getRawValue() : string
+ {
+ return $this->rawValue;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/ReceivedHeader.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/ReceivedHeader.php
new file mode 100644
index 00000000..ec8f974c
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/ReceivedHeader.php
@@ -0,0 +1,235 @@
+hasParameter('from') ``` or
+ * ```php $header->hasParameter('id') ```. The value of the part can be obtained
+ * by calling {@see ReceivedHeader::getValueFor()}, for example
+ * ```php $header->getValueFor('with'); ```.
+ *
+ * Additional parsing is performed on the "FROM" and "BY" parts of a received
+ * header in an attempt to extract the self-identified name of the server, its
+ * hostname, and its address (depending on what's included). These can be
+ * accessed directly from the ReceivedHeader object by calling one of the
+ * following methods:
+ *
+ * o {@see ReceivedHeader::getFromName()} -- the name portion of the FROM part
+ * o {@see ReceivedHeader::getFromHostname()} -- the hostname of the FROM part
+ * o {@see ReceivedHeader::getFromAddress()} -- the adddress portion of the FROM
+ * part
+ * o {@see ReceivedHeader::getByName()} -- same as getFromName, but for the BY
+ * part, and etc... below
+ * o {@see ReceivedHeader::getByHostname()}
+ * o {@see ReceivedHeader::getByAddress()}
+ *
+ * The parsed parts of the FROM and BY parts are determined as follows:
+ *
+ * o Anything outside and before a parenthesized expression is considered "the
+ * name", for example "FROM AlainDeBotton", "AlainDeBotton" would be the name,
+ * but also if the name is an address, but exists outside the parenthesized
+ * expression, it's still considered "the name". For example:
+ * "From [1.2.3.4]", getFromName would return "[1.2.3.4]".
+ * o A parenthesized expression MUST match what looks like either a domain name
+ * on its own, or a domain name and an address. Otherwise the parenthesized
+ * expression is considered a comment, and not parsed into hostname and
+ * address. The rules are defined loosely because many implementations differ
+ * in how strictly they follow the standard. For a domain, it's enough that
+ * the expression starts with any alphanumeric character and contains at least
+ * one '.', followed by any number of '.', '-' and alphanumeric characters.
+ * The address portion must be surrounded in square brackets, and contain any
+ * sequence of '.', ':', numbers, and characters 'a' through 'f'. In addition
+ * the string 'ipv6' may start the expression (for instance, '[ipv6:::1]'
+ * would be valid). A port number may also be considered valid as part of the
+ * address, for example: [1.2.3.4:3231]. No additional validation on the
+ * address is done, and so an invalid address such as '....' could be
+ * returned, so users using the 'address' header are encouraged to validate it
+ * before using it. The square brackets are parsed out of the returned
+ * address, so the value returned by getFromAddress() would be "2.2.2.2", not
+ * "[2.2.2.2]".
+ *
+ * The date/time stamp can be accessed as a DateTime object by calling
+ * {@see ReceivedHeader::getDateTime()}.
+ *
+ * Parsed comments can be accessed by calling {@see
+ * ReceivedHeader::getComments()}. Some implementations may include connection
+ * encryption information or other details in non-standardized comments.
+ *
+ * @author Zaahid Bateson
+ */
+class ReceivedHeader extends ParameterHeader
+{
+ /**
+ * @var DateTime the date/time stamp in the header.
+ */
+ private ?DateTime $date = null;
+
+ /**
+ * @var bool set to true once $date has been looked for
+ */
+ private bool $dateSet = false;
+
+ public function __construct(
+ string $name,
+ string $value,
+ ?LoggerInterface $logger = null,
+ ?ReceivedConsumerService $consumerService = null
+ ) {
+ $di = MailMimeParser::getGlobalContainer();
+ AbstractHeader::__construct(
+ $logger ?? $di->get(LoggerInterface::class),
+ $consumerService ?? $di->get(ReceivedConsumerService::class),
+ $name,
+ $value
+ );
+ }
+
+ /**
+ * Returns the raw, unparsed header value, same as {@see
+ * ReceivedHeader::getRawValue()}.
+ */
+ public function getValue() : ?string
+ {
+ return $this->rawValue;
+ }
+
+ /**
+ * Returns the name identified in the FROM part of the header or null if not
+ * defined or the format wasn't parsed.
+ *
+ * The returned value may either be a name or an address in the form
+ * "[1.2.3.4]". Validation is not performed on this value, and so whatever
+ * exists in this position is returned -- be it contains spaces, or invalid
+ * characters, etc...
+ *
+ * @return ?string The 'FROM' name.
+ */
+ public function getFromName() : ?string
+ {
+ return (isset($this->parameters['from'])) ?
+ $this->parameters['from']->getEhloName() : null;
+ }
+
+ /**
+ * Returns the hostname part of a parenthesized FROM part or null if not
+ * defined or the format wasn't parsed.
+ *
+ * For example, "FROM name (host.name)" would return the string "host.name".
+ * Validation of the hostname is not performed, and the returned value may
+ * not be valid. More details on how the value is parsed and extracted can
+ * be found in the class description for {@see ReceivedHeader}.
+ *
+ * @return ?string The 'FROM' hostname.
+ */
+ public function getFromHostname() : ?string
+ {
+ return (isset($this->parameters['from'])) ?
+ $this->parameters['from']->getHostname() : null;
+ }
+
+ /**
+ * Returns the address part of a parenthesized FROM part or null if not
+ * defined or the format wasn't parsed.
+ *
+ * For example, "FROM name ([1.2.3.4])" would return the string "1.2.3.4".
+ * Validation of the address is not performed, and the returned value may
+ * not be valid. More details on how the value is parsed and extracted can
+ * be found in the class description for {@see ReceivedHeader}.
+ *
+ * @return ?string The 'FROM' address.
+ */
+ public function getFromAddress() : ?string
+ {
+ return (isset($this->parameters['from'])) ?
+ $this->parameters['from']->getAddress() : null;
+ }
+
+ /**
+ * Returns the name identified in the BY part of the header or null if not
+ * defined or the format wasn't parsed.
+ *
+ * The returned value may either be a name or an address in the form
+ * "[1.2.3.4]". Validation is not performed on this value, and so whatever
+ * exists in this position is returned -- be it contains spaces, or invalid
+ * characters, etc...
+ *
+ * @return ?string The 'BY' name.
+ */
+ public function getByName() : ?string
+ {
+ return (isset($this->parameters['by'])) ?
+ $this->parameters['by']->getEhloName() : null;
+ }
+
+ /**
+ * Returns the hostname part of a parenthesized BY part or null if not
+ * defined or the format wasn't parsed.
+ *
+ * For example, "BY name (host.name)" would return the string "host.name".
+ * Validation of the hostname is not performed, and the returned value may
+ * not be valid. More details on how the value is parsed and extracted can
+ * be found in the class description for {@see ReceivedHeader}.
+ *
+ * @return ?string The 'BY' hostname.
+ */
+ public function getByHostname() : ?string
+ {
+ return (isset($this->parameters['by'])) ?
+ $this->parameters['by']->getHostname() : null;
+ }
+
+ /**
+ * Returns the address part of a parenthesized BY part or null if not
+ * defined or the format wasn't parsed.
+ *
+ * For example, "BY name ([1.2.3.4])" would return the string "1.2.3.4".
+ * Validation of the address is not performed, and the returned value may
+ * not be valid. More details on how the value is parsed and extracted can
+ * be found in the class description for {@see ReceivedHeader}.
+ *
+ * @return ?string The 'BY' address.
+ */
+ public function getByAddress() : ?string
+ {
+ return (isset($this->parameters['by'])) ?
+ $this->parameters['by']->getAddress() : null;
+ }
+
+ /**
+ * Returns the date/time stamp for the received header if set, or null
+ * otherwise.
+ */
+ public function getDateTime() : ?DateTime
+ {
+ if ($this->dateSet === false) {
+ foreach ($this->parts as $part) {
+ if ($part instanceof DatePart) {
+ $this->date = $part->getDateTime();
+ }
+ }
+ $this->dateSet = true;
+ }
+ return $this->date;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Header/SubjectHeader.php b/plugins/vendor/zbateson/mail-mime-parser/src/Header/SubjectHeader.php
new file mode 100644
index 00000000..bbadc5f8
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Header/SubjectHeader.php
@@ -0,0 +1,38 @@
+get(LoggerInterface::class),
+ $consumerService ?? $di->get(SubjectConsumerService::class),
+ $name,
+ $value
+ );
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/IErrorBag.php b/plugins/vendor/zbateson/mail-mime-parser/src/IErrorBag.php
new file mode 100644
index 00000000..98962c1c
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/IErrorBag.php
@@ -0,0 +1,86 @@
+parse(fopen('path/to/file.txt'), true);
+ * // use $message here
+ * ```
+ *
+ * @author Zaahid Bateson
+ */
+class MailMimeParser
+{
+ /**
+ * @var string the default charset used to encode strings (or string content
+ * like streams) returned by MailMimeParser (for e.g. the string
+ * returned by calling $message->getTextContent()).
+ */
+ public const DEFAULT_CHARSET = 'UTF-8';
+
+ /**
+ * @var string the default definition file.
+ */
+ private const DEFAULT_DEFINITIONS_FILE = __DIR__ . '/di_config.php';
+
+ /**
+ * @var Container The instance's dependency injection container.
+ */
+ protected Container $container;
+
+ /**
+ * @var MessageParserService for parsing messages
+ */
+ protected MessageParserService $messageParser;
+
+ /**
+ * @var Container The static global container
+ */
+ private static ?Container $globalContainer = null;
+
+ /**
+ * @var array an array of global definitions
+ * being used.
+ */
+ private static array $globalDefinitions = [self::DEFAULT_DEFINITIONS_FILE];
+
+ /**
+ * Returns the default ContainerBuilder with default loaded definitions.
+ */
+ private static function getGlobalContainerBuilder() : ContainerBuilder
+ {
+ $builder = new ContainerBuilder();
+ foreach (self::$globalDefinitions as $def) {
+ $builder->addDefinitions($def);
+ }
+ return $builder;
+ }
+
+ /**
+ * Sets global configuration for php-di. Overrides all previously set
+ * definitions. You can optionally not use the default MMP definitions file
+ * by passing 'false' to the $useDefaultDefinitionsFile argument.
+ *
+ * @var array array of definitions
+ */
+ public static function setGlobalPhpDiConfigurations(array $phpDiConfigs, bool $useDefaultDefinitionsFile = true) : void
+ {
+ self::$globalDefinitions = \array_merge(
+ ($useDefaultDefinitionsFile) ? [self::DEFAULT_DEFINITIONS_FILE] : [],
+ $phpDiConfigs
+ );
+ self::$globalContainer = null;
+ }
+
+ public static function addGlobalPhpDiContainerDefinition(array|string|DefinitionSource $phpDiConfig) : void
+ {
+ self::$globalDefinitions[] = $phpDiConfig;
+ self::$globalContainer = null;
+ }
+
+ public static function resetGlobalPhpDiContainerDefinitions() : void
+ {
+ self::$globalDefinitions = [self::DEFAULT_DEFINITIONS_FILE];
+ self::$globalContainer = null;
+ }
+
+ /**
+ * Returns the global php-di container instance.
+ *
+ */
+ public static function getGlobalContainer() : Container
+ {
+ if (self::$globalContainer === null) {
+ $builder = self::getGlobalContainerBuilder();
+ self::$globalContainer = $builder->build();
+ }
+ return self::$globalContainer;
+ }
+
+ /**
+ * Registers the provided logger globally.
+ */
+ public static function setGlobalLogger(LoggerInterface $logger) : void
+ {
+ self::$globalDefinitions[] = [LoggerInterface::class => $logger];
+ self::$globalContainer = null;
+ }
+
+ /**
+ * Provide custom php-di configuration to customize dependency injection, or
+ * provide a custom logger for the instance only.
+ *
+ * Note: this only affects instances created through this instance of the
+ * MailMimeParser, or the container itself. Calling 'new MimePart()'
+ * directly for instance, would use the global service locator to setup any
+ * dependencies MimePart needs. This applies to a provided $logger too --
+ * it would only affect instances of objects created through the provided
+ * MailMimeParser.
+ *
+ * Passing false to $useGlobalDefinitions will cause MMP to not use any
+ * global definitions. The default definitions file
+ * MailMimeParser::DEFAULT_DEFINITIONS_FILE will still be added though.
+ *
+ * @see MailMimeParser::setGlobalPhpDiConfiguration() to register
+ * configuration globally.
+ * @see MailMimeParser::setGlobalLogger() to set a global logger
+ */
+ public function __construct(
+ ?LoggerInterface $logger = null,
+ array|string|DefinitionSource|null $phpDiContainerConfig = null,
+ bool $useGlobalDefinitions = true
+ ) {
+ if ($phpDiContainerConfig !== null || $logger !== null) {
+ if ($useGlobalDefinitions) {
+ $builder = self::getGlobalContainerBuilder();
+ } else {
+ $builder = new ContainerBuilder();
+ $builder->addDefinitions(self::DEFAULT_DEFINITIONS_FILE);
+ }
+ if ($phpDiContainerConfig !== null) {
+ $builder->addDefinitions($phpDiContainerConfig);
+ }
+ if ($logger !== null) {
+ $builder->addDefinitions([LoggerInterface::class => $logger]);
+ }
+ $this->container = $builder->build();
+ } else {
+ $this->container = self::getGlobalContainer();
+ }
+ $this->messageParser = $this->container->get(MessageParserService::class);
+ }
+
+ /**
+ * Parses the passed stream handle or string into an {@see IMessage} object
+ * and returns it.
+ *
+ * If the passed $resource is a resource handle or StreamInterface, the
+ * resource must remain open while the returned IMessage object exists.
+ * Pass true as the second argument to have the resource attached to the
+ * IMessage and closed for you when it's destroyed, or pass false to
+ * manually close it if it should remain open after the IMessage object is
+ * destroyed.
+ *
+ * @param resource|StreamInterface|string $resource The resource handle to
+ * the input stream of the mime message, or a string containing a
+ * mime message.
+ * @param bool $attached pass true to have it attached to the returned
+ * IMessage and destroyed with it.
+ */
+ public function parse(mixed $resource, bool $attached) : IMessage
+ {
+ $stream = Utils::streamFor(
+ $resource,
+ ['metadata' => ['mmp-detached-stream' => ($attached !== true)]]
+ );
+ if (!$stream->isSeekable()) {
+ $stream = new CachingStream($stream);
+ }
+ return $this->messageParser->parse($stream);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message.php
new file mode 100644
index 00000000..43285b13
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message.php
@@ -0,0 +1,342 @@
+multipartHelper = $multipartHelper ?? $di->get(MultipartHelper::class);
+ $this->privacyHelper = $privacyHelper ?? $di->get(PrivacyHelper::class);
+ }
+
+ /**
+ * Convenience method to parse a handle or string into an IMessage without
+ * requiring including MailMimeParser, instantiating it, and calling parse.
+ *
+ * If the passed $resource is a resource handle or StreamInterface, the
+ * resource must remain open while the returned IMessage object exists.
+ * Pass true as the second argument to have the resource attached to the
+ * IMessage and closed for you when it's destroyed, or pass false to
+ * manually close it if it should remain open after the IMessage object is
+ * destroyed.
+ *
+ * @param resource|StreamInterface|string $resource The resource handle to
+ * the input stream of the mime message, or a string containing a
+ * mime message.
+ * @param bool $attached pass true to have it attached to the returned
+ * IMessage and destroyed with it.
+ */
+ public static function from(mixed $resource, bool $attached) : IMessage
+ {
+ static $mmp = null;
+ if ($mmp === null) {
+ $mmp = new MailMimeParser();
+ }
+ return $mmp->parse($resource, $attached);
+ }
+
+ /**
+ * Returns true if the current part is a mime part.
+ *
+ * The message is considered 'mime' if it has either a Content-Type or
+ * MIME-Version header defined.
+ *
+ */
+ public function isMime() : bool
+ {
+ $contentType = $this->getHeaderValue(HeaderConsts::CONTENT_TYPE);
+ $mimeVersion = $this->getHeaderValue(HeaderConsts::MIME_VERSION);
+ return ($contentType !== null || $mimeVersion !== null);
+ }
+
+ public function getSubject() : ?string
+ {
+ return $this->getHeaderValue(HeaderConsts::SUBJECT);
+ }
+
+ public function getTextPart(int $index = 0) : ?IMessagePart
+ {
+ return $this->getPart(
+ $index,
+ PartFilter::fromInlineContentType('text/plain')
+ );
+ }
+
+ public function getTextPartCount() : int
+ {
+ return $this->getPartCount(
+ PartFilter::fromInlineContentType('text/plain')
+ );
+ }
+
+ public function getHtmlPart(int $index = 0) : ?IMessagePart
+ {
+ return $this->getPart(
+ $index,
+ PartFilter::fromInlineContentType('text/html')
+ );
+ }
+
+ public function getHtmlPartCount() : int
+ {
+ return $this->getPartCount(
+ PartFilter::fromInlineContentType('text/html')
+ );
+ }
+
+ public function getTextStream(int $index = 0, string $charset = MailMimeParser::DEFAULT_CHARSET) : ?StreamInterface
+ {
+ $textPart = $this->getTextPart($index);
+ if ($textPart !== null) {
+ return $textPart->getContentStream($charset);
+ }
+ return null;
+ }
+
+ public function getTextContent(int $index = 0, string $charset = MailMimeParser::DEFAULT_CHARSET) : ?string
+ {
+ $part = $this->getTextPart($index);
+ if ($part !== null) {
+ return $part->getContent($charset);
+ }
+ return null;
+ }
+
+ public function getHtmlStream(int $index = 0, string $charset = MailMimeParser::DEFAULT_CHARSET) : ?StreamInterface
+ {
+ $htmlPart = $this->getHtmlPart($index);
+ if ($htmlPart !== null) {
+ return $htmlPart->getContentStream($charset);
+ }
+ return null;
+ }
+
+ public function getHtmlContent(int $index = 0, string $charset = MailMimeParser::DEFAULT_CHARSET) : ?string
+ {
+ $part = $this->getHtmlPart($index);
+ if ($part !== null) {
+ return $part->getContent($charset);
+ }
+ return null;
+ }
+
+ public function setTextPart(mixed $resource, string $charset = 'UTF-8') : static
+ {
+ $this->multipartHelper
+ ->setContentPartForMimeType(
+ $this,
+ 'text/plain',
+ $resource,
+ $charset
+ );
+ return $this;
+ }
+
+ public function setHtmlPart(mixed $resource, string $charset = 'UTF-8') : static
+ {
+ $this->multipartHelper
+ ->setContentPartForMimeType(
+ $this,
+ 'text/html',
+ $resource,
+ $charset
+ );
+ return $this;
+ }
+
+ public function removeTextPart(int $index = 0) : bool
+ {
+ return $this->multipartHelper
+ ->removePartByMimeType(
+ $this,
+ 'text/plain',
+ $index
+ );
+ }
+
+ public function removeAllTextParts(bool $moveRelatedPartsBelowMessage = true) : bool
+ {
+ return $this->multipartHelper
+ ->removeAllContentPartsByMimeType(
+ $this,
+ 'text/plain',
+ $moveRelatedPartsBelowMessage
+ );
+ }
+
+ public function removeHtmlPart(int $index = 0) : bool
+ {
+ return $this->multipartHelper
+ ->removePartByMimeType(
+ $this,
+ 'text/html',
+ $index
+ );
+ }
+
+ public function removeAllHtmlParts(bool $moveRelatedPartsBelowMessage = true) : bool
+ {
+ return $this->multipartHelper
+ ->removeAllContentPartsByMimeType(
+ $this,
+ 'text/html',
+ $moveRelatedPartsBelowMessage
+ );
+ }
+
+ public function getAttachmentPart(int $index) : ?IMessagePart
+ {
+ return $this->getPart(
+ $index,
+ PartFilter::fromAttachmentFilter()
+ );
+ }
+
+ public function getAllAttachmentParts() : array
+ {
+ return $this->getAllParts(
+ PartFilter::fromAttachmentFilter()
+ );
+ }
+
+ public function getAttachmentCount() : int
+ {
+ return \count($this->getAllAttachmentParts());
+ }
+
+ public function addAttachmentPart(mixed $resource, string $mimeType, ?string $filename = null, string $disposition = 'attachment', string $encoding = 'base64') : static
+ {
+ $this->multipartHelper
+ ->createAndAddPartForAttachment(
+ $this,
+ $resource,
+ $mimeType,
+ (\strcasecmp($disposition, 'inline') === 0) ? 'inline' : 'attachment',
+ $filename,
+ $encoding
+ );
+ return $this;
+ }
+
+ public function addAttachmentPartFromFile(string $filePath, string $mimeType, ?string $filename = null, string $disposition = 'attachment', string $encoding = 'base64') : static
+ {
+ $handle = Psr7\Utils::streamFor(\fopen($filePath, 'r'));
+ if ($filename === null) {
+ $filename = \basename($filePath);
+ }
+ $this->addAttachmentPart($handle, $mimeType, $filename, $disposition, $encoding);
+ return $this;
+ }
+
+ public function removeAttachmentPart(int $index) : static
+ {
+ $part = $this->getAttachmentPart($index);
+ $this->removePart($part);
+ return $this;
+ }
+
+ public function getSignedMessageStream() : ?StreamInterface
+ {
+ return $this
+ ->privacyHelper
+ ->getSignedMessageStream($this);
+ }
+
+ public function getSignedMessageAsString() : ?string
+ {
+ return $this
+ ->privacyHelper
+ ->getSignedMessageAsString($this);
+ }
+
+ public function getSignaturePart() : ?IMessagePart
+ {
+ if (\strcasecmp($this->getContentType(), 'multipart/signed') === 0) {
+ return $this->getChild(1);
+ }
+ return null;
+ }
+
+ public function setAsMultipartSigned(string $micalg, string $protocol) : static
+ {
+ $this->privacyHelper
+ ->setMessageAsMultipartSigned($this, $micalg, $protocol);
+ return $this;
+ }
+
+ public function setSignature(string $body) : static
+ {
+ $this->privacyHelper
+ ->setSignature($this, $body);
+ return $this;
+ }
+
+ public function getMessageId() : ?string
+ {
+ return $this->getHeaderValue(HeaderConsts::MESSAGE_ID);
+ }
+
+ public function getErrorLoggingContextName() : string
+ {
+ $params = '';
+ if (!empty($this->getMessageId())) {
+ $params .= ', message-id=' . $this->getContentId();
+ }
+ $params .= ', content-type=' . $this->getContentType();
+ $nsClass = static::class;
+ $class = \substr($nsClass, (\strrpos($nsClass, '\\') ?? -1) + 1);
+ return $class . '(' . \spl_object_id($this) . $params . ')';
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/IMessagePartFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/IMessagePartFactory.php
new file mode 100644
index 00000000..036b92d9
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/IMessagePartFactory.php
@@ -0,0 +1,42 @@
+logger = $logger;
+ $this->streamFactory = $streamFactory;
+ $this->partStreamContainerFactory = $partStreamContainerFactory;
+ }
+
+ /**
+ * Constructs a new IMessagePart object and returns it
+ */
+ abstract public function newInstance(?IMimePart $parent = null) : IMessagePart;
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/IMimePartFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/IMimePartFactory.php
new file mode 100644
index 00000000..d76fd579
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/IMimePartFactory.php
@@ -0,0 +1,55 @@
+partHeaderContainerFactory = $partHeaderContainerFactory;
+ $this->partChildrenContainerFactory = $partChildrenContainerFactory;
+ }
+
+ /**
+ * Constructs a new IMimePart object and returns it
+ */
+ public function newInstance(?IMimePart $parent = null) : IMimePart
+ {
+ $streamContainer = $this->partStreamContainerFactory->newInstance();
+ $headerContainer = $this->partHeaderContainerFactory->newInstance();
+ $part = new MimePart(
+ $parent,
+ $this->logger,
+ $streamContainer,
+ $headerContainer,
+ $this->partChildrenContainerFactory->newInstance()
+ );
+ $streamContainer->setStream($this->streamFactory->newMessagePartStream($part));
+ return $part;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/IUUEncodedPartFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/IUUEncodedPartFactory.php
new file mode 100644
index 00000000..999e4d35
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/IUUEncodedPartFactory.php
@@ -0,0 +1,37 @@
+partStreamContainerFactory->newInstance();
+ $part = new UUEncodedPart(
+ null,
+ null,
+ $parent,
+ $this->logger,
+ $streamContainer
+ );
+ $streamContainer->setStream($this->streamFactory->newMessagePartStream($part));
+ return $part;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/PartChildrenContainerFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/PartChildrenContainerFactory.php
new file mode 100644
index 00000000..d5c103b1
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/PartChildrenContainerFactory.php
@@ -0,0 +1,23 @@
+logger = $logger;
+ $this->headerFactory = $headerFactory;
+ }
+
+ /**
+ * Creates and returns a PartHeaderContainer.
+ */
+ public function newInstance(?PartHeaderContainer $from = null) : PartHeaderContainer
+ {
+ return new PartHeaderContainer($this->logger, $this->headerFactory, $from);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/PartStreamContainerFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/PartStreamContainerFactory.php
new file mode 100644
index 00000000..2a45ca95
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Factory/PartStreamContainerFactory.php
@@ -0,0 +1,51 @@
+logger = $logger;
+ $this->streamFactory = $streamFactory;
+ $this->mbWrapper = $mbWrapper;
+ $this->throwExceptionReadingPartContentFromUnsupportedCharsets = $throwExceptionReadingPartContentFromUnsupportedCharsets;
+ }
+
+ public function newInstance() : PartStreamContainer
+ {
+ return new PartStreamContainer(
+ $this->logger,
+ $this->streamFactory,
+ $this->mbWrapper,
+ $this->throwExceptionReadingPartContentFromUnsupportedCharsets
+ );
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/Helper/AbstractHelper.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Helper/AbstractHelper.php
new file mode 100644
index 00000000..ede79c77
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Helper/AbstractHelper.php
@@ -0,0 +1,37 @@
+mimePartFactory = $mimePartFactory;
+ $this->uuEncodedPartFactory = $uuEncodedPartFactory;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/Helper/GenericHelper.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Helper/GenericHelper.php
new file mode 100644
index 00000000..25856b31
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Helper/GenericHelper.php
@@ -0,0 +1,161 @@
+getName(), 'Content') === 0
+ && !\in_array(\strtolower(\str_replace('-', '', $header->getName())), \array_merge(self::$nonMimeContentFields, $exceptions)));
+ }
+
+ /**
+ * Copies the passed $header from $from, to $to or sets the header to
+ * $default if it doesn't exist in $from.
+ *
+ * @param string $header
+ * @param string $default
+ */
+ public function copyHeader(IMimePart $from, IMimePart $to, $header, $default = null) : static
+ {
+ $fromHeader = $from->getHeader($header);
+ $set = ($fromHeader !== null) ? $fromHeader->getRawValue() : $default;
+ if ($set !== null) {
+ $to->setRawHeader($header, $set);
+ }
+ return $this;
+ }
+
+ /**
+ * Removes Content-* headers from the passed part, then detaches its content
+ * stream.
+ *
+ * An exception is made for the obsolete Content-Return header, which isn't
+ * isn't a MIME content field and so isn't removed.
+ */
+ public function removeContentHeadersAndContent(IMimePart $part) : static
+ {
+ foreach ($part->getAllHeaders() as $header) {
+ if ($this->isMimeContentField($header)) {
+ $part->removeHeader($header->getName());
+ }
+ }
+ $part->detachContentStream();
+ return $this;
+ }
+
+ /**
+ * Copies Content-* headers from the $from header into the $to header. If
+ * the Content-Type header isn't defined in $from, defaults to text/plain
+ * with utf-8 and quoted-printable as its Content-Transfer-Encoding.
+ *
+ * An exception is made for the obsolete Content-Return header, which isn't
+ * isn't a MIME content field and so isn't copied.
+ *
+ * @param bool $move
+ */
+ public function copyContentHeadersAndContent(IMimePart $from, IMimePart $to, $move = false) : static
+ {
+ $this->copyHeader($from, $to, HeaderConsts::CONTENT_TYPE, 'text/plain; charset=utf-8');
+ if ($from->getHeader(HeaderConsts::CONTENT_TYPE) === null) {
+ $this->copyHeader($from, $to, HeaderConsts::CONTENT_TRANSFER_ENCODING, 'quoted-printable');
+ } else {
+ $this->copyHeader($from, $to, HeaderConsts::CONTENT_TRANSFER_ENCODING);
+ }
+ foreach ($from->getAllHeaders() as $header) {
+ if ($this->isMimeContentField($header, ['contenttype', 'contenttransferencoding'])) {
+ $this->copyHeader($from, $to, $header->getName());
+ }
+ }
+ if ($from->hasContent()) {
+ $to->attachContentStream($from->getContentStream(), MailMimeParser::DEFAULT_CHARSET);
+ }
+ if ($move) {
+ $this->removeContentHeadersAndContent($from);
+ }
+ return $this;
+ }
+
+ /**
+ * Creates a new content part from the passed part, allowing the part to be
+ * used for something else (e.g. changing a non-mime message to a multipart
+ * mime message).
+ *
+ * @return IMimePart the newly-created IMimePart
+ */
+ public function createNewContentPartFrom(IMimePart $part) : IMimePart
+ {
+ $mime = $this->mimePartFactory->newInstance();
+ $this->copyContentHeadersAndContent($part, $mime, true);
+ return $mime;
+ }
+
+ /**
+ * Copies type headers (Content-Type, Content-Disposition,
+ * Content-Transfer-Encoding) from the $from MimePart to $to. Attaches the
+ * content resource handle of $from to $to, and loops over child parts,
+ * removing them from $from and adding them to $to.
+ *
+ */
+ public function movePartContentAndChildren(IMimePart $from, IMimePart $to) : static
+ {
+ $this->copyContentHeadersAndContent($from, $to, true);
+ if ($from->getChildCount() > 0) {
+ foreach ($from->getChildIterator() as $child) {
+ $from->removePart($child);
+ $to->addChild($child);
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * Replaces the $part IMimePart with $replacement.
+ *
+ * Essentially removes $part from its parent, and adds $replacement in its
+ * same position. If $part is the IMessage, then $part can't be removed and
+ * replaced, and instead $replacement's type headers are copied to $message,
+ * and any children below $replacement are added directly below $message.
+ */
+ public function replacePart(IMessage $message, IMimePart $part, IMimePart $replacement) : static
+ {
+ $position = $message->removePart($replacement);
+ if ($part === $message) {
+ $this->movePartContentAndChildren($replacement, $message);
+ return $this;
+ }
+ $parent = $part->getParent();
+ $parent->addChild($replacement, $position);
+ $parent->removePart($part);
+
+ return $this;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/Helper/MultipartHelper.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Helper/MultipartHelper.php
new file mode 100644
index 00000000..e9fe10aa
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Helper/MultipartHelper.php
@@ -0,0 +1,396 @@
+genericHelper = $genericHelper;
+ }
+
+ /**
+ * Creates and returns a unique boundary.
+ *
+ * @param string $mimeType first 3 characters of a multipart type are used,
+ * e.g. REL for relative or ALT for alternative
+ */
+ public function getUniqueBoundary(string $mimeType) : string
+ {
+ $type = \ltrim(\strtoupper(\preg_replace('/^(multipart\/(.{3}).*|.*)$/i', '$2-', $mimeType)), '-');
+ return \uniqid('----=MMP-' . $type . '-', true);
+ }
+
+ /**
+ * Creates a unique mime boundary and assigns it to the passed part's
+ * Content-Type header with the passed mime type.
+ */
+ public function setMimeHeaderBoundaryOnPart(IMimePart $part, string $mimeType) : static
+ {
+ $part->setRawHeader(
+ HeaderConsts::CONTENT_TYPE,
+ "$mimeType;\r\n\tboundary=\""
+ . $this->getUniqueBoundary($mimeType) . '"'
+ );
+ $part->notify();
+ return $this;
+ }
+
+ /**
+ * Sets the passed message as multipart/mixed.
+ *
+ * If the message has content, a new part is created and added as a child of
+ * the message. The message's content and content headers are moved to the
+ * new part.
+ */
+ public function setMessageAsMixed(IMessage $message) : static
+ {
+ if ($message->hasContent()) {
+ $part = $this->genericHelper->createNewContentPartFrom($message);
+ $message->addChild($part, 0);
+ }
+ $this->setMimeHeaderBoundaryOnPart($message, 'multipart/mixed');
+ $atts = $message->getAllAttachmentParts();
+ if (!empty($atts)) {
+ foreach ($atts as $att) {
+ $att->notify();
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * Sets the passed message as multipart/alternative.
+ *
+ * If the message has content, a new part is created and added as a child of
+ * the message. The message's content and content headers are moved to the
+ * new part.
+ */
+ public function setMessageAsAlternative(IMessage $message) : static
+ {
+ if ($message->hasContent()) {
+ $part = $this->genericHelper->createNewContentPartFrom($message);
+ $message->addChild($part, 0);
+ }
+ $this->setMimeHeaderBoundaryOnPart($message, 'multipart/alternative');
+ return $this;
+ }
+
+ /**
+ * Searches the passed $alternativePart for a part with the passed mime type
+ * and returns its parent.
+ *
+ * Used for alternative mime types that have a multipart/mixed or
+ * multipart/related child containing a content part of $mimeType, where
+ * the whole mixed/related part should be removed.
+ *
+ * @param string $mimeType the content-type to find below $alternativePart
+ * @param IMimePart $alternativePart The multipart/alternative part to look
+ * under
+ * @return bool|IMimePart false if a part is not found
+ */
+ public function getContentPartContainerFromAlternative($mimeType, IMimePart $alternativePart) : bool|IMimePart
+ {
+ $part = $alternativePart->getPart(0, PartFilter::fromInlineContentType($mimeType));
+ $contPart = null;
+ do {
+ if ($part === null) {
+ return false;
+ }
+ $contPart = $part;
+ $part = $part->getParent();
+ } while ($part !== $alternativePart);
+ return $contPart;
+ }
+
+ /**
+ * Removes all parts of $mimeType from $alternativePart.
+ *
+ * If $alternativePart contains a multipart/mixed or multipart/relative part
+ * with other parts of different content-types, the multipart part is
+ * removed, and parts of different content-types can optionally be moved to
+ * the main message part.
+ */
+ public function removeAllContentPartsFromAlternative(
+ IMessage $message,
+ string $mimeType,
+ IMimePart $alternativePart,
+ bool $keepOtherContent
+ ) : bool {
+ $rmPart = $this->getContentPartContainerFromAlternative($mimeType, $alternativePart);
+ if ($rmPart === false) {
+ return false;
+ }
+ if ($keepOtherContent && $rmPart->getChildCount() > 0) {
+ $this->moveAllNonMultiPartsToMessageExcept($message, $rmPart, $mimeType);
+ $alternativePart = $message->getPart(0, PartFilter::fromInlineContentType('multipart/alternative'));
+ }
+ $message->removePart($rmPart);
+ if ($alternativePart !== null && $alternativePart instanceof IMultiPart) {
+ if ($alternativePart->getChildCount() === 1) {
+ $this->genericHelper->replacePart($message, $alternativePart, $alternativePart->getChild(0));
+ } elseif ($alternativePart->getChildCount() === 0) {
+ $message->removePart($alternativePart);
+ }
+ }
+ while ($message->getChildCount() === 1) {
+ $this->genericHelper->replacePart($message, $message, $message->getChild(0));
+ }
+ return true;
+ }
+
+ /**
+ * Creates a new mime part as a multipart/alternative and assigns the passed
+ * $contentPart as a part below it before returning it.
+ *
+ * @return IMimePart the alternative part
+ */
+ public function createAlternativeContentPart(IMessage $message, IMessagePart $contentPart) : IMimePart
+ {
+ $altPart = $this->mimePartFactory->newInstance();
+ $this->setMimeHeaderBoundaryOnPart($altPart, 'multipart/alternative');
+ $message->removePart($contentPart);
+ $message->addChild($altPart, 0);
+ $altPart->addChild($contentPart, 0);
+ return $altPart;
+ }
+
+ /**
+ * Moves all parts under $from into this message except those with a
+ * content-type equal to $exceptMimeType. If the message is not a
+ * multipart/mixed message, it is set to multipart/mixed first.
+ */
+ public function moveAllNonMultiPartsToMessageExcept(IMessage $message, IMimePart $from, string $exceptMimeType) : static
+ {
+ $parts = $from->getAllParts(function(IMessagePart $part) use ($exceptMimeType) {
+ if ($part instanceof IMimePart && $part->isMultiPart()) {
+ return false;
+ }
+ return \strcasecmp($part->getContentType(), $exceptMimeType) !== 0;
+ });
+ if (\strcasecmp($message->getContentType(), 'multipart/mixed') !== 0) {
+ $this->setMessageAsMixed($message);
+ }
+ foreach ($parts as $key => $part) {
+ $from->removePart($part);
+ $message->addChild($part);
+ }
+ return $this;
+ }
+
+ /**
+ * Enforces the message to be a mime message for a non-mime (e.g. uuencoded
+ * or unspecified) message. If the message has uuencoded attachments, sets
+ * up the message as a multipart/mixed message and creates a separate
+ * content part.
+ */
+ public function enforceMime(IMessage $message) : static
+ {
+ if (!$message->isMime()) {
+ if ($message->getAttachmentCount()) {
+ $this->setMessageAsMixed($message);
+ } else {
+ $message->setRawHeader(HeaderConsts::CONTENT_TYPE, "text/plain;\r\n\tcharset=\"iso-8859-1\"");
+ }
+ $message->setRawHeader(HeaderConsts::MIME_VERSION, '1.0');
+ }
+ return $this;
+ }
+
+ /**
+ * Creates a multipart/related part out of 'inline' children of $parent and
+ * returns it.
+ */
+ public function createMultipartRelatedPartForInlineChildrenOf(IMimePart $parent) : IMimePart
+ {
+ $relatedPart = $this->mimePartFactory->newInstance();
+ $this->setMimeHeaderBoundaryOnPart($relatedPart, 'multipart/related');
+ foreach ($parent->getChildParts(PartFilter::fromDisposition('inline')) as $part) {
+ $parent->removePart($part);
+ $relatedPart->addChild($part);
+ }
+ $parent->addChild($relatedPart, 0);
+ return $relatedPart;
+ }
+
+ /**
+ * Finds an alternative inline part in the message and returns it if one
+ * exists.
+ *
+ * If the passed $mimeType is text/plain, searches for a text/html part.
+ * Otherwise searches for a text/plain part to return.
+ *
+ * @return IMimePart or null if not found
+ */
+ public function findOtherContentPartFor(IMessage $message, string $mimeType) : ?IMimePart
+ {
+ $altPart = $message->getPart(
+ 0,
+ PartFilter::fromInlineContentType(($mimeType === 'text/plain') ? 'text/html' : 'text/plain')
+ );
+ if ($altPart !== null && $altPart->getParent() !== null && $altPart->getParent()->isMultiPart()) {
+ $altPartParent = $altPart->getParent();
+ if ($altPartParent->getChildCount(PartFilter::fromDisposition('inline')) !== 1) {
+ $altPart = $this->createMultipartRelatedPartForInlineChildrenOf($altPartParent);
+ }
+ }
+ return $altPart;
+ }
+
+ /**
+ * Creates a new content part for the passed mimeType and charset, making
+ * space by creating a multipart/alternative if needed
+ */
+ public function createContentPartForMimeType(IMessage $message, string $mimeType, string $charset) : IMimePart
+ {
+ $mimePart = $this->mimePartFactory->newInstance();
+ $mimePart->setRawHeader(HeaderConsts::CONTENT_TYPE, "$mimeType;\r\n\tcharset=\"$charset\"");
+ $mimePart->setRawHeader(HeaderConsts::CONTENT_TRANSFER_ENCODING, 'quoted-printable');
+
+ $this->enforceMime($message);
+ $altPart = $this->findOtherContentPartFor($message, $mimeType);
+
+ if ($altPart === $message) {
+ $this->setMessageAsAlternative($message);
+ $message->addChild($mimePart);
+ } elseif ($altPart !== null) {
+ $mimeAltPart = $this->createAlternativeContentPart($message, $altPart);
+ $mimeAltPart->addChild($mimePart, 1);
+ } else {
+ $message->addChild($mimePart, 0);
+ }
+
+ return $mimePart;
+ }
+
+ /**
+ * Creates and adds a IMimePart for the passed content and options as an
+ * attachment.
+ *
+ * @param string|resource|\Psr\Http\Message\StreamInterface $resource
+ */
+ public function createAndAddPartForAttachment(
+ IMessage $message,
+ $resource,
+ string $mimeType,
+ string $disposition,
+ ?string $filename = null,
+ string $encoding = 'base64'
+ ) : IMessagePart {
+ if ($filename === null) {
+ $filename = 'file' . \uniqid();
+ }
+
+ $safe = \iconv('UTF-8', 'US-ASCII//translit//ignore', $filename);
+ if ($message->isMime()) {
+ $part = $this->mimePartFactory->newInstance();
+ $part->setRawHeader(HeaderConsts::CONTENT_TRANSFER_ENCODING, $encoding);
+ if (\strcasecmp($message->getContentType(), 'multipart/mixed') !== 0) {
+ $this->setMessageAsMixed($message);
+ }
+ $part->setRawHeader(HeaderConsts::CONTENT_TYPE, "$mimeType;\r\n\tname=\"$safe\"");
+ $part->setRawHeader(HeaderConsts::CONTENT_DISPOSITION, "$disposition;\r\n\tfilename=\"$safe\"");
+ } else {
+ $part = $this->uuEncodedPartFactory->newInstance();
+ $part->setFilename($safe);
+ }
+ $part->setContent($resource);
+ $message->addChild($part);
+ return $part;
+ }
+
+ /**
+ * Removes the content part of the message with the passed mime type. If
+ * there is a remaining content part and it is an alternative part of the
+ * main message, the content part is moved to the message part.
+ *
+ * If the content part is part of an alternative part beneath the message,
+ * the alternative part is replaced by the remaining content part,
+ * optionally keeping other parts if $keepOtherContent is set to true.
+ *
+ * @return bool true on success
+ */
+ public function removeAllContentPartsByMimeType(IMessage $message, string $mimeType, bool $keepOtherContent = false) : bool
+ {
+ $alt = $message->getPart(0, PartFilter::fromInlineContentType('multipart/alternative'));
+ if ($alt !== null) {
+ return $this->removeAllContentPartsFromAlternative($message, $mimeType, $alt, $keepOtherContent);
+ }
+ $message->removeAllParts(PartFilter::fromInlineContentType($mimeType));
+ return true;
+ }
+
+ /**
+ * Removes the 'inline' part with the passed contentType, at the given index
+ * defaulting to the first
+ *
+ * @return bool true on success
+ */
+ public function removePartByMimeType(IMessage $message, string $mimeType, int $index = 0) : bool
+ {
+ $parts = $message->getAllParts(PartFilter::fromInlineContentType($mimeType));
+ $alt = $message->getPart(0, PartFilter::fromInlineContentType('multipart/alternative'));
+ if ($parts === null || !isset($parts[$index])) {
+ return false;
+ } elseif (\count($parts) === 1) {
+ return $this->removeAllContentPartsByMimeType($message, $mimeType, true);
+ }
+ $part = $parts[$index];
+ $message->removePart($part);
+ if ($alt !== null && $alt->getChildCount() === 1) {
+ $this->genericHelper->replacePart($message, $alt, $alt->getChild(0));
+ }
+ return true;
+ }
+
+ /**
+ * Either creates a mime part or sets the existing mime part with the passed
+ * mimeType to $strongOrHandle.
+ *
+ * @param string|resource $stringOrHandle
+ */
+ public function setContentPartForMimeType(IMessage $message, string $mimeType, mixed $stringOrHandle, string $charset) : static
+ {
+ $part = ($mimeType === 'text/html') ? $message->getHtmlPart() : $message->getTextPart();
+ if ($part === null) {
+ $part = $this->createContentPartForMimeType($message, $mimeType, $charset);
+ } else {
+ $contentType = $part->getContentType();
+ if ($part instanceof IMimePart) {
+ $part->setRawHeader(HeaderConsts::CONTENT_TYPE, "$contentType;\r\n\tcharset=\"$charset\"");
+ }
+ }
+ $part->setContent($stringOrHandle);
+ return $this;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/Helper/PrivacyHelper.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Helper/PrivacyHelper.php
new file mode 100644
index 00000000..fb17bb84
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/Helper/PrivacyHelper.php
@@ -0,0 +1,159 @@
+genericHelper = $genericHelper;
+ $this->multipartHelper = $multipartHelper;
+ }
+
+ /**
+ * The passed message is set as multipart/signed, and a new part is created
+ * below it with content headers, content and children copied from the
+ * message.
+ *
+ * @param string $micalg
+ * @param string $protocol
+ */
+ public function setMessageAsMultipartSigned(IMessage $message, $micalg, $protocol) : static
+ {
+ if (\strcasecmp($message->getContentType(), 'multipart/signed') !== 0) {
+ $this->multipartHelper->enforceMime($message);
+ $messagePart = $this->mimePartFactory->newInstance();
+ $this->genericHelper->movePartContentAndChildren($message, $messagePart);
+ $message->addChild($messagePart);
+ $boundary = $this->multipartHelper->getUniqueBoundary('multipart/signed');
+ $message->setRawHeader(
+ HeaderConsts::CONTENT_TYPE,
+ "multipart/signed;\r\n\tboundary=\"$boundary\";\r\n\tmicalg=\"$micalg\"; protocol=\"$protocol\""
+ );
+ }
+ $this->overwrite8bitContentEncoding($message);
+ $this->setSignature($message, 'Empty');
+ return $this;
+ }
+
+ /**
+ * Sets the signature of the message to $body, creating a signature part if
+ * one doesn't exist.
+ *
+ * @param string $body
+ */
+ public function setSignature(IMessage $message, $body) : static
+ {
+ $signedPart = $message->getSignaturePart();
+ if ($signedPart === null) {
+ $signedPart = $this->mimePartFactory->newInstance();
+ $message->addChild($signedPart);
+ }
+ $signedPart->setRawHeader(
+ HeaderConsts::CONTENT_TYPE,
+ $message->getHeaderParameter(HeaderConsts::CONTENT_TYPE, 'protocol')
+ );
+ $signedPart->setContent($body);
+ return $this;
+ }
+
+ /**
+ * Loops over parts of the message and sets the content-transfer-encoding
+ * header to quoted-printable for text/* mime parts, and to base64
+ * otherwise for parts that are '8bit' encoded.
+ *
+ * Used for multipart/signed messages which doesn't support 8bit transfer
+ * encodings.
+ */
+ public function overwrite8bitContentEncoding(IMessage $message) : static
+ {
+ $parts = $message->getAllParts(function(IMessagePart $part) {
+ return \strcasecmp($part->getContentTransferEncoding(), '8bit') === 0;
+ });
+ foreach ($parts as $part) {
+ $contentType = \strtolower($part->getContentType());
+ $part->setRawHeader(
+ HeaderConsts::CONTENT_TRANSFER_ENCODING,
+ ($contentType === 'text/plain' || $contentType === 'text/html') ?
+ 'quoted-printable' :
+ 'base64'
+ );
+ }
+ return $this;
+ }
+
+ /**
+ * Returns a stream that can be used to read the content part of a signed
+ * message, which can be used to sign an email or verify a signature.
+ *
+ * The method simply returns the stream for the first child. No
+ * verification of whether the message is in fact a signed message is
+ * performed.
+ *
+ * Note that unlike getSignedMessageAsString, getSignedMessageStream doesn't
+ * replace new lines.
+ *
+ * @return ?StreamInterface null if the message doesn't have any children
+ */
+ public function getSignedMessageStream(IMessage $message) : ?StreamInterface
+ {
+ $child = $message->getChild(0);
+ if ($child !== null) {
+ return $child->getStream();
+ }
+ return null;
+ }
+
+ /**
+ * Returns a string containing the entire body (content) of a signed message
+ * for verification or calculating a signature.
+ *
+ * Non-CRLF new lines are replaced to always be CRLF.
+ *
+ * @return ?string null if the message doesn't have any children
+ */
+ public function getSignedMessageAsString(IMessage $message) : ?string
+ {
+ $stream = $this->getSignedMessageStream($message);
+ if ($stream !== null) {
+ return \preg_replace(
+ '/\r\n|\r|\n/',
+ "\r\n",
+ $stream->getContents()
+ );
+ }
+ return null;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/IMessagePart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/IMessagePart.php
new file mode 100644
index 00000000..baef622e
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/IMessagePart.php
@@ -0,0 +1,386 @@
+getContentStream();
+ * $someChars = $part->read(4);
+ *
+ * $stream2 = $part->getContentStream();
+ * $moreChars = $part->read(4);
+ * echo ($someChars === $moreChars); //1
+ * ```
+ *
+ * In this case the Stream was rewound, and $stream's second call to read 4
+ * bytes reads the same first 4.
+ *
+ * @see IMessagePart::getBinaryContentStream() to get the content stream
+ * without any charset conversions.
+ * @see IMessagePart::saveContent() to save the binary contents to file.
+ * @see IMessagePart::setCharsetOverride() to override the charset of the
+ * content and ignore the charset returned from calling
+ * IMessagePart::getCharset() when reading.
+ * @param string $charset Optional charset for the returned stream.
+ * @return StreamInterface|null the stream
+ */
+ public function getContentStream(string $charset = MailMimeParser::DEFAULT_CHARSET) : ?StreamInterface;
+
+ /**
+ * Returns the raw data stream for the current part, if it exists, or null
+ * if there's no content associated with the stream.
+ *
+ * This is basically the same as calling
+ * {@see IMessagePart::getContentStream()}, except no automatic charset
+ * conversion is done. Note that for non-text streams, this doesn't have an
+ * effect, as charset conversion is not performed in that case, and is
+ * useful only when:
+ *
+ * - The charset defined is not correct, and the conversion produces errors;
+ * or
+ * - You'd like to read the raw contents without conversion, for instance to
+ * save it to file or allow a user to download it as-is (in a download
+ * link for example).
+ *
+ * @see IMessagePart::getContentStream() to get the content stream with
+ * charset conversions applied.
+ * @see IMessagePart::getBinaryContentResourceHandle() to get a resource
+ * handle instead.
+ * @see IMessagePart::saveContent() to save the binary contents to file.
+ * @return StreamInterface|null the stream
+ */
+ public function getBinaryContentStream() : ?StreamInterface;
+
+ /**
+ * Returns a resource handle for the content's raw data stream, or null if
+ * the part doesn't have a content stream.
+ *
+ * The method wraps a call to {@see IMessagePart::getBinaryContentStream()}
+ * and returns a resource handle for the returned Stream.
+ *
+ * @see IMessagePart::getBinaryContentStream() to get a stream instead.
+ * @see IMessagePart::saveContent() to save the binary contents to file.
+ * @return resource|null the resource
+ */
+ public function getBinaryContentResourceHandle() : mixed;
+
+ /**
+ * Saves the binary content of the stream to the passed file, resource or
+ * stream.
+ *
+ * Note that charset conversion is not performed in this case, and the
+ * contents of the part are saved in their binary format as transmitted (but
+ * after any content-transfer decoding is performed). {@see
+ * IMessagePart::getBinaryContentStream()} for a more detailed description
+ * of the stream.
+ *
+ * If the passed parameter is a string, it's assumed to be a filename to
+ * write to. The file is opened in 'w+' mode, and closed before returning.
+ *
+ * When passing a resource or Psr7 Stream, the resource is not closed, nor
+ * rewound.
+ *
+ * @see IMessagePart::getContentStream() to get the content stream with
+ * charset conversions applied.
+ * @see IMessagePart::getBinaryContentStream() to get the content as a
+ * binary stream.
+ * @see IMessagePart::getBinaryContentResourceHandle() to get the content as
+ * a resource handle.
+ * @param string|resource|StreamInterface $filenameResourceOrStream
+ */
+ public function saveContent($filenameResourceOrStream) : static;
+
+ /**
+ * Shortcut to reading stream content and assigning it to a string. Returns
+ * null if the part doesn't have a content stream.
+ *
+ * The returned string is encoded to the passed $charset character encoding.
+ *
+ * @see IMessagePart::getContentStream()
+ * @param string $charset the target charset for the returned string
+ * @return ?string the content
+ */
+ public function getContent(string $charset = MailMimeParser::DEFAULT_CHARSET) : ?string;
+
+ /**
+ * Attaches the stream or resource handle for the part's content. The
+ * stream is closed when another stream is attached, or the MimePart is
+ * destroyed.
+ *
+ * @see IMessagePart::setContent() to pass a string as the content.
+ * @see IMessagePart::getContentStream() to get the content stream.
+ * @see IMessagePart::detachContentStream() to detach the content stream.
+ * @param StreamInterface $stream the content
+ * @param string $streamCharset the charset of $stream
+ */
+ public function attachContentStream(StreamInterface $stream, string $streamCharset = MailMimeParser::DEFAULT_CHARSET) : static;
+
+ /**
+ * Detaches the content stream.
+ *
+ * @see IMessagePart::getContentStream() to get the content stream.
+ * @see IMessagePart::attachContentStream() to attach a content stream.
+ */
+ public function detachContentStream() : static;
+
+ /**
+ * Sets the content of the part to the passed string, resource, or stream.
+ *
+ * @see IMessagePart::getContentStream() to get the content stream.
+ * @see IMessagePart::attachContentStream() to attach a content stream.
+ * @see IMessagePart::detachContentStream() to detach the content stream.
+ * @param string|resource|StreamInterface $resource the content.
+ * @param string $resourceCharset the charset of the passed $resource.
+ */
+ public function setContent($resource, string $resourceCharset = MailMimeParser::DEFAULT_CHARSET) : static;
+
+ /**
+ * Returns a resource handle for the string representation of this part,
+ * containing its headers, content and children. For an IMessage, this
+ * would be the entire RFC822 (or greater) email.
+ *
+ * If the part has not been modified and represents a parsed part, the
+ * original stream should be returned. Otherwise a stream representation of
+ * the part including its modifications should be returned. This insures
+ * that an unmodified, signed message could be passed on that way even after
+ * parsing and reading.
+ *
+ * The returned stream is not guaranteed to be RFC822 (or greater) compliant
+ * for the following reasons:
+ *
+ * - The original email or part, if not modified, is returned as-is and may
+ * not be compliant.
+ * - Although certain parts may have been modified, an original unmodified
+ * header from the original email or part may not be compliant.
+ * - A user may set headers in a non-compliant format.
+ *
+ * @see IMessagePart::getStream() to get a Psr7 StreamInterface instead of a
+ * resource handle.
+ * @see IMessagePart::__toString() to write the part to a string and return
+ * it.
+ * @see IMessage::save() to write the part to a file, resource handle or
+ * Psr7 stream.
+ * @return resource the resource handle containing the part.
+ */
+ public function getResourceHandle() : mixed;
+
+ /**
+ * Returns a Psr7 StreamInterface for the string representation of this
+ * part, containing its headers, content and children.
+ *
+ * If the part has not been modified and represents a parsed part, the
+ * original stream should be returned. Otherwise a stream representation of
+ * the part including its modifications should be returned. This insures
+ * that an unmodified, signed message could be passed on that way even after
+ * parsing and reading.
+ *
+ * The returned stream is not guaranteed to be RFC822 (or greater) compliant
+ * for the following reasons:
+ *
+ * - The original email or part, if not modified, is returned as-is and may
+ * not be compliant.
+ * - Although certain parts may have been modified, an original unmodified
+ * header from the original email or part may not be compliant.
+ * - A user may set headers in a non-compliant format.
+ *
+ * @see IMessagePart::getResourceHandle() to get a resource handle.
+ * @see IMessagePart::__toString() to write the part to a string and return
+ * it.
+ * @see IMessage::save() to write the part to a file, resource handle or
+ * Psr7 stream.
+ * @return StreamInterface the stream containing the part.
+ */
+ public function getStream() : StreamInterface;
+
+ /**
+ * Writes a string representation of this part, including its headers,
+ * content and children to the passed file, resource, or stream.
+ *
+ * If the part has not been modified and represents a parsed part, the
+ * original stream should be written to the file. Otherwise a stream
+ * representation of the part including its modifications should be written.
+ * This insures that an unmodified, signed message could be passed on this
+ * way even after parsing and reading.
+ *
+ * The written stream is not guaranteed to be RFC822 (or greater) compliant
+ * for the following reasons:
+ *
+ * - The original email or part, if not modified, is returned as-is and may
+ * not be compliant.
+ * - Although certain parts may have been modified, an original unmodified
+ * header from the original email or part may not be compliant.
+ * - A user may set headers in a non-compliant format.
+ *
+ * If the passed $filenameResourceOrStream is a string, it's assumed to be a
+ * filename to write to.
+ *
+ * When passing a resource or Psr7 Stream, the resource is not closed, nor
+ * rewound after being written to.
+ *
+ * @see IMessagePart::getResourceHandle() to get a resource handle.
+ * @see IMessagePart::__toString() to get the part in a string.
+ * @see IMessage::save() to write the part to a file, resource handle or
+ * Psr7 stream.
+ * @param string|resource|StreamInterface $filenameResourceOrStream the
+ * file, resource, or stream to write to.
+ * @param string $filemode Optional filemode to open a file in (if
+ * $filenameResourceOrStream is a string)
+ */
+ public function save(mixed $filenameResourceOrStream, string $filemode = 'w+') : static;
+
+ /**
+ * Returns the message/part as a string, containing its headers, content and
+ * children.
+ *
+ * Convenience method for calling getContents() on
+ * {@see IMessagePart::getStream()}.
+ *
+ * @see IMessagePart::getStream() to get a Psr7 StreamInterface instead of a
+ * string.
+ * @see IMessagePart::getResourceHandle() to get a resource handle.
+ * @see IMessage::save() to write the part to a file, resource handle or
+ * Psr7 stream.
+ */
+ public function __toString() : string;
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/IMimePart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/IMimePart.php
new file mode 100644
index 00000000..c91618f3
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/IMimePart.php
@@ -0,0 +1,323 @@
+> an iterator for raw headers
+ */
+ public function getRawHeaderIterator() : Traversable;
+
+ /**
+ * Returns the string value for the header with the given $name, or null if
+ * the header doesn't exist and no alternative $defaultValue is passed.
+ *
+ * Note that mime headers aren't case sensitive.
+ *
+ * @see IMimePart::getHeader() to retrieve a single header object.
+ * @see IMimePart::getHeaderParameter() to get the string value portion of a
+ * specific header's parameter only.
+ * @see IMimePart::getAllHeaders() to retrieve an array of all header
+ * objects for this part.
+ * @see IMimePart::getAllHeadersByName() to retrieve an array of all headers
+ * with a certain name.
+ * @see IMimePart::getRawHeaders() to retrieve the array the returned
+ * iterator iterates over.
+ * @see IMimePart::getRawHeaderIterator() to retrieve an iterator instead of
+ * the returned two-dimensional array
+ * @param string $name The name of the header
+ * @param ?string $defaultValue Optional default value to return if the
+ * header doesn't exist on this part.
+ * @return string|null the value of the header
+ */
+ public function getHeaderValue(string $name, ?string $defaultValue = null) : ?string;
+
+ /**
+ * Returns the value of the parameter named $param on a header with the
+ * passed $header name, or null if the parameter doesn't exist and a
+ * $defaultValue isn't passed.
+ *
+ * Only headers of type
+ * {@see \ZBateson\MailMimeParser\Header\ParameterHeader} have parameters.
+ * Content-Type and Content-Disposition are examples of headers with
+ * parameters. "Charset" is a common parameter of Content-Type.
+ *
+ * @see IMimePart::getHeader() to retrieve a single header object.
+ * @see IMimePart::getHeaderValue() to get the string value portion of a
+ * specific header only.
+ * @see IMimePart::getAllHeaders() to retrieve an array of all header
+ * objects for this part.
+ * @see IMimePart::getAllHeadersByName() to retrieve an array of all headers
+ * with a certain name.
+ * @see IMimePart::getRawHeaders() to retrieve the array the returned
+ * iterator iterates over.
+ * @see IMimePart::getRawHeaderIterator() to retrieve an iterator instead of
+ * the returned two-dimensional array
+ * @param string $header The name of the header.
+ * @param string $param The name of the parameter.
+ * @param ?string $defaultValue Optional default value to return if the
+ * parameter doesn't exist.
+ * @return string|null The value of the parameter.
+ */
+ public function getHeaderParameter(string $header, string $param, ?string $defaultValue = null) : ?string;
+
+ /**
+ * Adds a header with the given $name and $value. An optional $offset may
+ * be passed, which will overwrite a header if one exists with the given
+ * name and offset only. Otherwise a new header is added. The passed
+ * $offset may be ignored in that case if it doesn't represent the next
+ * insert position for the header with the passed name... instead it would
+ * be 'pushed' on at the next position.
+ *
+ * ```
+ * $part = $myMimePart;
+ * $part->setRawHeader('New-Header', 'value');
+ * echo $part->getHeaderValue('New-Header'); // 'value'
+ *
+ * $part->setRawHeader('New-Header', 'second', 4);
+ * echo is_null($part->getHeader('New-Header', 4)); // '1' (true)
+ * echo $part->getHeader('New-Header', 1)
+ * ->getValue(); // 'second'
+ * ```
+ *
+ * A new {@see \ZBateson\MailMimeParser\Header\IHeader} object is created
+ * from the passed value. No processing on the passed string is performed,
+ * and so the passed name and value must be formatted correctly according to
+ * related RFCs. In particular, be careful to encode non-ascii data, to
+ * keep lines under 998 characters in length, and to follow any special
+ * formatting required for the type of header.
+ *
+ * @see IMimePart::addRawHeader() Adds a header to the part regardless of
+ * whether or not a header with that name already exists.
+ * @see IMimePart::removeHeader() Removes all headers on this part with the
+ * passed name
+ * @see IMimePart::removeSingleHeader() Removes a single header if more than
+ * one with the passed name exists.
+ * @param string $name The name of the new header, e.g. 'Content-Type'.
+ * @param ?string $value The raw value of the new header.
+ * @param int $offset An optional offset, defaulting to '0' and therefore
+ * overriding the first header of the given $name if one exists.
+ */
+ public function setRawHeader(string $name, ?string $value, int $offset = 0) : static;
+
+ /**
+ * Adds a header with the given $name and $value.
+ *
+ * Note: If a header with the passed name already exists, a new header is
+ * created with the same name. This should only be used when that is
+ * intentional - in most cases {@see IMimePart::setRawHeader()} should be
+ * called instead.
+ *
+ * A new {@see \ZBateson\MailMimeParser\Header\IHeader} object is created
+ * from the passed value. No processing on the passed string is performed,
+ * and so the passed name and value must be formatted correctly according to
+ * related RFCs. In particular, be careful to encode non-ascii data, to
+ * keep lines under 998 characters in length, and to follow any special
+ * formatting required for the type of header.
+ *
+ * @see IMimePart::setRawHeader() Sets a header, potentially overwriting one
+ * if it already exists.
+ * @see IMimePart::removeHeader() Removes all headers on this part with the
+ * passed name
+ * @see IMimePart::removeSingleHeader() Removes a single header if more than
+ * one with the passed name exists.
+ * @param string $name The name of the header
+ * @param string $value The raw value of the header.
+ */
+ public function addRawHeader(string $name, string $value) : static;
+
+ /**
+ * Removes all headers from this part with the passed name.
+ *
+ * @see IMimePart::addRawHeader() Adds a header to the part regardless of
+ * whether or not a header with that name already exists.
+ * @see IMimePart::setRawHeader() Sets a header, potentially overwriting one
+ * if it already exists.
+ * @see IMimePart::removeSingleHeader() Removes a single header if more than
+ * one with the passed name exists.
+ * @param string $name The name of the header(s) to remove.
+ */
+ public function removeHeader(string $name) : static;
+
+ /**
+ * Removes a single header with the passed name (in cases where more than
+ * one may exist, and others should be preserved).
+ *
+ * @see IMimePart::addRawHeader() Adds a header to the part regardless of
+ * whether or not a header with that name already exists.
+ * @see IMimePart::setRawHeader() Sets a header, potentially overwriting one
+ * if it already exists.
+ * @see IMimePart::removeHeader() Removes all headers on this part with the
+ * passed name
+ * @param string $name The name of the header to remove
+ * @param int $offset Optional offset of the header to remove (defaults to
+ * 0 -- the first header).
+ */
+ public function removeSingleHeader(string $name, int $offset = 0) : static;
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/IMultiPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/IMultiPart.php
new file mode 100644
index 00000000..0e87fbcf
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/IMultiPart.php
@@ -0,0 +1,292 @@
+
+ */
+ public function getChildIterator() : RecursiveIterator;
+
+ /**
+ * Returns the part that has a content type matching the passed mime type at
+ * the given index, or null if there are no matching parts.
+ *
+ * Creates a filter that looks at the return value of
+ * {@see IMessagePart::getContentType()} for all parts (including the
+ * current part) and returns a matching one at the given 0-based index.
+ *
+ * @see IMultiPart::getAllPartsByMimeType() to get all parts that match a
+ * mime type.
+ * @see IMultiPart::getCountOfPartsByMimeType() to get a count of parts with
+ * a mime type.
+ * @param string $mimeType The mime type to find.
+ * @param int $index Optional 0-based index (defaulting to '0').
+ * @return IMessagePart|null The part.
+ */
+ public function getPartByMimeType(string $mimeType, int $index = 0) : ?IMessagePart;
+
+ /**
+ * Returns an array of all parts that have a content type matching the
+ * passed mime type.
+ *
+ * Creates a filter that looks at the return value of
+ * {@see IMessagePart::getContentType()} for all parts (including the
+ * current part), returning an array of matching parts.
+ *
+ * @see IMultiPart::getPartByMimeType() to get a part by mime type.
+ * @see IMultiPart::getCountOfPartsByMimeType() to get a count of parts with
+ * a mime type.
+ * @param string $mimeType The mime type to find.
+ * @return IMessagePart[] An array of matching parts.
+ */
+ public function getAllPartsByMimeType(string $mimeType) : array;
+
+ /**
+ * Returns the number of parts that have content types matching the passed
+ * mime type.
+ *
+ * @see IMultiPart::getPartByMimeType() to get a part by mime type.
+ * @see IMultiPart::getAllPartsByMimeType() to get all parts that match a
+ * mime type.
+ * @param string $mimeType The mime type to find.
+ * @return int The number of matching parts.
+ */
+ public function getCountOfPartsByMimeType(string $mimeType) : int;
+
+ /**
+ * Returns a part that has the given Content ID, or null if not found.
+ *
+ * Calls {@see IMessagePart::getContentId()} to find a matching part.
+ *
+ * @param string $contentId The content ID to find a part for.
+ * @return IMessagePart|null The matching part.
+ */
+ public function getPartByContentId(string $contentId) : ?IMessagePart;
+
+ /**
+ * Registers the passed part as a child of the current part.
+ *
+ * If the $position parameter is non-null, adds the part at the passed
+ * position index, otherwise adds it as the last child.
+ *
+ * @param MessagePart $part The part to add.
+ * @param int $position Optional insertion position 0-based index.
+ */
+ public function addChild(MessagePart $part, ?int $position = null) : static;
+
+ /**
+ * Removes the child part from this part and returns its previous position
+ * or null if it wasn't found.
+ *
+ * Note that if the part is not a direct child of this part, the returned
+ * position is its index within its parent (calls removePart on its direct
+ * parent).
+ *
+ * This also means that parts from unrelated parts/messages could be removed
+ * by a call to removePart -- it will always remove the part from its parent
+ * if it has one, essentially calling
+ * ```php $part->getParent()->removePart(); ```.
+ *
+ * @param IMessagePart $part The part to remove
+ * @return int|null The previous index position of the part within its old
+ * parent.
+ */
+ public function removePart(IMessagePart $part) : ?int;
+
+ /**
+ * Removes all parts below the current part. If a callable filter is
+ * passed, removes only those matching the passed filter. The number of
+ * removed parts is returned.
+ *
+ * Note: the current part will not be removed. Although the function naming
+ * matches getAllParts, which returns the current part, it also doesn't only
+ * remove direct children like getChildParts. Internally this function uses
+ * getAllParts but the current part is filtered out if returned.
+ *
+ * @param callable $fnFilter Optional function accepting an IMessagePart and
+ * returning true if the part should be included.
+ * @return int The number of removed parts.
+ */
+ public function removeAllParts(?callable $fnFilter = null) : int;
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/IUUEncodedPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/IUUEncodedPart.php
new file mode 100644
index 00000000..8dcf5b52
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/IUUEncodedPart.php
@@ -0,0 +1,45 @@
+partStreamContainer = $streamContainer;
+ $this->parent = $parent;
+ $this->observers = new SplObjectStorage();
+ }
+
+ public function attach(SplObserver $observer) : void
+ {
+ $this->observers->offsetSet($observer);
+ }
+
+ public function detach(SplObserver $observer) : void
+ {
+ $this->observers->offsetUnset($observer);
+ }
+
+ public function notify() : void
+ {
+ foreach ($this->observers as $observer) {
+ $observer->update($this);
+ }
+ if ($this->parent !== null) {
+ $this->parent->notify();
+ }
+ }
+
+ public function getParent() : ?IMimePart
+ {
+ return $this->parent;
+ }
+
+ public function hasContent() : bool
+ {
+ return $this->partStreamContainer->hasContent();
+ }
+
+ public function getFilename() : ?string
+ {
+ return null;
+ }
+
+ public function setCharsetOverride(string $charsetOverride, bool $onlyIfNoCharset = false) : static
+ {
+ if (!$onlyIfNoCharset || $this->getCharset() === null) {
+ $this->charsetOverride = $charsetOverride;
+ }
+ return $this;
+ }
+
+ public function getContentStream(string $charset = MailMimeParser::DEFAULT_CHARSET) : ?MessagePartStreamDecorator
+ {
+ if ($this->hasContent()) {
+ $tr = ($this->ignoreTransferEncoding) ? '' : $this->getContentTransferEncoding();
+ $ch = $this->charsetOverride ?? $this->getCharset();
+ return $this->partStreamContainer->getContentStream(
+ $this,
+ $tr,
+ $ch,
+ $charset
+ );
+ }
+ return null;
+ }
+
+ public function getBinaryContentStream() : ?MessagePartStreamDecorator
+ {
+ if ($this->hasContent()) {
+ $tr = ($this->ignoreTransferEncoding) ? '' : $this->getContentTransferEncoding();
+ return $this->partStreamContainer->getBinaryContentStream($this, $tr);
+ }
+ return null;
+ }
+
+ public function getBinaryContentResourceHandle() : mixed
+ {
+ $stream = $this->getBinaryContentStream();
+ if ($stream !== null) {
+ return StreamWrapper::getResource($stream);
+ }
+ return null;
+ }
+
+ public function saveContent($filenameResourceOrStream) : static
+ {
+ $resourceOrStream = $filenameResourceOrStream;
+ if (\is_string($filenameResourceOrStream)) {
+ $resourceOrStream = \fopen($filenameResourceOrStream, 'w+');
+ }
+
+ $stream = Utils::streamFor($resourceOrStream);
+ Utils::copyToStream($this->getBinaryContentStream(), $stream);
+
+ if (!\is_string($filenameResourceOrStream)
+ && !($filenameResourceOrStream instanceof StreamInterface)) {
+ // only detach if it wasn't a string or StreamInterface, so the
+ // fopen call can be properly closed if it was
+ $stream->detach();
+ }
+ return $this;
+ }
+
+ public function getContent(string $charset = MailMimeParser::DEFAULT_CHARSET) : ?string
+ {
+ $stream = $this->getContentStream($charset);
+ if ($stream !== null) {
+ return $stream->getContents();
+ }
+ return null;
+ }
+
+ public function attachContentStream(StreamInterface $stream, string $streamCharset = MailMimeParser::DEFAULT_CHARSET) : static
+ {
+ $ch = $this->charsetOverride ?? $this->getCharset();
+ if ($ch !== null && $streamCharset !== $ch) {
+ $this->charsetOverride = $streamCharset;
+ }
+ $this->ignoreTransferEncoding = true;
+ $this->partStreamContainer->setContentStream($stream);
+ $this->notify();
+ return $this;
+ }
+
+ public function detachContentStream() : static
+ {
+ $this->partStreamContainer->setContentStream(null);
+ $this->notify();
+ return $this;
+ }
+
+ public function setContent($resource, string $charset = MailMimeParser::DEFAULT_CHARSET) : static
+ {
+ $stream = Utils::streamFor($resource);
+ $this->attachContentStream($stream, $charset);
+ // this->notify() called in attachContentStream
+ return $this;
+ }
+
+ public function getResourceHandle() : mixed
+ {
+ return StreamWrapper::getResource($this->getStream());
+ }
+
+ public function getStream() : StreamInterface
+ {
+ return $this->partStreamContainer->getStream();
+ }
+
+ public function save($filenameResourceOrStream, string $filemode = 'w+') : static
+ {
+ $resourceOrStream = $filenameResourceOrStream;
+ if (\is_string($filenameResourceOrStream)) {
+ $resourceOrStream = \fopen($filenameResourceOrStream, $filemode);
+ }
+
+ $partStream = $this->getStream();
+ $partStream->rewind();
+ $stream = Utils::streamFor($resourceOrStream);
+ Utils::copyToStream($partStream, $stream);
+
+ if (!\is_string($filenameResourceOrStream)
+ && !($filenameResourceOrStream instanceof StreamInterface)) {
+ // only detach if it wasn't a string or StreamInterface, so the
+ // fopen call can be properly closed if it was
+ $stream->detach();
+ }
+ return $this;
+ }
+
+ public function __toString() : string
+ {
+ return $this->getStream()->getContents();
+ }
+
+ public function getErrorLoggingContextName() : string
+ {
+ $params = '';
+ if (!empty($this->getContentId())) {
+ $params .= ', content-id=' . $this->getContentId();
+ }
+ $params .= ', content-type=' . $this->getContentType();
+ $nsClass = static::class;
+ $class = \substr($nsClass, (\strrpos($nsClass, '\\') ?? -1) + 1);
+ return $class . '(' . \spl_object_id($this) . $params . ')';
+ }
+
+ protected function getErrorBagChildren() : array
+ {
+ return [
+ $this->partStreamContainer
+ ];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/MimePart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/MimePart.php
new file mode 100644
index 00000000..855200bd
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/MimePart.php
@@ -0,0 +1,302 @@
+get(LoggerInterface::class),
+ $streamContainer ?? $di->get(PartStreamContainer::class),
+ $partChildrenContainer ?? $di->get(PartChildrenContainer::class),
+ $parent
+ );
+ $this->headerContainer = $headerContainer ?? $di->get(PartHeaderContainer::class);
+ }
+
+ /**
+ * Returns a filename for the part if one is defined, or null otherwise.
+ *
+ * Uses the 'filename' parameter of the Content-Disposition header if it
+ * exists, or the 'name' parameter of the 'Content-Type' header if it
+ * doesn't.
+ *
+ * @return string|null the file name of the part or null.
+ */
+ public function getFilename() : ?string
+ {
+ return $this->getHeaderParameter(
+ HeaderConsts::CONTENT_DISPOSITION,
+ 'filename',
+ $this->getHeaderParameter(
+ HeaderConsts::CONTENT_TYPE,
+ 'name'
+ )
+ );
+ }
+
+ /**
+ * Returns true.
+ *
+ */
+ public function isMime() : bool
+ {
+ return true;
+ }
+
+ public function isMultiPart() : bool
+ {
+ // casting to bool, preg_match returns 1 for true
+ return (bool) (\preg_match(
+ '~multipart/.*~i',
+ $this->getContentType()
+ ));
+ }
+
+ /**
+ * Returns true if this part has a defined 'charset' on its Content-Type
+ * header.
+ *
+ * This may result in some false positives if charset is set on a part that
+ * is not plain text which has been seen. If a part is known to be binary,
+ * it's better to use {@see IMessagePart::getBinaryContentStream()} to
+ * avoid issues, or to call {@see IMessagePart::saveContent()} directly if
+ * saving a part's content.
+ *
+ */
+ public function isTextPart() : bool
+ {
+ return ($this->getCharset() !== null);
+ }
+
+ /**
+ * Returns the mime type of the content, or $default if one is not set.
+ *
+ * Looks at the part's Content-Type header and returns its value if set, or
+ * defaults to 'text/plain'.
+ *
+ * Note that the returned value is converted to lower case, and may not be
+ * identical to calling {@see MimePart::getHeaderValue('Content-Type')} in
+ * some cases.
+ *
+ * @param string $default Optional default value to specify a default other
+ * than text/plain if needed.
+ * @return string the mime type
+ */
+ public function getContentType(string $default = 'text/plain') : ?string
+ {
+ return \strtolower($this->getHeaderValue(HeaderConsts::CONTENT_TYPE, $default));
+ }
+
+ /**
+ * Returns the charset of the content, or null if not applicable/defined.
+ *
+ * Looks for a 'charset' parameter under the 'Content-Type' header of this
+ * part and returns it if set, defaulting to 'ISO-8859-1' if the
+ * Content-Type header exists and is of type text/plain or text/html.
+ *
+ * Note that the returned value is also converted to upper case.
+ *
+ * @return string|null the charset
+ */
+ public function getCharset() : ?string
+ {
+ $charset = $this->getHeaderParameter(HeaderConsts::CONTENT_TYPE, 'charset');
+ if ($charset === null || \strcasecmp($charset, 'binary') === 0) {
+ $contentType = $this->getContentType();
+ if ($contentType === 'text/plain' || $contentType === 'text/html') {
+ return 'ISO-8859-1';
+ }
+ return null;
+ }
+ return \strtoupper($charset);
+ }
+
+ /**
+ * Returns the content's disposition, or returns the value of $default if
+ * not defined.
+ *
+ * Looks at the 'Content-Disposition' header, which should only contain
+ * either 'inline' or 'attachment'. If the header is not one of those
+ * values, $default is returned, which defaults to 'inline' unless passed
+ * something else.
+ *
+ * @param string $default Optional default value if not set or does not
+ * match 'inline' or 'attachment'.
+ * @return string the content disposition
+ */
+ public function getContentDisposition(?string $default = 'inline') : ?string
+ {
+ $value = $this->getHeaderValue(HeaderConsts::CONTENT_DISPOSITION);
+ if ($value === null || !\in_array($value, ['inline', 'attachment'])) {
+ return $default;
+ }
+ return \strtolower($value);
+ }
+
+ /**
+ * Returns the content transfer encoding used to encode the content on this
+ * part, or the value of $default if not defined.
+ *
+ * Looks up and returns the value of the 'Content-Transfer-Encoding' header
+ * if set, defaulting to '7bit' if an alternate $default param is not
+ * passed.
+ *
+ * The returned value is always lowercase, and header values of 'x-uue',
+ * 'uue' and 'uuencode' will return 'x-uuencode' instead.
+ *
+ * @param string $default Optional default value to return if the header
+ * isn't set.
+ * @return string the content transfer encoding.
+ */
+ public function getContentTransferEncoding(?string $default = '7bit') : ?string
+ {
+ static $translated = [
+ 'x-uue' => 'x-uuencode',
+ 'uue' => 'x-uuencode',
+ 'uuencode' => 'x-uuencode'
+ ];
+ $type = \strtolower($this->getHeaderValue(HeaderConsts::CONTENT_TRANSFER_ENCODING, $default));
+ if (isset($translated[$type])) {
+ return $translated[$type];
+ }
+ return $type;
+ }
+
+ /**
+ * Returns the Content ID of the part, or null if not defined.
+ *
+ * Looks up and returns the value of the 'Content-ID' header.
+ *
+ * @return string|null the content ID or null if not defined.
+ */
+ public function getContentId() : ?string
+ {
+ return $this->getHeaderValue(HeaderConsts::CONTENT_ID);
+ }
+
+ /**
+ * Returns true if this part's parent is an IMessage, and is the same part
+ * returned by {@see IMessage::getSignaturePart()}.
+ */
+ public function isSignaturePart() : bool
+ {
+ if ($this->parent === null || !$this->parent instanceof IMessage) {
+ return false;
+ }
+ return $this->parent->getSignaturePart() === $this;
+ }
+
+ public function getHeader(string $name, int $offset = 0) : ?IHeader
+ {
+ return $this->headerContainer->get($name, $offset);
+ }
+
+ public function getHeaderAs(string $name, string $iHeaderClass, int $offset = 0) : ?IHeader
+ {
+ return $this->headerContainer->getAs($name, $iHeaderClass, $offset);
+ }
+
+ public function getAllHeaders() : array
+ {
+ return $this->headerContainer->getHeaderObjects();
+ }
+
+ public function getAllHeadersByName(string $name) : array
+ {
+ return $this->headerContainer->getAll($name);
+ }
+
+ public function getRawHeaders() : array
+ {
+ return $this->headerContainer->getHeaders();
+ }
+
+ public function getRawHeaderIterator() : Traversable
+ {
+ return $this->headerContainer->getIterator();
+ }
+
+ public function getHeaderValue(string $name, ?string $defaultValue = null) : ?string
+ {
+ $header = $this->getHeader($name);
+ if ($header !== null) {
+ return $header->getValue() ?: $defaultValue;
+ }
+ return $defaultValue;
+ }
+
+ public function getHeaderParameter(string $header, string $param, ?string $defaultValue = null) : ?string
+ {
+ $obj = $this->getHeader($header);
+ if ($obj && $obj instanceof ParameterHeader) {
+ return $obj->getValueFor($param, $defaultValue);
+ }
+ return $defaultValue;
+ }
+
+ public function setRawHeader(string $name, ?string $value, int $offset = 0) : static
+ {
+ $this->headerContainer->set($name, $value, $offset);
+ $this->notify();
+ return $this;
+ }
+
+ public function addRawHeader(string $name, string $value) : static
+ {
+ $this->headerContainer->add($name, $value);
+ $this->notify();
+ return $this;
+ }
+
+ public function removeHeader(string $name) : static
+ {
+ $this->headerContainer->removeAll($name);
+ $this->notify();
+ return $this;
+ }
+
+ public function removeSingleHeader(string $name, int $offset = 0) : static
+ {
+ $this->headerContainer->remove($name, $offset);
+ $this->notify();
+ return $this;
+ }
+
+ public function getErrorBagChildren() : array
+ {
+ return \array_merge(parent::getErrorBagChildren(), [$this->headerContainer]);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/MultiPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/MultiPart.php
new file mode 100644
index 00000000..dda70187
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/MultiPart.php
@@ -0,0 +1,178 @@
+partChildrenContainer = $partChildrenContainer;
+ }
+
+ private function getAllPartsIterator() : AppendIterator
+ {
+ $iter = new AppendIterator();
+ $iter->append(new ArrayIterator([$this]));
+ $iter->append(new RecursiveIteratorIterator($this->partChildrenContainer, RecursiveIteratorIterator::SELF_FIRST));
+ return $iter;
+ }
+
+ private function iteratorFindAt(Iterator $iter, int $index, ?callable $fnFilter = null) : ?IMessagePart
+ {
+ $pos = 0;
+ foreach ($iter as $part) {
+ if (($fnFilter === null || $fnFilter($part))) {
+ if ($index === $pos) {
+ return $part;
+ }
+ ++$pos;
+ }
+ }
+ return null;
+ }
+
+ public function getPart(int $index, ?callable $fnFilter = null) : ?IMessagePart
+ {
+ return $this->iteratorFindAt(
+ $this->getAllPartsIterator(),
+ $index,
+ $fnFilter
+ );
+ }
+
+ public function getAllParts(?callable $fnFilter = null) : array
+ {
+ $array = \iterator_to_array($this->getAllPartsIterator(), false);
+ if ($fnFilter !== null) {
+ return \array_values(\array_filter($array, $fnFilter));
+ }
+ return $array;
+ }
+
+ public function getPartCount(?callable $fnFilter = null) : int
+ {
+ return \count($this->getAllParts($fnFilter));
+ }
+
+ public function getChild(int $index, ?callable $fnFilter = null) : ?IMessagePart
+ {
+ return $this->iteratorFindAt(
+ $this->partChildrenContainer,
+ $index,
+ $fnFilter
+ );
+ }
+
+ public function getChildIterator() : RecursiveIterator
+ {
+ return $this->partChildrenContainer;
+ }
+
+ public function getChildParts(?callable $fnFilter = null) : array
+ {
+ $array = \iterator_to_array($this->partChildrenContainer, false);
+ if ($fnFilter !== null) {
+ return \array_values(\array_filter($array, $fnFilter));
+ }
+ return $array;
+ }
+
+ public function getChildCount(?callable $fnFilter = null) : int
+ {
+ return \count($this->getChildParts($fnFilter));
+ }
+
+ public function getPartByMimeType(string $mimeType, int $index = 0) : ?IMessagePart
+ {
+ return $this->getPart($index, PartFilter::fromContentType($mimeType));
+ }
+
+ public function getAllPartsByMimeType(string $mimeType) : array
+ {
+ return $this->getAllParts(PartFilter::fromContentType($mimeType));
+ }
+
+ public function getCountOfPartsByMimeType(string $mimeType) : int
+ {
+ return $this->getPartCount(PartFilter::fromContentType($mimeType));
+ }
+
+ public function getPartByContentId(string $contentId) : ?IMessagePart
+ {
+ $sanitized = \preg_replace('/^\s*<|>\s*$/', '', $contentId);
+ return $this->getPart(0, function(IMessagePart $part) use ($sanitized) {
+ $cid = $part->getContentId();
+ return ($cid !== null && \strcasecmp($cid, $sanitized) === 0);
+ });
+ }
+
+ public function addChild(MessagePart $part, ?int $position = null) : static
+ {
+ if ($part !== $this) {
+ $part->parent = $this;
+ $this->partChildrenContainer->add($part, $position);
+ $this->notify();
+ }
+ return $this;
+ }
+
+ public function removePart(IMessagePart $part) : ?int
+ {
+ $parent = $part->getParent();
+ if ($this !== $parent && $parent !== null) {
+ return $parent->removePart($part);
+ }
+
+ $position = $this->partChildrenContainer->remove($part);
+ if ($position !== null) {
+ $this->notify();
+ }
+ return $position;
+ }
+
+ public function removeAllParts(?callable $fnFilter = null) : int
+ {
+ $parts = $this->getAllParts($fnFilter);
+ $count = \count($parts);
+ foreach ($parts as $part) {
+ if ($part === $this) {
+ --$count;
+ continue;
+ }
+ $this->removePart($part);
+ }
+ return $count;
+ }
+
+ protected function getErrorBagChildren() : array
+ {
+ return \array_merge(parent::getErrorBagChildren(), $this->getChildParts());
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/NonMimePart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/NonMimePart.php
new file mode 100644
index 00000000..3fd81dc7
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/NonMimePart.php
@@ -0,0 +1,77 @@
+children = $children;
+ }
+
+ /**
+ * Returns true if the current element is an IMultiPart. Note that the
+ * iterator may still be empty.
+ */
+ public function hasChildren() : bool
+ {
+ return ($this->current() instanceof IMultiPart);
+ }
+
+ /**
+ * If the current element points to an IMultiPart, its child iterator is
+ * returned by calling {@see IMultiPart::getChildIterator()}.
+ *
+ * @return RecursiveIterator|null the iterator
+ */
+ public function getChildren() : ?RecursiveIterator
+ {
+ if ($this->current() instanceof IMultiPart) {
+ return $this->current()->getChildIterator();
+ }
+ return null;
+ }
+
+ /**
+ * @return IMessagePart
+ */
+ public function current() : mixed
+ {
+ return $this->offsetGet($this->position);
+ }
+
+ public function key() : int
+ {
+ return $this->position;
+ }
+
+ public function next() : void
+ {
+ ++$this->position;
+ }
+
+ public function rewind() : void
+ {
+ $this->position = 0;
+ }
+
+ public function valid() : bool
+ {
+ return $this->offsetExists($this->position);
+ }
+
+ /**
+ * Adds the passed IMessagePart to the container in the passed position.
+ *
+ * If position is not passed or null, the part is added to the end, as the
+ * last child in the container.
+ *
+ * @param IMessagePart $part The part to add
+ * @param int $position An optional index position (0-based) to add the
+ * child at.
+ */
+ public function add(IMessagePart $part, $position = null) : static
+ {
+ $index = $position ?? \count($this->children);
+ \array_splice(
+ $this->children,
+ $index,
+ 0,
+ [$part]
+ );
+ return $this;
+ }
+
+ /**
+ * Removes the passed part, and returns the integer position it occupied.
+ *
+ * @param IMessagePart $part The part to remove.
+ * @return int the 0-based position it previously occupied.
+ */
+ public function remove(IMessagePart $part) : ?int
+ {
+ foreach ($this->children as $key => $child) {
+ if ($child === $part) {
+ $this->offsetUnset($key);
+ return $key;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @param int $offset
+ */
+ public function offsetExists(mixed $offset) : bool
+ {
+ return isset($this->children[$offset]);
+ }
+
+ /**
+ * @param int $offset
+ */
+ public function offsetGet(mixed $offset) : mixed
+ {
+ return $this->offsetExists($offset) ? $this->children[$offset] : null;
+ }
+
+ /**
+ * @param int $offset
+ * @param IMessagePart $value
+ */
+ public function offsetSet(mixed $offset, mixed $value) : void
+ {
+ if (!$value instanceof IMessagePart) {
+ throw new InvalidArgumentException(
+ \get_class($value) . ' is not a ZBateson\MailMimeParser\Message\IMessagePart'
+ );
+ }
+ $index = $offset ?? \count($this->children);
+ $this->children[$index] = $value;
+ if ($index < $this->position) {
+ ++$this->position;
+ }
+ }
+
+ /**
+ * @param int $offset
+ */
+ public function offsetUnset($offset) : void
+ {
+ \array_splice($this->children, $offset, 1);
+ if ($this->position >= $offset) {
+ --$this->position;
+ }
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/PartFilter.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/PartFilter.php
new file mode 100644
index 00000000..50b4a9bf
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/PartFilter.php
@@ -0,0 +1,114 @@
+getContentType();
+ $disp = $part->getContentDisposition();
+ if (\in_array($type, ['text/plain', 'text/html']) && $disp !== null && \strcasecmp($disp, 'inline') === 0) {
+ return false;
+ }
+ return !(($part instanceof IMimePart)
+ && ($part->isMultiPart() || $part->isSignaturePart()));
+ };
+ }
+
+ /**
+ * Provides a filter that keeps parts that contain a header of $name with a
+ * value that matches $value (case insensitive).
+ *
+ * By default signed parts are excluded. Pass FALSE to the third parameter
+ * to include them.
+ *
+ * @param string $name The header name to look up
+ * @param string $value The value to match
+ * @param bool $excludeSignedParts Optional signed parts exclusion (defaults
+ * to true).
+ */
+ public static function fromHeaderValue(string $name, string $value, bool $excludeSignedParts = true) : callable
+ {
+ return function(IMessagePart $part) use ($name, $value, $excludeSignedParts) {
+ if ($part instanceof IMimePart) {
+ if ($excludeSignedParts && $part->isSignaturePart()) {
+ return false;
+ }
+ return (\strcasecmp($part->getHeaderValue($name, ''), $value) === 0);
+ }
+ return false;
+ };
+ }
+
+ /**
+ * Includes only parts that match the passed $mimeType in the return value
+ * of a call to 'getContentType()'.
+ *
+ * @param string $mimeType Mime type of parts to find.
+ */
+ public static function fromContentType(string $mimeType) : callable
+ {
+ return function(IMessagePart $part) use ($mimeType) {
+ return \strcasecmp($part->getContentType() ?: '', $mimeType) === 0;
+ };
+ }
+
+ /**
+ * Returns parts matching $mimeType that do not have a Content-Disposition
+ * set to 'attachment'.
+ *
+ * @param string $mimeType Mime type of parts to find.
+ */
+ public static function fromInlineContentType(string $mimeType) : callable
+ {
+ return function(IMessagePart $part) use ($mimeType) {
+ $disp = $part->getContentDisposition();
+ return (\strcasecmp($part->getContentType() ?: '', $mimeType) === 0) && ($disp === null
+ || \strcasecmp($disp, 'attachment') !== 0);
+ };
+ }
+
+ /**
+ * Finds parts with the passed disposition (matching against
+ * IMessagePart::getContentDisposition()), optionally including
+ * multipart parts and signed parts.
+ *
+ * @param string $disposition The disposition to find.
+ * @param bool $includeMultipart Optionally include multipart parts by
+ * passing true (defaults to false).
+ * @param bool $includeSignedParts Optionally include signed parts (defaults
+ * to false).
+ */
+ public static function fromDisposition(string $disposition, bool $includeMultipart = false, bool $includeSignedParts = false) : callable
+ {
+ return function(IMessagePart $part) use ($disposition, $includeMultipart, $includeSignedParts) {
+ if (($part instanceof IMimePart) && ((!$includeMultipart && $part->isMultiPart()) || (!$includeSignedParts && $part->isSignaturePart()))) {
+ return false;
+ }
+ $disp = $part->getContentDisposition();
+ return ($disp !== null && \strcasecmp($disp, $disposition) === 0);
+ };
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/PartHeaderContainer.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/PartHeaderContainer.php
new file mode 100644
index 00000000..7db9bb5b
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/PartHeaderContainer.php
@@ -0,0 +1,325 @@
+headerFactory = $headerFactory;
+ if ($cloneSource !== null) {
+ $this->headers = $cloneSource->headers;
+ $this->headerObjects = $cloneSource->headerObjects;
+ $this->headerMap = $cloneSource->headerMap;
+ $this->nextIndex = $cloneSource->nextIndex;
+ }
+ }
+
+ /**
+ * Returns true if the passed header exists in this collection.
+ */
+ public function exists(string $name, int $offset = 0) : bool
+ {
+ $s = $this->headerFactory->getNormalizedHeaderName($name);
+ return isset($this->headerMap[$s][$offset]);
+ }
+
+ /**
+ * Returns an array of header indexes with names that more closely match
+ * the passed $name if available: for instance if there are two headers in
+ * an email, "Content-Type" and "ContentType", and the query is for a header
+ * with the name "Content-Type", only headers that match exactly
+ * "Content-Type" would be returned.
+ *
+ * @return int[]|null
+ */
+ private function getAllWithOriginalHeaderNameIfSet(string $name) : ?array
+ {
+ $s = $this->headerFactory->getNormalizedHeaderName($name);
+ if (isset($this->headerMap[$s])) {
+ $self = $this;
+ $filtered = \array_filter($this->headerMap[$s], function($h) use ($name, $self) {
+ return (\strcasecmp($self->headers[$h][0], $name) === 0);
+ });
+ return (!empty($filtered)) ? $filtered : $this->headerMap[$s];
+ }
+ return null;
+ }
+
+ /**
+ * Returns the IHeader object for the header with the given $name, or null
+ * if none exist.
+ *
+ * An optional offset can be provided, which defaults to the first header in
+ * the collection when more than one header with the same name exists.
+ *
+ * Note that mime headers aren't case sensitive.
+ */
+ public function get(string $name, int $offset = 0) : ?IHeader
+ {
+ $a = $this->getAllWithOriginalHeaderNameIfSet($name);
+ if (!empty($a) && isset($a[$offset])) {
+ return $this->getByIndex($a[$offset]);
+ }
+ return null;
+ }
+
+ /**
+ * Returns the IHeader object for the header with the given $name, or null
+ * if none exist, using the passed $iHeaderClass to construct it.
+ *
+ * An optional offset can be provided, which defaults to the first header in
+ * the collection when more than one header with the same name exists.
+ *
+ * Note that mime headers aren't case sensitive.
+ */
+ public function getAs(string $name, string $iHeaderClass, int $offset = 0) : ?IHeader
+ {
+ $a = $this->getAllWithOriginalHeaderNameIfSet($name);
+ if (!empty($a) && isset($a[$offset])) {
+ return $this->getByIndexAs($a[$offset], $iHeaderClass);
+ }
+ return null;
+ }
+
+ /**
+ * Returns all headers with the passed name.
+ *
+ * @return IHeader[]
+ */
+ public function getAll(string $name) : array
+ {
+ $a = $this->getAllWithOriginalHeaderNameIfSet($name);
+ if (!empty($a)) {
+ $self = $this;
+ return \array_map(function($index) use ($self) {
+ return $self->getByIndex($index);
+ }, $a);
+ }
+ return [];
+ }
+
+ /**
+ * Returns the header in the headers array at the passed 0-based integer
+ * index or null if one doesn't exist.
+ */
+ private function getByIndex(int $index) : ?IHeader
+ {
+ if (!isset($this->headers[$index])) {
+ return null;
+ }
+ if ($this->headerObjects[$index] === null) {
+ $this->headerObjects[$index] = $this->headerFactory->newInstance(
+ $this->headers[$index][0],
+ $this->headers[$index][1]
+ );
+ }
+ return $this->headerObjects[$index];
+ }
+
+ /**
+ * Returns the header in the headers array at the passed 0-based integer
+ * index or null if one doesn't exist, using the passed $iHeaderClass to
+ * construct it.
+ */
+ private function getByIndexAs(int $index, string $iHeaderClass) : ?IHeader
+ {
+ if (!isset($this->headers[$index])) {
+ return null;
+ }
+ if ($this->headerObjects[$index] !== null && \get_class($this->headerObjects[$index]) === $iHeaderClass) {
+ return $this->headerObjects[$index];
+ }
+ return $this->headerFactory->newInstanceOf(
+ $this->headers[$index][0],
+ $this->headers[$index][1],
+ $iHeaderClass
+ );
+ }
+
+ /**
+ * Removes the header from the collection with the passed name. Defaults to
+ * removing the first instance of the header for a collection that contains
+ * more than one with the same passed name.
+ *
+ * @return bool true if a header was found and removed.
+ */
+ public function remove(string $name, int $offset = 0) : bool
+ {
+ $s = $this->headerFactory->getNormalizedHeaderName($name);
+ if (isset($this->headerMap[$s][$offset])) {
+ $index = $this->headerMap[$s][$offset];
+ \array_splice($this->headerMap[$s], $offset, 1);
+ unset($this->headers[$index], $this->headerObjects[$index]);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Removes all headers that match the passed name.
+ *
+ * @return bool true if one or more headers were removed.
+ */
+ public function removeAll(string $name) : bool
+ {
+ $s = $this->headerFactory->getNormalizedHeaderName($name);
+ if (!empty($this->headerMap[$s])) {
+ foreach ($this->headerMap[$s] as $i) {
+ unset($this->headers[$i], $this->headerObjects[$i]);
+ }
+ $this->headerMap[$s] = [];
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Adds the header to the collection.
+ */
+ public function add(string $name, string $value) : static
+ {
+ $s = $this->headerFactory->getNormalizedHeaderName($name);
+ $this->headers[$this->nextIndex] = [$name, $value];
+ $this->headerObjects[$this->nextIndex] = null;
+ if (!isset($this->headerMap[$s])) {
+ $this->headerMap[$s] = [];
+ }
+ $this->headerMap[$s][] = $this->nextIndex;
+ $this->nextIndex++;
+ return $this;
+ }
+
+ /**
+ * If a header exists with the passed name, and at the passed offset if more
+ * than one exists, its value is updated.
+ *
+ * If a header with the passed name doesn't exist at the passed offset, it
+ * is created at the next available offset (offset is ignored when adding).
+ */
+ public function set(string $name, string $value, int $offset = 0) : static
+ {
+ $s = $this->headerFactory->getNormalizedHeaderName($name);
+ if (!isset($this->headerMap[$s][$offset])) {
+ $this->add($name, $value);
+ return $this;
+ }
+ $i = $this->headerMap[$s][$offset];
+ $this->headers[$i] = [$name, $value];
+ $this->headerObjects[$i] = null;
+ return $this;
+ }
+
+ /**
+ * Returns an array of IHeader objects representing all headers in this
+ * collection.
+ *
+ * @return IHeader[]
+ */
+ public function getHeaderObjects() : array
+ {
+ return \array_filter(\array_map([$this, 'getByIndex'], \array_keys($this->headers)));
+ }
+
+ /**
+ * Returns an array of headers in this collection. Each returned element in
+ * the array is an array with the first element set to the name, and the
+ * second its value:
+ *
+ * [
+ * [ 'Header-Name', 'Header Value' ],
+ * [ 'Second-Header-Name', 'Second-Header-Value' ],
+ * // etc...
+ * ]
+ *
+ * @return string[][]
+ */
+ public function getHeaders() : array
+ {
+ return \array_values(\array_filter($this->headers));
+ }
+
+ /**
+ * Returns an iterator to the headers in this collection. Each returned
+ * element is an array with its first element set to the header's name, and
+ * the second to its value:
+ *
+ * [ 'Header-Name', 'Header Value' ]
+ *
+ * return Traversable>
+ */
+ public function getIterator() : Traversable
+ {
+ return new ArrayIterator($this->getHeaders());
+ }
+
+ public function getErrorBagChildren() : array
+ {
+ return \array_values(\array_filter($this->headerObjects));
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/PartStreamContainer.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/PartStreamContainer.php
new file mode 100644
index 00000000..f0e5ac71
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/PartStreamContainer.php
@@ -0,0 +1,335 @@
+ map of the active encoding filter on the current handle.
+ */
+ private array $encoding = [
+ 'type' => null,
+ 'filter' => null
+ ];
+
+ /**
+ * @var array map of the active charset filter on the current handle.
+ */
+ private array $charset = [
+ 'from' => null,
+ 'to' => null,
+ 'filter' => null
+ ];
+
+ public function __construct(
+ LoggerInterface $logger,
+ StreamFactory $streamFactory,
+ MbWrapper $mbWrapper,
+ bool $throwExceptionReadingPartContentFromUnsupportedCharsets
+ ) {
+ parent::__construct($logger);
+ $this->streamFactory = $streamFactory;
+ $this->mbWrapper = $mbWrapper;
+ $this->throwExceptionReadingPartContentFromUnsupportedCharsets = $throwExceptionReadingPartContentFromUnsupportedCharsets;
+ }
+
+ /**
+ * Sets the part's stream containing the part's headers, content, and
+ * children.
+ */
+ public function setStream(MessagePartStreamDecorator $stream) : static
+ {
+ $this->stream = $stream;
+ return $this;
+ }
+
+ /**
+ * Returns the part's stream containing the part's headers, content, and
+ * children.
+ */
+ public function getStream() : MessagePartStreamDecorator
+ {
+ // error out if called before setStream, getStream should never return
+ // null.
+ $this->stream->rewind();
+ return $this->stream;
+ }
+
+ /**
+ * Returns true if there's a content stream associated with the part.
+ */
+ public function hasContent() : bool
+ {
+ return ($this->contentStream !== null);
+ }
+
+ /**
+ * Attaches the passed stream as the content portion of this
+ * StreamContainer.
+ *
+ * The content stream would represent the content portion of $this->stream.
+ *
+ * If the content is overridden, $this->stream should point to a dynamic
+ * {@see ZBateson\Stream\MessagePartStream} that dynamically creates the
+ * RFC822 formatted message based on the IMessagePart this
+ * PartStreamContainer belongs to.
+ *
+ * setContentStream can be called with 'null' to indicate the IMessagePart
+ * does not contain any content.
+ */
+ public function setContentStream(?StreamInterface $contentStream = null) : static
+ {
+ $this->contentStream = $contentStream;
+ $this->decodedStream = null;
+ $this->charsetStream = null;
+ return $this;
+ }
+
+ /**
+ * Returns true if the attached stream filter used for decoding the content
+ * on the current handle is different from the one passed as an argument.
+ */
+ private function isTransferEncodingFilterChanged(?string $transferEncoding) : bool
+ {
+ return ($transferEncoding !== $this->encoding['type']);
+ }
+
+ /**
+ * Returns true if the attached stream filter used for charset conversion on
+ * the current handle is different from the one needed based on the passed
+ * arguments.
+ *
+ */
+ private function isCharsetFilterChanged(string $fromCharset, string $toCharset) : bool
+ {
+ return ($fromCharset !== $this->charset['from']
+ || $toCharset !== $this->charset['to']);
+ }
+
+ /**
+ * Attaches a decoding filter to the attached content handle, for the passed
+ * $transferEncoding.
+ */
+ protected function attachTransferEncodingFilter(?string $transferEncoding) : static
+ {
+ if ($this->decodedStream !== null) {
+ $this->encoding['type'] = $transferEncoding;
+ $this->decodedStream = new CachingStream($this->streamFactory->getTransferEncodingDecoratedStream(
+ $this->decodedStream,
+ $transferEncoding
+ ));
+ }
+ return $this;
+ }
+
+ /**
+ * Attaches a charset conversion filter to the attached content handle, for
+ * the passed arguments.
+ *
+ * @param string $fromCharset the character set the content is encoded in
+ * @param string $toCharset the target encoding to return
+ */
+ protected function attachCharsetFilter(string $fromCharset, string $toCharset) : static
+ {
+ if ($this->charsetStream !== null) {
+ if (!$this->throwExceptionReadingPartContentFromUnsupportedCharsets) {
+ try {
+ $this->mbWrapper->convert('t', $fromCharset, $toCharset);
+ $this->charsetStream = new CachingStream($this->streamFactory->newCharsetStream(
+ $this->charsetStream,
+ $fromCharset,
+ $toCharset
+ ));
+ } catch (UnsupportedCharsetException $ex) {
+ $this->addError('Unsupported character set found', LogLevel::ERROR, $ex);
+ $this->charsetStream = new CachingStream($this->charsetStream);
+ }
+ } else {
+ $this->charsetStream = new CachingStream($this->streamFactory->newCharsetStream(
+ $this->charsetStream,
+ $fromCharset,
+ $toCharset
+ ));
+ }
+ $this->charsetStream->rewind();
+ $this->charset['from'] = $fromCharset;
+ $this->charset['to'] = $toCharset;
+ }
+ return $this;
+ }
+
+ /**
+ * Resets just the charset stream, and rewinds the decodedStream.
+ */
+ private function resetCharsetStream() : static
+ {
+ $this->charset = [
+ 'from' => null,
+ 'to' => null,
+ 'filter' => null
+ ];
+ $this->decodedStream->rewind();
+ $this->charsetStream = $this->decodedStream;
+ return $this;
+ }
+
+ /**
+ * Resets cached encoding and charset streams, and rewinds the stream.
+ */
+ public function reset() : static
+ {
+ $this->encoding = [
+ 'type' => null,
+ 'filter' => null
+ ];
+ $this->charset = [
+ 'from' => null,
+ 'to' => null,
+ 'filter' => null
+ ];
+ $this->contentStream->rewind();
+ $this->decodedStream = $this->contentStream;
+ $this->charsetStream = $this->contentStream;
+ return $this;
+ }
+
+ /**
+ * Checks what transfer-encoding decoder stream and charset conversion
+ * stream are currently attached on the underlying contentStream, and resets
+ * them if the requested arguments differ from the currently assigned ones.
+ *
+ * @param IMessagePart $part the part the stream belongs to
+ * @param string $transferEncoding the transfer encoding
+ * @param string $fromCharset the character set the content is encoded in
+ * @param string $toCharset the target encoding to return
+ */
+ public function getContentStream(
+ IMessagePart $part,
+ ?string $transferEncoding,
+ ?string $fromCharset,
+ ?string $toCharset
+ ) : ?MessagePartStreamDecorator {
+ if ($this->contentStream === null) {
+ return null;
+ }
+ if (empty($fromCharset) || empty($toCharset)) {
+ return $this->getBinaryContentStream($part, $transferEncoding);
+ }
+ if ($this->charsetStream === null
+ || $this->isTransferEncodingFilterChanged($transferEncoding)
+ || $this->isCharsetFilterChanged($fromCharset, $toCharset)) {
+ if ($this->charsetStream === null
+ || $this->isTransferEncodingFilterChanged($transferEncoding)) {
+ $this->reset();
+ $this->attachTransferEncodingFilter($transferEncoding);
+ }
+ $this->resetCharsetStream();
+ $this->attachCharsetFilter($fromCharset, $toCharset);
+ }
+ $this->charsetStream->rewind();
+ return $this->streamFactory->newDecoratedMessagePartStream(
+ $part,
+ $this->charsetStream
+ );
+ }
+
+ /**
+ * Checks what transfer-encoding decoder stream is attached on the
+ * underlying stream, and resets it if the requested arguments differ.
+ */
+ public function getBinaryContentStream(IMessagePart $part, ?string $transferEncoding = null) : ?MessagePartStreamDecorator
+ {
+ if ($this->contentStream === null) {
+ return null;
+ }
+ if ($this->decodedStream === null
+ || $this->isTransferEncodingFilterChanged($transferEncoding)) {
+ $this->reset();
+ $this->attachTransferEncodingFilter($transferEncoding);
+ }
+ $this->decodedStream->rewind();
+ return $this->streamFactory->newDecoratedMessagePartStream($part, $this->decodedStream);
+ }
+
+ protected function getErrorBagChildren() : array
+ {
+ return [];
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Message/UUEncodedPart.php b/plugins/vendor/zbateson/mail-mime-parser/src/Message/UUEncodedPart.php
new file mode 100644
index 00000000..3313c1fd
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Message/UUEncodedPart.php
@@ -0,0 +1,120 @@
+get(LoggerInterface::class),
+ $streamContainer ?? $di->get(PartStreamContainer::class),
+ $parent
+ );
+ $this->mode = $mode;
+ $this->filename = $filename;
+ }
+
+ /**
+ * Returns the filename included in the uuencoded 'begin' line for this
+ * part.
+ */
+ public function getFilename() : ?string
+ {
+ return $this->filename;
+ }
+
+ public function setFilename(string $filename) : static
+ {
+ $this->filename = $filename;
+ $this->notify();
+ return $this;
+ }
+
+ /**
+ * Returns false.
+ *
+ * Although the part may be plain text, there is no reliable way of
+ * determining its type since uuencoded 'begin' lines only include a file
+ * name and no mime type. The file name's extension may be a hint.
+ *
+ * @return false
+ */
+ public function isTextPart() : bool
+ {
+ return false;
+ }
+
+ /**
+ * Returns 'application/octet-stream'.
+ */
+ public function getContentType(string $default = 'application/octet-stream') : ?string
+ {
+ return 'application/octet-stream';
+ }
+
+ /**
+ * Returns null
+ */
+ public function getCharset() : ?string
+ {
+ return null;
+ }
+
+ /**
+ * Returns 'attachment'.
+ */
+ public function getContentDisposition(?string $default = 'attachment') : ?string
+ {
+ return 'attachment';
+ }
+
+ /**
+ * Returns 'x-uuencode'.
+ */
+ public function getContentTransferEncoding(?string $default = 'x-uuencode') : ?string
+ {
+ return 'x-uuencode';
+ }
+
+ public function getUnixFileMode() : ?int
+ {
+ return $this->mode;
+ }
+
+ public function setUnixFileMode(int $mode) : static
+ {
+ $this->mode = $mode;
+ $this->notify();
+ return $this;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/AbstractParserService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/AbstractParserService.php
new file mode 100644
index 00000000..9eb4547e
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/AbstractParserService.php
@@ -0,0 +1,75 @@
+parserMessageProxyFactory
+ * which can be set via the default constructor)
+ * - IParser::getParserPartProxyFactory (returns $this->parserPartProxyFactory
+ * which can be set via the default constructor)
+ *
+ * @author Zaahid Bateson
+ */
+abstract class AbstractParserService implements IParserService
+{
+ /**
+ * @var ParserPartProxyFactory the parser's message proxy factory service
+ * responsible for creating an IMessage part wrapped in a
+ * ParserPartProxy.
+ */
+ protected ParserPartProxyFactory $parserMessageProxyFactory;
+
+ /**
+ * @var ParserPartProxyFactory the parser's part proxy factory service
+ * responsible for creating IMessagePart parts wrapped in a
+ * ParserPartProxy.
+ */
+ protected ParserPartProxyFactory $parserPartProxyFactory;
+
+ /**
+ * @var PartBuilderFactory Service for creating PartBuilder objects for new
+ * children.
+ */
+ protected PartBuilderFactory $partBuilderFactory;
+
+ /**
+ * @var ParserManagerService the ParserManager, which should call setParserManager
+ * when the parser is added.
+ */
+ protected ParserManagerService $parserManager;
+
+ public function __construct(
+ ParserPartProxyFactory $parserMessageProxyFactory,
+ ParserPartProxyFactory $parserPartProxyFactory,
+ PartBuilderFactory $partBuilderFactory
+ ) {
+ $this->parserMessageProxyFactory = $parserMessageProxyFactory;
+ $this->parserPartProxyFactory = $parserPartProxyFactory;
+ $this->partBuilderFactory = $partBuilderFactory;
+ }
+
+ public function setParserManager(ParserManagerService $pm) : static
+ {
+ $this->parserManager = $pm;
+ return $this;
+ }
+
+ public function getParserMessageProxyFactory() : ParserPartProxyFactory
+ {
+ return $this->parserMessageProxyFactory;
+ }
+
+ public function getParserPartProxyFactory() : ParserPartProxyFactory
+ {
+ return $this->parserPartProxyFactory;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/CompatibleParserNotFoundException.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/CompatibleParserNotFoundException.php
new file mode 100644
index 00000000..e083421e
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/CompatibleParserNotFoundException.php
@@ -0,0 +1,22 @@
+add($a[0], \trim($a[1]));
+ } else {
+ $headerContainer->addError(
+ "Invalid header found at offset: $offset",
+ LogLevel::ERROR
+ );
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * Reads header lines up to an empty line, adding them to the passed
+ * PartHeaderContainer.
+ *
+ * @param resource $handle The resource handle to read from.
+ * @param PartHeaderContainer $container the container to add headers to.
+ */
+ public function parse($handle, PartHeaderContainer $container) : static
+ {
+ $header = '';
+ do {
+ $offset = \ftell($handle);
+ $line = MessageParserService::readLine($handle);
+ if ($line === false || $line === '' || $line[0] !== "\t" && $line[0] !== ' ') {
+ $this->addRawHeaderToPart($offset, $header, $container);
+ $header = '';
+ } else {
+ $line = "\r\n" . $line;
+ }
+ $header .= \rtrim($line, "\r\n");
+ } while ($header !== '');
+ return $this;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/IParserService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/IParserService.php
new file mode 100644
index 00000000..2ce080bf
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/IParserService.php
@@ -0,0 +1,91 @@
+setStreamContentStartPos() and
+ * $proxy->setStreamContentAndPartEndPos() so an IMessagePart can return
+ * content from the raw message.
+ *
+ * Reading should stop once the end of the current part's content has been
+ * reached or the end of the message has been reached. If the end of the
+ * message has been reached $proxy->setEof() should be called in addition to
+ * setStreamContentAndPartEndPos().
+ */
+ public function parseContent(ParserPartProxy $proxy) : static;
+
+ /**
+ * Performs read operations to read children from the passed $proxy, using
+ * its stream, and reading up to (and not including) the beginning of the
+ * child's content if another child exists.
+ *
+ * The implementation should:
+ * 1. Return null if there are no more children.
+ * 2. Read headers
+ * 3. Create a PartBuilder (adding the passed $proxy as its parent)
+ * 4. Call ParserManager::createParserProxyFor() on the ParserManager
+ * previously set by a call to setParserManager(), which may determine
+ * that a different parser is responsible for parts represented by
+ * the headers and PartBuilder passed to it.
+ *
+ * The method should then return the ParserPartProxy returned by the
+ * ParserManager, or null if there are no more children to read.
+ *
+ * @return ParserPartProxy|null The child ParserPartProxy or null if there
+ * are no more children under $proxy.
+ */
+ public function parseNextChild(ParserMimePartProxy $proxy) : ?ParserPartProxy;
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/MessageParserService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/MessageParserService.php
new file mode 100644
index 00000000..6598f9e9
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/MessageParserService.php
@@ -0,0 +1,95 @@
+partBuilderFactory = $pbf;
+ $this->partHeaderContainerFactory = $phcf;
+ $this->parserManager = $pm;
+ $this->headerParser = $hp;
+ }
+
+ /**
+ * Convenience method to read a line of up to 4096 characters from the
+ * passed resource handle.
+ *
+ * If the line is larger than 4096 characters, the remaining characters in
+ * the line are read and discarded, and only the first 4096 characters are
+ * returned.
+ *
+ * @param resource $handle
+ * @return string|false the read line or false on EOF or on error.
+ */
+ public static function readLine($handle) : string|false
+ {
+ $size = 4096;
+ $ret = $line = \fgets($handle, $size);
+ while (\strlen($line) === $size - 1 && \substr($line, -1) !== "\n") {
+ $line = \fgets($handle, $size);
+ }
+ return $ret;
+ }
+
+ /**
+ * Parses the passed stream into an {@see ZBateson\MailMimeParser\IMessage}
+ * object and returns it.
+ *
+ * @param StreamInterface $stream the stream to parse the message from
+ */
+ public function parse(StreamInterface $stream) : IMessage
+ {
+ $headerContainer = $this->partHeaderContainerFactory->newInstance();
+ $partBuilder = $this->partBuilderFactory->newPartBuilder($headerContainer, $stream);
+ $this->headerParser->parse(
+ $partBuilder->getMessageResourceHandle(),
+ $headerContainer
+ );
+ $proxy = $this->parserManager->createParserProxyFor($partBuilder);
+ return $proxy->getPart();
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/MimeParserService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/MimeParserService.php
new file mode 100644
index 00000000..e3f0a48b
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/MimeParserService.php
@@ -0,0 +1,167 @@
+partHeaderContainerFactory = $partHeaderContainerFactory;
+ $this->headerParser = $headerParser;
+ }
+
+ /**
+ * Returns true if the passed PartBuilder::isMime() method returns true.
+ *
+ */
+ public function canParse(PartBuilder $part) : bool
+ {
+ return $part->isMime();
+ }
+
+ /**
+ * Reads up to 2048 bytes of input from the passed resource handle,
+ * discarding portions of a line that are longer than that, and returning
+ * the read portions of the line.
+ *
+ * The method also calls $proxy->setLastLineEndingLength which is used in
+ * findContentBoundary() to set the exact end byte of a part.
+ *
+ * @param resource $handle
+ */
+ private function readBoundaryLine($handle, ParserMimePartProxy $proxy) : string
+ {
+ $size = 2048;
+ $isCut = false;
+ $line = \fgets($handle, $size);
+ while (\strlen($line) === $size - 1 && \substr($line, -1) !== "\n") {
+ $line = \fgets($handle, $size);
+ $isCut = true;
+ }
+ $ret = \rtrim($line, "\r\n");
+ $proxy->setLastLineEndingLength(\strlen($line) - \strlen($ret));
+ return ($isCut) ? '' : $ret;
+ }
+
+ /**
+ * Reads 2048-byte lines from the passed $handle, calling
+ * $partBuilder->setEndBoundaryFound with the passed line until it returns
+ * true or the stream is at EOF.
+ *
+ * setEndBoundaryFound returns true if the passed line matches a boundary
+ * for the $partBuilder itself or any of its parents.
+ *
+ * Lines longer than 2048 bytes are returned as single lines of 2048 bytes,
+ * the longer line is not returned separately but is simply discarded.
+ *
+ * Once a boundary is found, setStreamPartAndContentEndPos is called with
+ * the passed $handle's read pos before the boundary and its line separator
+ * were read.
+ */
+ private function findContentBoundary(ParserMimePartProxy $proxy) : static
+ {
+ $handle = $proxy->getMessageResourceHandle();
+ // last separator before a boundary belongs to the boundary, and is not
+ // part of the current part, if a part is immediately followed by a
+ // boundary, this could result in a '-1' or '-2' content length
+ while (!\feof($handle)) {
+ $endPos = \ftell($handle) - $proxy->getLastLineEndingLength();
+ $line = $this->readBoundaryLine($handle, $proxy);
+ if (\substr($line, 0, 2) === '--' && $proxy->setEndBoundaryFound($line)) {
+ $proxy->setStreamPartAndContentEndPos($endPos);
+ return $this;
+ }
+ }
+ $proxy->setStreamPartAndContentEndPos(\ftell($handle));
+ $proxy->setEof();
+ return $this;
+ }
+
+ public function parseContent(ParserPartProxy $proxy) : static
+ {
+ $proxy->setStreamContentStartPos($proxy->getMessageResourceHandlePos());
+ $this->findContentBoundary($proxy);
+ return $this;
+ }
+
+ /**
+ * Calls the header parser to fill the passed $headerContainer, then calls
+ * $this->parserManager->createParserProxyFor($child);
+ *
+ * The method first checks though if the 'part' represents hidden content
+ * past a MIME end boundary, which some messages like to include, for
+ * instance:
+ *
+ * ```
+ * --outer-boundary--
+ * --boundary
+ * content
+ * --boundary--
+ * some hidden information
+ * --outer-boundary--
+ * ```
+ *
+ * In this case, $this->parserPartProxyFactory is called directly to create
+ * a part, $this->parseContent is called immediately to parse it and discard
+ * it, and null is returned.
+ */
+ private function createPart(ParserMimePartProxy $parent, PartHeaderContainer $headerContainer, PartBuilder $child) : ?ParserPartProxy
+ {
+ if (!$parent->isEndBoundaryFound()) {
+ $this->headerParser->parse(
+ $child->getMessageResourceHandle(),
+ $headerContainer
+ );
+ $parserProxy = $this->parserManager->createParserProxyFor($child);
+ return $parserProxy;
+ }
+ // reads content past an end boundary if there is any
+ $parserProxy = $this->parserPartProxyFactory->newInstance($child, $this);
+ $this->parseContent($parserProxy);
+ return null;
+ }
+
+ public function parseNextChild(ParserMimePartProxy $proxy) : ?ParserPartProxy
+ {
+ if ($proxy->isParentBoundaryFound()) {
+ return null;
+ }
+ $headerContainer = $this->partHeaderContainerFactory->newInstance();
+ $child = $this->partBuilderFactory->newChildPartBuilder($headerContainer, $proxy);
+ return $this->createPart($proxy, $headerContainer, $child);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/NonMimeParserService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/NonMimeParserService.php
new file mode 100644
index 00000000..5bf78781
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/NonMimeParserService.php
@@ -0,0 +1,111 @@
+partHeaderContainerFactory = $uuEncodedPartHeaderContainerFactory;
+ }
+
+ /**
+ * Always returns true, and should therefore be the last parser reached by
+ * a ParserManager.
+ */
+ public function canParse(PartBuilder $part) : bool
+ {
+ return true;
+ }
+
+ /**
+ * Creates a UUEncodedPartHeaderContainer attached to a PartBuilder, and
+ * calls $this->parserManager->createParserProxyFor().
+ *
+ * It also sets the PartBuilder's stream part start pos and content start
+ * pos to that of $parent->getNextParStart() (since a 'begin' line is read
+ * prior to another child being created, see parseNextPart()).
+ */
+ private function createPart(ParserNonMimeMessageProxy $parent) : ParserPartProxy
+ {
+ $hc = $this->partHeaderContainerFactory->newInstance($parent->getNextPartMode(), $parent->getNextPartFilename());
+ $pb = $this->partBuilderFactory->newChildPartBuilder($hc, $parent);
+ $proxy = $this->parserManager->createParserProxyFor($pb);
+ $pb->setStreamPartStartPos($parent->getNextPartStart());
+ $pb->setStreamContentStartPos($parent->getNextPartStart());
+ return $proxy;
+ }
+
+ /**
+ * Reads content from the passed ParserPartProxy's stream till a uu-encoded
+ * 'begin' line is found, setting $proxy->setStreamPartContentAndEndPos() to
+ * the last byte read before the begin line.
+ *
+ * @param ParserNonMimeMessageProxy|ParserUUEncodedPartProxy $proxy
+ */
+ private function parseNextPart(ParserPartProxy $proxy) : static
+ {
+ $handle = $proxy->getMessageResourceHandle();
+ while (!\feof($handle)) {
+ $start = \ftell($handle);
+ $line = \trim(MessageParserService::readLine($handle));
+ if (\preg_match('/^begin ([0-7]{3}) (.*)$/', $line, $matches)) {
+ $proxy->setNextPartStart($start);
+ $proxy->setNextPartMode((int) $matches[1]);
+ $proxy->setNextPartFilename($matches[2]);
+ return $this;
+ }
+ $proxy->setStreamPartAndContentEndPos(\ftell($handle));
+ }
+ return $this;
+ }
+
+ public function parseContent(ParserPartProxy $proxy) : static
+ {
+ $handle = $proxy->getMessageResourceHandle();
+ if ($proxy->getNextPartStart() !== null || \feof($handle)) {
+ return $this;
+ }
+ if ($proxy->getStreamContentStartPos() === null) {
+ $proxy->setStreamContentStartPos(\ftell($handle));
+ }
+ $this->parseNextPart($proxy);
+ return $this;
+ }
+
+ public function parseNextChild(ParserMimePartProxy $proxy) : ?ParserPartProxy
+ {
+ $handle = $proxy->getMessageResourceHandle();
+ if ($proxy->getNextPartStart() === null || \feof($handle)) {
+ return null;
+ }
+ $child = $this->createPart($proxy);
+ $proxy->clearNextPart();
+ return $child;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/ParserManagerService.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/ParserManagerService.php
new file mode 100644
index 00000000..ad21bf4f
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/ParserManagerService.php
@@ -0,0 +1,92 @@
+setParsers([$mimeParser, $nonMimeParser]);
+ }
+
+ /**
+ * Overrides the internal prioritized list of parses with the passed list,
+ * calling $parser->setParserManager($this) on each one.
+ *
+ * @param IParserService[] $parsers
+ */
+ public function setParsers(array $parsers) : static
+ {
+ foreach ($parsers as $parser) {
+ $parser->setParserManager($this);
+ }
+ $this->parsers = $parsers;
+ return $this;
+ }
+
+ /**
+ * Adds an IParser at the highest priority (up front), calling
+ * $parser->setParserManager($this) on it.
+ *
+ * @param IParserService $parser The parser to add.
+ */
+ public function prependParser(IParserService $parser) : static
+ {
+ $parser->setParserManager($this);
+ \array_unshift($this->parsers, $parser);
+ return $this;
+ }
+
+ /**
+ * Creates a ParserPartProxy for the passed $partBuilder using a compatible
+ * IParser.
+ *
+ * Loops through registered IParsers calling 'canParse()' on each with the
+ * passed PartBuilder, then calling either 'getParserMessageProxyFactory()'
+ * or 'getParserPartProxyFactory()' depending on if the PartBuilder has a
+ * parent, and finally calling 'newInstance' on the returned
+ * ParserPartProxyFactory passing it the IParser, and returning the new
+ * ParserPartProxy instance that was created.
+ *
+ * @param PartBuilder $partBuilder The PartBuilder to wrap in a proxy with
+ * an IParser
+ * @throws CompatibleParserNotFoundException if a compatible parser for the
+ * type is not configured.
+ * @return ParserPartProxy The created ParserPartProxy tied to a new
+ * IMessagePart and associated IParser.
+ */
+ public function createParserProxyFor(PartBuilder $partBuilder) : ParserPartProxy
+ {
+ foreach ($this->parsers as $parser) {
+ if ($parser->canParse($partBuilder)) {
+ $factory = ($partBuilder->getParent() === null) ?
+ $parser->getParserMessageProxyFactory() :
+ $parser->getParserPartProxyFactory();
+ return $factory->newInstance($partBuilder, $parser);
+ }
+ }
+ throw new CompatibleParserNotFoundException('Compatible parser for a part cannot be found with content-type: ' . $partBuilder->getHeaderContainer()->get('Content-Type'));
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/ParserPartChildrenContainer.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/ParserPartChildrenContainer.php
new file mode 100644
index 00000000..743670e9
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/ParserPartChildrenContainer.php
@@ -0,0 +1,53 @@
+parserProxy = $parserProxy;
+ }
+
+ public function offsetExists($offset) : bool
+ {
+ $exists = parent::offsetExists($offset);
+ while (!$exists && !$this->allParsed) {
+ $child = $this->parserProxy->popNextChild();
+ if ($child === null) {
+ $this->allParsed = true;
+ } else {
+ $this->add($child);
+ }
+ $exists = parent::offsetExists($offset);
+ }
+ return $exists;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/ParserPartChildrenContainerFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/ParserPartChildrenContainerFactory.php
new file mode 100644
index 00000000..858883c4
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/ParserPartChildrenContainerFactory.php
@@ -0,0 +1,23 @@
+parserProxy = $parserProxy;
+ }
+
+ public function __destruct()
+ {
+ if ($this->detachParsedStream && $this->parsedStream !== null) {
+ $this->parsedStream->detach();
+ }
+ }
+
+ /**
+ * Requests content from the parser if not previously requested, and calls
+ * PartStreamContainer::setContentStream().
+ */
+ protected function requestParsedContentStream() : static
+ {
+ if (!$this->contentParseRequested) {
+ $this->contentParseRequested = true;
+ $this->parserProxy->parseContent();
+ parent::setContentStream($this->streamFactory->getLimitedContentStream(
+ $this->parserProxy
+ ));
+ }
+ return $this;
+ }
+
+ /**
+ * Ensures the parser has parsed the entire part, and sets
+ * $this->parsedStream to the original parsed stream (or a limited part of
+ * it corresponding to the current part this stream container belongs to).
+ */
+ protected function requestParsedStream() : static
+ {
+ if ($this->parsedStream === null) {
+ $this->parserProxy->parseAll();
+ $this->parsedStream = $this->streamFactory->newDecoratedMessagePartStream(
+ $this->parserProxy->getPart(),
+ $this->streamFactory->getLimitedPartStream(
+ $this->parserProxy
+ )
+ );
+ if ($this->parsedStream !== null) {
+ $this->detachParsedStream = ($this->parsedStream->getMetadata('mmp-detached-stream') === true);
+ }
+ }
+ return $this;
+ }
+
+ public function hasContent() : bool
+ {
+ $this->requestParsedContentStream();
+ return parent::hasContent();
+ }
+
+ public function getContentStream(IMessagePart $part, ?string $transferEncoding, ?string $fromCharset, ?string $toCharset) : ?MessagePartStreamDecorator
+ {
+ $this->requestParsedContentStream();
+ return parent::getContentStream($part, $transferEncoding, $fromCharset, $toCharset);
+ }
+
+ public function getBinaryContentStream(IMessagePart $part, ?string $transferEncoding = null) : ?MessagePartStreamDecorator
+ {
+ $this->requestParsedContentStream();
+ return parent::getBinaryContentStream($part, $transferEncoding);
+ }
+
+ public function setContentStream(?StreamInterface $contentStream = null) : static
+ {
+ // has to be overridden because requestParsedContentStream calls
+ // parent::setContentStream as well, so needs to be parsed before
+ // overriding the contentStream with a manual 'set'.
+ $this->requestParsedContentStream();
+ parent::setContentStream($contentStream);
+ return $this;
+ }
+
+ public function getStream() : MessagePartStreamDecorator
+ {
+ $this->requestParsedStream();
+ if (!$this->partUpdated) {
+ if ($this->parsedStream !== null) {
+ $this->parsedStream->rewind();
+ return $this->parsedStream;
+ }
+ }
+ return parent::getStream();
+ }
+
+ public function update(SplSubject $subject) : void
+ {
+ $this->partUpdated = true;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/ParserPartStreamContainerFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/ParserPartStreamContainerFactory.php
new file mode 100644
index 00000000..e4ca1f15
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/ParserPartStreamContainerFactory.php
@@ -0,0 +1,52 @@
+logger = $logger;
+ $this->streamFactory = $streamFactory;
+ $this->mbWrapper = $mbWrapper;
+ $this->throwExceptionReadingPartContentFromUnsupportedCharsets = $throwExceptionReadingPartContentFromUnsupportedCharsets;
+ }
+
+ public function newInstance(ParserPartProxy $parserProxy) : ParserPartStreamContainer
+ {
+ return new ParserPartStreamContainer(
+ $this->logger,
+ $this->streamFactory,
+ $this->mbWrapper,
+ $this->throwExceptionReadingPartContentFromUnsupportedCharsets,
+ $parserProxy
+ );
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/UUEncodedPartHeaderContainer.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/UUEncodedPartHeaderContainer.php
new file mode 100644
index 00000000..469534d0
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/UUEncodedPartHeaderContainer.php
@@ -0,0 +1,66 @@
+mode;
+ }
+
+ /**
+ * Sets the unix file mode for the uuencoded 'begin' line.
+ */
+ public function setUnixFileMode(int $mode) : static
+ {
+ $this->mode = $mode;
+ return $this;
+ }
+
+ /**
+ * Returns the filename included in the uuencoded 'begin' line for this
+ * part.
+ */
+ public function getFilename() : ?string
+ {
+ return $this->filename;
+ }
+
+ /**
+ * Sets the filename included in the uuencoded 'begin' line.
+ */
+ public function setFilename(string $filename) : static
+ {
+ $this->filename = $filename;
+ return $this;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/UUEncodedPartHeaderContainerFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/UUEncodedPartHeaderContainerFactory.php
new file mode 100644
index 00000000..2e4e2e88
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Part/UUEncodedPartHeaderContainerFactory.php
@@ -0,0 +1,48 @@
+logger = $logger;
+ $this->headerFactory = $headerFactory;
+ }
+
+ /**
+ * Creates and returns a UUEncodedPartHeaderContainer.
+ */
+ public function newInstance(int $mode, string $filename) : UUEncodedPartHeaderContainer
+ {
+ $container = new UUEncodedPartHeaderContainer($this->logger, $this->headerFactory);
+ $container->setUnixFileMode($mode);
+ $container->setFilename($filename);
+ return $container;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/PartBuilder.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/PartBuilder.php
new file mode 100644
index 00000000..840c162a
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/PartBuilder.php
@@ -0,0 +1,262 @@
+headerContainer = $headerContainer;
+ $this->messageStream = $messageStream;
+ $this->parent = $parent;
+ if ($messageStream !== null) {
+ $this->messageHandle = StreamWrapper::getResource($messageStream);
+ }
+ $this->setStreamPartStartPos($this->getMessageResourceHandlePos());
+ }
+
+ public function __destruct()
+ {
+ if ($this->messageHandle) {
+ \fclose($this->messageHandle);
+ }
+ }
+
+ /**
+ * The ParserPartProxy parent of this PartBuilder.
+ */
+ public function getParent() : ?ParserMimePartProxy
+ {
+ return $this->parent;
+ }
+
+ /**
+ * Returns this part's PartHeaderContainer.
+ */
+ public function getHeaderContainer() : PartHeaderContainer
+ {
+ return $this->headerContainer;
+ }
+
+ /**
+ * Returns the raw message StreamInterface for a message, getting it from
+ * the parent part if this is a child part.
+ */
+ public function getStream() : StreamInterface
+ {
+ return ($this->messageStream === null && $this->parent !== null) ?
+ $this->parent->getStream() :
+ $this->messageStream;
+ }
+
+ /**
+ * Returns the resource handle for a the message's stream, getting it from
+ * the parent part if this is a child part.
+ *
+ * @return resource
+ */
+ public function getMessageResourceHandle() : mixed
+ {
+ return ($this->messageHandle === null && $this->parent !== null) ?
+ $this->parent->getMessageResourceHandle() :
+ $this->messageHandle;
+ }
+
+ /**
+ * Shortcut for calling ftell($partBuilder->getMessageResourceHandle()).
+ */
+ public function getMessageResourceHandlePos() : int
+ {
+ return \ftell($this->getMessageResourceHandle());
+ }
+
+ /**
+ * Returns the byte offset start position for this part within the message
+ * stream.
+ */
+ public function getStreamPartStartPos() : int
+ {
+ return $this->streamPartStartPos;
+ }
+
+ /**
+ * Returns the number of raw bytes this part has.
+ *
+ * This method does not perform checks on whether the start pos and end pos
+ * of this part have been set, and so could cause errors if called before
+ * being set and are still null.
+ *
+ */
+ public function getStreamPartLength() : int
+ {
+ return $this->streamPartEndPos - $this->streamPartStartPos;
+ }
+
+ /**
+ * Returns the byte offset start position of the content of this part within
+ * the main raw message stream, or null if not set.
+ *
+ */
+ public function getStreamContentStartPos() : ?int
+ {
+ return $this->streamContentStartPos;
+ }
+
+ /**
+ * Returns the length of this part's content stream.
+ *
+ * This method does not perform checks on whether the start pos and end pos
+ * of this part's content have been set, and so could cause errors if called
+ * before being set and are still null.
+ *
+ */
+ public function getStreamContentLength() : int
+ {
+ return $this->streamContentEndPos - $this->streamContentStartPos;
+ }
+
+ /**
+ * Sets the byte offset start position of the part in the raw message
+ * stream.
+ */
+ public function setStreamPartStartPos(int $streamPartStartPos) : static
+ {
+ $this->streamPartStartPos = $streamPartStartPos;
+ return $this;
+ }
+
+ /**
+ * Sets the byte offset end position of the part in the raw message stream,
+ * and also calls its parent's setParentStreamPartEndPos to expand to parent
+ * PartBuilders.
+ */
+ public function setStreamPartEndPos(int $streamPartEndPos) : static
+ {
+ $this->streamPartEndPos = $streamPartEndPos;
+ if ($this->parent !== null) {
+ $this->parent->setStreamPartEndPos($streamPartEndPos);
+ }
+ return $this;
+ }
+
+ /**
+ * Sets the byte offset start position of the content in the raw message
+ * stream.
+ */
+ public function setStreamContentStartPos(int $streamContentStartPos) : static
+ {
+ $this->streamContentStartPos = $streamContentStartPos;
+ return $this;
+ }
+
+ /**
+ * Sets the byte offset end position of the content and part in the raw
+ * message stream.
+ */
+ public function setStreamPartAndContentEndPos(int $streamContentEndPos) : static
+ {
+ $this->streamContentEndPos = $streamContentEndPos;
+ $this->setStreamPartEndPos($streamContentEndPos);
+ return $this;
+ }
+
+ /**
+ * Returns true if the byte offset positions for this part's content have
+ * been set.
+ *
+ * @return bool true if set.
+ */
+ public function isContentParsed() : bool
+ {
+ return ($this->streamContentEndPos !== null);
+ }
+
+ /**
+ * Returns true if this part, or any parent, have a Content-Type or
+ * MIME-Version header set.
+ *
+ * @return bool true if it's a mime message or child of a mime message.
+ */
+ public function isMime() : bool
+ {
+ if ($this->getParent() !== null) {
+ return $this->getParent()->isMime();
+ }
+ return ($this->headerContainer->exists(HeaderConsts::CONTENT_TYPE) ||
+ $this->headerContainer->exists(HeaderConsts::MIME_VERSION));
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/PartBuilderFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/PartBuilderFactory.php
new file mode 100644
index 00000000..98c23c72
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/PartBuilderFactory.php
@@ -0,0 +1,41 @@
+lastLineEndingLength;
+ }
+
+ public function setLastLineEndingLength(int $lastLineEndingLength) : static
+ {
+ $this->lastLineEndingLength = $lastLineEndingLength;
+ return $this;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserMessageProxyFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserMessageProxyFactory.php
new file mode 100644
index 00000000..4fa93402
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserMessageProxyFactory.php
@@ -0,0 +1,74 @@
+multipartHelper = $multipartHelper;
+ $this->privacyHelper = $privacyHelper;
+ }
+
+ /**
+ * Constructs a new ParserMessageProxy wrapping an IMessage object that will
+ * dynamically parse a message's content and parts as they're requested.
+ */
+ public function newInstance(PartBuilder $partBuilder, IParserService $parser) : ParserMessageProxy
+ {
+ $parserProxy = new ParserMessageProxy($partBuilder, $parser);
+
+ $streamContainer = $this->parserPartStreamContainerFactory->newInstance($parserProxy);
+ $headerContainer = $this->partHeaderContainerFactory->newInstance($parserProxy->getHeaderContainer());
+ $childrenContainer = $this->parserPartChildrenContainerFactory->newInstance($parserProxy);
+
+ $message = new Message(
+ $this->logger,
+ $streamContainer,
+ $headerContainer,
+ $childrenContainer,
+ $this->multipartHelper,
+ $this->privacyHelper
+ );
+ $parserProxy->setPart($message);
+
+ $streamContainer->setStream($this->streamFactory->newMessagePartStream($message));
+ $message->attach($streamContainer);
+ return $parserProxy;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserMimePartProxy.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserMimePartProxy.php
new file mode 100644
index 00000000..fdb8e9f3
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserMimePartProxy.php
@@ -0,0 +1,286 @@
+lastAddedChild !== null) {
+ $this->lastAddedChild->parseAll();
+ }
+ return $this;
+ }
+
+ /**
+ * Parses the next child of this part and adds it to the 'stack' of
+ * children.
+ */
+ protected function parseNextChild() : static
+ {
+ if ($this->allChildrenParsed) {
+ return $this;
+ }
+ $this->parseContent();
+ $this->ensureLastChildParsed();
+ $next = $this->parser->parseNextChild($this);
+ if ($next !== null) {
+ $this->children[] = $next;
+ $this->childrenStack[] = $next;
+ $this->lastAddedChild = $next;
+ } else {
+ $this->allChildrenParsed = true;
+ }
+ return $this;
+ }
+
+ /**
+ * Returns the next child part if one exists, popping it from the internal
+ * 'stack' of children, attempting to parse a new one if the stack is empty,
+ * and returning null if there are no more children.
+ *
+ * @return ?IMessagePart the child part.
+ */
+ public function popNextChild() : ?IMessagePart
+ {
+ if (empty($this->childrenStack)) {
+ $this->parseNextChild();
+ }
+ $proxy = \array_shift($this->childrenStack);
+ return ($proxy !== null) ? $proxy->getPart() : null;
+ }
+
+ /**
+ * Parses all content and children for this part.
+ */
+ public function parseAll() : static
+ {
+ $this->parseContent();
+ while (!$this->allChildrenParsed) {
+ $this->parseNextChild();
+ }
+ return $this;
+ }
+
+ /**
+ * Returns a ParameterHeader representing the parsed Content-Type header for
+ * this part.
+ */
+ public function getContentType() : ?ParameterHeader
+ {
+ return $this->getHeaderContainer()->get(HeaderConsts::CONTENT_TYPE);
+ }
+
+ /**
+ * Returns the parsed boundary parameter of the Content-Type header if set
+ * for a multipart message part.
+ *
+ */
+ public function getMimeBoundary() : ?string
+ {
+ if ($this->mimeBoundaryQueried === false) {
+ $this->mimeBoundaryQueried = true;
+ $contentType = $this->getContentType();
+ if ($contentType !== null) {
+ $this->mimeBoundary = $contentType->getValueFor('boundary');
+ }
+ }
+ return $this->mimeBoundary;
+ }
+
+ /**
+ * Returns true if the passed $line of read input matches this part's mime
+ * boundary, or any of its parent's mime boundaries for a multipart message.
+ *
+ * If the passed $line is the ending boundary for the current part,
+ * $this->isEndBoundaryFound will return true after.
+ */
+ public function setEndBoundaryFound(string $line) : bool
+ {
+ $boundary = $this->getMimeBoundary();
+ if ($this->getParent() !== null && $this->getParent()->setEndBoundaryFound($line)) {
+ $this->parentBoundaryFound = true;
+ return true;
+ } elseif ($boundary !== null) {
+ if ($line === "--$boundary--") {
+ $this->endBoundaryFound = true;
+ return true;
+ } elseif ($line === "--$boundary") {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns true if the parser passed an input line to setEndBoundary that
+ * matches a parent's mime boundary, and the following input belongs to a
+ * new part under its parent.
+ *
+ */
+ public function isParentBoundaryFound() : bool
+ {
+ return ($this->parentBoundaryFound);
+ }
+
+ /**
+ * Returns true if an end boundary was found for this part.
+ *
+ */
+ public function isEndBoundaryFound() : bool
+ {
+ return ($this->endBoundaryFound);
+ }
+
+ /**
+ * Called once EOF is reached while reading content. The method sets the
+ * flag used by isParentBoundaryFound() to true on this part and all parent
+ * parts.
+ *
+ */
+ public function setEof() : static
+ {
+ $this->parentBoundaryFound = true;
+ if ($this->getParent() !== null) {
+ $this->getParent()->setEof();
+ }
+ return $this;
+ }
+
+ /**
+ * Overridden to set a 0-length content length, and a stream end pos of -2
+ * if the passed end pos is before the start pos (can happen if a mime
+ * end boundary doesn't have an empty line before the next parent start
+ * boundary).
+ */
+ public function setStreamPartAndContentEndPos(int $streamContentEndPos) : static
+ {
+ // check if we're expecting a boundary and didn't find one
+ if (!$this->endBoundaryFound && !$this->parentBoundaryFound) {
+ if (!empty($this->mimeBoundary) || ($this->getParent() !== null && !empty($this->getParent()->mimeBoundary))) {
+ $this->addError('End boundary for part not found', LogLevel::WARNING);
+ }
+ }
+ $start = $this->getStreamContentStartPos();
+ if ($streamContentEndPos - $start < 0) {
+ parent::setStreamPartAndContentEndPos($start);
+ $this->setStreamPartEndPos($streamContentEndPos);
+ } else {
+ parent::setStreamPartAndContentEndPos($streamContentEndPos);
+ }
+ return $this;
+ }
+
+ /**
+ * Sets the length of the last line ending read by MimeParser (e.g. 2 for
+ * '\r\n', or 1 for '\n').
+ *
+ * The line ending may not belong specifically to this part, so
+ * ParserMimePartProxy simply calls setLastLineEndingLength on its parent,
+ * which must eventually reach a ParserMessageProxy which actually stores
+ * the length.
+ */
+ public function setLastLineEndingLength(int $length) : static
+ {
+ $this->getParent()->setLastLineEndingLength($length);
+ return $this;
+ }
+
+ /**
+ * Returns the length of the last line ending read by MimeParser (e.g. 2 for
+ * '\r\n', or 1 for '\n').
+ *
+ * The line ending may not belong specifically to this part, so
+ * ParserMimePartProxy simply calls getLastLineEndingLength on its parent,
+ * which must eventually reach a ParserMessageProxy which actually keeps
+ * the length and returns it.
+ *
+ * @return int the length of the last line ending read
+ */
+ public function getLastLineEndingLength() : int
+ {
+ return $this->getParent()->getLastLineEndingLength();
+ }
+
+ /**
+ * Returns the last part that was added.
+ */
+ public function getLastAddedChild() : ?ParserPartProxy
+ {
+ return $this->lastAddedChild;
+ }
+
+ /**
+ * Returns the added child at the provided index, useful for looking at
+ * previously parsed children.
+ */
+ public function getAddedChildAt(int $index) : ?ParserPartProxy
+ {
+ return $this->children[$index] ?? null;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserMimePartProxyFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserMimePartProxyFactory.php
new file mode 100644
index 00000000..3f2b1dd4
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserMimePartProxyFactory.php
@@ -0,0 +1,77 @@
+logger = $logger;
+ $this->streamFactory = $sdf;
+ $this->partHeaderContainerFactory = $phcf;
+ $this->parserPartStreamContainerFactory = $pscf;
+ $this->parserPartChildrenContainerFactory = $ppccf;
+ }
+
+ /**
+ * Constructs a new ParserMimePartProxy wrapping an IMimePart object that
+ * will dynamically parse a message's content and parts as they're
+ * requested.
+ */
+ public function newInstance(PartBuilder $partBuilder, IParserService $parser) : ParserMimePartProxy
+ {
+ $parserProxy = new ParserMimePartProxy($partBuilder, $parser);
+
+ $streamContainer = $this->parserPartStreamContainerFactory->newInstance($parserProxy);
+ $headerContainer = $this->partHeaderContainerFactory->newInstance($parserProxy->getHeaderContainer());
+ $childrenContainer = $this->parserPartChildrenContainerFactory->newInstance($parserProxy);
+
+ $part = new MimePart(
+ $partBuilder->getParent()->getPart(),
+ $this->logger,
+ $streamContainer,
+ $headerContainer,
+ $childrenContainer
+ );
+ $parserProxy->setPart($part);
+
+ $streamContainer->setStream($this->streamFactory->newMessagePartStream($part));
+ $part->attach($streamContainer);
+ return $parserProxy;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserNonMimeMessageProxy.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserNonMimeMessageProxy.php
new file mode 100644
index 00000000..39905311
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserNonMimeMessageProxy.php
@@ -0,0 +1,108 @@
+nextPartStart;
+ }
+
+ /**
+ * Returns the next part's unix file mode in a uu-encoded 'begin' line if
+ * one exists, or null otherwise.
+ *
+ * @return int|null The file mode or null
+ */
+ public function getNextPartMode() : ?int
+ {
+ return $this->nextPartMode;
+ }
+
+ /**
+ * Returns the next part's filename in a uu-encoded 'begin' line if one
+ * exists, or null otherwise.
+ *
+ * @return string|null The file name or null
+ */
+ public function getNextPartFilename() : ?string
+ {
+ return $this->nextPartFilename;
+ }
+
+ /**
+ * Sets the next part's start position within the message's raw stream.
+ */
+ public function setNextPartStart(int $nextPartStart) : static
+ {
+ $this->nextPartStart = $nextPartStart;
+ return $this;
+ }
+
+ /**
+ * Sets the next part's unix file mode from its 'begin' line.
+ */
+ public function setNextPartMode(int $nextPartMode) : static
+ {
+ $this->nextPartMode = $nextPartMode;
+ return $this;
+ }
+
+ /**
+ * Sets the next part's filename from its 'begin' line.
+ *
+ */
+ public function setNextPartFilename(string $nextPartFilename) : static
+ {
+ $this->nextPartFilename = $nextPartFilename;
+ return $this;
+ }
+
+ /**
+ * Sets the next part start position, file mode, and filename to null
+ */
+ public function clearNextPart() : static
+ {
+ $this->nextPartStart = null;
+ $this->nextPartMode = null;
+ $this->nextPartFilename = null;
+ return $this;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserNonMimeMessageProxyFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserNonMimeMessageProxyFactory.php
new file mode 100644
index 00000000..9c8b5e17
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserNonMimeMessageProxyFactory.php
@@ -0,0 +1,47 @@
+parserPartStreamContainerFactory->newInstance($parserProxy);
+ $headerContainer = $this->partHeaderContainerFactory->newInstance($parserProxy->getHeaderContainer());
+ $childrenContainer = $this->parserPartChildrenContainerFactory->newInstance($parserProxy);
+
+ $message = new Message(
+ $this->logger,
+ $streamContainer,
+ $headerContainer,
+ $childrenContainer,
+ $this->multipartHelper,
+ $this->privacyHelper
+ );
+ $parserProxy->setPart($message);
+
+ $streamContainer->setStream($this->streamFactory->newMessagePartStream($message));
+ $message->attach($streamContainer);
+ return $parserProxy;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserPartProxy.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserPartProxy.php
new file mode 100644
index 00000000..0743496f
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserPartProxy.php
@@ -0,0 +1,184 @@
+partBuilder = $partBuilder;
+ $this->parser = $parser;
+ }
+
+ /**
+ * Sets the associated part.
+ *
+ * @param IMessagePart $part The part
+ */
+ public function setPart(IMessagePart $part) : static
+ {
+ $this->part = $part;
+ return $this;
+ }
+
+ /**
+ * Returns the IMessagePart associated with this proxy.
+ *
+ * @return IMessagePart the part.
+ */
+ public function getPart() : IMessagePart
+ {
+ return $this->part;
+ }
+
+ /**
+ * Requests the parser to parse this part's content, and call
+ * setStreamContentStartPos/EndPos to setup this part's boundaries within
+ * the main message's raw stream.
+ *
+ * The method first checks to see if the content has already been parsed,
+ * and is safe to call multiple times.
+ */
+ public function parseContent() : static
+ {
+ if (!$this->isContentParsed()) {
+ $this->parser->parseContent($this);
+ }
+ return $this;
+ }
+
+ /**
+ * Parses everything under this part.
+ *
+ * For ParserPartProxy, this is just content, but sub-classes may override
+ * this to parse all children as well for example.
+ */
+ public function parseAll() : static
+ {
+ $this->parseContent();
+ return $this;
+ }
+
+ public function getParent() : ?ParserMimePartProxy
+ {
+ return $this->partBuilder->getParent();
+ }
+
+ public function getHeaderContainer() : PartHeaderContainer
+ {
+ return $this->partBuilder->getHeaderContainer();
+ }
+
+ public function getStream() : StreamInterface
+ {
+ return $this->partBuilder->getStream();
+ }
+
+ /**
+ * @return resource
+ */
+ public function getMessageResourceHandle() : mixed
+ {
+ return $this->partBuilder->getMessageResourceHandle();
+ }
+
+ public function getMessageResourceHandlePos() : int
+ {
+ return $this->partBuilder->getMessageResourceHandlePos();
+ }
+
+ public function getStreamPartStartPos() : int
+ {
+ return $this->partBuilder->getStreamPartStartPos();
+ }
+
+ public function getStreamPartLength() : int
+ {
+ return $this->partBuilder->getStreamPartLength();
+ }
+
+ public function getStreamContentStartPos() : ?int
+ {
+ return $this->partBuilder->getStreamContentStartPos();
+ }
+
+ public function getStreamContentLength() : int
+ {
+ return $this->partBuilder->getStreamContentLength();
+ }
+
+ public function setStreamPartStartPos(int $streamPartStartPos) : static
+ {
+ $this->partBuilder->setStreamPartStartPos($streamPartStartPos);
+ return $this;
+ }
+
+ public function setStreamPartEndPos(int $streamPartEndPos) : static
+ {
+ $this->partBuilder->setStreamPartEndPos($streamPartEndPos);
+ return $this;
+ }
+
+ public function setStreamContentStartPos(int $streamContentStartPos) : static
+ {
+ $this->partBuilder->setStreamContentStartPos($streamContentStartPos);
+ return $this;
+ }
+
+ public function setStreamPartAndContentEndPos(int $streamContentEndPos) : static
+ {
+ $this->partBuilder->setStreamPartAndContentEndPos($streamContentEndPos);
+ return $this;
+ }
+
+ public function isContentParsed() : bool
+ {
+ return $this->partBuilder->isContentParsed();
+ }
+
+ public function isMime() : bool
+ {
+ return $this->partBuilder->isMime();
+ }
+
+ public function addError(string $message, string $level) : ParserPartProxy
+ {
+ $this->part->addError($message, $level);
+ return $this;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserPartProxyFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserPartProxyFactory.php
new file mode 100644
index 00000000..96857e44
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserPartProxyFactory.php
@@ -0,0 +1,25 @@
+getParent()->getNextPartStart();
+ }
+
+ /**
+ * Returns the next part's unix file mode in a uu-encoded 'begin' line if
+ * one exists, or null otherwise.
+ *
+ * As this is a message-wide setting, ParserUUEncodedPartProxy calls
+ * getNextPartMode() on its parent (a ParserNonMimeMessageProxy, which
+ * stores/returns this information).
+ *
+ * @return int|null The file mode or null
+ */
+ public function getNextPartMode() : ?int
+ {
+ return $this->getParent()->getNextPartMode();
+ }
+
+ /**
+ * Returns the next part's filename in a uu-encoded 'begin' line if one
+ * exists, or null otherwise.
+ *
+ * As this is a message-wide setting, ParserUUEncodedPartProxy calls
+ * getNextPartFilename() on its parent (a ParserNonMimeMessageProxy, which
+ * stores/returns this information).
+ *
+ * @return ?string The file name or null
+ */
+ public function getNextPartFilename() : ?string
+ {
+ return $this->getParent()->getNextPartFilename();
+ }
+
+ /**
+ * Sets the next part's start position within the message's raw stream.
+ *
+ * As this is a message-wide setting, ParserUUEncodedPartProxy calls
+ * setNextPartStart() on its parent (a ParserNonMimeMessageProxy, which
+ * stores/returns this information).
+ */
+ public function setNextPartStart(int $nextPartStart) : static
+ {
+ $this->getParent()->setNextPartStart($nextPartStart);
+ return $this;
+ }
+
+ /**
+ * Sets the next part's unix file mode from its 'begin' line.
+ *
+ * As this is a message-wide setting, ParserUUEncodedPartProxy calls
+ * setNextPartMode() on its parent (a ParserNonMimeMessageProxy, which
+ * stores/returns this information).
+ */
+ public function setNextPartMode(int $nextPartMode) : static
+ {
+ $this->getParent()->setNextPartMode($nextPartMode);
+ return $this;
+ }
+
+ /**
+ * Sets the next part's filename from its 'begin' line.
+ *
+ * As this is a message-wide setting, ParserUUEncodedPartProxy calls
+ * setNextPartFilename() on its parent (a ParserNonMimeMessageProxy, which
+ * stores/returns this information).
+ */
+ public function setNextPartFilename(string $nextPartFilename) : static
+ {
+ $this->getParent()->setNextPartFilename($nextPartFilename);
+ return $this;
+ }
+
+ /**
+ * Returns the file mode included in the uuencoded 'begin' line for this
+ * part.
+ */
+ public function getUnixFileMode() : ?int
+ {
+ return $this->getHeaderContainer()->getUnixFileMode();
+ }
+
+ /**
+ * Returns the filename included in the uuencoded 'begin' line for this
+ * part.
+ */
+ public function getFilename() : ?string
+ {
+ return $this->getHeaderContainer()->getFilename();
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserUUEncodedPartProxyFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserUUEncodedPartProxyFactory.php
new file mode 100644
index 00000000..39baad20
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Parser/Proxy/ParserUUEncodedPartProxyFactory.php
@@ -0,0 +1,62 @@
+logger = $logger;
+ $this->streamFactory = $sdf;
+ $this->parserPartStreamContainerFactory = $parserPartStreamContainerFactory;
+ }
+
+ /**
+ * Constructs a new ParserUUEncodedPartProxy wrapping an IUUEncoded object.
+ */
+ public function newInstance(PartBuilder $partBuilder, IParserService $parser) : ParserUUEncodedPartProxy
+ {
+ $parserProxy = new ParserUUEncodedPartProxy($partBuilder, $parser);
+ $streamContainer = $this->parserPartStreamContainerFactory->newInstance($parserProxy);
+
+ $part = new UUEncodedPart(
+ $parserProxy->getUnixFileMode(),
+ $parserProxy->getFileName(),
+ $partBuilder->getParent()->getPart(),
+ $this->logger,
+ $streamContainer
+ );
+ $parserProxy->setPart($part);
+
+ $streamContainer->setStream($this->streamFactory->newMessagePartStream($part));
+ $part->attach($streamContainer);
+ return $parserProxy;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Stream/HeaderStream.php b/plugins/vendor/zbateson/mail-mime-parser/src/Stream/HeaderStream.php
new file mode 100644
index 00000000..d1eebcb2
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Stream/HeaderStream.php
@@ -0,0 +1,101 @@
+attach($this);
+
+ // unsetting the property forces the first access to go through
+ // __get().
+ unset($this->stream);
+ }
+
+ public function __destruct()
+ {
+ $this->part->detach($this);
+ }
+
+ public function update(SplSubject $subject) : void
+ {
+ if ($this->stream !== null) {
+ $this->stream = $this->createStream();
+ }
+ }
+
+ /**
+ * Returns a header array for the current part.
+ *
+ * If the part is not a MimePart, Content-Type, Content-Disposition and
+ * Content-Transfer-Encoding headers are generated manually.
+ */
+ private function getPartHeadersIterator() : Traversable
+ {
+ if ($this->part instanceof IMimePart) {
+ return $this->part->getRawHeaderIterator();
+ } elseif ($this->part->getParent() !== null && $this->part->getParent()->isMime()) {
+ return new ArrayIterator([
+ [HeaderConsts::CONTENT_TYPE, $this->part->getContentType()],
+ [HeaderConsts::CONTENT_DISPOSITION, $this->part->getContentDisposition()],
+ [HeaderConsts::CONTENT_TRANSFER_ENCODING, $this->part->getContentTransferEncoding()]
+ ]);
+ }
+ return new ArrayIterator();
+ }
+
+ /**
+ * Writes out headers for $this->part and follows them with an empty line.
+ */
+ public function writePartHeadersTo(StreamInterface $stream) : static
+ {
+ foreach ($this->getPartHeadersIterator() as $header) {
+ $stream->write("{$header[0]}: {$header[1]}\r\n");
+ }
+ $stream->write("\r\n");
+ return $this;
+ }
+
+ /**
+ * Creates the underlying stream lazily when required.
+ */
+ protected function createStream() : StreamInterface
+ {
+ $stream = Psr7\Utils::streamFor();
+ $this->writePartHeadersTo($stream);
+ $stream->rewind();
+ return $stream;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Stream/MessagePartStream.php b/plugins/vendor/zbateson/mail-mime-parser/src/Stream/MessagePartStream.php
new file mode 100644
index 00000000..c09b5ee5
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Stream/MessagePartStream.php
@@ -0,0 +1,188 @@
+streamFactory = $sdf;
+ $this->part = $part;
+ $this->throwExceptionReadingPartContentFromUnsupportedCharsets = $throwExceptionReadingPartContentFromUnsupportedCharsets;
+ $part->attach($this);
+
+ // unsetting the property forces the first access to go through
+ // __get().
+ unset($this->stream);
+ }
+
+ public function __destruct()
+ {
+ $this->part->detach($this);
+ }
+
+ public function update(SplSubject $subject) : void
+ {
+ if ($this->appendStream !== null) {
+ // unset forces recreation in StreamDecoratorTrait with a call to __get
+ unset($this->stream);
+ $this->appendStream = null;
+ }
+ }
+
+ /**
+ * Attaches and returns a CharsetStream decorator to the passed $stream.
+ *
+ * If the current attached IMessagePart doesn't specify a charset, $stream
+ * is returned as-is.
+ */
+ private function getCharsetDecoratorForStream(StreamInterface $stream) : StreamInterface
+ {
+ $charset = $this->part->getCharset();
+ if (!empty($charset)) {
+ if (!$this->throwExceptionReadingPartContentFromUnsupportedCharsets) {
+ $test = $this->streamFactory->newCharsetStream(
+ Psr7\Utils::streamFor(),
+ $charset,
+ MailMimeParser::DEFAULT_CHARSET
+ );
+ try {
+ $test->write('t');
+ } catch (UnsupportedCharsetException $e) {
+ return $stream;
+ } finally {
+ $test->close();
+ }
+ }
+ $stream = $this->streamFactory->newCharsetStream(
+ $stream,
+ $charset,
+ MailMimeParser::DEFAULT_CHARSET
+ );
+ }
+ return $stream;
+ }
+
+ /**
+ * Creates an array of streams based on the attached part's mime boundary
+ * and child streams.
+ *
+ * @param IMimePart $part passed in because $this->part is declared
+ * as IMessagePart
+ * @return StreamInterface[]
+ */
+ protected function getBoundaryAndChildStreams(IMimePart $part) : array
+ {
+ $boundary = $part->getHeaderParameter(HeaderConsts::CONTENT_TYPE, 'boundary');
+ if ($boundary === null) {
+ return \array_map(
+ function($child) {
+ return $child->getStream();
+ },
+ $part->getChildParts()
+ );
+ }
+ $streams = [];
+ foreach ($part->getChildParts() as $i => $child) {
+ if ($i !== 0 || $part->hasContent()) {
+ $streams[] = Psr7\Utils::streamFor("\r\n");
+ }
+ $streams[] = Psr7\Utils::streamFor("--$boundary\r\n");
+ $streams[] = $child->getStream();
+ }
+ $streams[] = Psr7\Utils::streamFor("\r\n--$boundary--\r\n");
+
+ return $streams;
+ }
+
+ /**
+ * Returns an array of Psr7 Streams representing the attached part and it's
+ * direct children.
+ *
+ * @return StreamInterface[]
+ */
+ protected function getStreamsArray() : array
+ {
+ $contentStream = $this->part->getContentStream();
+ if ($contentStream !== null) {
+ // wrapping in a SeekingLimitStream because the underlying
+ // ContentStream could be rewound, etc...
+ $contentStream = $this->streamFactory->newDecoratedCachingStream(
+ $this->streamFactory->newSeekingStream($contentStream),
+ function($stream) {
+ $es = $this->streamFactory->getTransferEncodingDecoratedStream(
+ $stream,
+ $this->part->getContentTransferEncoding(),
+ $this->part->getFilename()
+ );
+ $cs = $this->getCharsetDecoratorForStream($es);
+ return $cs;
+ }
+ );
+ }
+
+ $streams = [$this->streamFactory->newHeaderStream($this->part), $contentStream ?: Psr7\Utils::streamFor()];
+
+ if ($this->part instanceof IMimePart && $this->part->getChildCount() > 0) {
+ $streams = \array_merge($streams, $this->getBoundaryAndChildStreams($this->part));
+ }
+
+ return $streams;
+ }
+
+ /**
+ * Creates the underlying stream lazily when required.
+ */
+ protected function createStream() : StreamInterface
+ {
+ if ($this->appendStream === null) {
+ $this->appendStream = new AppendStream($this->getStreamsArray());
+ }
+ return $this->appendStream;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Stream/MessagePartStreamDecorator.php b/plugins/vendor/zbateson/mail-mime-parser/src/Stream/MessagePartStreamDecorator.php
new file mode 100644
index 00000000..6c2fe582
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Stream/MessagePartStreamDecorator.php
@@ -0,0 +1,61 @@
+part = $part;
+ $this->stream = $stream;
+ }
+
+ /**
+ * Overridden to wrap exceptions in MessagePartReadException which provides
+ * 'getPart' to inspect the part the error occurs on.
+ *
+ * @throws MessagePartStreamReadException
+ */
+ public function read(int $length) : string
+ {
+ try {
+ return $this->decoratorRead($length);
+ } catch (MessagePartStreamReadException $me) {
+ throw $me;
+ } catch (RuntimeException $e) {
+ throw new MessagePartStreamReadException(
+ $this->part,
+ 'Exception occurred reading a part stream: cid=' . $this->part->getContentId()
+ . ' type=' . $this->part->getContentType() . ', message: ' . $e->getMessage(),
+ $e->getCode(),
+ $e
+ );
+ }
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Stream/MessagePartStreamReadException.php b/plugins/vendor/zbateson/mail-mime-parser/src/Stream/MessagePartStreamReadException.php
new file mode 100644
index 00000000..07664696
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Stream/MessagePartStreamReadException.php
@@ -0,0 +1,36 @@
+part = $part;
+ }
+
+ public function getPart() : IMessagePart
+ {
+ return $this->part;
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/Stream/StreamFactory.php b/plugins/vendor/zbateson/mail-mime-parser/src/Stream/StreamFactory.php
new file mode 100644
index 00000000..d6174a4a
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/Stream/StreamFactory.php
@@ -0,0 +1,198 @@
+throwExceptionReadingPartContentFromUnsupportedCharsets = $throwExceptionReadingPartContentFromUnsupportedCharsets;
+ }
+
+ /**
+ * Returns a SeekingLimitStream using $part->getStreamPartLength() and
+ * $part->getStreamPartStartPos()
+ */
+ public function getLimitedPartStream(PartBuilder $part) : StreamInterface
+ {
+ return $this->newLimitStream(
+ $part->getStream(),
+ $part->getStreamPartLength(),
+ $part->getStreamPartStartPos()
+ );
+ }
+
+ /**
+ * Returns a SeekingLimitStream using $part->getStreamContentLength() and
+ * $part->getStreamContentStartPos()
+ */
+ public function getLimitedContentStream(PartBuilder $part) : ?StreamInterface
+ {
+ $length = $part->getStreamContentLength();
+ if ($length !== 0) {
+ return $this->newLimitStream(
+ $part->getStream(),
+ $part->getStreamContentLength(),
+ $part->getStreamContentStartPos()
+ );
+ }
+ return null;
+ }
+
+ /**
+ * Creates and returns a SeekingLimitedStream.
+ */
+ private function newLimitStream(StreamInterface $stream, int $length, int $start) : StreamInterface
+ {
+ return new SeekingLimitStream(
+ $this->newNonClosingStream($stream),
+ $length,
+ $start
+ );
+ }
+
+ /**
+ * Creates and returns a SeekingLimitedStream without limits, so it's a
+ * stream that preserves its current position on the underlying stream it
+ * reads from.
+ */
+ public function newSeekingStream(StreamInterface $stream) : StreamInterface
+ {
+ return new SeekingLimitStream($this->newNonClosingStream($stream));
+ }
+
+ /**
+ * Creates a non-closing stream that doesn't close it's internal stream when
+ * closing/detaching.
+ */
+ public function newNonClosingStream(StreamInterface $stream) : StreamInterface
+ {
+ return new NonClosingStream($stream);
+ }
+
+ /**
+ * Creates a ChunkSplitStream.
+ */
+ public function newChunkSplitStream(StreamInterface $stream) : StreamInterface
+ {
+ return new ChunkSplitStream($stream);
+ }
+
+ /**
+ * Creates and returns a Base64Stream with an internal
+ * PregReplaceFilterStream that filters out non-base64 characters.
+ */
+ public function newBase64Stream(StreamInterface $stream) : StreamInterface
+ {
+ return new Base64Stream(
+ new PregReplaceFilterStream($stream, '/[^a-zA-Z0-9\/\+=]/', '')
+ );
+ }
+
+ /**
+ * Creates and returns a QuotedPrintableStream.
+ */
+ public function newQuotedPrintableStream(StreamInterface $stream) : StreamInterface
+ {
+ return new QuotedPrintableStream($stream);
+ }
+
+ /**
+ * Creates and returns a UUStream
+ */
+ public function newUUStream(StreamInterface $stream) : StreamInterface
+ {
+ return new UUStream($stream);
+ }
+
+ public function getTransferEncodingDecoratedStream(StreamInterface $stream, ?string $transferEncoding, ?string $filename = null) : StreamInterface
+ {
+ $decorated = null;
+ switch ($transferEncoding) {
+ case 'quoted-printable':
+ $decorated = $this->newQuotedPrintableStream($stream);
+ break;
+ case 'base64':
+ $decorated = $this->newBase64Stream(
+ $this->newChunkSplitStream($stream)
+ );
+ break;
+ case 'x-uuencode':
+ $decorated = $this->newUUStream($stream);
+ if ($filename !== null) {
+ $decorated->setFilename($filename);
+ }
+ break;
+ default:
+ return $stream;
+ }
+ return $decorated;
+ }
+
+ /**
+ * Creates and returns a CharsetStream
+ */
+ public function newCharsetStream(StreamInterface $stream, string $streamCharset, string $stringCharset) : StreamInterface
+ {
+ return new CharsetStream($stream, $streamCharset, $stringCharset);
+ }
+
+ /**
+ * Creates and returns a MessagePartStream
+ */
+ public function newMessagePartStream(IMessagePart $part) : MessagePartStreamDecorator
+ {
+ return new MessagePartStream($this, $part, $this->throwExceptionReadingPartContentFromUnsupportedCharsets);
+ }
+
+ /**
+ * Creates and returns a DecoratedCachingStream
+ */
+ public function newDecoratedCachingStream(StreamInterface $stream, callable $decorator) : StreamInterface
+ {
+ // seems to perform best locally, would be good to test this out more
+ return new DecoratedCachingStream($stream, $decorator, 204800);
+ }
+
+ /**
+ * Creates and returns a HeaderStream
+ */
+ public function newHeaderStream(IMessagePart $part) : StreamInterface
+ {
+ return new HeaderStream($part);
+ }
+
+ public function newDecoratedMessagePartStream(IMessagePart $part, StreamInterface $stream) : MessagePartStreamDecorator
+ {
+ return new MessagePartStreamDecorator($part, $stream);
+ }
+}
diff --git a/plugins/vendor/zbateson/mail-mime-parser/src/di_config.php b/plugins/vendor/zbateson/mail-mime-parser/src/di_config.php
new file mode 100644
index 00000000..030ddf59
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/src/di_config.php
@@ -0,0 +1,64 @@
+ new AutowireDefinitionHelper(NullLogger::class),
+
+ // only affects reading part content, not for instance decoding mime encoded
+ // header parts
+ 'throwExceptionReadingPartContentFromUnsupportedCharsets' => false,
+
+ 'fromDomainConsumerService' => (new AutowireDefinitionHelper(DomainConsumerService::class))
+ ->constructorParameter('partName', 'from'),
+ 'byDomainConsumerService' => (new AutowireDefinitionHelper(DomainConsumerService::class))
+ ->constructorParameter('partName', 'by'),
+ 'viaGenericReceivedConsumerService' => (new AutowireDefinitionHelper(GenericReceivedConsumerService::class))
+ ->constructorParameter('partName', 'via'),
+ 'withGenericReceivedConsumerService' => (new AutowireDefinitionHelper(GenericReceivedConsumerService::class))
+ ->constructorParameter('partName', 'with'),
+ 'idGenericReceivedConsumerService' => (new AutowireDefinitionHelper(GenericReceivedConsumerService::class))
+ ->constructorParameter('partName', 'id'),
+ 'forGenericReceivedConsumerService' => (new AutowireDefinitionHelper(GenericReceivedConsumerService::class))
+ ->constructorParameter('partName', 'for'),
+ ReceivedConsumerService::class => (new AutowireDefinitionHelper())
+ ->constructor(
+ fromDomainConsumerService: new Reference('fromDomainConsumerService'),
+ byDomainConsumerService: new Reference('byDomainConsumerService'),
+ viaGenericReceivedConsumerService: new Reference('viaGenericReceivedConsumerService'),
+ withGenericReceivedConsumerService: new Reference('withGenericReceivedConsumerService'),
+ idGenericReceivedConsumerService: new Reference('idGenericReceivedConsumerService'),
+ forGenericReceivedConsumerService: new Reference('forGenericReceivedConsumerService')
+ ),
+ PartStreamContainer::class => (new AutowireDefinitionHelper())
+ ->constructor(
+ throwExceptionReadingPartContentFromUnsupportedCharsets: new Reference('throwExceptionReadingPartContentFromUnsupportedCharsets')
+ ),
+ PartStreamContainerFactory::class => (new AutowireDefinitionHelper())
+ ->constructor(
+ throwExceptionReadingPartContentFromUnsupportedCharsets: new Reference('throwExceptionReadingPartContentFromUnsupportedCharsets')
+ ),
+ ParserPartStreamContainerFactory::class => (new AutowireDefinitionHelper())
+ ->constructor(
+ throwExceptionReadingPartContentFromUnsupportedCharsets: new Reference('throwExceptionReadingPartContentFromUnsupportedCharsets')
+ ),
+ StreamFactory::class => (new AutowireDefinitionHelper())
+ ->constructor(
+ throwExceptionReadingPartContentFromUnsupportedCharsets: new Reference('throwExceptionReadingPartContentFromUnsupportedCharsets')
+ ),
+];
diff --git a/plugins/vendor/zbateson/mail-mime-parser/version.txt b/plugins/vendor/zbateson/mail-mime-parser/version.txt
new file mode 100644
index 00000000..b0f2dcb3
--- /dev/null
+++ b/plugins/vendor/zbateson/mail-mime-parser/version.txt
@@ -0,0 +1 @@
+3.0.4
diff --git a/plugins/vendor/zbateson/mb-wrapper/LICENSE b/plugins/vendor/zbateson/mb-wrapper/LICENSE
new file mode 100644
index 00000000..3ba5af7c
--- /dev/null
+++ b/plugins/vendor/zbateson/mb-wrapper/LICENSE
@@ -0,0 +1,25 @@
+BSD 2-Clause License
+
+Copyright (c) 2018, Zaahid Bateson
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/plugins/vendor/zbateson/mb-wrapper/README.md b/plugins/vendor/zbateson/mb-wrapper/README.md
new file mode 100644
index 00000000..b1567003
--- /dev/null
+++ b/plugins/vendor/zbateson/mb-wrapper/README.md
@@ -0,0 +1,67 @@
+# zbateson/mb-wrapper
+
+Charset conversion and string manipulation wrapper with a large defined set of aliases.
+
+[](https://github.com/zbateson/mb-wrapper.svg/actions/workflows/tests.yml)
+[](https://scrutinizer-ci.com/g/zbateson/mb-wrapper/?branch=master)
+[](https://scrutinizer-ci.com/g/zbateson/mb-wrapper/?branch=master)
+[](https://packagist.org/packages/zbateson/mb-wrapper)
+[](https://packagist.org/packages/zbateson/mb-wrapper)
+
+The goals of this project are to be:
+
+* Well written
+* Tested where possible
+* Support as wide a range of charset aliases as possible
+
+To include it for use in your project, please install via composer:
+
+```
+composer require zbateson/mb-wrapper
+```
+
+## Php 7 Support Dropped
+
+As of mb-wrapper 2.0, support for php 7 has been dropped.
+
+## Requirements
+
+mb-wrapper requires PHP 8.0 or newer. Tested on PHP 8.0, 8.1, 8.2, and 8.3 on GitHub Actions.
+
+## New in 2.0
+
+If converting or performing an operation on a string fails in iconv, an UnsupportedCharsetException is now thrown.
+
+## Description
+
+MbWrapper is intended for use wherever mb_* or iconv_* is used. It scans supported charsets returned by mb_list_encodings(), and prefers mb_* functions, but will fallback to iconv if a charset isn't supported by the mb_ functions.
+
+A list of aliased charsets is maintained for both mb_* and iconv, where a supported charset exists for an alias. This is useful for mail and http parsing as other systems may report encodings not recognized by mb_* or iconv.
+
+Charset lookup is done by removing non-alphanumeric characters as well, so UTF8 will always be matched to UTF-8, etc...
+
+## Usage
+
+The following wrapper methods are exposed:
+* mb_convert_encoding, iconv with MbWrapper::convert
+* mb_substr, iconv_substr with MbWrapper::getSubstr
+* mb_strlen, iconv_strlen with MbWrapper::getLength
+* mb_check_encoding, iconv (for verification) with MbWrapper::checkEncoding
+
+```php
+$mbWrapper = new \ZBateson\MbWrapper\MbWrapper();
+$fromCharset = 'ISO-8859-1';
+$toCharset = 'UTF-8';
+
+$mbWrapper->convert('data', $fromCharset, $toCharset);
+$mbWrapper->getLength('data', 'UTF-8');
+$mbWrapper->substr('data', 'UTF-8', 1, 2);
+
+if ($mbWrapper->checkEncoding('data', 'UTF-8')) {
+ echo 'Compatible';
+}
+```
+
+## License
+
+BSD licensed - please see [license agreement](https://github.com/zbateson/mb-wrapper/blob/master/LICENSE).
diff --git a/plugins/vendor/zbateson/mb-wrapper/composer.json b/plugins/vendor/zbateson/mb-wrapper/composer.json
new file mode 100644
index 00000000..6eb4ecb4
--- /dev/null
+++ b/plugins/vendor/zbateson/mb-wrapper/composer.json
@@ -0,0 +1,35 @@
+{
+ "name": "zbateson/mb-wrapper",
+ "description": "Wrapper for mbstring with fallback to iconv for encoding conversion and string manipulation",
+ "keywords": ["mb_convert_encoding", "charset", "encoding", "string", "mbstring", "iconv", "multibyte", "mb", "mime", "mail", "http"],
+ "license": "BSD-2-Clause",
+ "authors": [
+ {
+ "name": "Zaahid Bateson"
+ }
+ ],
+ "require": {
+ "php": ">=8.0",
+ "symfony/polyfill-mbstring": "^1.9",
+ "symfony/polyfill-iconv": "^1.9"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.6|^10.0",
+ "friendsofphp/php-cs-fixer": "*",
+ "phpstan/phpstan": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best support/performance",
+ "ext-iconv": "For best support/performance"
+ },
+ "autoload": {
+ "psr-4": {
+ "ZBateson\\MbWrapper\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "ZBateson\\MbWrapper\\": "tests/MbWrapper"
+ }
+ }
+}
diff --git a/plugins/vendor/zbateson/mb-wrapper/src/MbWrapper.php b/plugins/vendor/zbateson/mb-wrapper/src/MbWrapper.php
new file mode 100644
index 00000000..31acd5ae
--- /dev/null
+++ b/plugins/vendor/zbateson/mb-wrapper/src/MbWrapper.php
@@ -0,0 +1,489 @@
+ aliased charsets supported by mb_convert_encoding.
+ * The alias is stripped of any non-alphanumeric characters (so CP367
+ * is equal to CP-367) when comparing.
+ * Some of these translations are already supported by
+ * mb_convert_encoding on "my" PHP 5.5.9, but may not be supported in
+ * other implementations or versions since they're not part of
+ * documented support.
+ */
+ public static $mbAliases = [
+ // supported but not included in mb_list_encodings for some reason...
+ 'CP850' => 'CP850',
+ 'GB2312' => 'GB18030',
+ 'SJIS2004' => 'SJIS-2004',
+ // aliases
+ 'ANSIX341968' => 'ASCII',
+ 'ANSIX341986' => 'ASCII',
+ 'ARABIC' => 'ISO-8859-6',
+ 'ASMO708' => 'ISO-8859-6',
+ 'BIG5' => 'BIG-5',
+ 'BIG5TW' => 'BIG-5',
+ 'CESU8' => 'UTF-8',
+ 'CHINESE' => 'GB18030',
+ 'CP367' => 'ASCII',
+ 'CP819' => 'ISO-8859-1',
+ 'CP1251' => 'WINDOWS-1251',
+ 'CP1252' => 'WINDOWS-1252',
+ 'CP1254' => 'WINDOWS-1254',
+ 'CP1255' => 'ISO-8859-8',
+ 'CSASCII' => 'ASCII',
+ 'CSBIG5' => 'BIG-5',
+ 'CSIBM866' => 'CP866',
+ 'CSISO2022JP' => 'ISO-2022-JP',
+ 'CSISO2022KR' => 'ISO-2022-KR',
+ 'CSISO58GB231280' => 'GB18030',
+ 'CSISOLATIN1' => 'ISO-8859-1',
+ 'CSISOLATIN2' => 'ISO-8859-2',
+ 'CSISOLATIN3' => 'ISO-8859-3',
+ 'CSISOLATIN4' => 'ISO-8859-4',
+ 'CSISOLATIN5' => 'ISO-8859-9',
+ 'CSISOLATIN6' => 'ISO-8859-10',
+ 'CSISOLATINARABIC' => 'ISO-8859-6',
+ 'CSISOLATINCYRILLIC' => 'ISO-8859-5',
+ 'CSISOLATINGREEK' => 'ISO-8859-7',
+ 'CSISOLATINHEBREW' => 'ISO-8859-8',
+ 'CSKOI8R' => 'KOI8-R',
+ 'CSPC850MULTILINGUAL' => 'CP850',
+ 'CSSHIFTJIS' => 'SJIS',
+ 'CYRILLIC' => 'ISO-8859-5',
+ 'ECMA114' => 'ISO-8859-6',
+ 'ECMA118' => 'ISO-8859-7',
+ 'ELOT928' => 'ISO-8859-7',
+ 'EUCCN' => 'GB18030',
+ 'EUCGB2312CN' => 'GB18030',
+ 'GB180302000' => 'GB18030',
+ 'GB23121980' => 'GB18030',
+ 'GB231280' => 'GB18030',
+ 'GBK' => 'CP936',
+ 'GREEK8' => 'ISO-8859-7',
+ 'GREEK' => 'ISO-8859-7',
+ 'HEBREW' => 'ISO-8859-8',
+ 'HZGB2312' => 'HZ',
+ 'HZGB' => 'HZ',
+ 'IBM367' => 'ASCII',
+ 'IBM819' => 'ISO-8859-1',
+ 'IBM850' => 'CP850',
+ 'IBM866' => 'CP866',
+ 'ISO2022JP2004' => 'ISO-2022-JP-2004',
+ 'ISO646IRV1991' => 'ASCII',
+ 'ISO646US' => 'ASCII',
+ 'ISO8859' => 'ISO-8859-1',
+ 'ISO8859101992' => 'ISO-8859-10',
+ 'ISO885911987' => 'ISO-8859-1',
+ 'ISO8859141998' => 'ISO-8859-14',
+ 'ISO8859162001' => 'ISO-8859-16',
+ 'ISO885921987' => 'ISO-8859-2',
+ 'ISO885931988' => 'ISO-8859-3',
+ 'ISO885941988' => 'ISO-8859-4',
+ 'ISO885951988' => 'ISO-8859-5',
+ 'ISO885961987' => 'ISO-8859-6',
+ 'ISO885971987' => 'ISO-8859-7',
+ 'ISO885981988' => 'ISO-8859-8',
+ 'ISO88598I' => 'ISO-8859-8',
+ 'ISO885991989' => 'ISO-8859-9',
+ 'ISOCELTIC' => 'ISO-8859-14',
+ 'ISOIR100' => 'ISO-8859-1',
+ 'ISOIR101' => 'ISO-8859-2',
+ 'ISOIR109' => 'ISO-8859-3',
+ 'ISOIR110' => 'ISO-8859-4',
+ 'ISOIR126' => 'ISO-8859-7',
+ 'ISOIR127' => 'ISO-8859-6',
+ 'ISOIR138' => 'ISO-8859-8',
+ 'ISOIR144' => 'ISO-8859-5',
+ 'ISOIR148' => 'ISO-8859-9',
+ 'ISOIR157' => 'ISO-8859-10',
+ 'ISOIR199' => 'ISO-8859-14',
+ 'ISOIR226' => 'ISO-8859-16',
+ 'ISOIR58' => 'GB18030',
+ 'ISOIR6' => 'ASCII',
+ 'KOI8R' => 'KOI8-R',
+ 'KOREAN' => 'EUC-KR',
+ 'KSC56011987' => 'EUC-KR',
+ 'KSC5601' => 'EUC-KR',
+ 'KSX1001' => 'EUC-KR',
+ 'L1' => 'ISO-8859-1',
+ 'L2' => 'ISO-8859-2',
+ 'L3' => 'ISO-8859-3',
+ 'L4' => 'ISO-8859-4',
+ 'L5' => 'ISO-8859-9',
+ 'L6' => 'ISO-8859-10',
+ 'L8' => 'ISO-8859-14',
+ 'L10' => 'ISO-8859-16',
+ 'LATIN' => 'ISO-8859-1',
+ 'LATIN1' => 'ISO-8859-1',
+ 'LATIN2' => 'ISO-8859-2',
+ 'LATIN3' => 'ISO-8859-3',
+ 'LATIN4' => 'ISO-8859-4',
+ 'LATIN5' => 'ISO-8859-9',
+ 'LATIN6' => 'ISO-8859-10',
+ 'LATIN8' => 'ISO-8859-14',
+ 'LATIN10' => 'ISO-8859-16',
+ 'MS932' => 'CP932',
+ 'ms936' => 'CP936',
+ 'MS950' => 'CP950',
+ 'MSKANJI' => 'CP932',
+ 'SHIFTJIS2004' => 'SJIS',
+ 'SHIFTJIS' => 'SJIS',
+ 'UJIS' => 'EUC-JP',
+ 'UNICODE11UTF7' => 'UTF-7',
+ 'US' => 'ASCII',
+ 'USASCII' => 'ASCII',
+ 'WE8MSWIN1252' => 'WINDOWS-1252',
+ 'WINDOWS1251' => 'WINDOWS-1251',
+ 'WINDOWS1252' => 'WINDOWS-1252',
+ 'WINDOWS1254' => 'WINDOWS-1254',
+ 'WINDOWS1255' => 'ISO-8859-8',
+ '0' => 'WINDOWS-1252',
+ '128' => 'SJIS',
+ '129' => 'EUC-KR',
+ '134' => 'GB18030',
+ '136' => 'BIG-5',
+ '161' => 'WINDOWS-1253',
+ '162' => 'WINDOWS-1254',
+ '177' => 'WINDOWS-1255',
+ '178' => 'WINDOWS-1256',
+ '186' => 'WINDOWS-1257',
+ '204' => 'WINDOWS-1251',
+ '222' => 'WINDOWS-874',
+ '238' => 'WINDOWS-1250',
+ '646' => 'ASCII',
+ '850' => 'CP850',
+ '866' => 'CP866',
+ '932' => 'CP932',
+ '936' => 'CP936',
+ '950' => 'CP950',
+ '1251' => 'WINDOWS-1251',
+ '1252' => 'WINDOWS-1252',
+ '1254' => 'WINDOWS-1254',
+ '1255' => 'ISO-8859-8',
+ '8859' => 'ISO-8859-1',
+ ];
+
+ /**
+ * @var array aliased charsets supported by iconv.
+ */
+ public static $iconvAliases = [
+ // iconv aliases -- a lot of these may already be supported
+ 'CESU8' => 'UTF8',
+ 'CP154' => 'PT154',
+ 'CPGR' => 'CP869',
+ 'CPIS' => 'CP861',
+ 'CSHPROMAN8' => 'ROMAN8',
+ 'CSIBM037' => 'CP037',
+ 'CSIBM1026' => 'CP1026',
+ 'CSIBM424' => 'CP424',
+ 'CSIBM500' => 'CP500',
+ 'CSIBM860' => 'CP860',
+ 'CSIBM861' => 'CP861',
+ 'CSIBM863' => 'CP863',
+ 'CSIBM864' => 'CP864',
+ 'CSIBM865' => 'CP865',
+ 'CSIBM869' => 'CP869',
+ 'CSPC775BALTIC' => 'CP775',
+ 'CSPC862LATINHEBREW' => 'CP862',
+ 'CSPC8CODEPAGE437' => 'CP437',
+ 'CSPTCP154' => 'PT154',
+ 'CYRILLICASIAN' => 'PT154',
+ 'EBCDICCPBE' => 'CP500',
+ 'EBCDICCPCA' => 'CP037',
+ 'EBCDICCPCH' => 'CP500',
+ 'EBCDICCPHE' => 'CP424',
+ 'EBCDICCPNL' => 'CP037',
+ 'EBCDICCPUS' => 'CP037',
+ 'EBCDICCPWT' => 'CP037',
+ 'HKSCS' => 'BIG5HKSCS',
+ 'HPROMAN8' => 'ROMAN8',
+ 'IBM037' => 'CP037',
+ 'IBM039' => 'CP037',
+ 'IBM424' => 'CP424',
+ 'IBM437' => 'CP437',
+ 'IBM500' => 'CP500',
+ 'IBM775' => 'CP775',
+ 'IBM860' => 'CP860',
+ 'IBM861' => 'CP861',
+ 'IBM862' => 'CP862',
+ 'IBM863' => 'CP863',
+ 'IBM864' => 'CP864',
+ 'IBM865' => 'CP865',
+ 'IBM869' => 'CP869',
+ 'IBM1026' => 'CP1026',
+ 'IBM1140' => 'CP1140',
+ 'ISO2022JP2' => 'ISO2022JP2',
+ 'ISO8859112001' => 'ISO885911',
+ 'ISO885911' => 'ISO885911',
+ 'ISOIR166' => 'TIS620',
+ 'JOHAB' => 'CP1361',
+ 'MACCYRILLIC' => 'MACCYRILLIC',
+ 'MS1361' => 'CP1361',
+ 'MS949' => 'CP949',
+ 'PTCP154' => 'PT154',
+ 'R8' => 'ROMAN8',
+ 'ROMAN8' => 'ROMAN8',
+ 'THAI' => 'ISO885911',
+ 'TIS6200' => 'TIS620',
+ 'TIS62025290' => 'TIS620',
+ 'TIS62025291' => 'TIS620',
+ 'TIS620' => 'TIS620',
+ 'UHC' => 'CP949',
+ 'WINDOWS1250' => 'CP1250',
+ 'WINDOWS1253' => 'CP1253',
+ 'WINDOWS1256' => 'CP1256',
+ 'WINDOWS1257' => 'CP1257',
+ 'WINDOWS1258' => 'CP1258',
+ '037' => 'CP037',
+ '424' => 'CP424',
+ '437' => 'CP437',
+ '500' => 'CP500',
+ '775' => 'CP775',
+ '860' => 'CP860',
+ '861' => 'CP861',
+ '862' => 'CP862',
+ '863' => 'CP863',
+ '864' => 'CP864',
+ '865' => 'CP865',
+ '869' => 'CP869',
+ '949' => 'CP949',
+ '1026' => 'CP1026',
+ '1140' => 'CP1140',
+ '1250' => 'CP1250',
+ '1253' => 'CP1253',
+ '1256' => 'CP1256',
+ '1257' => 'CP1257',
+ '1258' => 'CP1258',
+ ];
+
+ /**
+ * @var string[] cached lookups for quicker retrieval
+ */
+ protected $mappedMbCharsets = [
+ 'UTF8' => 'UTF-8',
+ 'USASCII' => 'US-ASCII',
+ 'ISO88591' => 'ISO-8859-1',
+ ];
+
+ /**
+ * @var string[] An array of encodings supported by the mb_* extension, as
+ * returned by mb_list_encodings(), with the key set to the charset's
+ * name afte
+ */
+ private static $mbListedEncodings;
+
+ /**
+ * Initializes the static mb_* encoding array.
+ */
+ public function __construct()
+ {
+ if (self::$mbListedEncodings === null) {
+ $cs = \mb_list_encodings();
+ $keys = $this->getNormalizedCharset($cs);
+ self::$mbListedEncodings = \array_combine($keys, $cs);
+ }
+ }
+
+ /**
+ * The passed charset is uppercased, and stripped of non-alphanumeric
+ * characters before being returned.
+ *
+ * @param string|string[] $charset
+ * @return string|string[]
+ */
+ private function getNormalizedCharset($charset)
+ {
+ $upper = null;
+ if (\is_array($charset)) {
+ $upper = \array_map('strtoupper', $charset);
+ } else {
+ $upper = \strtoupper($charset);
+ }
+ return \preg_replace('/[^A-Z0-9]+/', '', $upper);
+ }
+
+ private function iconv(string $fromCharset, string $toCharset, string $str) : string
+ {
+ $ret = @\iconv($fromCharset, $toCharset . '//TRANSLIT//IGNORE', $str);
+ if ($ret === false) {
+ throw new UnsupportedCharsetException("Unable to convert from charsets: $fromCharset to $toCharset");
+ }
+ return $ret;
+ }
+
+ private function iconvStrlen(string $str, string $charset) : int
+ {
+ $ret = @\iconv_strlen($str, $charset . '//TRANSLIT//IGNORE');
+ if ($ret === false) {
+ throw new UnsupportedCharsetException("Charset $charset is not supported");
+ }
+ return $ret;
+ }
+
+ private function iconvSubstr(string $str, string $charset, int $start, ?int $length = null) : string
+ {
+ $ret = @\iconv_substr($str, $start, $length, $charset . '//TRANSLIT//IGNORE');
+ if ($ret === false) {
+ $strLength = $this->iconvStrlen($str, $charset);
+ if ($start > $strLength) {
+ // returns empty to keep in line with mb_substr functionality
+ return '';
+ }
+ throw new UnsupportedCharsetException("Charset $charset is not supported");
+ }
+ return $ret;
+ }
+
+ /**
+ * Converts the passed string's charset from the passed $fromCharset to the
+ * passed $toCharset
+ *
+ * The function attempts to use mb_convert_encoding if possible, and falls
+ * back to iconv if not. If the source or destination character sets aren't
+ * supported, a blank string is returned.
+ *
+ * @throws UnsupportedCharsetException if iconv fails
+ */
+ public function convert(string $str, string $fromCharset, string $toCharset) : string
+ {
+ // there may be some mb-supported encodings not supported by iconv (on my libiconv for instance
+ // HZ isn't supported), and so it may happen that failing an mb_convert_encoding, an iconv
+ // may also fail even though both support an encoding separately.
+ // For cases like that, a two-way encoding is done with UTF-8 as an intermediary.
+
+ $from = $this->getMbCharset($fromCharset);
+ $to = $this->getMbCharset($toCharset);
+
+ if ($str !== '') {
+ if ($from !== false && $to === false) {
+ $str = \mb_convert_encoding($str, 'UTF-8', $from);
+ return $this->iconv('UTF-8', $this->getIconvAlias($toCharset), $str);
+ } elseif ($from === false && $to !== false) {
+ $str = $this->iconv($this->getIconvAlias($fromCharset), 'UTF-8', $str);
+ return \mb_convert_encoding($str, $to, 'UTF-8');
+ } elseif ($from !== false && $to !== false) {
+ return \mb_convert_encoding($str, $to, $from);
+ }
+ return $this->iconv(
+ $this->getIconvAlias($fromCharset),
+ $this->getIconvAlias($toCharset),
+ $str
+ );
+ }
+ return $str;
+ }
+
+ /**
+ * Returns true if the passed string is valid in the $charset encoding.
+ *
+ * Either uses mb_check_encoding, or iconv if it's not a supported mb
+ * encoding.
+ */
+ public function checkEncoding(string $str, string $charset) : bool
+ {
+ $mb = $this->getMbCharset($charset);
+ if ($mb !== false) {
+ return \mb_check_encoding($str, $mb);
+ }
+ $ic = $this->getIconvAlias($charset);
+ return (@\iconv($ic, $ic . '//TRANSLIT//IGNORE', $str) !== false);
+ }
+
+ /**
+ * Uses either mb_strlen or iconv_strlen to return the number of characters
+ * in the passed $str for the given $charset
+ *
+ * @throws UnsupportedCharsetException if iconv fails
+ */
+ public function getLength(string $str, string $charset) : int
+ {
+ $mb = $this->getMbCharset($charset);
+ if ($mb !== false) {
+ return \mb_strlen($str, $mb);
+ }
+ return $this->iconvStrlen($str, $this->getIconvAlias($charset));
+ }
+
+ /**
+ * Uses either mb_substr or iconv_substr to create and return a substring of
+ * the passed $str.
+ *
+ * If the offset provided in $start is greater than the length of the
+ * string, an empty string is returned.
+ *
+ * @throws UnsupportedCharsetException if iconv fails
+ */
+ public function getSubstr(string $str, string $charset, int $start, ?int $length = null) : string
+ {
+ $mb = $this->getMbCharset($charset);
+ if ($mb !== false) {
+ return \mb_substr($str, $start, $length, $mb);
+ }
+ $ic = $this->getIconvAlias($charset);
+ if ($ic === 'CP1258') {
+ // iconv_substr fails with CP1258 for some reason, and returns only
+ // a subset of characters (e.g. the first 5, instead of $length)
+ $str = $this->convert($str, $ic, 'UTF-8');
+ return $this->convert($this->getSubstr($str, 'UTF-8', $start, $length), 'UTF-8', $ic);
+ }
+ return $this->iconvSubstr($str, $ic, $start, $length);
+ }
+
+ /**
+ * Looks up a charset from mb_list_encodings and identified aliases,
+ * checking if the lookup has been cached already first.
+ *
+ * If the encoding is not listed, the method will return false.
+ *
+ * On success, the method will return the charset name as accepted by mb_*.
+ *
+ * @return string|bool
+ */
+ private function getMbCharset(string $cs)
+ {
+ $normalized = $this->getNormalizedCharset($cs);
+ if (\array_key_exists($normalized, self::$mbListedEncodings)) {
+ return self::$mbListedEncodings[$normalized];
+ } elseif (\array_key_exists($normalized, self::$mbAliases)) {
+ return self::$mbAliases[$normalized];
+ }
+ return false;
+ }
+
+ /**
+ * Looks up the passed charset in self::$iconvAliases, returning the mapped
+ * charset if applicable. Otherwise returns charset.
+ *
+ * @return string the mapped charset (if mapped) or $cs otherwise
+ */
+ private function getIconvAlias(string $cs) : string
+ {
+ $normalized = $this->getNormalizedCharset($cs);
+ if (\array_key_exists($normalized, self::$iconvAliases)) {
+ return static::$iconvAliases[$normalized];
+ }
+ return $cs;
+ }
+}
diff --git a/plugins/vendor/zbateson/mb-wrapper/src/UnsupportedCharsetException.php b/plugins/vendor/zbateson/mb-wrapper/src/UnsupportedCharsetException.php
new file mode 100644
index 00000000..6eb6e32b
--- /dev/null
+++ b/plugins/vendor/zbateson/mb-wrapper/src/UnsupportedCharsetException.php
@@ -0,0 +1,19 @@
+setFinder(PhpCsFixer\Finder::create()
+ ->exclude('vendor')
+ ->in(__DIR__.'\src')
+ ->in(__DIR__.'\tests')
+ );
diff --git a/plugins/vendor/zbateson/stream-decorators/LICENSE b/plugins/vendor/zbateson/stream-decorators/LICENSE
new file mode 100644
index 00000000..2ee4a46a
--- /dev/null
+++ b/plugins/vendor/zbateson/stream-decorators/LICENSE
@@ -0,0 +1,25 @@
+BSD 2-Clause License
+
+Copyright (c) 2017, Zaahid Bateson
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/plugins/vendor/zbateson/stream-decorators/PhpCsFixer.php b/plugins/vendor/zbateson/stream-decorators/PhpCsFixer.php
new file mode 100644
index 00000000..039328e3
--- /dev/null
+++ b/plugins/vendor/zbateson/stream-decorators/PhpCsFixer.php
@@ -0,0 +1,5 @@
+=8.0",
+ "guzzlehttp/psr7": "^2.5",
+ "zbateson/mb-wrapper": "^2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.6|^10.0",
+ "friendsofphp/php-cs-fixer": "*",
+ "phpstan/phpstan": "*"
+ },
+ "autoload": {
+ "psr-4": {
+ "ZBateson\\StreamDecorators\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "ZBateson\\StreamDecorators\\": "tests/StreamDecorators"
+ }
+ }
+}
diff --git a/plugins/vendor/zbateson/stream-decorators/phpstan.neon b/plugins/vendor/zbateson/stream-decorators/phpstan.neon
new file mode 100644
index 00000000..e33a026d
--- /dev/null
+++ b/plugins/vendor/zbateson/stream-decorators/phpstan.neon
@@ -0,0 +1,8 @@
+parameters:
+ level: 6
+ errorFormat: raw
+ editorUrl: '%%file%% %%line%% %%column%%: %%error%%'
+ paths:
+ - src
+ - tests
+
diff --git a/plugins/vendor/zbateson/stream-decorators/src/Base64Stream.php b/plugins/vendor/zbateson/stream-decorators/src/Base64Stream.php
new file mode 100644
index 00000000..7b79c558
--- /dev/null
+++ b/plugins/vendor/zbateson/stream-decorators/src/Base64Stream.php
@@ -0,0 +1,222 @@
+stream = $stream;
+ $this->buffer = new BufferStream();
+ }
+
+ /**
+ * Returns the current position of the file read/write pointer
+ */
+ public function tell() : int
+ {
+ return $this->position;
+ }
+
+ /**
+ * Returns null, getSize isn't supported
+ *
+ * @return null
+ */
+ public function getSize() : ?int
+ {
+ return null;
+ }
+
+ /**
+ * Not implemented (yet).
+ *
+ * Seek position can be calculated.
+ *
+ * @param int $offset
+ * @param int $whence
+ * @throws RuntimeException
+ */
+ public function seek($offset, $whence = SEEK_SET) : void
+ {
+ throw new RuntimeException('Cannot seek a Base64Stream');
+ }
+
+ /**
+ * Overridden to return false
+ */
+ public function isSeekable() : bool
+ {
+ return false;
+ }
+
+ /**
+ * Returns true if the end of stream has been reached.
+ */
+ public function eof() : bool
+ {
+ return ($this->buffer->eof() && $this->stream->eof());
+ }
+
+ /**
+ * Fills the internal byte buffer after reading and decoding data from the
+ * underlying stream.
+ *
+ * Note that it's expected the underlying stream will only contain valid
+ * base64 characters (normally the stream should be wrapped in a
+ * PregReplaceFilterStream to filter out non-base64 characters).
+ */
+ private function fillBuffer(int $length) : void
+ {
+ $fill = 8192;
+ while ($this->buffer->getSize() < $length) {
+ $read = $this->stream->read($fill);
+ if ($read === '') {
+ break;
+ }
+ $this->buffer->write(\base64_decode($read));
+ }
+ }
+
+ /**
+ * Attempts to read $length bytes after decoding them, and returns them.
+ *
+ * Note that reading and writing to the same stream may result in wrongly
+ * encoded data and is not supported.
+ *
+ * @param int $length
+ */
+ public function read($length) : string
+ {
+ // let Guzzle decide what to do.
+ if ($length <= 0 || $this->eof()) {
+ return $this->stream->read($length);
+ }
+ $this->fillBuffer($length);
+ $ret = $this->buffer->read($length);
+ $this->position += \strlen($ret);
+ return $ret;
+ }
+
+ /**
+ * Writes the passed string to the underlying stream after encoding it to
+ * base64.
+ *
+ * Base64Stream::close or detach must be called. Failing to do so may
+ * result in 1-2 bytes missing from the end of the stream if there's a
+ * remainder. Note that the default Stream destructor calls close as well.
+ *
+ * Note that reading and writing to the same stream may result in wrongly
+ * encoded data and is not supported.
+ *
+ * @param string $string
+ * @return int the number of bytes written
+ */
+ public function write($string) : int
+ {
+ $bytes = $this->remainder . $string;
+ $len = \strlen($bytes);
+ if (($len % 3) !== 0) {
+ $this->remainder = \substr($bytes, -($len % 3));
+ $bytes = \substr($bytes, 0, $len - ($len % 3));
+ } else {
+ $this->remainder = '';
+ }
+ $this->stream->write(\base64_encode($bytes));
+ $written = \strlen($string);
+ $this->position += $len;
+ return $written;
+ }
+
+ /**
+ * Writes out any remaining bytes at the end of the stream and closes.
+ */
+ private function beforeClose() : void
+ {
+ if ($this->isWritable() && $this->remainder !== '') {
+ $this->stream->write(\base64_encode($this->remainder));
+ $this->remainder = '';
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function close() : void
+ {
+ $this->beforeClose();
+ $this->stream->close();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function detach()
+ {
+ $this->beforeClose();
+ $this->stream->detach();
+
+ return null;
+ }
+}
diff --git a/plugins/vendor/zbateson/stream-decorators/src/CharsetStream.php b/plugins/vendor/zbateson/stream-decorators/src/CharsetStream.php
new file mode 100644
index 00000000..a5170406
--- /dev/null
+++ b/plugins/vendor/zbateson/stream-decorators/src/CharsetStream.php
@@ -0,0 +1,179 @@
+stream = $stream;
+ $this->converter = new MbWrapper();
+ $this->streamCharset = $streamCharset;
+ $this->stringCharset = $stringCharset;
+ }
+
+ /**
+ * Overridden to return the position in the target encoding.
+ */
+ public function tell() : int
+ {
+ return $this->position;
+ }
+
+ /**
+ * Returns null, getSize isn't supported
+ *
+ * @return null
+ */
+ public function getSize() : ?int
+ {
+ return null;
+ }
+
+ /**
+ * Not supported.
+ *
+ * @param int $offset
+ * @param int $whence
+ * @throws RuntimeException
+ */
+ public function seek($offset, $whence = SEEK_SET) : void
+ {
+ throw new RuntimeException('Cannot seek a CharsetStream');
+ }
+
+ /**
+ * Overridden to return false
+ */
+ public function isSeekable() : bool
+ {
+ return false;
+ }
+
+ /**
+ * Reads a minimum of $length characters from the underlying stream in its
+ * encoding into $this->buffer.
+ *
+ * Aligning to 4 bytes seemed to solve an issue reading from UTF-16LE
+ * streams and pass testReadUtf16LeToEof, although the buffered string
+ * should've solved that on its own.
+ */
+ private function readRawCharsIntoBuffer(int $length) : void
+ {
+ $n = (int) \ceil(($length + 32) / 4.0) * 4;
+ while ($this->bufferLength < $n) {
+ $raw = $this->stream->read($n + 512);
+ if ($raw === '') {
+ return;
+ }
+ $this->buffer .= $raw;
+ $this->bufferLength = $this->converter->getLength($this->buffer, $this->streamCharset);
+ }
+ }
+
+ /**
+ * Returns true if the end of stream has been reached.
+ */
+ public function eof() : bool
+ {
+ return ($this->bufferLength === 0 && $this->stream->eof());
+ }
+
+ /**
+ * Reads up to $length decoded chars from the underlying stream and returns
+ * them after converting to the target string charset.
+ *
+ * @param int $length
+ */
+ public function read($length) : string
+ {
+ // let Guzzle decide what to do.
+ if ($length <= 0 || $this->eof()) {
+ return $this->stream->read($length);
+ }
+ $this->readRawCharsIntoBuffer($length);
+ $numChars = \min([$this->bufferLength, $length]);
+ $chars = $this->converter->getSubstr($this->buffer, $this->streamCharset, 0, $numChars);
+
+ $this->position += $numChars;
+ $this->buffer = $this->converter->getSubstr($this->buffer, $this->streamCharset, $numChars);
+ $this->bufferLength -= $numChars;
+
+ return $this->converter->convert($chars, $this->streamCharset, $this->stringCharset);
+ }
+
+ /**
+ * Writes the passed string to the underlying stream after converting it to
+ * the target stream encoding.
+ *
+ * @param string $string
+ * @return int the number of bytes written
+ */
+ public function write($string) : int
+ {
+ $converted = $this->converter->convert($string, $this->stringCharset, $this->streamCharset);
+ $written = $this->converter->getLength($converted, $this->streamCharset);
+ $this->position += $written;
+ return $this->stream->write($converted);
+ }
+}
diff --git a/plugins/vendor/zbateson/stream-decorators/src/ChunkSplitStream.php b/plugins/vendor/zbateson/stream-decorators/src/ChunkSplitStream.php
new file mode 100644
index 00000000..f90bed4d
--- /dev/null
+++ b/plugins/vendor/zbateson/stream-decorators/src/ChunkSplitStream.php
@@ -0,0 +1,122 @@
+stream = $stream;
+ $this->position = 0;
+ $this->lineLength = $lineLength;
+ $this->lineEnding = $lineEnding;
+ $this->lineEndingLength = \strlen($this->lineEnding);
+ }
+
+ /**
+ * Inserts the line ending character after each line length characters in
+ * the passed string, making sure previously written bytes are taken into
+ * account.
+ */
+ private function getChunkedString(string $string) : string
+ {
+ $firstLine = '';
+ if ($this->tell() !== 0) {
+ $next = $this->lineLength - ($this->position % ($this->lineLength + $this->lineEndingLength));
+ if (\strlen($string) > $next) {
+ $firstLine = \substr($string, 0, $next) . $this->lineEnding;
+ $string = \substr($string, $next);
+ }
+ }
+ // chunk_split always ends with the passed line ending
+ $chunked = $firstLine . \chunk_split($string, $this->lineLength, $this->lineEnding);
+ return \substr($chunked, 0, \strlen($chunked) - $this->lineEndingLength);
+ }
+
+ /**
+ * Writes the passed string to the underlying stream, ensuring line endings
+ * are inserted every "line length" characters in the string.
+ *
+ * @param string $string
+ * @return int number of bytes written
+ */
+ public function write($string) : int
+ {
+ $chunked = $this->getChunkedString($string);
+ $this->position += \strlen($chunked);
+ return $this->stream->write($chunked);
+ }
+
+ /**
+ * Inserts a final line ending character.
+ */
+ private function beforeClose() : void
+ {
+ if ($this->position !== 0) {
+ $this->stream->write($this->lineEnding);
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function close() : void
+ {
+ $this->beforeClose();
+ $this->stream->close();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function detach()
+ {
+ $this->beforeClose();
+ $this->stream->detach();
+
+ return null;
+ }
+}
diff --git a/plugins/vendor/zbateson/stream-decorators/src/DecoratedCachingStream.php b/plugins/vendor/zbateson/stream-decorators/src/DecoratedCachingStream.php
new file mode 100644
index 00000000..a2b20b1b
--- /dev/null
+++ b/plugins/vendor/zbateson/stream-decorators/src/DecoratedCachingStream.php
@@ -0,0 +1,175 @@
+readStream = $stream;
+ $bufferStream = new TellZeroStream(new BufferStream());
+ $this->stream = new CachingStream($bufferStream);
+ $this->writeStream = $decorator(new NonClosingStream($bufferStream));
+ $this->minBytesCache = $minBytesCache;
+ }
+
+ public function getSize(): ?int
+ {
+ // the decorated stream could be a different size
+ $this->cacheEntireStream();
+ return $this->stream->getSize();
+ }
+
+ public function rewind(): void
+ {
+ $this->seek(0);
+ }
+
+ public function seek($offset, $whence = SEEK_SET): void
+ {
+ if ($whence === SEEK_SET) {
+ $byte = $offset;
+ } elseif ($whence === SEEK_CUR) {
+ $byte = $offset + $this->tell();
+ } elseif ($whence === SEEK_END) {
+ $size = $this->getSize();
+ $byte = $size + $offset;
+ } else {
+ throw new \InvalidArgumentException('Invalid whence');
+ }
+
+ $diff = $byte - $this->stream->getSize();
+
+ if ($diff > 0) {
+ // Read the remoteStream until we have read in at least the amount
+ // of bytes requested, or we reach the end of the file.
+ while ($diff > 0 && !$this->readStream->eof()) {
+ $this->read($diff);
+ $diff = $byte - $this->stream->getSize();
+ }
+ } else {
+ // We can just do a normal seek since we've already seen this byte.
+ $this->stream->seek($byte);
+ }
+ }
+
+ private function cacheBytes(int $size) : void {
+ if (!$this->readStream->eof()) {
+ $data = $this->readStream->read(max($this->minBytesCache, $size));
+ $this->writeStream->write($data);
+ if ($this->readStream->eof()) {
+ // needed because Base64Stream writes bytes on closing
+ $this->writeStream->close();
+ $this->writeStream = null;
+ }
+ }
+ }
+
+ public function read($length): string
+ {
+ $data = $this->stream->read($length);
+ $remaining = $length - strlen($data);
+ if ($remaining > 0) {
+ $this->cacheBytes($remaining);
+ $data .= $this->stream->read($remaining);
+ }
+ return $data;
+ }
+
+ public function isWritable(): bool
+ {
+ return false;
+ }
+
+ public function write($string): int
+ {
+ throw new \RuntimeException('Cannot write to a DecoratedCachingStream');
+ }
+
+ public function eof(): bool
+ {
+ return $this->stream->eof() && $this->readStream->eof();
+ }
+
+ /**
+ * Close both the remote stream and buffer stream
+ */
+ public function close(): void
+ {
+ $this->readStream->close();
+ $this->stream->close();
+ if ($this->writeStream !== null) {
+ $this->writeStream->close();
+ }
+ }
+
+ private function cacheEntireStream(): int
+ {
+ // as-is from CachingStream
+ $target = new FnStream(['write' => 'strlen']);
+ Utils::copyToStream($this, $target);
+
+ return $this->tell();
+ }
+}
\ No newline at end of file
diff --git a/plugins/vendor/zbateson/stream-decorators/src/NonClosingStream.php b/plugins/vendor/zbateson/stream-decorators/src/NonClosingStream.php
new file mode 100644
index 00000000..77bf6ff2
--- /dev/null
+++ b/plugins/vendor/zbateson/stream-decorators/src/NonClosingStream.php
@@ -0,0 +1,67 @@
+close();
+ * rewind($f); // error, $f is a closed resource
+ * ```
+ *
+ * Instead, this would work:
+ *
+ * ```
+ * $stream = Psr7\Utils::streamFor(fopen('php://temp', 'r+'));
+ * $test = new NonClosingStream($stream);
+ * // work
+ * $test->close();
+ * $stream->rewind(); // works
+ * ```
+ *
+ * @author Zaahid Bateson
+ */
+class NonClosingStream implements StreamInterface
+{
+ use StreamDecoratorTrait;
+
+ /**
+ * @var ?StreamInterface $stream
+ * @phpstan-ignore-next-line
+ */
+ private ?StreamInterface $stream;
+
+ /**
+ * @inheritDoc
+ */
+ public function close() : void
+ {
+ $this->stream = null; // @phpstan-ignore-line
+ }
+
+ /**
+ * Overridden to detach the underlying stream without closing it.
+ *
+ * @inheritDoc
+ */
+ public function detach()
+ {
+ $this->stream = null; // @phpstan-ignore-line
+ return null;
+ }
+}
diff --git a/plugins/vendor/zbateson/stream-decorators/src/PregReplaceFilterStream.php b/plugins/vendor/zbateson/stream-decorators/src/PregReplaceFilterStream.php
new file mode 100644
index 00000000..74fd5d4a
--- /dev/null
+++ b/plugins/vendor/zbateson/stream-decorators/src/PregReplaceFilterStream.php
@@ -0,0 +1,110 @@
+stream = $stream;
+ $this->pattern = $pattern;
+ $this->replacement = $replacement;
+ $this->buffer = new BufferStream();
+ }
+
+ /**
+ * Returns true if the end of stream has been reached.
+ */
+ public function eof() : bool
+ {
+ return ($this->buffer->eof() && $this->stream->eof());
+ }
+
+ /**
+ * Not supported by PregReplaceFilterStream
+ *
+ * @param int $offset
+ * @param int $whence
+ * @throws RuntimeException
+ */
+ public function seek($offset, $whence = SEEK_SET) : void
+ {
+ throw new RuntimeException('Cannot seek a PregReplaceFilterStream');
+ }
+
+ /**
+ * Overridden to return false
+ */
+ public function isSeekable() : bool
+ {
+ return false;
+ }
+
+ /**
+ * Fills the BufferStream with at least 8192 characters of input for future
+ * read operations.
+ */
+ private function fillBuffer(int $length) : void
+ {
+ $fill = (int) \max([$length, 8192]);
+ while ($this->buffer->getSize() < $length) {
+ $read = $this->stream->read($fill);
+ if ($read === '') {
+ break;
+ }
+ $this->buffer->write(\preg_replace($this->pattern, $this->replacement, $read));
+ }
+ }
+
+ /**
+ * Reads from the underlying stream, filters it and returns up to $length
+ * bytes.
+ *
+ * @param int $length
+ */
+ public function read($length) : string
+ {
+ $this->fillBuffer($length);
+ return $this->buffer->read($length);
+ }
+}
diff --git a/plugins/vendor/zbateson/stream-decorators/src/QuotedPrintableStream.php b/plugins/vendor/zbateson/stream-decorators/src/QuotedPrintableStream.php
new file mode 100644
index 00000000..89fab31b
--- /dev/null
+++ b/plugins/vendor/zbateson/stream-decorators/src/QuotedPrintableStream.php
@@ -0,0 +1,222 @@
+position;
+ }
+
+ /**
+ * Returns null, getSize isn't supported
+ *
+ * @return null
+ */
+ public function getSize() : ?int
+ {
+ return null;
+ }
+
+ /**
+ * Not supported.
+ *
+ * @param int $offset
+ * @param int $whence
+ * @throws RuntimeException
+ */
+ public function seek($offset, $whence = SEEK_SET) : void
+ {
+ throw new RuntimeException('Cannot seek a QuotedPrintableStream');
+ }
+
+ /**
+ * Overridden to return false
+ */
+ public function isSeekable() : bool
+ {
+ return false;
+ }
+
+ /**
+ * Reads $length chars from the underlying stream, prepending the past $pre
+ * to it first.
+ *
+ * If the characters read (including the prepended $pre) contain invalid
+ * quoted-printable characters, the underlying stream is rewound by the
+ * total number of characters ($length + strlen($pre)).
+ *
+ * The quoted-printable encoded characters are returned. If the characters
+ * read are invalid, '3D' is returned indicating an '=' character.
+ */
+ private function readEncodedChars(int $length, string $pre = '') : string
+ {
+ $str = $pre . $this->stream->read($length);
+ $len = \strlen($str);
+ if ($len > 0 && !\preg_match('/^[0-9a-f]{2}$|^[\r\n]{1,2}.?$/is', $str) && $this->stream->isSeekable()) {
+ $this->stream->seek(-$len, SEEK_CUR);
+ return '3D'; // '=' character
+ }
+ return $str;
+ }
+
+ /**
+ * Decodes the passed $block of text.
+ *
+ * If the last or before last character is an '=' char, indicating the
+ * beginning of a quoted-printable encoded char, 1 or 2 additional bytes are
+ * read from the underlying stream respectively.
+ *
+ * @return string The decoded string
+ */
+ private function decodeBlock(string $block) : string
+ {
+ if (\substr($block, -1) === '=') {
+ $block .= $this->readEncodedChars(2);
+ } elseif (\substr($block, -2, 1) === '=') {
+ $first = \substr($block, -1);
+ $block = \substr($block, 0, -1);
+ $block .= $this->readEncodedChars(1, $first);
+ }
+ return \quoted_printable_decode($block);
+ }
+
+ /**
+ * Reads up to $length characters, appends them to the passed $str string,
+ * and returns the total number of characters read.
+ *
+ * -1 is returned if there are no more bytes to read.
+ */
+ private function readRawDecodeAndAppend(int $length, string &$str) : int
+ {
+ $block = $this->stream->read($length);
+ if ($block === '') {
+ return -1;
+ }
+ $decoded = $this->decodeBlock($block);
+ $count = \strlen($decoded);
+ $str .= $decoded;
+ return $count;
+ }
+
+ /**
+ * Reads up to $length decoded bytes from the underlying quoted-printable
+ * encoded stream and returns them.
+ *
+ * @param int $length
+ */
+ public function read($length) : string
+ {
+ // let Guzzle decide what to do.
+ if ($length <= 0 || $this->eof()) {
+ return $this->stream->read($length);
+ }
+ $count = 0;
+ $bytes = '';
+ while ($count < $length) {
+ $nRead = $this->readRawDecodeAndAppend($length - $count, $bytes);
+ if ($nRead === -1) {
+ break;
+ }
+ $this->position += $nRead;
+ $count += $nRead;
+ }
+ return $bytes;
+ }
+
+ /**
+ * Writes the passed string to the underlying stream after encoding it as
+ * quoted-printable.
+ *
+ * Note that reading and writing to the same stream without rewinding is not
+ * supported.
+ *
+ * @param string $string
+ *
+ * @return int the number of bytes written
+ */
+ public function write($string) : int
+ {
+ $encodedLine = \quoted_printable_encode($this->lastLine);
+ $lineAndString = \rtrim(\quoted_printable_encode($this->lastLine . $string), "\r\n");
+ $write = \substr($lineAndString, \strlen($encodedLine));
+ $this->stream->write($write);
+ $written = \strlen($string);
+ $this->position += $written;
+
+ $lpos = \strrpos($lineAndString, "\n");
+ $lastLine = $lineAndString;
+ if ($lpos !== false) {
+ $lastLine = \substr($lineAndString, $lpos + 1);
+ }
+ $this->lastLine = \quoted_printable_decode($lastLine);
+ return $written;
+ }
+
+ /**
+ * Writes out a final CRLF if the current line isn't empty.
+ */
+ private function beforeClose() : void
+ {
+ if ($this->isWritable() && $this->lastLine !== '') {
+ $this->stream->write("\r\n");
+ $this->lastLine = '';
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function close() : void
+ {
+ $this->beforeClose();
+ $this->stream->close();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function detach()
+ {
+ $this->beforeClose();
+ $this->stream->detach();
+
+ return null;
+ }
+}
diff --git a/plugins/vendor/zbateson/stream-decorators/src/SeekingLimitStream.php b/plugins/vendor/zbateson/stream-decorators/src/SeekingLimitStream.php
new file mode 100644
index 00000000..5ee89a0f
--- /dev/null
+++ b/plugins/vendor/zbateson/stream-decorators/src/SeekingLimitStream.php
@@ -0,0 +1,192 @@
+stream = $stream;
+ $this->setLimit($limit);
+ $this->setOffset($offset);
+ }
+
+ /**
+ * Returns the current relative read position of this stream subset.
+ */
+ public function tell() : int
+ {
+ return $this->position;
+ }
+
+ /**
+ * Returns the size of the limited subset of data, or null if the wrapped
+ * stream returns null for getSize.
+ */
+ public function getSize() : ?int
+ {
+ $size = $this->stream->getSize();
+ if ($size === null) {
+ // this shouldn't happen on a seekable stream I don't think...
+ $pos = $this->stream->tell();
+ $this->stream->seek(0, SEEK_END);
+ $size = $this->stream->tell();
+ $this->stream->seek($pos);
+ }
+ if ($this->limit === -1) {
+ return $size - $this->offset;
+ }
+
+ return \min([$this->limit, $size - $this->offset]);
+ }
+
+ /**
+ * Returns true if the current read position is at the end of the limited
+ * stream
+ */
+ public function eof() : bool
+ {
+ $size = $this->limit;
+ if ($size === -1) {
+ $size = $this->getSize();
+ }
+ return ($this->position >= $size);
+ }
+
+ /**
+ * Ensures the seek position specified is within the stream's bounds, and
+ * sets the internal position pointer (doesn't actually seek).
+ */
+ private function doSeek(int $pos) : void
+ {
+ if ($this->limit !== -1) {
+ $pos = \min([$pos, $this->limit]);
+ }
+ $this->position = \max([0, $pos]);
+ }
+
+ /**
+ * Seeks to the passed position within the confines of the limited stream's
+ * bounds.
+ *
+ * For SeekingLimitStream, no actual seek is performed on the underlying
+ * wrapped stream. Instead, an internal pointer is set, and the stream is
+ * 'seeked' on read operations
+ *
+ * @param int $offset
+ * @param int $whence
+ */
+ public function seek($offset, $whence = SEEK_SET) : void
+ {
+ $pos = $offset;
+ switch ($whence) {
+ case SEEK_CUR:
+ $pos = $this->position + $offset;
+ break;
+ case SEEK_END:
+ $pos = $this->limit + $offset;
+ break;
+ default:
+ break;
+ }
+ $this->doSeek($pos);
+ }
+
+ /**
+ * Sets the offset to start reading from the wrapped stream.
+ */
+ public function setOffset(int $offset) : void
+ {
+ $this->offset = $offset;
+ $this->position = 0;
+ }
+
+ /**
+ * Sets the length of the stream to the passed $limit.
+ */
+ public function setLimit(int $limit) : void
+ {
+ $this->limit = $limit;
+ }
+
+ /**
+ * Seeks to the current position and reads up to $length bytes, or less if
+ * it would result in reading past $this->limit
+ */
+ public function seekAndRead(int $length) : string
+ {
+ $this->stream->seek($this->offset + $this->position);
+ if ($this->limit !== -1) {
+ $length = \min($length, $this->limit - $this->position);
+ if ($length <= 0) {
+ return '';
+ }
+ }
+ return $this->stream->read($length);
+ }
+
+ /**
+ * Reads from the underlying stream after seeking to the position within the
+ * bounds set for this limited stream. After reading, the wrapped stream is
+ * 'seeked' back to its position prior to the call to read().
+ *
+ * @param int $length
+ */
+ public function read($length) : string
+ {
+ $pos = $this->stream->tell();
+ $ret = $this->seekAndRead($length);
+ $this->position += \strlen($ret);
+ $this->stream->seek($pos);
+ if ($this->limit !== -1 && $this->position > $this->limit) {
+ $ret = \substr($ret, 0, -($this->position - $this->limit));
+ $this->position = $this->limit;
+ }
+ return $ret;
+ }
+}
diff --git a/plugins/vendor/zbateson/stream-decorators/src/TellZeroStream.php b/plugins/vendor/zbateson/stream-decorators/src/TellZeroStream.php
new file mode 100644
index 00000000..f64e25be
--- /dev/null
+++ b/plugins/vendor/zbateson/stream-decorators/src/TellZeroStream.php
@@ -0,0 +1,31 @@
+stream = $stream;
+ $this->filename = $filename;
+ $this->buffer = new BufferStream();
+ }
+
+ /**
+ * Overridden to return the position in the target encoding.
+ */
+ public function tell() : int
+ {
+ return $this->position;
+ }
+
+ /**
+ * Returns null, getSize isn't supported
+ *
+ * @return null
+ */
+ public function getSize() : ?int
+ {
+ return null;
+ }
+
+ /**
+ * Not supported.
+ *
+ * @param int $offset
+ * @param int $whence
+ * @throws RuntimeException
+ */
+ public function seek($offset, $whence = SEEK_SET) : void
+ {
+ throw new RuntimeException('Cannot seek a UUStream');
+ }
+
+ /**
+ * Overridden to return false
+ */
+ public function isSeekable() : bool
+ {
+ return false;
+ }
+
+ /**
+ * Finds the next end-of-line character to ensure a line isn't broken up
+ * while buffering.
+ */
+ private function readToEndOfLine(int $length) : string
+ {
+ $str = $this->stream->read($length);
+ if ($str === '') {
+ return $str;
+ }
+ while (\substr($str, -1) !== "\n") {
+ $chr = $this->stream->read(1);
+ if ($chr === '') {
+ break;
+ }
+ $str .= $chr;
+ }
+ return $str;
+ }
+
+ /**
+ * Removes invalid characters from a uuencoded string, and 'BEGIN' and 'END'
+ * line headers and footers from the passed string before returning it.
+ */
+ private function filterAndDecode(string $str) : string
+ {
+ $ret = \str_replace("\r", '', $str);
+ $ret = \preg_replace('/[^\x21-\xf5`\n]/', '`', $ret);
+ if ($this->position === 0) {
+ $matches = [];
+ if (\preg_match('/^\s*begin\s+[^\s+]\s+([^\r\n]+)\s*$/im', $ret, $matches)) {
+ $this->filename = $matches[1];
+ }
+ $ret = \preg_replace('/^\s*begin[^\r\n]+\s*$/im', '', $ret);
+ } else {
+ $ret = \preg_replace('/^\s*end\s*$/im', '', $ret);
+ }
+ return \convert_uudecode(\trim($ret));
+ }
+
+ /**
+ * Buffers bytes into $this->buffer, removing uuencoding headers and footers
+ * and decoding them.
+ */
+ private function fillBuffer(int $length) : void
+ {
+ // 5040 = 63 * 80, seems to be good balance for buffering in benchmarks
+ // testing with a simple 'if ($length < x)' and calculating a better
+ // size reduces speeds by up to 4x
+ while ($this->buffer->getSize() < $length) {
+ $read = $this->readToEndOfLine(5040);
+ if ($read === '') {
+ break;
+ }
+ $this->buffer->write($this->filterAndDecode($read));
+ }
+ }
+
+ /**
+ * Returns true if the end of stream has been reached.
+ */
+ public function eof() : bool
+ {
+ return ($this->buffer->eof() && $this->stream->eof());
+ }
+
+ /**
+ * Attempts to read $length bytes after decoding them, and returns them.
+ *
+ * @param int $length
+ */
+ public function read($length) : string
+ {
+ // let Guzzle decide what to do.
+ if ($length <= 0 || $this->eof()) {
+ return $this->stream->read($length);
+ }
+ $this->fillBuffer($length);
+ $read = $this->buffer->read($length);
+ $this->position += \strlen($read);
+ return $read;
+ }
+
+ /**
+ * Writes the 'begin' UU header line.
+ */
+ private function writeUUHeader() : void
+ {
+ $filename = (empty($this->filename)) ? 'null' : $this->filename;
+ $this->stream->write("begin 666 $filename");
+ }
+
+ /**
+ * Writes the '`' and 'end' UU footer lines.
+ */
+ private function writeUUFooter() : void
+ {
+ $this->stream->write("\r\n`\r\nend\r\n");
+ }
+
+ /**
+ * Writes the passed bytes to the underlying stream after encoding them.
+ */
+ private function writeEncoded(string $bytes) : void
+ {
+ $encoded = \preg_replace('/\r\n|\r|\n/', "\r\n", \rtrim(\convert_uuencode($bytes)));
+ // removes ending '`' line
+ $this->stream->write("\r\n" . \rtrim(\substr($encoded, 0, -1)));
+ }
+
+ /**
+ * Prepends any existing remainder to the passed string, then checks if the
+ * string fits into a uuencoded line, and removes and keeps any remainder
+ * from the string to write. Full lines ready for writing are returned.
+ */
+ private function handleRemainder(string $string) : string
+ {
+ $write = $this->remainder . $string;
+ $nRem = \strlen($write) % 45;
+ $this->remainder = '';
+ if ($nRem !== 0) {
+ $this->remainder = \substr($write, -$nRem);
+ $write = \substr($write, 0, -$nRem);
+ }
+ return $write;
+ }
+
+ /**
+ * Writes the passed string to the underlying stream after encoding it.
+ *
+ * Note that reading and writing to the same stream without rewinding is not
+ * supported.
+ *
+ * Also note that some bytes may not be written until close or detach are
+ * called. This happens if written data doesn't align to a complete
+ * uuencoded 'line' of 45 bytes. In addition, the UU footer is only written
+ * when closing or detaching as well.
+ *
+ * @param string $string
+ * @return int the number of bytes written
+ */
+ public function write($string) : int
+ {
+ $this->isWriting = true;
+ if ($this->position === 0) {
+ $this->writeUUHeader();
+ }
+ $write = $this->handleRemainder($string);
+ if ($write !== '') {
+ $this->writeEncoded($write);
+ }
+ $written = \strlen($string);
+ $this->position += $written;
+ return $written;
+ }
+
+ /**
+ * Returns the filename set in the UUEncoded header (or null)
+ */
+ public function getFilename() : string
+ {
+ return $this->filename;
+ }
+
+ /**
+ * Sets the UUEncoded header file name written in the 'begin' header line.
+ */
+ public function setFilename(string $filename) : void
+ {
+ $this->filename = $filename;
+ }
+
+ /**
+ * Writes out any remaining bytes and the UU footer.
+ */
+ private function beforeClose() : void
+ {
+ if (!$this->isWriting) {
+ return;
+ }
+ if ($this->remainder !== '') {
+ $this->writeEncoded($this->remainder);
+ }
+ $this->remainder = '';
+ $this->isWriting = false;
+ $this->writeUUFooter();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function close() : void
+ {
+ $this->beforeClose();
+ $this->stream->close();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function detach()
+ {
+ $this->beforeClose();
+ $this->stream->detach();
+
+ return null;
+ }
+}